
This commit allows specular highlights to be tinted with a color and for the reflectance and color tint values to vary across a model via a pair of maps. The implementation follows the [`KHR_materials_specular`] glTF extension. In order to reduce the number of samplers and textures in the default `StandardMaterial` configuration, the maps are gated behind the `pbr_specular_textures` Cargo feature. Specular tinting is currently unsupported in the deferred renderer, because I didn't want to bloat the deferred G-buffers. A possible fix for this in the future would be to make the G-buffer layout more configurable, so that specular tints could be supported on an opt-in basis. As an alternative, Bevy could force meshes with specular tints to render in forward mode. Both of these solutions require some more design, so I consider them out of scope for now. Note that the map is a *specular* map, not a *reflectance* map. In Bevy and Filament terms, the reflectance values in the specular map range from [0.0, 0.5], rather than [0.0, 1.0]. This is an unfortunate [`KHR_materials_specular`] specification requirement that stems from the fact that glTF is specified in terms of a specular strength model, not the reflectance model that Filament and Bevy use. A workaround, which is noted in the `StandardMaterial` documentation, is to set the `reflectance` value to 2.0, which spreads the specular map range from [0.0, 1.0] as normal. The glTF loader has been updated to parse the [`KHR_materials_specular`] extension. Note that, unless the non-default `pbr_specular_textures` is supplied, the maps are ignored. The `specularFactor` value is applied as usual. Note that, as with the specular map, the glTF `specularFactor` is twice Bevy's `reflectance` value. This PR adds a new example, `specular_tint`, which demonstrates the specular tint and map features. Note that this example requires the [`KHR_materials_specular`] Cargo feature. [`KHR_materials_specular`]: https://github.com/KhronosGroup/glTF/tree/main/extensions/2.0/Khronos/KHR_materials_specular ## Changelog ### Added * Specular highlights can now be tinted with the `specular_tint` field in `StandardMaterial`. * Specular maps are now available in `StandardMaterial`, gated behind the `pbr_specular_textures` Cargo feature. * The `KHR_materials_specular` glTF extension is now supported, allowing for customization of specular reflectance and specular maps. Note that the latter are gated behind the `pbr_specular_textures` Cargo feature.
77 lines
2.6 KiB
TOML
77 lines
2.6 KiB
TOML
[package]
|
|
name = "bevy_gltf"
|
|
version = "0.16.0-dev"
|
|
edition = "2021"
|
|
description = "Bevy Engine GLTF loading"
|
|
homepage = "https://bevyengine.org"
|
|
repository = "https://github.com/bevyengine/bevy"
|
|
license = "MIT OR Apache-2.0"
|
|
keywords = ["bevy"]
|
|
|
|
[features]
|
|
dds = ["bevy_render/dds", "bevy_image/dds", "bevy_core_pipeline/dds"]
|
|
pbr_transmission_textures = ["bevy_pbr/pbr_transmission_textures"]
|
|
pbr_multi_layer_material_textures = [
|
|
"bevy_pbr/pbr_multi_layer_material_textures",
|
|
]
|
|
pbr_anisotropy_texture = ["bevy_pbr/pbr_anisotropy_texture"]
|
|
pbr_specular_textures = []
|
|
|
|
[dependencies]
|
|
# bevy
|
|
bevy_animation = { path = "../bevy_animation", version = "0.16.0-dev", optional = true }
|
|
bevy_app = { path = "../bevy_app", version = "0.16.0-dev" }
|
|
bevy_asset = { path = "../bevy_asset", version = "0.16.0-dev" }
|
|
bevy_color = { path = "../bevy_color", version = "0.16.0-dev" }
|
|
bevy_core_pipeline = { path = "../bevy_core_pipeline", version = "0.16.0-dev" }
|
|
bevy_ecs = { path = "../bevy_ecs", version = "0.16.0-dev" }
|
|
bevy_image = { path = "../bevy_image", version = "0.16.0-dev" }
|
|
bevy_math = { path = "../bevy_math", version = "0.16.0-dev" }
|
|
bevy_pbr = { path = "../bevy_pbr", version = "0.16.0-dev" }
|
|
bevy_reflect = { path = "../bevy_reflect", version = "0.16.0-dev", features = [
|
|
"bevy",
|
|
] }
|
|
bevy_render = { path = "../bevy_render", version = "0.16.0-dev" }
|
|
bevy_scene = { path = "../bevy_scene", version = "0.16.0-dev", features = [
|
|
"bevy_render",
|
|
] }
|
|
bevy_transform = { path = "../bevy_transform", version = "0.16.0-dev" }
|
|
bevy_tasks = { path = "../bevy_tasks", version = "0.16.0-dev" }
|
|
bevy_utils = { path = "../bevy_utils", version = "0.16.0-dev" }
|
|
bevy_platform_support = { path = "../bevy_platform_support", version = "0.16.0-dev", default-features = false, features = [
|
|
"std",
|
|
"serialize",
|
|
] }
|
|
|
|
# other
|
|
gltf = { version = "1.4.0", default-features = false, features = [
|
|
"KHR_lights_punctual",
|
|
"KHR_materials_transmission",
|
|
"KHR_materials_ior",
|
|
"KHR_materials_volume",
|
|
"KHR_materials_unlit",
|
|
"KHR_materials_emissive_strength",
|
|
"KHR_texture_transform",
|
|
"extras",
|
|
"extensions",
|
|
"names",
|
|
"utils",
|
|
] }
|
|
thiserror = { version = "2", default-features = false }
|
|
base64 = "0.22.0"
|
|
percent-encoding = "2.1"
|
|
serde = { version = "1.0", features = ["derive"] }
|
|
serde_json = "1"
|
|
smallvec = "1.11"
|
|
tracing = { version = "0.1", default-features = false, features = ["std"] }
|
|
|
|
[dev-dependencies]
|
|
bevy_log = { path = "../bevy_log", version = "0.16.0-dev" }
|
|
|
|
[lints]
|
|
workspace = true
|
|
|
|
[package.metadata.docs.rs]
|
|
rustdoc-args = ["-Zunstable-options", "--generate-link-to-definition"]
|
|
all-features = true
|