diff --git a/extensions/2.0/Khronos/KHR_materials_diffuse_transmission/README.md b/extensions/2.0/Khronos/KHR_materials_diffuse_transmission/README.md new file mode 100644 index 0000000000..aa0f660693 --- /dev/null +++ b/extensions/2.0/Khronos/KHR_materials_diffuse_transmission/README.md @@ -0,0 +1,421 @@ +# KHR\_materials\_diffuse_transmission + +## Contributors + +* Tobias Haeussler, Dassault Systèmes [@proog128](https://github.com/proog128) +* Bastian Sdorra, Dassault Systèmes [@bsdorra](https://github.com/bsdorra) +* Ed Mackey, AGI [@emackey](https://twitter.com/emackey) + +TODO + +## Status + +Experimental + +## Dependencies + +Written against the glTF 2.0 spec. + +## Exclusions + +* This extension must not be used on a material that also uses `KHR_materials_pbrSpecularGlossiness`. +* This extension must not be used on a material that also uses `KHR_materials_unlit`. + +## Overview + +This extension models the physical phenomenon of light being diffusely transmitted through an infinitely thin material. Thin dielectric objects like leaves or paper diffusely transmit light due to dense volumetric scattering within the object. In 3D graphics, it is common to approximate thin volumetric objects as non-volumetric surfaces. The KHR_materials_diffuse_transmission extension models the diffuse transmission of light through such infinitely thin surfaces. For optically thick media (volumes) with short scattering distances and dense scattering behavior, i.e. candles, KHR_materials_diffuse_transmission provides a phenomenologically plausible and cost-effective approximation. + +
+
+

+ +

+
+
+

(candle model by lucatorcigliani with modifications by @emackey. Original source CC-BY 4.0)

+

+
+
+ + +## Extending Materials + +The effect is activated by adding the `KHR_materials_diffuse_transmission` extension to any glTF material. + +```json +{ + "materials": [ + { + "extensions": { + "KHR_materials_diffuse_transmission": { + "diffuseTransmissionFactor": 0.25, + "diffuseTransmissionTexture": { + "index": 0 + }, + "diffuseTransmissionColorFactor": [ + 1.0, + 0.9, + 0.85 + ] + } + } + } + ] +} +``` + +## Properties + +| | Type | Description | Required | +|-------------------------------------|---------------------------------------------------------------------|---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|--------------------------| +| **diffuseTransmissionFactor** | `number` | The percentage of non-specularly reflected light that is diffusely transmitted through the surface. | No, default: `0` | +| **diffuseTransmissionTexture** | [`textureInfo`](/specification/2.0/README.md#reference-textureInfo) | A texture that defines the percentage of non-specularly reflected light that is diffusely transmitted through the surface. Stored in the alpha (`A`) channel. Will be multiplied by the diffuseTransmissionFactor. | No | +| **diffuseTransmissionColorFactor** | `number[3]` | The color that modulates the transmitted light. | No, default: `[1, 1, 1]` | +| **diffuseTransmissionColorTexture** | [`textureInfo`](/specification/2.0/README.md#reference-textureInfo) | A texture that defines the color that modulates the diffusely transmitted light, stored in the `RGB` channels and encoded in sRGB. This texture will be multiplied by diffuseTransmissionColorFactor. | No | + +### diffuseTransmissionFactor + +The proportion of light that is diffusely transmitted through a surface, rather than being diffusely re-emitted. This is expressed as a percentage of the light that penetrates the surface (i.e., not specularly reflected), rather than a percentage of the total light incident on the surface. A value of 1.0 indicates that 100% of the light that penetrates the surface is transmitted through it. + + + + + + + + + + + + + + + + + + + +
0.00.250.50.751.0
+ Backlit, occluded plane with blue baseColorFactor for varying diffuseTransmissionFactor. +
+ +### diffuseTransmissionColorFactor + +The proportion of light at each color channel that is not attenuated by the surface transmission. Attenuation is usually defined as an amount of light at each frequency that is reduced over a given distance through a medium by absorption and scattering interactions. However, since this extension deals exclusively with infinitely thin surfaces, attenuation is constant and equal to 1.0 - `diffuseTransmissionColorFactor`. + + + + + + + + + + + + + + + + + + + +
0.00.250.50.751.0
+ Backlit, occluded plane with blue baseColorFactor and red diffuseTransmissionColorFactor for varying diffuseTransmissionFactor. +
+ +### diffuseTransmissionTexture + +The `A` channel of this texture defines proportion of light that is diffusely transmitted through a surface, rather than being diffusely re-emitted. This is expressed as a percentage of the light that penetrates the surface (i.e., not specularly reflected), rather than a percentage of the total light incident on the surface. A value of 1.0 indicates that 100% of the light that penetrates the surface is transmitted through it. + +The value is linear and is multiplied by the `diffuseTransmissionFactor` to determine the total diffuse transmission value. + +``` +diffuseTransmission = diffuseTransmissionFactor * diffuseTransmissionTexture.a +``` + + + + + + + + +
+ Backlit, occluded plane with blue baseColorFactor and a striped diffuseTransmissionTexture.
(Input texture shown in the top-left).
+
+ + +### diffuseTransmissionColorTexture + +The `RGB` channels of this texture define the proportion of light at each color channel that is not attenuated by the surface transmission. +The values are multiplied by the `diffuseTransmissionColorFactor` to determine the total diffuse transmission color. +``` +diffuseTransmissionColor = diffuseTransmissionColorFactor * diffuseTransmissionColorTexture.rgb +``` + + + + + + + + + + + + + + + + + + + +
0.00.250.50.751.0
+ + Single-sided plane in a symmetric light setup. baseColorTexture and diffuseTransmissionColorTexture use textures that represent the different sides of the one-dollar bill. Series shows the setup at varying values of diffuseTransmissionFactor.
+

(dollar bill texture from ResourceBoy.com ) +

+ +

+ +## Material Structure Updates + +*This section is normative.* + +This extension changes the `dielectric_brdf` defined in [Appendix B](https://registry.khronos.org/glTF/specs/2.0/glTF-2.0.html#material-structure) +``` +dielectric_brdf = + fresnel_mix( + ior = 1.5, + base = diffuse_brdf(color = baseColor), + layer = specular_brdf(α = roughness ^ 2) + ) +``` + to the following: +``` +dielectric_brdf = + fresnel_mix( + ior = 1.5, + base = mix( + diffuse_brdf(color = baseColor), + diffuse_btdf(color = diffuseTransmissionColor), + diffuseTransmission), + layer = specular_brdf(α = roughness ^ 2) + ) +``` +Increasing the strength of the diffuse transmission effect using the `diffuseTransmissionFactor` parameter takes away energy from the diffuse reflection BSDF and passes it to the diffuse transmission BSDF. The specular reflection BSDF and Fresnel weighting are not affected. + +## Implementation +*This section is non-normative.* + +With a simple Lambert BRDF model, `diffuse_brdf` and `diffuse_btdf` may be implemented as follows +``` +function diffuse_brdf(color) { + if (view and light on same hemisphere) { + return (1/pi) * color + } else { + return 0 + } +} + +function diffuse_btdf(color) { + if (view and light on opposite hemispheres) { + return (1/pi) * color + } else { + return 0 + } +} + +function mix(bsdf0, bsdf1, factor) { + return (1-factor) * bsdf0 + factor * bsdf1 +} +``` + +
+ + + + + + + + +
+ Diffuse BRDF + + Diffuse BTDF +
+
+ +## Combining Diffuse Transmission with other Extensions +### KHR_materials_transmission +Both `KHR_materials_diffuse_transmission` and `KHR_materials_transmission` replace the diffuse BRDF with a mix of diffuse BRDF and a BTDF that transmits light onto the opposite side of the surface. In case of `KHR_materials_transmission`, this is a microfacet BTDF that shares its roughness with the microfacet BRDF. In case of `KHR_materials_diffuse_transmission`, on the other hand, this is a diffuse BTDF. + +Let's recall the `dielectric_brdf` for `KHR_materials_diffuse_transmission` as defined above +``` +dielectric_brdf = + fresnel_mix( + ior = 1.5, + base = mix( + diffuse_brdf(color = baseColor), + diffuse_btdf(color = diffuseTransmissionColor), + diffuseTransmission, + layer = specular_brdf(α = roughness ^ 2) + ) +``` + +and compare it to the `dielectric_brdf` defined in `KHR_materials_transmission` +``` +dielectric_brdf = + fresnel_mix( + ior = 1.5, + base = mix( + diffuse_brdf(baseColor), + specular_btdf(α = roughness^2) * baseColor, + transmission), + layer = specular_brdf(α = roughness^2) + ) +``` + +Since the diffuse BTDF does not have controls for roughness, the roughness parameter acts only on the reflective part of the surface. By decoupling the reflection and transmission parts it is possible to configure materials which have a smooth reflection and a diffuse transmission, as shown in images below. + + + + + + + + + +
+ Emissive sphere behind material sample.
Left: Opaque diffuse. Middle: Rough transmission. Right: Diffuse transmission.
+
+ + + + + + + + + + + + + +
0.00.20.4
+ Translucent sphere with varying roughness. +
+ + + + + + + + + + + + + +
0.00.20.4
+ Transmissive sphere with varying roughness. +
+ +If `KHR_materials_transmission` is used in combination with `KHR_materials_diffuse_transmission`, the transmission effect overrides the diffuse transmission effect. + +We can formalize this behavior by combining the two cases from above +``` +dielectric_brdf = + fresnel_mix( + ior = 1.5, + base = mix( + diffuse_bsdf, + specular_btdf(α = roughness^2) * baseColor, + transmission), + layer = specular_brdf(α = roughness^2) + ) + +diffuse_bsdf = mix( + diffuse_brdf(color = baseColor), + diffuse_btdf(color = diffuseTransmissionColor), + diffuseTransmission) +``` + + + + + + + + + + + + + + + + + + +
1.00.750.50.250.0
+ Dragon with fixed diffuseTransmissionFactor of 1.0 and varying transmissionFactor.
+

+ (dragon model from Stanford 3D Scanning Repository) + +

+ +### KHR_materials_volume +When `KHR_materials_diffuse_transmission` is combined with `KHR_materials_volume`, a diffuse transmission BTDF describes the transmission of light through the volume boundary. The object becomes translucent. The light transport inside the volume is solely handled by `KHR_materials_volume` and is not affected by the surface BSDF. + + + + + + + + + + + + + + + +
0.00.51.0
+ + Dragon with white base color, colored volume attenuation and varying diffuseTransmissionFactor.
+
+
+ + + + + + + + + + + + + + + +
0.00.250.5
+ + Candle with off-white base color, colored volume attenuation and varying diffuseTransmissionFactor.
+

(candle model by lucatorcigliani with modifications by @emackey. Original source CC-BY 4.0)

+ +

+ + +## Schema + +- [glTF.KHR_materials_diffuse_transmission.schema.json](schema/glTF.KHR_materials_diffuse_transmission.schema.json) + diff --git a/extensions/2.0/Khronos/KHR_materials_diffuse_transmission/figures/attenuation_dt_0.0.jpg b/extensions/2.0/Khronos/KHR_materials_diffuse_transmission/figures/attenuation_dt_0.0.jpg new file mode 100644 index 0000000000..ffa936157a Binary files /dev/null and b/extensions/2.0/Khronos/KHR_materials_diffuse_transmission/figures/attenuation_dt_0.0.jpg differ diff --git a/extensions/2.0/Khronos/KHR_materials_diffuse_transmission/figures/attenuation_dt_0.5.jpg b/extensions/2.0/Khronos/KHR_materials_diffuse_transmission/figures/attenuation_dt_0.5.jpg new file mode 100644 index 0000000000..8f5a995089 Binary files /dev/null and b/extensions/2.0/Khronos/KHR_materials_diffuse_transmission/figures/attenuation_dt_0.5.jpg differ diff --git a/extensions/2.0/Khronos/KHR_materials_diffuse_transmission/figures/attenuation_dt_1.0.jpg b/extensions/2.0/Khronos/KHR_materials_diffuse_transmission/figures/attenuation_dt_1.0.jpg new file mode 100644 index 0000000000..676ad9ad14 Binary files /dev/null and b/extensions/2.0/Khronos/KHR_materials_diffuse_transmission/figures/attenuation_dt_1.0.jpg differ diff --git a/extensions/2.0/Khronos/KHR_materials_diffuse_transmission/figures/bsdf.jpg b/extensions/2.0/Khronos/KHR_materials_diffuse_transmission/figures/bsdf.jpg new file mode 100644 index 0000000000..51cd13ebbc Binary files /dev/null and b/extensions/2.0/Khronos/KHR_materials_diffuse_transmission/figures/bsdf.jpg differ diff --git a/extensions/2.0/Khronos/KHR_materials_diffuse_transmission/figures/bsdf.svg b/extensions/2.0/Khronos/KHR_materials_diffuse_transmission/figures/bsdf.svg new file mode 100644 index 0000000000..a179cab681 --- /dev/null +++ b/extensions/2.0/Khronos/KHR_materials_diffuse_transmission/figures/bsdf.svg @@ -0,0 +1,933 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + image/svg+xml + + + + + + + + + + + + + + + + + + + + V + L + + N + + + + V + L + + N + + + + + + + + + + + + diff --git a/extensions/2.0/Khronos/KHR_materials_diffuse_transmission/figures/candle_0.0.jpg b/extensions/2.0/Khronos/KHR_materials_diffuse_transmission/figures/candle_0.0.jpg new file mode 100644 index 0000000000..2bb211e9e6 Binary files /dev/null and b/extensions/2.0/Khronos/KHR_materials_diffuse_transmission/figures/candle_0.0.jpg differ diff --git a/extensions/2.0/Khronos/KHR_materials_diffuse_transmission/figures/candle_0.25.jpg b/extensions/2.0/Khronos/KHR_materials_diffuse_transmission/figures/candle_0.25.jpg new file mode 100644 index 0000000000..949a5a3886 Binary files /dev/null and b/extensions/2.0/Khronos/KHR_materials_diffuse_transmission/figures/candle_0.25.jpg differ diff --git a/extensions/2.0/Khronos/KHR_materials_diffuse_transmission/figures/candle_0.5.jpg b/extensions/2.0/Khronos/KHR_materials_diffuse_transmission/figures/candle_0.5.jpg new file mode 100644 index 0000000000..771a61c131 Binary files /dev/null and b/extensions/2.0/Khronos/KHR_materials_diffuse_transmission/figures/candle_0.5.jpg differ diff --git a/extensions/2.0/Khronos/KHR_materials_diffuse_transmission/figures/color_0.0.jpg b/extensions/2.0/Khronos/KHR_materials_diffuse_transmission/figures/color_0.0.jpg new file mode 100644 index 0000000000..060aee5a17 Binary files /dev/null and b/extensions/2.0/Khronos/KHR_materials_diffuse_transmission/figures/color_0.0.jpg differ diff --git a/extensions/2.0/Khronos/KHR_materials_diffuse_transmission/figures/color_0.25.jpg b/extensions/2.0/Khronos/KHR_materials_diffuse_transmission/figures/color_0.25.jpg new file mode 100644 index 0000000000..d8990c12f8 Binary files /dev/null and b/extensions/2.0/Khronos/KHR_materials_diffuse_transmission/figures/color_0.25.jpg differ diff --git a/extensions/2.0/Khronos/KHR_materials_diffuse_transmission/figures/color_0.5.jpg b/extensions/2.0/Khronos/KHR_materials_diffuse_transmission/figures/color_0.5.jpg new file mode 100644 index 0000000000..9cc22d71aa Binary files /dev/null and b/extensions/2.0/Khronos/KHR_materials_diffuse_transmission/figures/color_0.5.jpg differ diff --git a/extensions/2.0/Khronos/KHR_materials_diffuse_transmission/figures/color_0.75.jpg b/extensions/2.0/Khronos/KHR_materials_diffuse_transmission/figures/color_0.75.jpg new file mode 100644 index 0000000000..21f885bb38 Binary files /dev/null and b/extensions/2.0/Khronos/KHR_materials_diffuse_transmission/figures/color_0.75.jpg differ diff --git a/extensions/2.0/Khronos/KHR_materials_diffuse_transmission/figures/color_1.0.jpg b/extensions/2.0/Khronos/KHR_materials_diffuse_transmission/figures/color_1.0.jpg new file mode 100644 index 0000000000..58f2d04b53 Binary files /dev/null and b/extensions/2.0/Khronos/KHR_materials_diffuse_transmission/figures/color_1.0.jpg differ diff --git a/extensions/2.0/Khronos/KHR_materials_diffuse_transmission/figures/color_tex_0.0.jpg b/extensions/2.0/Khronos/KHR_materials_diffuse_transmission/figures/color_tex_0.0.jpg new file mode 100644 index 0000000000..fa006b4a40 Binary files /dev/null and b/extensions/2.0/Khronos/KHR_materials_diffuse_transmission/figures/color_tex_0.0.jpg differ diff --git a/extensions/2.0/Khronos/KHR_materials_diffuse_transmission/figures/color_tex_0.25.jpg b/extensions/2.0/Khronos/KHR_materials_diffuse_transmission/figures/color_tex_0.25.jpg new file mode 100644 index 0000000000..8a0914043a Binary files /dev/null and b/extensions/2.0/Khronos/KHR_materials_diffuse_transmission/figures/color_tex_0.25.jpg differ diff --git a/extensions/2.0/Khronos/KHR_materials_diffuse_transmission/figures/color_tex_0.5.jpg b/extensions/2.0/Khronos/KHR_materials_diffuse_transmission/figures/color_tex_0.5.jpg new file mode 100644 index 0000000000..2a88620f20 Binary files /dev/null and b/extensions/2.0/Khronos/KHR_materials_diffuse_transmission/figures/color_tex_0.5.jpg differ diff --git a/extensions/2.0/Khronos/KHR_materials_diffuse_transmission/figures/color_tex_0.75.jpg b/extensions/2.0/Khronos/KHR_materials_diffuse_transmission/figures/color_tex_0.75.jpg new file mode 100644 index 0000000000..668c92bbff Binary files /dev/null and b/extensions/2.0/Khronos/KHR_materials_diffuse_transmission/figures/color_tex_0.75.jpg differ diff --git a/extensions/2.0/Khronos/KHR_materials_diffuse_transmission/figures/color_tex_1.0.jpg b/extensions/2.0/Khronos/KHR_materials_diffuse_transmission/figures/color_tex_1.0.jpg new file mode 100644 index 0000000000..80fe7719f3 Binary files /dev/null and b/extensions/2.0/Khronos/KHR_materials_diffuse_transmission/figures/color_tex_1.0.jpg differ diff --git a/extensions/2.0/Khronos/KHR_materials_diffuse_transmission/figures/dt_transmission_0.0.jpg b/extensions/2.0/Khronos/KHR_materials_diffuse_transmission/figures/dt_transmission_0.0.jpg new file mode 100644 index 0000000000..e453e302ca Binary files /dev/null and b/extensions/2.0/Khronos/KHR_materials_diffuse_transmission/figures/dt_transmission_0.0.jpg differ diff --git a/extensions/2.0/Khronos/KHR_materials_diffuse_transmission/figures/dt_transmission_0.25.jpg b/extensions/2.0/Khronos/KHR_materials_diffuse_transmission/figures/dt_transmission_0.25.jpg new file mode 100644 index 0000000000..39ae70cc16 Binary files /dev/null and b/extensions/2.0/Khronos/KHR_materials_diffuse_transmission/figures/dt_transmission_0.25.jpg differ diff --git a/extensions/2.0/Khronos/KHR_materials_diffuse_transmission/figures/dt_transmission_0.5.jpg b/extensions/2.0/Khronos/KHR_materials_diffuse_transmission/figures/dt_transmission_0.5.jpg new file mode 100644 index 0000000000..f44d7b978d Binary files /dev/null and b/extensions/2.0/Khronos/KHR_materials_diffuse_transmission/figures/dt_transmission_0.5.jpg differ diff --git a/extensions/2.0/Khronos/KHR_materials_diffuse_transmission/figures/dt_transmission_0.75.jpg b/extensions/2.0/Khronos/KHR_materials_diffuse_transmission/figures/dt_transmission_0.75.jpg new file mode 100644 index 0000000000..e8b7e6a70d Binary files /dev/null and b/extensions/2.0/Khronos/KHR_materials_diffuse_transmission/figures/dt_transmission_0.75.jpg differ diff --git a/extensions/2.0/Khronos/KHR_materials_diffuse_transmission/figures/dt_transmission_1.0.jpg b/extensions/2.0/Khronos/KHR_materials_diffuse_transmission/figures/dt_transmission_1.0.jpg new file mode 100644 index 0000000000..97abeeeea6 Binary files /dev/null and b/extensions/2.0/Khronos/KHR_materials_diffuse_transmission/figures/dt_transmission_1.0.jpg differ diff --git a/extensions/2.0/Khronos/KHR_materials_diffuse_transmission/figures/factor_0.0.jpg b/extensions/2.0/Khronos/KHR_materials_diffuse_transmission/figures/factor_0.0.jpg new file mode 100644 index 0000000000..79864911ed Binary files /dev/null and b/extensions/2.0/Khronos/KHR_materials_diffuse_transmission/figures/factor_0.0.jpg differ diff --git a/extensions/2.0/Khronos/KHR_materials_diffuse_transmission/figures/factor_0.25.jpg b/extensions/2.0/Khronos/KHR_materials_diffuse_transmission/figures/factor_0.25.jpg new file mode 100644 index 0000000000..44e6851ed2 Binary files /dev/null and b/extensions/2.0/Khronos/KHR_materials_diffuse_transmission/figures/factor_0.25.jpg differ diff --git a/extensions/2.0/Khronos/KHR_materials_diffuse_transmission/figures/factor_0.5.jpg b/extensions/2.0/Khronos/KHR_materials_diffuse_transmission/figures/factor_0.5.jpg new file mode 100644 index 0000000000..3db3441a81 Binary files /dev/null and b/extensions/2.0/Khronos/KHR_materials_diffuse_transmission/figures/factor_0.5.jpg differ diff --git a/extensions/2.0/Khronos/KHR_materials_diffuse_transmission/figures/factor_0.75.jpg b/extensions/2.0/Khronos/KHR_materials_diffuse_transmission/figures/factor_0.75.jpg new file mode 100644 index 0000000000..9b2197cd73 Binary files /dev/null and b/extensions/2.0/Khronos/KHR_materials_diffuse_transmission/figures/factor_0.75.jpg differ diff --git a/extensions/2.0/Khronos/KHR_materials_diffuse_transmission/figures/factor_1.0.jpg b/extensions/2.0/Khronos/KHR_materials_diffuse_transmission/figures/factor_1.0.jpg new file mode 100644 index 0000000000..b8397b9d14 Binary files /dev/null and b/extensions/2.0/Khronos/KHR_materials_diffuse_transmission/figures/factor_1.0.jpg differ diff --git a/extensions/2.0/Khronos/KHR_materials_diffuse_transmission/figures/factor_tex.jpg b/extensions/2.0/Khronos/KHR_materials_diffuse_transmission/figures/factor_tex.jpg new file mode 100644 index 0000000000..8d1398d775 Binary files /dev/null and b/extensions/2.0/Khronos/KHR_materials_diffuse_transmission/figures/factor_tex.jpg differ diff --git a/extensions/2.0/Khronos/KHR_materials_diffuse_transmission/figures/factor_tex_inlay.jpg b/extensions/2.0/Khronos/KHR_materials_diffuse_transmission/figures/factor_tex_inlay.jpg new file mode 100644 index 0000000000..8293d924f4 Binary files /dev/null and b/extensions/2.0/Khronos/KHR_materials_diffuse_transmission/figures/factor_tex_inlay.jpg differ diff --git a/extensions/2.0/Khronos/KHR_materials_diffuse_transmission/figures/leaves.jpg b/extensions/2.0/Khronos/KHR_materials_diffuse_transmission/figures/leaves.jpg new file mode 100644 index 0000000000..6c7cf02da1 Binary files /dev/null and b/extensions/2.0/Khronos/KHR_materials_diffuse_transmission/figures/leaves.jpg differ diff --git a/extensions/2.0/Khronos/KHR_materials_diffuse_transmission/figures/translucent-roughness.png b/extensions/2.0/Khronos/KHR_materials_diffuse_transmission/figures/translucent-roughness.png new file mode 100644 index 0000000000..7e148b59aa Binary files /dev/null and b/extensions/2.0/Khronos/KHR_materials_diffuse_transmission/figures/translucent-roughness.png differ diff --git a/extensions/2.0/Khronos/KHR_materials_diffuse_transmission/figures/transmission-translucency_thin.jpg b/extensions/2.0/Khronos/KHR_materials_diffuse_transmission/figures/transmission-translucency_thin.jpg new file mode 100644 index 0000000000..3861940a2c Binary files /dev/null and b/extensions/2.0/Khronos/KHR_materials_diffuse_transmission/figures/transmission-translucency_thin.jpg differ diff --git a/extensions/2.0/Khronos/KHR_materials_diffuse_transmission/figures/transmission-translucency_thin_angle.jpg b/extensions/2.0/Khronos/KHR_materials_diffuse_transmission/figures/transmission-translucency_thin_angle.jpg new file mode 100644 index 0000000000..1660091a37 Binary files /dev/null and b/extensions/2.0/Khronos/KHR_materials_diffuse_transmission/figures/transmission-translucency_thin_angle.jpg differ diff --git a/extensions/2.0/Khronos/KHR_materials_diffuse_transmission/figures/transmissive-roughness.png b/extensions/2.0/Khronos/KHR_materials_diffuse_transmission/figures/transmissive-roughness.png new file mode 100644 index 0000000000..fce6882f3d Binary files /dev/null and b/extensions/2.0/Khronos/KHR_materials_diffuse_transmission/figures/transmissive-roughness.png differ diff --git a/extensions/2.0/Khronos/KHR_materials_diffuse_transmission/schema/glTF.KHR_materials_diffuse_transmission.schema.json b/extensions/2.0/Khronos/KHR_materials_diffuse_transmission/schema/glTF.KHR_materials_diffuse_transmission.schema.json new file mode 100644 index 0000000000..38e69464c8 --- /dev/null +++ b/extensions/2.0/Khronos/KHR_materials_diffuse_transmission/schema/glTF.KHR_materials_diffuse_transmission.schema.json @@ -0,0 +1,41 @@ +{ + "$schema": "http://json-schema.org/draft-04/schema", + "title": "KHR_materials_diffuse_transmission glTF extension", + "type": "object", + "description": "glTF extension that defines the diffuse transmission of the material.", + "allOf": [ { "$ref": "glTFProperty.schema.json" } ], + "properties": { + "diffuseTransmissionFactor": { + "type": "number", + "description": "The percentage of light that is diffusely transmitted through the surface.", + "default": 0.0, + "minimum": 0.0, + "maximum": 1.0, + "gltf_detailedDescription": "The percentage of non-specularly reflected light that is transmitted through the surface via a Lambertian diffuse transmission." + }, + "diffuseTransmissionTexture": { + "allOf": [ { "$ref": "textureInfo.schema.json" } ], + "description": "A texture that defines the percentage of light transmitted through the surface.", + "gltf_detailedDescription": "A texture that defines the strength of the diffuse transmission effect, stored in the alpha (A) channel. Will be multiplied by the diffuseTransmissionFactor." + }, + "diffuseTransmissionColorFactor": { + "type": "array", + "items": { + "type": "number", + "minimum": 0.0 + }, + "description": "The color of the transmitted light.", + "default": [ 1.0, 1.0, 1.0 ], + "minItems": 3, + "maxItems": 3, + "gltf_detailedDescription": "The color of the transmitted light." + }, + "diffuseTransmissionColorTexture": { + "allOf": [ { "$ref": "textureInfo.schema.json" } ], + "description": "A texture that defines the color of the transmitted light", + "gltf_detailedDescription": "A texture that defines the color of the transmitted light, stored in the RGB channels and encoded in sRGB. This texture will be multiplied by diffuseTransmissionColorFactor." + }, + "extensions": { }, + "extras": { } + } +}