diff options
Diffstat (limited to 'world/src')
-rw-r--r-- | world/src/mesh.rs | 35 |
1 files changed, 30 insertions, 5 deletions
diff --git a/world/src/mesh.rs b/world/src/mesh.rs index 216f8f3..7352583 100644 --- a/world/src/mesh.rs +++ b/world/src/mesh.rs @@ -195,6 +195,22 @@ pub fn import_mesh( webp, )?); } + let mut tex_thickness = None; + if let Some(tex) = p + .material() + .volume() + .map(|t| t.thickness_texture()) + .flatten() + { + tex_thickness = Some(load_texture( + "thickness", + &store, + path_base, + &buffers, + &tex.texture().source().source(), + webp, + )?); + } let mut tex_roughness = None; let mut tex_metallic = None; if let Some(tex) = p @@ -263,13 +279,26 @@ pub fn import_mesh( None }; + let g_attenuation = p.material().volume().map(|v| { + let ref_dist = v.attenuation_distance(); + Vec3A::from_array(v.attenuation_color().map( + |factor| factor * ref_dist, // TODO figure out how that is converted + )) + }); + let g_refractive_index = p.material().ior(); + let g_thickness = p.material().volume().map(|v| v.thickness_factor()); + let mesh = store.set(&MeshPart { + index, g_albedo, g_alpha, g_metallic, g_roughness, g_emission, g_transmission, + g_attenuation, + g_thickness, + g_refractive_index, va_position, va_normal, va_texcoord, @@ -282,13 +311,9 @@ pub fn import_mesh( tex_alpha, tex_emission, tex_transmission, - index, + tex_thickness, // not yet implemented - g_attenuation: None, g_dispersion: None, - g_refractive_index: None, - g_thickness: None, - tex_thickness: None, // not supported by gltf va_transmission: None, va_emission: None, |