Skip to content

Commit 797ee02

Browse files
authored
Merge branch 'KhronosGroup:main' into rel/MPEG_lighting
2 parents d36d52b + 4ecfc3b commit 797ee02

19 files changed

Lines changed: 2192 additions & 93 deletions

File tree

extensions/2.0/Khronos/KHR_gaussian_splatting/README.md

Lines changed: 589 additions & 0 deletions
Large diffs are not rendered by default.
Lines changed: 69 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,69 @@
1+
{
2+
"$schema": "https://json-schema.org/draft/2020-12/schema",
3+
"title": "KHR_gaussian_splatting glTF Mesh Primitive Extension",
4+
"type": "object",
5+
"description": "Data defining a 3D Gaussian Splat primitive.",
6+
"allOf": [
7+
{
8+
"$ref": "glTFProperty.schema.json"
9+
}
10+
],
11+
"properties": {
12+
"kernel": {
13+
"type": "string",
14+
"description": "The kernel used to generate the Gaussians.",
15+
"anyOf": [
16+
{
17+
"const": "ellipse"
18+
},
19+
{
20+
"type": "string"
21+
}
22+
]
23+
},
24+
"colorSpace": {
25+
"type": "string",
26+
"description": "The color space of the reconstructed color values.",
27+
"anyOf": [
28+
{
29+
"const": "srgb_rec709_display"
30+
},
31+
{
32+
"const": "lin_rec709_display"
33+
},
34+
{
35+
"type": "string"
36+
}
37+
]
38+
},
39+
"projection": {
40+
"type": "string",
41+
"description": "The projection method for rendering the Gaussians.",
42+
"default": "perspective",
43+
"anyOf": [
44+
{
45+
"const": "perspective"
46+
},
47+
{
48+
"type": "string"
49+
}
50+
]
51+
},
52+
"sortingMethod": {
53+
"type": "string",
54+
"description": "The sorting method for rendering the Gaussians.",
55+
"default": "cameraDistance",
56+
"anyOf": [
57+
{
58+
"const": "cameraDistance"
59+
},
60+
{
61+
"type": "string"
62+
}
63+
]
64+
},
65+
"extensions": {},
66+
"extras": {}
67+
},
68+
"required": ["colorSpace", "kernel"]
69+
}

extensions/2.0/Khronos/KHR_materials_diffuse_transmission/README.md

Lines changed: 65 additions & 61 deletions
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,7 @@
1111
- Alex Wood, AGI [@abwood](https://github.com/abwood)
1212
- Ed Mackey, AGI [@emackey](https://github.com/emackey)
1313

14-
Copyright 2024 The Khronos Group Inc. All Rights Reserved. glTF is a trademark of The Khronos Group Inc.
14+
Copyright 2025 The Khronos Group Inc. All Rights Reserved. glTF is a trademark of The Khronos Group Inc.
1515
See [Appendix](#appendix-full-khronos-copyright-statement) for full Khronos Copyright Statement.
1616

1717
## Status
@@ -24,12 +24,12 @@ Written against the glTF 2.0 spec.
2424

2525
## Exclusions
2626

27-
* This extension must not be used on a material that also uses `KHR_materials_pbrSpecularGlossiness`.
28-
* This extension must not be used on a material that also uses `KHR_materials_unlit`.
27+
- This extension must not be used on a material that also uses `KHR_materials_pbrSpecularGlossiness`.
28+
- This extension must not be used on a material that also uses `KHR_materials_unlit`.
2929

3030
## Overview
3131

32-
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.
32+
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.
3333

3434
<div align="center">
3535
<figure style="text-align:center">
@@ -44,43 +44,42 @@ This extension models the physical phenomenon of light being diffusely transmitt
4444
</figure>
4545
</div>
4646

47-
4847
## Extending Materials
4948

5049
The effect is activated by adding the `KHR_materials_diffuse_transmission` extension to any glTF material.
5150

5251
```json
5352
{
54-
"materials": [
55-
{
56-
"extensions": {
57-
"KHR_materials_diffuse_transmission": {
58-
"diffuseTransmissionFactor": 0.25,
59-
"diffuseTransmissionTexture": {
60-
"index": 0
61-
},
62-
"diffuseTransmissionColorFactor": [
63-
1.0,
64-
0.9,
65-
0.85
66-
]
67-
}
68-
}
53+
"materials": [
54+
{
55+
"extensions": {
56+
"KHR_materials_diffuse_transmission": {
57+
"diffuseTransmissionFactor": 0.25,
58+
"diffuseTransmissionTexture": {
59+
"index": 0
60+
},
61+
"diffuseTransmissionColorFactor": [
62+
1.0,
63+
0.9,
64+
0.85
65+
]
6966
}
70-
]
67+
}
68+
}
69+
]
7170
}
7271
```
7372

7473
## Properties
7574

76-
| | Type | Description | Required |
77-
|-------------------------------------|---------------------------------------------------------------------|---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|--------------------------|
78-
| **diffuseTransmissionFactor** | `number` | The percentage of non-specularly reflected light that is diffusely transmitted through the surface. | No, default: `0` |
79-
| **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 |
80-
| **diffuseTransmissionColorFactor** | `number[3]` | The color that modulates the transmitted light. | No, default: `[1, 1, 1]` |
81-
| **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 |
75+
| | Type | Description | Required |
76+
|-------------------------------------|---------------------------------------------------------------------|----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|--------------------------|
77+
| **diffuseTransmissionFactor** | `number` | The percentage of non-specularly reflected light that is diffusely transmitted through the surface. | No, default: `0` |
78+
| **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` value. | No |
79+
| **diffuseTransmissionColorFactor** | `number[3]` | The color that modulates the transmitted light. | No, default: `[1, 1, 1]` |
80+
| **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 the `diffuseTransmissionColorFactor` value. | No |
8281

83-
### diffuseTransmissionFactor
82+
### Diffuse Transmission
8483

8584
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.
8685

@@ -106,9 +105,26 @@ The proportion of light that is diffusely transmitted through a surface, rather
106105
</tr>
107106
</table>
108107

109-
### diffuseTransmissionColorFactor
108+
When textured, this parameter is sampled from the `A` channel of the `diffuseTransmissionTexture`. The value is linear and is multiplied by the `diffuseTransmissionFactor` to determine the total diffuse transmission value.
109+
110+
```
111+
diffuseTransmission = diffuseTransmissionFactor * diffuseTransmissionTexture.a
112+
```
113+
114+
<table>
115+
<tr>
116+
<td><img src="./figures/factor_tex_inlay.jpg"/></td>
117+
</tr>
118+
<tr>
119+
<td align="center">
120+
<em>Backlit, occluded plane with blue <code>baseColorFactor</code> and a striped <code>diffuseTransmissionTexture</code>.<br>(Input texture shown in the top-left).</em>
121+
</td>
122+
</tr>
123+
</table>
124+
125+
### Diffuse Transmission Color
110126

111-
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`.
127+
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 - `diffuseTransmissionColor`.
112128

113129
<table>
114130
<tr>
@@ -132,32 +148,8 @@ The proportion of light at each color channel that is not attenuated by the surf
132148
</tr>
133149
</table>
134150

135-
### diffuseTransmissionTexture
136-
137-
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.
138-
139-
The value is linear and is multiplied by the `diffuseTransmissionFactor` to determine the total diffuse transmission value.
151+
When textured, the `RGB` channels of the `diffuseTransmissionColorTexture`, encoded in sRGB, define the proportion of light at each color channel that is not attenuated by the surface transmission. The values are multiplied by the `diffuseTransmissionFactor` to determine the final diffuse transmission color.
140152

141-
```
142-
diffuseTransmission = diffuseTransmissionFactor * diffuseTransmissionTexture.a
143-
```
144-
145-
<table>
146-
<tr>
147-
<td><img src="./figures/factor_tex_inlay.jpg"/></td>
148-
</tr>
149-
<tr>
150-
<td align="center">
151-
<em>Backlit, occluded plane with blue <code>baseColorFactor</code> and a striped <code>diffuseTransmissionTexture</code>.<br>(Input texture shown in the top-left).</em>
152-
</td>
153-
</tr>
154-
</table>
155-
156-
157-
### diffuseTransmissionColorTexture
158-
159-
The `RGB` channels of this texture define the proportion of light at each color channel that is not attenuated by the surface transmission.
160-
The values are multiplied by the `diffuseTransmissionColorFactor` to determine the total diffuse transmission color.
161153
```
162154
diffuseTransmissionColor = diffuseTransmissionColorFactor * diffuseTransmissionColorTexture.rgb
163155
```
@@ -193,6 +185,7 @@ diffuseTransmissionColor = diffuseTransmissionColorFactor * diffuseTransmissionC
193185
*This section is normative.*
194186

195187
This extension changes the `dielectric_brdf` defined in [Appendix B](https://registry.khronos.org/glTF/specs/2.0/glTF-2.0.html#material-structure)
188+
196189
```
197190
dielectric_brdf =
198191
fresnel_mix(
@@ -201,7 +194,9 @@ dielectric_brdf =
201194
layer = specular_brdf(α = roughness ^ 2)
202195
)
203196
```
204-
to the following:
197+
198+
to the following:
199+
205200
```
206201
dielectric_brdf =
207202
fresnel_mix(
@@ -213,12 +208,15 @@ dielectric_brdf =
213208
layer = specular_brdf(α = roughness ^ 2)
214209
)
215210
```
216-
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.
211+
212+
Increasing the strength of the diffuse transmission effect using the `diffuseTransmission` 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.
217213

218214
## Implementation
215+
219216
*This section is non-normative.*
220217

221218
With a simple Lambert BRDF model, `diffuse_brdf` and `diffuse_btdf` may be implemented as follows
219+
222220
```
223221
function diffuse_brdf(color) {
224222
if (view and light on same hemisphere) {
@@ -258,23 +256,27 @@ function mix(bsdf0, bsdf1, factor) {
258256
</div>
259257

260258
## Combining Diffuse Transmission with other Extensions
259+
261260
### KHR_materials_transmission
261+
262262
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.
263263

264264
Let's recall the `dielectric_brdf` for `KHR_materials_diffuse_transmission` as defined above
265+
265266
```
266267
dielectric_brdf =
267268
fresnel_mix(
268269
ior = 1.5,
269270
base = mix(
270271
diffuse_brdf(color = baseColor),
271272
diffuse_btdf(color = diffuseTransmissionColor),
272-
diffuseTransmission,
273+
diffuseTransmission),
273274
layer = specular_brdf(α = roughness ^ 2)
274275
)
275276
```
276277

277278
and compare it to the `dielectric_brdf` defined in `KHR_materials_transmission`
279+
278280
```
279281
dielectric_brdf =
280282
fresnel_mix(
@@ -336,6 +338,7 @@ Since the diffuse BTDF does not have controls for roughness, the roughness param
336338
If `KHR_materials_transmission` is used in combination with `KHR_materials_diffuse_transmission`, the transmission effect overrides the diffuse transmission effect.
337339

338340
We can formalize this behavior by combining the two cases from above
341+
339342
```
340343
dielectric_brdf =
341344
fresnel_mix(
@@ -352,6 +355,7 @@ diffuse_bsdf = mix(
352355
diffuse_btdf(color = diffuseTransmissionColor),
353356
diffuseTransmission)
354357
```
358+
355359
<table>
356360
<tr>
357361
<td><img src="figures/dt_transmission_1.0.jpg"/></td>
@@ -378,6 +382,7 @@ diffuse_bsdf = mix(
378382
</table>
379383

380384
### KHR_materials_volume
385+
381386
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.
382387

383388
<table>
@@ -421,14 +426,13 @@ When `KHR_materials_diffuse_transmission` is combined with `KHR_materials_volume
421426
</tr>
422427
</table>
423428

424-
425429
## Schema
426430

427-
- [glTF.KHR_materials_diffuse_transmission.schema.json](schema/glTF.KHR_materials_diffuse_transmission.schema.json)
431+
- [material.KHR_materials_diffuse_transmission.schema.json](schema/material.KHR_materials_diffuse_transmission.schema.json)
428432

429433
## Appendix: Full Khronos Copyright Statement
430434

431-
Copyright 2024 The Khronos Group Inc.
435+
Copyright 2025 The Khronos Group Inc.
432436

433437
Some parts of this Specification are purely informative and do not define requirements
434438
necessary for compliance and so are outside the Scope of this Specification. These

extensions/2.0/Khronos/KHR_materials_diffuse_transmission/schema/glTF.KHR_materials_diffuse_transmission.schema.json renamed to extensions/2.0/Khronos/KHR_materials_diffuse_transmission/schema/material.KHR_materials_diffuse_transmission.schema.json

Lines changed: 10 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
{
22
"$schema": "http://json-schema.org/draft-04/schema",
3-
"title": "KHR_materials_diffuse_transmission glTF extension",
3+
"title": "KHR_materials_diffuse_transmission glTF Material Extension",
44
"type": "object",
55
"description": "glTF extension that defines the diffuse transmission of the material.",
66
"allOf": [ { "$ref": "glTFProperty.schema.json" } ],
@@ -16,25 +16,26 @@
1616
"diffuseTransmissionTexture": {
1717
"allOf": [ { "$ref": "textureInfo.schema.json" } ],
1818
"description": "A texture that defines the percentage of light transmitted through the surface.",
19-
"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."
19+
"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` value."
2020
},
2121
"diffuseTransmissionColorFactor": {
2222
"type": "array",
2323
"items": {
2424
"type": "number",
25-
"minimum": 0.0
25+
"minimum": 0.0,
26+
"maximum": 1.0
2627
},
2728
"description": "The color of the transmitted light.",
2829
"default": [ 1.0, 1.0, 1.0 ],
2930
"minItems": 3,
3031
"maxItems": 3,
3132
"gltf_detailedDescription": "The color of the transmitted light."
32-
},
33-
"diffuseTransmissionColorTexture": {
34-
"allOf": [ { "$ref": "textureInfo.schema.json" } ],
35-
"description": "A texture that defines the color of the transmitted light",
36-
"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."
37-
},
33+
},
34+
"diffuseTransmissionColorTexture": {
35+
"allOf": [ { "$ref": "textureInfo.schema.json" } ],
36+
"description": "A texture that defines the color of the transmitted light",
37+
"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 the `diffuseTransmissionColorFactor` value."
38+
},
3839
"extensions": { },
3940
"extras": { }
4041
}

0 commit comments

Comments
 (0)