diff --git a/extensions/README.md b/extensions/README.md index ec949a2e82..a7b8334d98 100644 --- a/extensions/README.md +++ b/extensions/README.md @@ -55,6 +55,13 @@ begin with vendor extensions (which do not require review), reach out for feedba consensus forms we may consider the best way to bring a vendor extension into the broader ecosystem: via multi-vendor extensions, Khronos extensions, or inclusion in a future version of the glTF specification. +#### PBR material extensions + +There are several extensions to the glTF 2.0 metallic-roughness material. The following image shows the complete material including all extensions. The default values for parameters introduced in extensions are chosen in a way that they do not affect the material if an extension is not used. + +![](figures/pbrext.png) + + ## Extensions for glTF 1.0 #### Khronos extensions diff --git a/extensions/figures/pbrext.dot b/extensions/figures/pbrext.dot new file mode 100644 index 0000000000..d6616b1c6c --- /dev/null +++ b/extensions/figures/pbrext.dot @@ -0,0 +1,175 @@ +digraph D { + graph [rankdir="LR", fontname="Helvetica"] + node [shape=plaintext, fontname="Helvetica"] + edge [fontname="Helvetica"] + + subgraph cluster_dielectric { + label="Dielectric" + + dielectric_specular_brdf [label=< + + + + +
specular_brdf
color = [1, 1, 1]
roughness = <roughness>2
+ >] + + dielectric_specular_btdf [label=< + + + + + +
specular_btdf
color = <baseColor>
roughness = <roughness>2
ior = <ior>
+ >] + + dielectric_diffuse_brdf [label=< + + + +
diffuse_brdf
color = <baseColor>
+ >] + + dielectric_diffuse_btdf [label=< + + + +
diffuse_btdf
color = <baseColor>
+ >] + + dielectric_diffuse_mix [label=< + + + + + +
mix
bsdf0
bsdf1
weight = <translucency>
+ >] + + dielectric_base_mix [label=< + + + + + +
mix
bsdf0
bsdf1
weight = <transmission>
+ >] + + dielectric_fresnel_mix [label=< + + + + + + +
fresnel_mix
layer
base
f0 = toF0(<ior>) * <specularColor> * <specular>
f90 = <specular>
+ >] + + dielectric_diffuse_brdf:out -> dielectric_diffuse_mix:in_bsdf0 + dielectric_diffuse_btdf:out -> dielectric_diffuse_mix:in_bsdf1 + + dielectric_diffuse_mix:out -> dielectric_base_mix:in_bsdf0 + dielectric_specular_btdf:out -> dielectric_base_mix:in_bsdf1 + + dielectric_base_mix:out -> dielectric_fresnel_mix:in_base + dielectric_specular_brdf:out -> dielectric_fresnel_mix:in_layer + } + + subgraph cluster_metal { + label="Metal" + + metal_specular_brdf [label=< + + + + +
specular_brdf
color = [1, 1, 1]
roughness = <roughness>2
+ >] + + metal_conductor_fresnel [label=< + + + + + +
conductor_fresnel 
bsdf
f0 = <baseColor>
f90 = [1, 1, 1]
+ >] + + metal_specular_brdf:out -> metal_conductor_fresnel:in_bsdf + } + + subgraph core { + core_mix [label=< + + + + + +
mix
bsdf0
bsdf1
weight = <metallic>
+ >] + + dielectric_fresnel_mix:out -> core_mix:in_bsdf0 + metal_conductor_fresnel:out -> core_mix:in_bsdf1 + } + + subgraph sheen { + sheen_brdf [label=< + + + + +
sheen_brdf
color = <sheenColor>
roughness = <sheenRoughness>
+ >] + + sheen_coat [label=< + + + + +
coat
layer
base
+ >] + + sheen_brdf:out -> sheen_coat:in_layer + } + + core_mix:out -> sheen_coat:in_base + + subgraph clearcoat { + clearcoat_brdf [label=< + + + + +
specular_brdf
color = <clearcoat>
roughness = <clearcoatRoughness>2
+ >] + + clearcoat_coat [label=< + + + + +
coat
layer
base
+ >] + + clearcoat_brdf:out -> clearcoat_coat:in_layer + } + + sheen_coat:out -> clearcoat_coat:in_base + + subgraph legend { + rank="same" + legend_node [label=< + + + + + + + + +
Core
KHR_materials_ior
KHR_materials_specular
KHR_materials_translucency
KHR_materials_transmission
KHR_materials_sheen
KHR_materials_clearcoat
+ >] + + core_mix -> legend_node [style=invis] + } +} diff --git a/extensions/figures/pbrext.png b/extensions/figures/pbrext.png new file mode 100644 index 0000000000..e2f88e43f3 Binary files /dev/null and b/extensions/figures/pbrext.png differ