From 20db20d2702f7b547e1c9c0a2698b6d576cd79d8 Mon Sep 17 00:00:00 2001 From: metamuffin Date: Thu, 9 Jan 2025 20:36:54 +0100 Subject: implement KHR_materials_dispersion --- world/src/mesh.rs | 33 +++++++++++++++++++++++---------- 1 file changed, 23 insertions(+), 10 deletions(-) (limited to 'world/src') diff --git a/world/src/mesh.rs b/world/src/mesh.rs index a38980e..c5bbb7f 100644 --- a/world/src/mesh.rs +++ b/world/src/mesh.rs @@ -237,31 +237,31 @@ pub fn import_mesh( let g_albedo = if base_color[0] != 1. || base_color[1] != 1. || base_color[2] != 1. { info!( - "global albedo is r={},g={},b={}", + "albedo is r={},g={},b={}", base_color[0], base_color[1], base_color[2] ); Some(Vec3A::new(base_color[0], base_color[1], base_color[2])) } else { - debug!("global albedo pruned"); + debug!("albedo pruned"); None }; let g_alpha = if base_color[3] != 1. { - info!("global alpha is {}", base_color[3]); + info!("alpha is {}", base_color[3]); Some(base_color[3]) } else { - debug!("global alpha pruned"); + debug!("alpha pruned"); None }; let emission = p.material().emissive_factor(); let g_emission = if emission[0] != 0. || emission[1] != 0. || emission[2] != 0. { info!( - "global emission is r={},g={},b={}", + "emission is r={},g={},b={}", base_color[0], base_color[1], base_color[2] ); Some(Vec3A::new(emission[0], emission[1], emission[2])) } else { - debug!("global emission pruned"); + debug!("emission pruned"); None }; @@ -272,13 +272,27 @@ pub fn import_mesh( .unwrap_or(0.); let g_transmission = if transmission != 0. { - info!("global transmission is {transmission}"); + info!("transmission is {transmission}"); Some(transmission) } else { - debug!("global transmission pruned"); + debug!("transmission pruned"); None }; + let g_dispersion = p + .material() + .extensions() + .map(|e| e.get("KHR_materials_dispersion")) + .flatten() + .map(|e| e.get("dispersion")) + .flatten() + .map(|e| e.as_f64()) + .flatten() + .map(|e| e as f32); + if let Some(d) = g_dispersion { + info!("dispersion is {d}"); + } + let g_attenuation = p.material().volume().map(|v| { let ref_dist = v.attenuation_distance(); Vec3A::from_array(v.attenuation_color().map( @@ -300,6 +314,7 @@ pub fn import_mesh( g_attenuation, g_thickness, g_refractive_index, + g_dispersion, va_position, va_normal, va_texcoord, @@ -313,8 +328,6 @@ pub fn import_mesh( tex_emission, tex_transmission, tex_thickness, - // not yet implemented - g_dispersion: None, // not supported by gltf va_transmission: None, va_emission: None, -- cgit v1.2.3-70-g09d2