Path: blob/main/crates/bevy_gltf/src/loader/extensions/khr_materials_anisotropy.rs
6598 views
use bevy_asset::LoadContext;12use gltf::{Document, Material};34use serde_json::Value;56#[cfg(feature = "pbr_anisotropy_texture")]7use {8crate::loader::gltf_ext::{material::uv_channel, texture::texture_handle_from_info},9bevy_asset::Handle,10bevy_image::Image,11bevy_pbr::UvChannel,12gltf::json::texture::Info,13serde_json::value,14};1516/// Parsed data from the `KHR_materials_anisotropy` extension.17///18/// See the specification:19/// <https://github.com/KhronosGroup/glTF/blob/main/extensions/2.0/Khronos/KHR_materials_anisotropy/README.md>20#[derive(Default)]21pub(crate) struct AnisotropyExtension {22pub(crate) anisotropy_strength: Option<f64>,23pub(crate) anisotropy_rotation: Option<f64>,24#[cfg(feature = "pbr_anisotropy_texture")]25pub(crate) anisotropy_channel: UvChannel,26#[cfg(feature = "pbr_anisotropy_texture")]27pub(crate) anisotropy_texture: Option<Handle<Image>>,28}2930impl AnisotropyExtension {31#[expect(32clippy::allow_attributes,33reason = "`unused_variables` is not always linted"34)]35#[allow(36unused_variables,37reason = "Depending on what features are used to compile this crate, certain parameters may end up unused."38)]39pub(crate) fn parse(40load_context: &mut LoadContext,41document: &Document,42material: &Material,43) -> Option<AnisotropyExtension> {44let extension = material45.extensions()?46.get("KHR_materials_anisotropy")?47.as_object()?;4849#[cfg(feature = "pbr_anisotropy_texture")]50let (anisotropy_channel, anisotropy_texture) = extension51.get("anisotropyTexture")52.and_then(|value| value::from_value::<Info>(value.clone()).ok())53.map(|json_info| {54(55uv_channel(material, "anisotropy", json_info.tex_coord),56texture_handle_from_info(&json_info, document, load_context),57)58})59.unzip();6061Some(AnisotropyExtension {62anisotropy_strength: extension.get("anisotropyStrength").and_then(Value::as_f64),63anisotropy_rotation: extension.get("anisotropyRotation").and_then(Value::as_f64),64#[cfg(feature = "pbr_anisotropy_texture")]65anisotropy_channel: anisotropy_channel.unwrap_or_default(),66#[cfg(feature = "pbr_anisotropy_texture")]67anisotropy_texture,68})69}70}717273