diff options
-rw-r--r-- | shared/src/resources.rs | 9 | ||||
-rw-r--r-- | world/Cargo.toml | 1 | ||||
-rw-r--r-- | world/src/mesh.rs | 17 |
3 files changed, 20 insertions, 7 deletions
diff --git a/shared/src/resources.rs b/shared/src/resources.rs index 8854794..628fa1e 100644 --- a/shared/src/resources.rs +++ b/shared/src/resources.rs @@ -49,6 +49,7 @@ pub struct MeshPart { pub g_roughness: Option<f32>, pub g_albedo: Option<Vec3A>, pub g_transmission: Option<f32>, + pub g_alpha: Option<f32>, pub g_emission: Option<Vec3A>, pub va_position: Option<[Resource<AttributeArray>; 3]>, pub va_normal: Option<[Resource<AttributeArray>; 3]>, @@ -57,12 +58,14 @@ pub struct MeshPart { pub va_metallic: Option<Resource<AttributeArray>>, pub va_albedo: Option<[Resource<AttributeArray>; 3]>, pub va_transmission: Option<Resource<AttributeArray>>, + pub va_alpha: Option<Resource<AttributeArray>>, pub va_emission: Option<[Resource<AttributeArray>; 3]>, pub tex_normal: Option<Resource<Image>>, pub tex_roughness: Option<Resource<Image>>, pub tex_metallic: Option<Resource<Image>>, pub tex_albedo: Option<Resource<Image>>, pub tex_transmission: Option<Resource<Image>>, + pub tex_alpha: Option<Resource<Image>>, pub tex_emission: Option<Resource<Image>>, } @@ -168,6 +171,7 @@ impl ReadWrite for MeshPart { write_kv_opt(w, b"g_roughness", &self.g_roughness)?; write_kv_opt(w, b"g_albedo", &self.g_albedo)?; write_kv_opt(w, b"g_transmission", &self.g_transmission)?; + write_kv_opt(w, b"g_alpha", &self.g_alpha)?; write_kv_opt(w, b"g_emission", &self.g_emission)?; write_kv_opt(w, b"va_position", &self.va_position)?; write_kv_opt(w, b"va_normal", &self.va_normal)?; @@ -176,12 +180,14 @@ impl ReadWrite for MeshPart { write_kv_opt(w, b"va_metallic", &self.va_metallic)?; write_kv_opt(w, b"va_albedo", &self.va_albedo)?; write_kv_opt(w, b"va_transmission", &self.va_transmission)?; + write_kv_opt(w, b"va_alpha", &self.va_transmission)?; write_kv_opt(w, b"va_emission", &self.va_emission)?; write_kv_opt(w, b"tex_normal", &self.tex_normal)?; write_kv_opt(w, b"tex_roughness", &self.tex_roughness)?; write_kv_opt(w, b"tex_metallic", &self.tex_metallic)?; write_kv_opt(w, b"tex_albedo", &self.tex_albedo)?; write_kv_opt(w, b"tex_transmission", &self.tex_transmission)?; + write_kv_opt(w, b"tex_alpha", &self.tex_alpha)?; write_kv_opt(w, b"tex_emission", &self.tex_emission)?; Ok(()) } @@ -193,6 +199,7 @@ impl ReadWrite for MeshPart { b"g_roughness" => Ok(s.g_roughness = Some(read_slice(v)?)), b"g_albedo" => Ok(s.g_albedo = Some(read_slice(v)?)), b"g_transmission" => Ok(s.g_transmission = Some(read_slice(v)?)), + b"g_alpha" => Ok(s.g_alpha = Some(read_slice(v)?)), b"g_emission" => Ok(s.g_emission = Some(read_slice(v)?)), b"va_position" => Ok(s.va_position = Some(read_slice(v)?)), b"va_normal" => Ok(s.va_normal = Some(read_slice(v)?)), @@ -201,12 +208,14 @@ impl ReadWrite for MeshPart { b"va_metallic" => Ok(s.va_metallic = Some(read_slice(v)?)), b"va_albedo" => Ok(s.va_albedo = Some(read_slice(v)?)), b"va_transmission" => Ok(s.va_transmission = Some(read_slice(v)?)), + b"va_alpha" => Ok(s.va_alpha = Some(read_slice(v)?)), b"va_emission" => Ok(s.va_emission = Some(read_slice(v)?)), b"tex_normal" => Ok(s.tex_normal = Some(read_slice(v)?)), b"tex_roughness" => Ok(s.tex_roughness = Some(read_slice(v)?)), b"tex_metallic" => Ok(s.tex_metallic = Some(read_slice(v)?)), b"tex_albedo" => Ok(s.tex_albedo = Some(read_slice(v)?)), b"tex_transmission" => Ok(s.tex_transmission = Some(read_slice(v)?)), + b"tex_alpha" => Ok(s.tex_alpha = Some(read_slice(v)?)), b"tex_emission" => Ok(s.tex_emission = Some(read_slice(v)?)), x => Ok(warn!( "unknown mesh part key: {:?}", diff --git a/world/Cargo.toml b/world/Cargo.toml index 93d1133..11272ed 100644 --- a/world/Cargo.toml +++ b/world/Cargo.toml @@ -11,6 +11,7 @@ gltf = { version = "1.4.1", features = [ "extras", "names", "KHR_lights_punctual", + "KHR_materials_transmission", ] } log = "0.4.22" weareshared = { path = "../shared" } diff --git a/world/src/mesh.rs b/world/src/mesh.rs index 8742fb7..6a295c7 100644 --- a/world/src/mesh.rs +++ b/world/src/mesh.rs @@ -114,7 +114,7 @@ pub fn import_mesh( }) .transpose()?; - let va_transmission = reader + let va_alpha = reader .read_colors(0) .map(|iter| { let mut color_a = vec![]; @@ -144,7 +144,7 @@ pub fn import_mesh( let index = Some(store.set(&IndexArray(index))?); let mut tex_albedo = None; - let mut tex_transmission = None; + let mut tex_alpha = None; if let Some(tex) = p.material().pbr_metallic_roughness().base_color_texture() { let r = load_texture( "albedo", @@ -155,7 +155,7 @@ pub fn import_mesh( webp, )?; tex_albedo = Some(r.clone()); - tex_transmission = Some(r.clone()); + tex_alpha = Some(r.clone()); } let mut tex_normal = None; if let Some(tex) = p.material().normal_texture() { @@ -213,7 +213,7 @@ pub fn import_mesh( debug!("global albedo pruned"); None }; - let g_transmission = if base_color[3] != 1. { + let g_alpha = if base_color[3] != 1. { info!("global transmission is {}", base_color[3]); Some(base_color[3]) } else { @@ -235,7 +235,7 @@ pub fn import_mesh( let mesh = store.set(&MeshPart { g_albedo, - g_transmission, + g_alpha, g_metallic, g_roughness, g_emission, @@ -243,14 +243,17 @@ pub fn import_mesh( va_normal, va_texcoord, va_albedo, - va_transmission, + va_alpha, tex_albedo, tex_normal, tex_roughness, tex_metallic, - tex_transmission, + tex_alpha, tex_emission, index, + g_transmission: None, + tex_transmission: None, + va_transmission: None, va_emission: None, // not supported by gltf va_metallic: None, // not supported by gltf va_roughness: None, // not supported by gltf |