summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--shared/src/resources.rs9
-rw-r--r--world/Cargo.toml1
-rw-r--r--world/src/mesh.rs17
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