mirror of
https://github.com/bevyengine/bevy
synced 2024-11-29 16:10:19 +00:00
df8ccb8735
This commit implements support for physically-based anisotropy in Bevy's `StandardMaterial`, following the specification for the [`KHR_materials_anisotropy`] glTF extension. [*Anisotropy*] (not to be confused with [anisotropic filtering]) is a PBR feature that allows roughness to vary along the tangent and bitangent directions of a mesh. In effect, this causes the specular light to stretch out into lines instead of a round lobe. This is useful for modeling brushed metal, hair, and similar surfaces. Support for anisotropy is a common feature in major game and graphics engines; Unity, Unreal, Godot, three.js, and Blender all support it to varying degrees. Two new parameters have been added to `StandardMaterial`: `anisotropy_strength` and `anisotropy_rotation`. Anisotropy strength, which ranges from 0 to 1, represents how much the roughness differs between the tangent and the bitangent of the mesh. In effect, it controls how stretched the specular highlight is. Anisotropy rotation allows the roughness direction to differ from the tangent of the model. In addition to these two fixed parameters, an *anisotropy texture* can be supplied. Such a texture should be a 3-channel RGB texture, where the red and green values specify a direction vector using the same conventions as a normal map ([0, 1] color values map to [-1, 1] vector values), and the the blue value represents the strength. This matches the format that the [`KHR_materials_anisotropy`] specification requires. Such textures should be loaded as linear and not sRGB. Note that this texture does consume one additional texture binding in the standard material shader. The glTF loader has been updated to properly parse the `KHR_materials_anisotropy` extension. A new example, `anisotropy`, has been added. This example loads and displays the barn lamp example from the [`glTF-Sample-Assets`] repository. Note that the textures were rather large, so I shrunk them down and converted them to a mixture of JPEG and KTX2 format, in the interests of saving space in the Bevy repository. [*Anisotropy*]: https://google.github.io/filament/Filament.md.html#materialsystem/anisotropicmodel [anisotropic filtering]: https://en.wikipedia.org/wiki/Anisotropic_filtering [`KHR_materials_anisotropy`]: https://github.com/KhronosGroup/glTF/blob/main/extensions/2.0/Khronos/KHR_materials_anisotropy/README.md [`glTF-Sample-Assets`]: https://github.com/KhronosGroup/glTF-Sample-Assets/ ## Changelog ### Added * Physically-based anisotropy is now available for materials, which enhances the look of surfaces such as brushed metal or hair. glTF scenes can use the new feature with the `KHR_materials_anisotropy` extension. ## Screenshots With anisotropy: ![Screenshot 2024-05-20 233414](https://github.com/bevyengine/bevy/assets/157897/379f1e42-24e9-40b6-a430-f7d1479d0335) Without anisotropy: ![Screenshot 2024-05-20 233420](https://github.com/bevyengine/bevy/assets/157897/aa220f05-b8e7-417c-9671-b242d4bf9fc4)
35 lines
1.2 KiB
TOML
35 lines
1.2 KiB
TOML
[files]
|
|
extend-exclude = [
|
|
"*.pbxproj", # metadata file
|
|
"CHANGELOG.md", # To keep consistency between the commit history/PRs.
|
|
"*.patch", # Automatically generated files that should not be manually modified.
|
|
]
|
|
|
|
# Corrections take the form of a key/value pair. The key is the incorrect word
|
|
# and the value is the correct word. If the key and value are the same, the
|
|
# word is treated as always correct. If the value is an empty string, the word
|
|
# is treated as always incorrect.
|
|
|
|
# Match Whole Word - Case Sensitive
|
|
[default.extend-identifiers]
|
|
iy = "iy" # Variable name used in bevy_gizmos. Probably stands for "y-axis index", as it's being used in loops.
|
|
ser = "ser" # ron::ser - Serializer
|
|
SME = "SME" # Subject Matter Expert
|
|
Sur = "Sur" # macOS Big Sur - South
|
|
Ba = "Ba" # Bitangent for Anisotropy
|
|
|
|
# Match Inside a Word - Case Insensitive
|
|
[default.extend-words]
|
|
LOD = "LOD" # Level of detail
|
|
TOI = "TOI" # Time of impact
|
|
|
|
[default]
|
|
extend-ignore-identifiers-re = [
|
|
"NDK", # NDK - Native Development Kit
|
|
"inventario", # Inventory in Portuguese
|
|
"PNG", # PNG - Portable Network Graphics file format
|
|
# Used in bevy_mikktspace
|
|
"iFO",
|
|
"vOt",
|
|
"fLenOt",
|
|
]
|