Path: blob/main/crates/bevy_gltf/src/loader/extensions/khr_materials_clearcoat.rs
6598 views
use bevy_asset::LoadContext;12use gltf::{Document, Material};34use serde_json::Value;56#[cfg(feature = "pbr_multi_layer_material_textures")]7use {8crate::loader::gltf_ext::material::parse_material_extension_texture, bevy_asset::Handle,9bevy_image::Image, bevy_pbr::UvChannel,10};1112/// Parsed data from the `KHR_materials_clearcoat` extension.13///14/// See the specification:15/// <https://github.com/KhronosGroup/glTF/blob/main/extensions/2.0/Khronos/KHR_materials_clearcoat/README.md>16#[derive(Default)]17pub(crate) struct ClearcoatExtension {18pub(crate) clearcoat_factor: Option<f64>,19#[cfg(feature = "pbr_multi_layer_material_textures")]20pub(crate) clearcoat_channel: UvChannel,21#[cfg(feature = "pbr_multi_layer_material_textures")]22pub(crate) clearcoat_texture: Option<Handle<Image>>,23pub(crate) clearcoat_roughness_factor: Option<f64>,24#[cfg(feature = "pbr_multi_layer_material_textures")]25pub(crate) clearcoat_roughness_channel: UvChannel,26#[cfg(feature = "pbr_multi_layer_material_textures")]27pub(crate) clearcoat_roughness_texture: Option<Handle<Image>>,28#[cfg(feature = "pbr_multi_layer_material_textures")]29pub(crate) clearcoat_normal_channel: UvChannel,30#[cfg(feature = "pbr_multi_layer_material_textures")]31pub(crate) clearcoat_normal_texture: Option<Handle<Image>>,32}3334impl ClearcoatExtension {35#[expect(36clippy::allow_attributes,37reason = "`unused_variables` is not always linted"38)]39#[allow(40unused_variables,41reason = "Depending on what features are used to compile this crate, certain parameters may end up unused."42)]43pub(crate) fn parse(44load_context: &mut LoadContext,45document: &Document,46material: &Material,47) -> Option<ClearcoatExtension> {48let extension = material49.extensions()?50.get("KHR_materials_clearcoat")?51.as_object()?;5253#[cfg(feature = "pbr_multi_layer_material_textures")]54let (clearcoat_channel, clearcoat_texture) = parse_material_extension_texture(55material,56load_context,57document,58extension,59"clearcoatTexture",60"clearcoat",61);6263#[cfg(feature = "pbr_multi_layer_material_textures")]64let (clearcoat_roughness_channel, clearcoat_roughness_texture) =65parse_material_extension_texture(66material,67load_context,68document,69extension,70"clearcoatRoughnessTexture",71"clearcoat roughness",72);7374#[cfg(feature = "pbr_multi_layer_material_textures")]75let (clearcoat_normal_channel, clearcoat_normal_texture) = parse_material_extension_texture(76material,77load_context,78document,79extension,80"clearcoatNormalTexture",81"clearcoat normal",82);8384Some(ClearcoatExtension {85clearcoat_factor: extension.get("clearcoatFactor").and_then(Value::as_f64),86clearcoat_roughness_factor: extension87.get("clearcoatRoughnessFactor")88.and_then(Value::as_f64),89#[cfg(feature = "pbr_multi_layer_material_textures")]90clearcoat_channel,91#[cfg(feature = "pbr_multi_layer_material_textures")]92clearcoat_texture,93#[cfg(feature = "pbr_multi_layer_material_textures")]94clearcoat_roughness_channel,95#[cfg(feature = "pbr_multi_layer_material_textures")]96clearcoat_roughness_texture,97#[cfg(feature = "pbr_multi_layer_material_textures")]98clearcoat_normal_channel,99#[cfg(feature = "pbr_multi_layer_material_textures")]100clearcoat_normal_texture,101})102}103}104105106