From cd7d14e9b02047d53ceb7d18e051d619de689edf Mon Sep 17 00:00:00 2001 From: sebavan Date: Fri, 18 Oct 2019 00:40:55 +0200 Subject: [PATCH 01/14] Starting the discussion --- .../2.0/Khronos/KHR_materials_sheen/README.md | 109 ++++++++++++++++++ .../glTF.KHR_materials_sheen.schema.json | 36 ++++++ 2 files changed, 145 insertions(+) create mode 100644 extensions/2.0/Khronos/KHR_materials_sheen/README.md create mode 100644 extensions/2.0/Khronos/KHR_materials_sheen/schema/glTF.KHR_materials_sheen.schema.json diff --git a/extensions/2.0/Khronos/KHR_materials_sheen/README.md b/extensions/2.0/Khronos/KHR_materials_sheen/README.md new file mode 100644 index 0000000000..65c9010e59 --- /dev/null +++ b/extensions/2.0/Khronos/KHR_materials_sheen/README.md @@ -0,0 +1,109 @@ +# KHR\_materials\_sheen + +## Khronos 3D Formats Working Group + +* TODO + +## Acknowledgments + +* TODO + +## Status + +Experimental + +## Dependencies + +Written against the glTF 2.0 spec. + +## Overview + +TODO + +## Extending Materials + +The PBR sheen materials are defined by adding the `KHR_materials_sheen` extension to any glTF material. +For example, the following defines a material like velvet. + +```json +{ + "materials": [ + { + "name": "velvet", + "extensions": { + "KHR_materials_sheen": { + "sheenFactor": 1.0 + } + } + } + ] +} +``` + +### Sheen + +All implementations should use the same calculations for the BRDF inputs. Implementations of the BRDF itself can vary based on device performance and resource constraints. See [appendix](/specification/2.0/README.md#appendix-b-brdf-implementation) for more details on the BRDF calculations. + +| | Type | Description | Required | +|----------------------------------|---------------------------------------------------------------------------------|----------------------------------------|--------------------------------| +|**sheenFactor** | `number` | The sheen intensity. | No, default: `1.0` | +|**sheenColor** | `array` | The sheen color. | No, default: `[1.0, 1.0, 1.0]` | +|**sheenTexture** | [`textureInfo`](/specification/2.0/README.md#reference-textureInfo) | The sheen color and intensity texture. | No | +| + +The sheen roughness is identical to the material roughness to simplify the configuration. `sheenRoughness = materialRoughness` + +The sheen formula `f_sheen` is different from the specular and clear coat BRDF. +``` +sheenTerm = sheenColor * sheenIntensity * sheenDistribution * sheenVisibility; +``` + +As you notice there is no fresnel for the sheen layer. + +The sheen distribution follows the "Charlie" sheen definition from ImageWorks (Estevez and Kulla): +``` +alphaG = sheenRoughness * sheenRoughness +invR = 1 / alphaG +cos2h = NdotH * NdotH +sin2h = 1 - cos2h +sheenDistribution = (2 + invR) * pow(sin2h, invR * 0.5) / (2 * PI); +``` + +The sheen visibility is following the one defined by Ashkimin: +``` +sheenVisibility = 1 / (4 * (ndotl + ndotv - ndotl * ndotv)) +``` + +The full layer would then be: +``` +f_sheen = lightColor * sheenTerm * PI * ndotl +``` + +The following abstract code describes how the base and sheen layers should be blended together: +``` +specularity = mix(metallicF0, baseColor, metallic) +reflectance = max(max(specularity.r, specularity.g), specularity.b) + +final = f_emissive + f_diffuse + f_specular + (1 - reflectance) * f_sheen +``` + +If `sheenFactor = 0`, the sheen layer is disabled and the material is behaving like the core Metallic-Roughness material: + +``` +f = f_emissive + f_diffuse + f_specular +``` + +If textures are not set, the default values of the clearcoat layer textures are used and the values are not inherited from the underlying Metallic-Roughness (or other) material. If one wants to have the same textures, one have to explicitly set the same texture sources. + +## Appendix + +TODO + +## Reference + +### Theory, Documentation and Implementations + +[NP13 David Neubelt, Matt Pettineo – “Crafting a Next-Gen Material Pipeline for The Order: 1886”, SIGGRAPH 2013](https://blog.selfshadow.com/publications/s2013-shading-course/rad/s2013_pbs_rad_notes.pdf) +[EK17 Alejandro Conty Estevez, Christopher Kulla – “Production Friendly Microfacet Sheen BRDF”, SIGGRAPH 2017](https://blog.selfshadow.com/publications/s2017-shading-course/imageworks/s2017_pbs_imageworks_sheen.pdf) +[AS07 Michael Ashikhmin, Simon Premoze – “Distribution-based BRDFs”, 2007](http://www.cs.utah.edu/~premoze/dbrdf/dBRDF.pdf) +[cloth-shading](https://knarkowicz.wordpress.com/2018/01/04/cloth-shading/) \ No newline at end of file diff --git a/extensions/2.0/Khronos/KHR_materials_sheen/schema/glTF.KHR_materials_sheen.schema.json b/extensions/2.0/Khronos/KHR_materials_sheen/schema/glTF.KHR_materials_sheen.schema.json new file mode 100644 index 0000000000..eb66260a37 --- /dev/null +++ b/extensions/2.0/Khronos/KHR_materials_sheen/schema/glTF.KHR_materials_sheen.schema.json @@ -0,0 +1,36 @@ +{ + "$schema": "http://json-schema.org/draft-04/schema", + "title": "KHR_materials_sheen glTF extension", + "type": "object", + "description": "glTF extension that defines the sheen material model.", + "allOf": [ { "$ref": "glTFProperty.schema.json" } ], + "properties": { + "sheenFactor": { + "type": "number", + "description": "The sheen layer intensity.", + "default": 0.0, + "minimum": 0.0, + "maximum": 1.0, + "gltf_detailedDescription": "The sheen layer intensity of the material. A value of 0.0 means the material has no sheen layer enabled." + }, + "sheenColor": { + "type": "array", + "items": { + "type": "number", + "minimum": 0.0, + "maximum": 1.0 + }, + "minItems": 3, + "maxItems": 3, + "description": "Color of the sheen layer.", + "default": [1, 1, 1] + }, + "sheenTexture": { + "allOf": [ { "$ref": "textureInfo.schema.json" } ], + "description": "The sheen layer texture.", + "gltf_detailedDescription": "The sheen layer texture. Stored in channel RGB the sheen color in Gamma and in A the linear factor." + }, + "extensions": { }, + "extras": { } + } +} \ No newline at end of file From 542167e9bc09a32e8ca4e40145301bb05d8838ac Mon Sep 17 00:00:00 2001 From: sebavan Date: Fri, 18 Oct 2019 13:43:49 +0200 Subject: [PATCH 02/14] Address PR Comment --- .../schema/glTF.KHR_materials_sheen.schema.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/extensions/2.0/Khronos/KHR_materials_sheen/schema/glTF.KHR_materials_sheen.schema.json b/extensions/2.0/Khronos/KHR_materials_sheen/schema/glTF.KHR_materials_sheen.schema.json index eb66260a37..b9821ab79a 100644 --- a/extensions/2.0/Khronos/KHR_materials_sheen/schema/glTF.KHR_materials_sheen.schema.json +++ b/extensions/2.0/Khronos/KHR_materials_sheen/schema/glTF.KHR_materials_sheen.schema.json @@ -28,7 +28,7 @@ "sheenTexture": { "allOf": [ { "$ref": "textureInfo.schema.json" } ], "description": "The sheen layer texture.", - "gltf_detailedDescription": "The sheen layer texture. Stored in channel RGB the sheen color in Gamma and in A the linear factor." + "gltf_detailedDescription": "The sheen layer texture. Stored in channel RGB the sheen color in sRGB transfer function and in A the linear factor." }, "extensions": { }, "extras": { } From 59fc781585dda863134080ac4612e81696334b7b Mon Sep 17 00:00:00 2001 From: sebavan Date: Sun, 17 Nov 2019 11:21:27 +0100 Subject: [PATCH 03/14] Update to latest PR comments --- .../2.0/Khronos/KHR_materials_sheen/README.md | 15 +++++++++++---- .../schema/glTF.KHR_materials_sheen.schema.json | 8 ++++---- 2 files changed, 15 insertions(+), 8 deletions(-) diff --git a/extensions/2.0/Khronos/KHR_materials_sheen/README.md b/extensions/2.0/Khronos/KHR_materials_sheen/README.md index 65c9010e59..a537498391 100644 --- a/extensions/2.0/Khronos/KHR_materials_sheen/README.md +++ b/extensions/2.0/Khronos/KHR_materials_sheen/README.md @@ -46,13 +46,20 @@ All implementations should use the same calculations for the BRDF inputs. Implem | | Type | Description | Required | |----------------------------------|---------------------------------------------------------------------------------|----------------------------------------|--------------------------------| -|**sheenFactor** | `number` | The sheen intensity. | No, default: `1.0` | -|**sheenColor** | `array` | The sheen color. | No, default: `[1.0, 1.0, 1.0]` | -|**sheenTexture** | [`textureInfo`](/specification/2.0/README.md#reference-textureInfo) | The sheen color and intensity texture. | No | -| +|**intensityFactor** | `number` | The sheen intensity. | No, default: `1.0` | +|**colorFactor** | `array` | The sheen color. | No, default: `[1.0, 1.0, 1.0]` | +|**colorIntensityTexture** | [`textureInfo`](/specification/2.0/README.md#reference-textureInfo) | The sheen color (RGB) and intensity (Alpha) texture. | No | + The sheen roughness is identical to the material roughness to simplify the configuration. `sheenRoughness = materialRoughness` +If a texture is defined: +* The sheen intensity is computed with : `sheenIntensity = intensityFactor * sample(colorIntensityTexture).a`. + +* The sheen color is computed with : `sheenColor = colorFactor * sampleLinear(colorIntensityTexture).rgb`. + +Otherwise, `sheenIntensity = intensityFactor` and `sheenColor = colorFactor` + The sheen formula `f_sheen` is different from the specular and clear coat BRDF. ``` sheenTerm = sheenColor * sheenIntensity * sheenDistribution * sheenVisibility; diff --git a/extensions/2.0/Khronos/KHR_materials_sheen/schema/glTF.KHR_materials_sheen.schema.json b/extensions/2.0/Khronos/KHR_materials_sheen/schema/glTF.KHR_materials_sheen.schema.json index b9821ab79a..73ae33b081 100644 --- a/extensions/2.0/Khronos/KHR_materials_sheen/schema/glTF.KHR_materials_sheen.schema.json +++ b/extensions/2.0/Khronos/KHR_materials_sheen/schema/glTF.KHR_materials_sheen.schema.json @@ -5,7 +5,7 @@ "description": "glTF extension that defines the sheen material model.", "allOf": [ { "$ref": "glTFProperty.schema.json" } ], "properties": { - "sheenFactor": { + "intensityFactor": { "type": "number", "description": "The sheen layer intensity.", "default": 0.0, @@ -13,7 +13,7 @@ "maximum": 1.0, "gltf_detailedDescription": "The sheen layer intensity of the material. A value of 0.0 means the material has no sheen layer enabled." }, - "sheenColor": { + "colorFactor": { "type": "array", "items": { "type": "number", @@ -25,10 +25,10 @@ "description": "Color of the sheen layer.", "default": [1, 1, 1] }, - "sheenTexture": { + "colorIntensityTexture": { "allOf": [ { "$ref": "textureInfo.schema.json" } ], "description": "The sheen layer texture.", - "gltf_detailedDescription": "The sheen layer texture. Stored in channel RGB the sheen color in sRGB transfer function and in A the linear factor." + "gltf_detailedDescription": "The sheen layer texture. Stored in channel RGB the sheen color in sRGB transfer function and in A the intensity linear factor." }, "extensions": { }, "extras": { } From b23935802dc1e561c2b46fb1c0c89391324d4b98 Mon Sep 17 00:00:00 2001 From: sebavan Date: Mon, 2 Mar 2020 20:58:53 +0100 Subject: [PATCH 04/14] Discussion follow up --- .../2.0/Khronos/KHR_materials_sheen/README.md | 105 ++++++++++++------ .../KHR_materials_sheen/figures/cushion.png | Bin 0 -> 128975 bytes .../glTF.KHR_materials_sheen.schema.json | 12 +- 3 files changed, 84 insertions(+), 33 deletions(-) create mode 100644 extensions/2.0/Khronos/KHR_materials_sheen/figures/cushion.png diff --git a/extensions/2.0/Khronos/KHR_materials_sheen/README.md b/extensions/2.0/Khronos/KHR_materials_sheen/README.md index a537498391..69e7d64d0c 100644 --- a/extensions/2.0/Khronos/KHR_materials_sheen/README.md +++ b/extensions/2.0/Khronos/KHR_materials_sheen/README.md @@ -16,13 +16,17 @@ Experimental 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 -TODO +This extension defines a sheen that can be layered on top of an existing glTF material definition. A sheen layer is a common technique used in Physically-Based Rendering to represent cloth and fabric materials, for example. See [Theory, Documentation and Implementations](#theory-documentation-and-implementations) ## Extending Materials -The PBR sheen materials are defined by adding the `KHR_materials_sheen` extension to any glTF material. +The PBR sheen materials are defined by adding the `KHR_materials_sheen` extension to any compatible glTF material (excluding those listed above). For example, the following defines a material like velvet. ```json @@ -32,7 +36,7 @@ For example, the following defines a material like velvet. "name": "velvet", "extensions": { "KHR_materials_sheen": { - "sheenFactor": 1.0 + "intensityFactor": 0.9 } } } @@ -47,28 +51,31 @@ All implementations should use the same calculations for the BRDF inputs. Implem | | Type | Description | Required | |----------------------------------|---------------------------------------------------------------------------------|----------------------------------------|--------------------------------| |**intensityFactor** | `number` | The sheen intensity. | No, default: `1.0` | -|**colorFactor** | `array` | The sheen color. | No, default: `[1.0, 1.0, 1.0]` | -|**colorIntensityTexture** | [`textureInfo`](/specification/2.0/README.md#reference-textureInfo) | The sheen color (RGB) and intensity (Alpha) texture. | No | +|**colorFactor** | `array` | The sheen color in linear space | No, default: `[1.0, 1.0, 1.0]` | +|**colorIntensityTexture** | [`textureInfo`](/specification/2.0/README.md#reference-textureInfo) | The sheen color (RGB) and intensity (Alpha) texture.
The sheen color is in sRGB transfer function | No | +|**roughnessFactor** | `number` | The sheen roughness. | No, default: `0.0` | +The sheen roughness is independent from the material roughness to allow materials like this one, with high material roughness and small sheen roughness: -The sheen roughness is identical to the material roughness to simplify the configuration. `sheenRoughness = materialRoughness` +![Cushion](./figures/cushion.png) If a texture is defined: * The sheen intensity is computed with : `sheenIntensity = intensityFactor * sample(colorIntensityTexture).a`. - * The sheen color is computed with : `sheenColor = colorFactor * sampleLinear(colorIntensityTexture).rgb`. Otherwise, `sheenIntensity = intensityFactor` and `sheenColor = colorFactor` -The sheen formula `f_sheen` is different from the specular and clear coat BRDF. -``` +The sheen formula `f_sheen` is a new BRDF, different from the specular and clear coat BRDF: +```glsl sheenTerm = sheenColor * sheenIntensity * sheenDistribution * sheenVisibility; ``` -As you notice there is no fresnel for the sheen layer. +As you notice, there is no fresnel term for the sheen layer. + +### Sheen distribution The sheen distribution follows the "Charlie" sheen definition from ImageWorks (Estevez and Kulla): -``` +```glsl alphaG = sheenRoughness * sheenRoughness invR = 1 / alphaG cos2h = NdotH * NdotH @@ -76,41 +83,77 @@ sin2h = 1 - cos2h sheenDistribution = (2 + invR) * pow(sin2h, invR * 0.5) / (2 * PI); ``` -The sheen visibility is following the one defined by Ashkimin: -``` -sheenVisibility = 1 / (4 * (ndotl + ndotv - ndotl * ndotv)) -``` +### Sheen visibility -The full layer would then be: -``` -f_sheen = lightColor * sheenTerm * PI * ndotl -``` +The "Charlie" sheen visibility is also defined in the same document: +```glsl +float l(float x, float alphaG) +{ + float oneMinusAlphaSq = (1.0 - alphaG) * (1.0 - alphaG); + float a = mix(21.5473, 25.3245, oneMinusAlphaSq); + float b = mix(3.82987, 3.32435, oneMinusAlphaSq); + float c = mix(0.19823, 0.16801, oneMinusAlphaSq); + float d = mix(-1.97760, -1.27393, oneMinusAlphaSq); + float e = mix(-4.32054, -4.85967, oneMinusAlphaSq); + return a / (1.0 + b * pow(x, c)) + d * x + e; +} + +float lambdaSheen(float cosTheta, float alphaG) +{ + return abs(cosTheta) < 0.5 ? exp(l(cosTheta, alphaG)) : exp(2.0 * l(0.5, alphaG) - l(1.0 - cosTheta, alphaG)); +} -The following abstract code describes how the base and sheen layers should be blended together: +sheenVisibility = 1.0 / ((1.0 + lambdaSheen(NdotV, alphaG) + lambdaSheen(NdotL, alphaG)) * (4.0 * NdotV * NdotL)); ``` -specularity = mix(metallicF0, baseColor, metallic) -reflectance = max(max(specularity.r, specularity.g), specularity.b) -final = f_emissive + f_diffuse + f_specular + (1 - reflectance) * f_sheen +However, depending on device performance and resource constraints, one can use a simpler visibility term, like the one defined by Ashikhmin (but that will make the BRDF not energy conserving when using the albedo-scaling technique described below): +```glsl +sheenVisibility = 1 / (4 * (NdotL + NdotV - NdotL * NdotV)) ``` -If `sheenFactor = 0`, the sheen layer is disabled and the material is behaving like the core Metallic-Roughness material: +### Sheen layering +#### Albedo-scaling technique + +The sheen layer can be combined with the base layer with an albedo-scaling technique described in Estevez and Kulla: + +```glsl +float max3(vec3 v) { return max(max(v.x, v.y), v.z); } + +albedoScaling = min(1.0 - sheenIntensity * max3(sheenColor) * E(VdotN), 1.0 - sheenIntensity * max3(sheenColor) * E(LdotN)) + +f = f_sheen + f_base * albedoScaling ``` -f = f_emissive + f_diffuse + f_specular -``` - -If textures are not set, the default values of the clearcoat layer textures are used and the values are not inherited from the underlying Metallic-Roughness (or other) material. If one wants to have the same textures, one have to explicitly set the same texture sources. -## Appendix +The values `E(x)` can be looked up in a table which can be found in section 6.2.3 of [Enterprise PBR Shading Model](#theory-documentation-and-implementations) if you use the "Charlie" visibility term. If you use Ashikhmin instead, you can get the lookup table by using the [cmgen tool from Filament](#theory-documentation-and-implementations), with the `--ibl-dfg` and `--ibl-dfg-cloth` flags: the table is in the blue channel of the generated picture. The lookup must be done with `x = VdotN` and `y = sheenRoughness`. + +If you want to trade a bit of accuracy for more performance, you can use the `VdotN` term only and thus avoid doing multiple lookups for `LdotN`. The albedo scaling term is simplified to: +```glsl +albedoScaling = 1.0 - sheenIntensity * max3(sheenColor) * E(VdotN) +``` -TODO +In this simplified form, it can be used to scale the base layer for both direct and indirect lights: +```glsl +specular_direct *= albedoScaling; +diffuse_direct *= albedoScaling; +environmentIrradiance_indirect *= albedoScaling +specularEnvironmentReflectance_indirect *= albedoScaling +``` ## Reference ### Theory, Documentation and Implementations +[Filament Material models - Cloth model](https://google.github.io/filament/Materials.md.html#materialmodels/clothmodel) + +[cmgen tool from Filament](https://github.com/google/filament) + [NP13 David Neubelt, Matt Pettineo – “Crafting a Next-Gen Material Pipeline for The Order: 1886”, SIGGRAPH 2013](https://blog.selfshadow.com/publications/s2013-shading-course/rad/s2013_pbs_rad_notes.pdf) + [EK17 Alejandro Conty Estevez, Christopher Kulla – “Production Friendly Microfacet Sheen BRDF”, SIGGRAPH 2017](https://blog.selfshadow.com/publications/s2017-shading-course/imageworks/s2017_pbs_imageworks_sheen.pdf) + [AS07 Michael Ashikhmin, Simon Premoze – “Distribution-based BRDFs”, 2007](http://www.cs.utah.edu/~premoze/dbrdf/dBRDF.pdf) -[cloth-shading](https://knarkowicz.wordpress.com/2018/01/04/cloth-shading/) \ No newline at end of file + +[cloth-shading](https://knarkowicz.wordpress.com/2018/01/04/cloth-shading/) + +[Enterprise PBR Shading Model - Sheen](https://dassaultsystemes-technology.github.io/EnterprisePBRShadingModel/spec-2021x.md.html#components/sheen) \ No newline at end of file diff --git a/extensions/2.0/Khronos/KHR_materials_sheen/figures/cushion.png b/extensions/2.0/Khronos/KHR_materials_sheen/figures/cushion.png new file mode 100644 index 0000000000000000000000000000000000000000..1d59b473fbf0fc788e2409d88ae2d2c4db38fe5b GIT binary patch literal 128975 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 IM6N<$f-yN{AOHXW literal 0 HcmV?d00001 diff --git a/extensions/2.0/Khronos/KHR_materials_sheen/schema/glTF.KHR_materials_sheen.schema.json b/extensions/2.0/Khronos/KHR_materials_sheen/schema/glTF.KHR_materials_sheen.schema.json index 73ae33b081..91c2908bdd 100644 --- a/extensions/2.0/Khronos/KHR_materials_sheen/schema/glTF.KHR_materials_sheen.schema.json +++ b/extensions/2.0/Khronos/KHR_materials_sheen/schema/glTF.KHR_materials_sheen.schema.json @@ -22,13 +22,21 @@ }, "minItems": 3, "maxItems": 3, - "description": "Color of the sheen layer.", + "description": "Color of the sheen layer (in linear space).", "default": [1, 1, 1] }, "colorIntensityTexture": { "allOf": [ { "$ref": "textureInfo.schema.json" } ], "description": "The sheen layer texture.", - "gltf_detailedDescription": "The sheen layer texture. Stored in channel RGB the sheen color in sRGB transfer function and in A the intensity linear factor." + "gltf_detailedDescription": "The sheen layer texture. Stored in channel RGB the sheen color in sRGB transfer function and in A the linear factor." + }, + "roughnessFactor": { + "type": "number", + "description": "The sheen layer roughness.", + "default": 0.0, + "minimum": 0.0, + "maximum": 1.0, + "gltf_detailedDescription": "The sheen layer roughness of the material." }, "extensions": { }, "extras": { } From 6d9e1b13ce5198ab949990182785496bc24678df Mon Sep 17 00:00:00 2001 From: sebavan Date: Tue, 16 Jun 2020 00:27:52 +0200 Subject: [PATCH 05/14] Update PR From Feedback --- .../2.0/Khronos/KHR_materials_sheen/README.md | 21 +++++++++---------- .../glTF.KHR_materials_sheen.schema.json | 16 ++++---------- 2 files changed, 14 insertions(+), 23 deletions(-) diff --git a/extensions/2.0/Khronos/KHR_materials_sheen/README.md b/extensions/2.0/Khronos/KHR_materials_sheen/README.md index 69e7d64d0c..39677a1000 100644 --- a/extensions/2.0/Khronos/KHR_materials_sheen/README.md +++ b/extensions/2.0/Khronos/KHR_materials_sheen/README.md @@ -36,7 +36,7 @@ For example, the following defines a material like velvet. "name": "velvet", "extensions": { "KHR_materials_sheen": { - "intensityFactor": 0.9 + "sheenColorFactor": [0.9, 0.9, 0.9] } } } @@ -50,24 +50,23 @@ All implementations should use the same calculations for the BRDF inputs. Implem | | Type | Description | Required | |----------------------------------|---------------------------------------------------------------------------------|----------------------------------------|--------------------------------| -|**intensityFactor** | `number` | The sheen intensity. | No, default: `1.0` | -|**colorFactor** | `array` | The sheen color in linear space | No, default: `[1.0, 1.0, 1.0]` | -|**colorIntensityTexture** | [`textureInfo`](/specification/2.0/README.md#reference-textureInfo) | The sheen color (RGB) and intensity (Alpha) texture.
The sheen color is in sRGB transfer function | No | -|**roughnessFactor** | `number` | The sheen roughness. | No, default: `0.0` | +|**sheenColorFactor** | `array` | The sheen color in linear space | No, default: `[0.0, 0.0, 0.0]` | +|**sheenTexture** | [`textureInfo`](/specification/2.0/README.md#reference-textureInfo) | The sheen color (RGB) and roughness (Alpha) texture.
The sheen color is in sRGB transfer function | No | +|**sheenRoughnessFactor** | `number` | The sheen roughness. | No, default: `0.0` | The sheen roughness is independent from the material roughness to allow materials like this one, with high material roughness and small sheen roughness: ![Cushion](./figures/cushion.png) If a texture is defined: -* The sheen intensity is computed with : `sheenIntensity = intensityFactor * sample(colorIntensityTexture).a`. -* The sheen color is computed with : `sheenColor = colorFactor * sampleLinear(colorIntensityTexture).rgb`. +* The sheen color is computed with : `sheenColor = sheenColorFactor * sampleLinear(sheenTexture).rgb`. +* The sheen roughness is computed with : `sheenRoughness = sheenRoughnessFactor * sample(sheenTexture).a`. -Otherwise, `sheenIntensity = intensityFactor` and `sheenColor = colorFactor` +Otherwise, `sheenColor = sheenColorFactor` and `sheenRoughness = sheenRoughnessFactor` The sheen formula `f_sheen` is a new BRDF, different from the specular and clear coat BRDF: ```glsl -sheenTerm = sheenColor * sheenIntensity * sheenDistribution * sheenVisibility; +sheenTerm = sheenColor * sheenDistribution * sheenVisibility; ``` As you notice, there is no fresnel term for the sheen layer. @@ -120,7 +119,7 @@ The sheen layer can be combined with the base layer with an albedo-scaling techn ```glsl float max3(vec3 v) { return max(max(v.x, v.y), v.z); } -albedoScaling = min(1.0 - sheenIntensity * max3(sheenColor) * E(VdotN), 1.0 - sheenIntensity * max3(sheenColor) * E(LdotN)) +albedoScaling = min(1.0 - max3(sheenColor) * E(VdotN), 1.0 - max3(sheenColor) * E(LdotN)) f = f_sheen + f_base * albedoScaling ``` @@ -129,7 +128,7 @@ The values `E(x)` can be looked up in a table which can be found in section 6.2. If you want to trade a bit of accuracy for more performance, you can use the `VdotN` term only and thus avoid doing multiple lookups for `LdotN`. The albedo scaling term is simplified to: ```glsl -albedoScaling = 1.0 - sheenIntensity * max3(sheenColor) * E(VdotN) +albedoScaling = 1.0 - max3(sheenColor) * E(VdotN) ``` In this simplified form, it can be used to scale the base layer for both direct and indirect lights: diff --git a/extensions/2.0/Khronos/KHR_materials_sheen/schema/glTF.KHR_materials_sheen.schema.json b/extensions/2.0/Khronos/KHR_materials_sheen/schema/glTF.KHR_materials_sheen.schema.json index 91c2908bdd..6ee6fa7c94 100644 --- a/extensions/2.0/Khronos/KHR_materials_sheen/schema/glTF.KHR_materials_sheen.schema.json +++ b/extensions/2.0/Khronos/KHR_materials_sheen/schema/glTF.KHR_materials_sheen.schema.json @@ -5,15 +5,7 @@ "description": "glTF extension that defines the sheen material model.", "allOf": [ { "$ref": "glTFProperty.schema.json" } ], "properties": { - "intensityFactor": { - "type": "number", - "description": "The sheen layer intensity.", - "default": 0.0, - "minimum": 0.0, - "maximum": 1.0, - "gltf_detailedDescription": "The sheen layer intensity of the material. A value of 0.0 means the material has no sheen layer enabled." - }, - "colorFactor": { + "sheenColorFactor": { "type": "array", "items": { "type": "number", @@ -23,14 +15,14 @@ "minItems": 3, "maxItems": 3, "description": "Color of the sheen layer (in linear space).", - "default": [1, 1, 1] + "default": [0, 0, 0] }, - "colorIntensityTexture": { + "sheenTexture": { "allOf": [ { "$ref": "textureInfo.schema.json" } ], "description": "The sheen layer texture.", "gltf_detailedDescription": "The sheen layer texture. Stored in channel RGB the sheen color in sRGB transfer function and in A the linear factor." }, - "roughnessFactor": { + "sheenRoughnessFactor": { "type": "number", "description": "The sheen layer roughness.", "default": 0.0, From 7704dbf6317bab47495898f4643513446f91356f Mon Sep 17 00:00:00 2001 From: sebavan Date: Sat, 20 Jun 2020 01:07:15 +0200 Subject: [PATCH 06/14] PR Comments --- .../2.0/Khronos/KHR_materials_sheen/README.md | 84 +++++++++++++++++-- .../glTF.KHR_materials_sheen.schema.json | 4 +- 2 files changed, 78 insertions(+), 10 deletions(-) diff --git a/extensions/2.0/Khronos/KHR_materials_sheen/README.md b/extensions/2.0/Khronos/KHR_materials_sheen/README.md index 39677a1000..c6a10373fd 100644 --- a/extensions/2.0/Khronos/KHR_materials_sheen/README.md +++ b/extensions/2.0/Khronos/KHR_materials_sheen/README.md @@ -1,12 +1,20 @@ # KHR\_materials\_sheen -## Khronos 3D Formats Working Group - -* TODO - -## Acknowledgments - -* TODO +## Contributors + +* Sebastien Vandenberghe, Microsoft, [@sebavan](https://github.com/sebavan) +* Alexis Vaginay, Microsoft, [@Popov72](https://github.com/Popov72) +* Tobias Häußler, Dassault System, [@proog128](https://github.com/proog128) +* Ed Mackey, Analytical Graphics, Inc. +* Romain Guy, Google, [@romainguy](https://github.com/romainguy) +* Mike Bond, Adobe, [@MiiBond](https://github.com/MiiBond) +* Don McCurdy, Google, [@donmccurdy](https://twitter.com/donrmccurdy) +* Gary Hsu, Microsoft, [@bghgary](https://twitter.com/bghgary) +* Eliphas NUIT, Dassault System, [@EliphasNUIT](https://github.com/EliphasNUIT) +* Aidin Abedi, Epic Games, [@aidinabedi](https://github.com/aidinabedi) + +Copyright (C) 2018-2020 The Khronos Group Inc. All Rights Reserved. glTF is a trademark of The Khronos Group Inc. +See [Appendix](#appendix-full-khronos-copyright-statement) for full Khronos Copyright Statement. ## Status @@ -155,4 +163,64 @@ specularEnvironmentReflectance_indirect *= albedoScaling [cloth-shading](https://knarkowicz.wordpress.com/2018/01/04/cloth-shading/) -[Enterprise PBR Shading Model - Sheen](https://dassaultsystemes-technology.github.io/EnterprisePBRShadingModel/spec-2021x.md.html#components/sheen) \ No newline at end of file +[Enterprise PBR Shading Model - Sheen](https://dassaultsystemes-technology.github.io/EnterprisePBRShadingModel/spec-2021x.md.html#components/sheen) + +## Appendix: Full Khronos Copyright Statement + +Copyright 2018-2020 The Khronos Group Inc. + +Some parts of this Specification are purely informative and do not define requirements +necessary for compliance and so are outside the Scope of this Specification. These +parts of the Specification are marked as being non-normative, or identified as +**Implementation Notes**. + +Where this Specification includes normative references to external documents, only the +specifically identified sections and functionality of those external documents are in +Scope. Requirements defined by external documents not created by Khronos may contain +contributions from non-members of Khronos not covered by the Khronos Intellectual +Property Rights Policy. + +In particular, the referenced paragraphs of ISO 16684-1:2019 are normative and so are +INCLUDED in the Scope of this Specification and may contain contributions from non-members +of Khronos that are not covered by the Khronos Intellectual Property Rights Policy. +The links to https://github.com/adobe/xmp-docs are purely informative and so are EXCLUDED +from the Scope of this Specification, but are provided for convenience. +The references to ISO 16684-1:2019 shall remain normative if there are differences to +information provided at any informative links. + +This specification is protected by copyright laws and contains material proprietary +to Khronos. Except as described by these terms, it or any components +may not be reproduced, republished, distributed, transmitted, displayed, broadcast +or otherwise exploited in any manner without the express prior written permission +of Khronos. + +This specification has been created under the Khronos Intellectual Property Rights +Policy, which is Attachment A of the Khronos Group Membership Agreement available at +www.khronos.org/files/member_agreement.pdf. Khronos grants a conditional +copyright license to use and reproduce the unmodified specification for any purpose, +without fee or royalty, EXCEPT no licenses to any patent, trademark or other +intellectual property rights are granted under these terms. Parties desiring to +implement the specification and make use of Khronos trademarks in relation to that +implementation, and receive reciprocal patent license protection under the Khronos +IP Policy must become Adopters and confirm the implementation as conformant under +the process defined by Khronos for this specification; +see https://www.khronos.org/adopters. + +Khronos makes no, and expressly disclaims any, representations or warranties, +express or implied, regarding this specification, including, without limitation: +merchantability, fitness for a particular purpose, non-infringement of any +intellectual property, correctness, accuracy, completeness, timeliness, and +reliability. Under no circumstances will Khronos, or any of its Promoters, +Contributors or Members, or their respective partners, officers, directors, +employees, agents or representatives be liable for any damages, whether direct, +indirect, special or consequential damages for lost revenues, lost profits, or +otherwise, arising from or in connection with these materials. + +Khronos® and Vulkan® are registered trademarks, and ANARI™, WebGL™, glTF™, NNEF™, OpenVX™, +SPIR™, SPIR-V™, SYCL™, OpenVG™ and 3D Commerce™ are trademarks of The Khronos Group Inc. +OpenXR™ is a trademark owned by The Khronos Group Inc. and is registered as a trademark in +China, the European Union, Japan and the United Kingdom. OpenCL™ is a trademark of Apple Inc. +and OpenGL® is a registered trademark and the OpenGL ES™ and OpenGL SC™ logos are trademarks +of Hewlett Packard Enterprise used under license by Khronos. ASTC is a trademark of +ARM Holdings PLC. All other product names, trademarks, and/or company names are used solely +for identification and belong to their respective owners. \ No newline at end of file diff --git a/extensions/2.0/Khronos/KHR_materials_sheen/schema/glTF.KHR_materials_sheen.schema.json b/extensions/2.0/Khronos/KHR_materials_sheen/schema/glTF.KHR_materials_sheen.schema.json index 6ee6fa7c94..c811cbc128 100644 --- a/extensions/2.0/Khronos/KHR_materials_sheen/schema/glTF.KHR_materials_sheen.schema.json +++ b/extensions/2.0/Khronos/KHR_materials_sheen/schema/glTF.KHR_materials_sheen.schema.json @@ -19,8 +19,8 @@ }, "sheenTexture": { "allOf": [ { "$ref": "textureInfo.schema.json" } ], - "description": "The sheen layer texture.", - "gltf_detailedDescription": "The sheen layer texture. Stored in channel RGB the sheen color in sRGB transfer function and in A the linear factor." + "description": "The sheen color (RGB) and roughness (Alpha) texture.", + "gltf_detailedDescription": "The sheen color (RGB) and roughness (Alpha) texture. Stored in channel RGB the sheen color in sRGB transfer function and in A the linear factor." }, "sheenRoughnessFactor": { "type": "number", From 971ff4d74c4f34640b6c19c8bba07d0e3b1ccff8 Mon Sep 17 00:00:00 2001 From: sebavan Date: Wed, 1 Jul 2020 20:52:37 +0200 Subject: [PATCH 07/14] Review Comments --- .../2.0/Khronos/KHR_materials_sheen/README.md | 16 +++++++--------- 1 file changed, 7 insertions(+), 9 deletions(-) diff --git a/extensions/2.0/Khronos/KHR_materials_sheen/README.md b/extensions/2.0/Khronos/KHR_materials_sheen/README.md index c6a10373fd..e7a3459216 100644 --- a/extensions/2.0/Khronos/KHR_materials_sheen/README.md +++ b/extensions/2.0/Khronos/KHR_materials_sheen/README.md @@ -54,7 +54,7 @@ For example, the following defines a material like velvet. ### Sheen -All implementations should use the same calculations for the BRDF inputs. Implementations of the BRDF itself can vary based on device performance and resource constraints. See [appendix](/specification/2.0/README.md#appendix-b-brdf-implementation) for more details on the BRDF calculations. +The following parameters are contributed by the `KHR_materials_sheen` extension: | | Type | Description | Required | |----------------------------------|---------------------------------------------------------------------------------|----------------------------------------|--------------------------------| @@ -62,6 +62,12 @@ All implementations should use the same calculations for the BRDF inputs. Implem |**sheenTexture** | [`textureInfo`](/specification/2.0/README.md#reference-textureInfo) | The sheen color (RGB) and roughness (Alpha) texture.
The sheen color is in sRGB transfer function | No | |**sheenRoughnessFactor** | `number` | The sheen roughness. | No, default: `0.0` | +## Implementation Notes + +*This section is non-normative.* + +All implementations should use the same calculations for the BRDF inputs. Implementations of the BRDF itself can vary based on device performance and resource constraints. See [Appendix B](/specification/2.0/README.md#appendix-b-brdf-implementation) for more details on the BRDF calculations. + The sheen roughness is independent from the material roughness to allow materials like this one, with high material roughness and small sheen roughness: ![Cushion](./figures/cushion.png) @@ -180,14 +186,6 @@ Scope. Requirements defined by external documents not created by Khronos may con contributions from non-members of Khronos not covered by the Khronos Intellectual Property Rights Policy. -In particular, the referenced paragraphs of ISO 16684-1:2019 are normative and so are -INCLUDED in the Scope of this Specification and may contain contributions from non-members -of Khronos that are not covered by the Khronos Intellectual Property Rights Policy. -The links to https://github.com/adobe/xmp-docs are purely informative and so are EXCLUDED -from the Scope of this Specification, but are provided for convenience. -The references to ISO 16684-1:2019 shall remain normative if there are differences to -information provided at any informative links. - This specification is protected by copyright laws and contains material proprietary to Khronos. Except as described by these terms, it or any components may not be reproduced, republished, distributed, transmitted, displayed, broadcast From 0c3230109099f18f309d26ca0c373a99aca966ee Mon Sep 17 00:00:00 2001 From: sebavan Date: Wed, 12 Aug 2020 00:57:03 +0200 Subject: [PATCH 08/14] Apply @proog128 patch --- .../2.0/Khronos/KHR_materials_sheen/README.md | 70 +++++++++++-------- 1 file changed, 41 insertions(+), 29 deletions(-) diff --git a/extensions/2.0/Khronos/KHR_materials_sheen/README.md b/extensions/2.0/Khronos/KHR_materials_sheen/README.md index e7a3459216..846cb110d4 100644 --- a/extensions/2.0/Khronos/KHR_materials_sheen/README.md +++ b/extensions/2.0/Khronos/KHR_materials_sheen/README.md @@ -62,34 +62,39 @@ The following parameters are contributed by the `KHR_materials_sheen` extension: |**sheenTexture** | [`textureInfo`](/specification/2.0/README.md#reference-textureInfo) | The sheen color (RGB) and roughness (Alpha) texture.
The sheen color is in sRGB transfer function | No | |**sheenRoughnessFactor** | `number` | The sheen roughness. | No, default: `0.0` | -## Implementation Notes +The sheen BRDF is layered on top of the glTF 2.0 Metallic-Roughness material. If clearcoat (`KHR_materials_clearcoat`) is active at the same time, clearcoat is layered on top of sheen. The `sheenColorFactor` determines the view-independent intensity of the sheen BRDF. If `sheenColorFactor` is zero, the whole sheen layer is disabled. Implementations of the BRDF itself can vary based on device performance and resource constraints. -*This section is non-normative.* +If a texture is defined: + +* The sheen color is computed with : `sheenColor = sheenColorFactor * sampleLinear(sheenTexture).rgb`. +* The sheen roughness is computed with : `sheenRoughness = sheenRoughnessFactor * sample(sheenTexture).a`. + +Otherwise, `sheenColor = sheenColorFactor` and `sheenRoughness = sheenRoughnessFactor` -All implementations should use the same calculations for the BRDF inputs. Implementations of the BRDF itself can vary based on device performance and resource constraints. See [Appendix B](/specification/2.0/README.md#appendix-b-brdf-implementation) for more details on the BRDF calculations. +The sheen BRDF simulates the back-scattering of velvet-like materials. The specular response from velvet-like materials can be modeled as the reflection from specular, cylindrical micro-fibers mainly oriented in the normal direction ([Westin et al. (1992)](#Westin1992)). This results in a forest of narrow cylinders extending from a fabric base. The sheen roughness determines how much the micro-fibers diverge from this direction. A small roughness means that the random perturbation around the normal direction is small, resulting in a sharp specular response around grazing angles. A large roughness on the other hand results in a smooth specular response around grazing angles. To model the specular response from micro-fibers, we use the exponentiated sinusoidal distribution term introduced by [Conty and Kulla (2017)](#ContyKulla2017) which is based on microfacet theory. The sheen roughness is independent from the material roughness to allow materials like this one, with high material roughness and small sheen roughness: ![Cushion](./figures/cushion.png) -If a texture is defined: -* The sheen color is computed with : `sheenColor = sheenColorFactor * sampleLinear(sheenTexture).rgb`. -* The sheen roughness is computed with : `sheenRoughness = sheenRoughnessFactor * sample(sheenTexture).a`. +Not all incoming light is reflected at a micro-fiber. Some of the light may hit the base layer, either directly or as a result of multiple bounces on the micro-geometry. Light that hits the base layer behaves as specified in the glTF 2.0 Metallic-Roughness material. -Otherwise, `sheenColor = sheenColorFactor` and `sheenRoughness = sheenRoughnessFactor` +## Implementation Notes -The sheen formula `f_sheen` is a new BRDF, different from the specular and clear coat BRDF: -```glsl -sheenTerm = sheenColor * sheenDistribution * sheenVisibility; -``` +*This section is non-normative.* -As you notice, there is no fresnel term for the sheen layer. +All implementations should use the same calculations for the BRDF inputs. See [Appendix B](/specification/2.0/README.md#appendix-b-brdf-implementation) for more details on the BRDF calculations. + +The sheen formula `f_sheen` follows the common microfacet form: + +*f**sheen* = *sheenColor* * *sheenFresnel* * *sheenDistribution* * *sheenVisibility* = *sheenColor* * *F**S* * *G**S* * *D**S* / (4 * abs(dot(*N*, *L*)) * abs(dot(*N*, *V*))) ### Sheen distribution -The sheen distribution follows the "Charlie" sheen definition from ImageWorks (Estevez and Kulla): +The sheen distribution follows the "Charlie" sheen definition from ImageWorks [Conty and Kulla (2017)](#ContyKulla2017): + ```glsl -alphaG = sheenRoughness * sheenRoughness +alphaG = sheenRoughness invR = 1 / alphaG cos2h = NdotH * NdotH sin2h = 1 - cos2h @@ -99,6 +104,7 @@ sheenDistribution = (2 + invR) * pow(sin2h, invR * 0.5) / (2 * PI); ### Sheen visibility The "Charlie" sheen visibility is also defined in the same document: + ```glsl float l(float x, float alphaG) { @@ -119,53 +125,59 @@ float lambdaSheen(float cosTheta, float alphaG) sheenVisibility = 1.0 / ((1.0 + lambdaSheen(NdotV, alphaG) + lambdaSheen(NdotL, alphaG)) * (4.0 * NdotV * NdotL)); ``` -However, depending on device performance and resource constraints, one can use a simpler visibility term, like the one defined by Ashikhmin (but that will make the BRDF not energy conserving when using the albedo-scaling technique described below): +However, depending on device performance and resource constraints, one can use a simpler visibility term, like the one defined by [Ashikhmin and Premoze (2007)](#AshikhminPremoze2007) (but that will make the BRDF not energy conserving when using the albedo-scaling technique described below): ```glsl sheenVisibility = 1 / (4 * (NdotL + NdotV - NdotL * NdotV)) ``` +### Sheen Fresnel + +The Fresnel term may be omitted, i.e., *F* = 1. + ### Sheen layering #### Albedo-scaling technique -The sheen layer can be combined with the base layer with an albedo-scaling technique described in Estevez and Kulla: +The sheen layer can be combined with the base layer with an albedo-scaling technique described in [Conty and Kulla (2017)](#ContyKulla2017). The base layer *f**diffuse* + *f**specular* from [Appendix B](/specification/2.0/README.md#appendix-b-brdf-implementation) is scaled with *sheenAlbedoScaling* to avoid energy gain. + +*f* = *f**sheen* + (*f**diffuse* + *f**specular*) * *sheenAlbedoScaling* ```glsl float max3(vec3 v) { return max(max(v.x, v.y), v.z); } -albedoScaling = min(1.0 - max3(sheenColor) * E(VdotN), 1.0 - max3(sheenColor) * E(LdotN)) - -f = f_sheen + f_base * albedoScaling +sheenAlbedoScaling = min(1.0 - max3(sheenColor) * E(VdotN), 1.0 - max3(sheenColor) * E(LdotN)) ``` The values `E(x)` can be looked up in a table which can be found in section 6.2.3 of [Enterprise PBR Shading Model](#theory-documentation-and-implementations) if you use the "Charlie" visibility term. If you use Ashikhmin instead, you can get the lookup table by using the [cmgen tool from Filament](#theory-documentation-and-implementations), with the `--ibl-dfg` and `--ibl-dfg-cloth` flags: the table is in the blue channel of the generated picture. The lookup must be done with `x = VdotN` and `y = sheenRoughness`. If you want to trade a bit of accuracy for more performance, you can use the `VdotN` term only and thus avoid doing multiple lookups for `LdotN`. The albedo scaling term is simplified to: ```glsl -albedoScaling = 1.0 - max3(sheenColor) * E(VdotN) +sheenAlbedoScaling = 1.0 - max3(sheenColor) * E(VdotN) ``` In this simplified form, it can be used to scale the base layer for both direct and indirect lights: ```glsl -specular_direct *= albedoScaling; -diffuse_direct *= albedoScaling; -environmentIrradiance_indirect *= albedoScaling -specularEnvironmentReflectance_indirect *= albedoScaling +specular_direct *= sheenAlbedoScaling; +diffuse_direct *= sheenAlbedoScaling; +environmentIrradiance_indirect *= sheenAlbedoScaling +specularEnvironmentReflectance_indirect *= sheenAlbedoScaling ``` ## Reference ### Theory, Documentation and Implementations -[Filament Material models - Cloth model](https://google.github.io/filament/Materials.md.html#materialmodels/clothmodel) +[Stephen H. Westin, James R. Arvo, Kenneth E. Torrance – “Predicting Reflectance Functions from Complex Surfaces”, SIGGRAPH 1992](http://www.graphics.cornell.edu/~westin/pubs/siggraph-rebuild.pdf)
-[cmgen tool from Filament](https://github.com/google/filament) +[Alejandro Conty Estevez, Christopher Kulla – “Production Friendly Microfacet Sheen BRDF”, SIGGRAPH 2017](https://blog.selfshadow.com/publications/s2017-shading-course/imageworks/s2017_pbs_imageworks_sheen.pdf) -[NP13 David Neubelt, Matt Pettineo – “Crafting a Next-Gen Material Pipeline for The Order: 1886”, SIGGRAPH 2013](https://blog.selfshadow.com/publications/s2013-shading-course/rad/s2013_pbs_rad_notes.pdf) +[Michael Ashikhmin, Simon Premoze – “Distribution-based BRDFs”, 2007](http://www.cs.utah.edu/~premoze/dbrdf/dBRDF.pdf) -[EK17 Alejandro Conty Estevez, Christopher Kulla – “Production Friendly Microfacet Sheen BRDF”, SIGGRAPH 2017](https://blog.selfshadow.com/publications/s2017-shading-course/imageworks/s2017_pbs_imageworks_sheen.pdf) +[Filament Material models - Cloth model](https://google.github.io/filament/Materials.md.html#materialmodels/clothmodel) + +[cmgen tool from Filament](https://github.com/google/filament) -[AS07 Michael Ashikhmin, Simon Premoze – “Distribution-based BRDFs”, 2007](http://www.cs.utah.edu/~premoze/dbrdf/dBRDF.pdf) +[David Neubelt, Matt Pettineo – “Crafting a Next-Gen Material Pipeline for The Order: 1886”, SIGGRAPH 2013](https://blog.selfshadow.com/publications/s2013-shading-course/rad/s2013_pbs_rad_notes.pdf) [cloth-shading](https://knarkowicz.wordpress.com/2018/01/04/cloth-shading/) From 7d817f8b1c02c61fb17521a629ad9fc6451a6cdb Mon Sep 17 00:00:00 2001 From: sebavan Date: Mon, 24 Aug 2020 15:20:15 +0200 Subject: [PATCH 09/14] sheenRoughness perceptual to linear --- extensions/2.0/Khronos/KHR_materials_sheen/README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/extensions/2.0/Khronos/KHR_materials_sheen/README.md b/extensions/2.0/Khronos/KHR_materials_sheen/README.md index 846cb110d4..e5d857262a 100644 --- a/extensions/2.0/Khronos/KHR_materials_sheen/README.md +++ b/extensions/2.0/Khronos/KHR_materials_sheen/README.md @@ -94,7 +94,7 @@ The sheen formula `f_sheen` follows the common microfacet form: The sheen distribution follows the "Charlie" sheen definition from ImageWorks [Conty and Kulla (2017)](#ContyKulla2017): ```glsl -alphaG = sheenRoughness +alphaG = sheenRoughness * sheenRoughness invR = 1 / alphaG cos2h = NdotH * NdotH sin2h = 1 - cos2h From 11adaf03ec0911b1f4b5e29a4284b53e8205524e Mon Sep 17 00:00:00 2001 From: sebavan Date: Mon, 31 Aug 2020 14:21:53 +0200 Subject: [PATCH 10/14] Patch Sheen Roughness --- extensions/2.0/Khronos/KHR_materials_sheen/README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/extensions/2.0/Khronos/KHR_materials_sheen/README.md b/extensions/2.0/Khronos/KHR_materials_sheen/README.md index e5d857262a..c19292ce02 100644 --- a/extensions/2.0/Khronos/KHR_materials_sheen/README.md +++ b/extensions/2.0/Khronos/KHR_materials_sheen/README.md @@ -71,7 +71,7 @@ If a texture is defined: Otherwise, `sheenColor = sheenColorFactor` and `sheenRoughness = sheenRoughnessFactor` -The sheen BRDF simulates the back-scattering of velvet-like materials. The specular response from velvet-like materials can be modeled as the reflection from specular, cylindrical micro-fibers mainly oriented in the normal direction ([Westin et al. (1992)](#Westin1992)). This results in a forest of narrow cylinders extending from a fabric base. The sheen roughness determines how much the micro-fibers diverge from this direction. A small roughness means that the random perturbation around the normal direction is small, resulting in a sharp specular response around grazing angles. A large roughness on the other hand results in a smooth specular response around grazing angles. To model the specular response from micro-fibers, we use the exponentiated sinusoidal distribution term introduced by [Conty and Kulla (2017)](#ContyKulla2017) which is based on microfacet theory. +The sheen BRDF simulates the back-scattering of velvet-like materials. The specular response from velvet-like materials can be modeled as the reflection from specular, cylindrical micro-fibers mainly oriented in the normal direction ([Westin et al. (1992)](#Westin1992)). This results in a forest of narrow cylinders extending from a fabric base. The sheen roughness determines how much the micro-fibers diverge from this direction. A small roughness means that the random perturbation around the normal direction is small, resulting in a sharp specular response around grazing angles. A large roughness on the other hand results in a smooth specular response around grazing angles. To model the specular response from micro-fibers, we use the exponentiated sinusoidal distribution term introduced by [Conty and Kulla (2017)](#ContyKulla2017) which is based on microfacet theory. We use the mapping `r = sheenRoughness^2` which results in more perceptually linear changes in the roughness. The sheen roughness is independent from the material roughness to allow materials like this one, with high material roughness and small sheen roughness: From b24476321bf71e3c8fded3c5f82112ab512877c3 Mon Sep 17 00:00:00 2001 From: sebavan Date: Sat, 19 Sep 2020 01:56:27 +0200 Subject: [PATCH 11/14] Update spec --- extensions/2.0/Khronos/KHR_materials_sheen/README.md | 7 ++++--- .../schema/glTF.KHR_materials_sheen.schema.json | 11 ++++++++--- 2 files changed, 12 insertions(+), 6 deletions(-) diff --git a/extensions/2.0/Khronos/KHR_materials_sheen/README.md b/extensions/2.0/Khronos/KHR_materials_sheen/README.md index c19292ce02..a6fdbd1a57 100644 --- a/extensions/2.0/Khronos/KHR_materials_sheen/README.md +++ b/extensions/2.0/Khronos/KHR_materials_sheen/README.md @@ -59,15 +59,16 @@ The following parameters are contributed by the `KHR_materials_sheen` extension: | | Type | Description | Required | |----------------------------------|---------------------------------------------------------------------------------|----------------------------------------|--------------------------------| |**sheenColorFactor** | `array` | The sheen color in linear space | No, default: `[0.0, 0.0, 0.0]` | -|**sheenTexture** | [`textureInfo`](/specification/2.0/README.md#reference-textureInfo) | The sheen color (RGB) and roughness (Alpha) texture.
The sheen color is in sRGB transfer function | No | +|**sheenColorTexture** | [`textureInfo`](/specification/2.0/README.md#reference-textureInfo) | The sheen color (RGB).
The sheen color is in sRGB transfer function | No | |**sheenRoughnessFactor** | `number` | The sheen roughness. | No, default: `0.0` | +|**sheenRoughnessTexture** | [`textureInfo`](/specification/2.0/README.md#reference-textureInfo) | The sheen roughness (Alpha) texture. | No | The sheen BRDF is layered on top of the glTF 2.0 Metallic-Roughness material. If clearcoat (`KHR_materials_clearcoat`) is active at the same time, clearcoat is layered on top of sheen. The `sheenColorFactor` determines the view-independent intensity of the sheen BRDF. If `sheenColorFactor` is zero, the whole sheen layer is disabled. Implementations of the BRDF itself can vary based on device performance and resource constraints. If a texture is defined: -* The sheen color is computed with : `sheenColor = sheenColorFactor * sampleLinear(sheenTexture).rgb`. -* The sheen roughness is computed with : `sheenRoughness = sheenRoughnessFactor * sample(sheenTexture).a`. +* The sheen color is computed with : `sheenColor = sheenColorFactor * sampleLinear(sheenColorTexture).rgb`. +* The sheen roughness is computed with : `sheenRoughness = sheenRoughnessFactor * sample(sheenRoughnessTexture).a`. Otherwise, `sheenColor = sheenColorFactor` and `sheenRoughness = sheenRoughnessFactor` diff --git a/extensions/2.0/Khronos/KHR_materials_sheen/schema/glTF.KHR_materials_sheen.schema.json b/extensions/2.0/Khronos/KHR_materials_sheen/schema/glTF.KHR_materials_sheen.schema.json index c811cbc128..643d10cc23 100644 --- a/extensions/2.0/Khronos/KHR_materials_sheen/schema/glTF.KHR_materials_sheen.schema.json +++ b/extensions/2.0/Khronos/KHR_materials_sheen/schema/glTF.KHR_materials_sheen.schema.json @@ -17,10 +17,10 @@ "description": "Color of the sheen layer (in linear space).", "default": [0, 0, 0] }, - "sheenTexture": { + "sheenColorTexture": { "allOf": [ { "$ref": "textureInfo.schema.json" } ], - "description": "The sheen color (RGB) and roughness (Alpha) texture.", - "gltf_detailedDescription": "The sheen color (RGB) and roughness (Alpha) texture. Stored in channel RGB the sheen color in sRGB transfer function and in A the linear factor." + "description": "The sheen color (RGB) texture.", + "gltf_detailedDescription": "The sheen color (RGB) texture. Stored in channel RGB, the sheen color is in sRGB transfer function." }, "sheenRoughnessFactor": { "type": "number", @@ -30,6 +30,11 @@ "maximum": 1.0, "gltf_detailedDescription": "The sheen layer roughness of the material." }, + "sheenRoughnessTexture": { + "allOf": [ { "$ref": "textureInfo.schema.json" } ], + "description": "The sheen roughness (Alpha) texture.", + "gltf_detailedDescription": "The sheen roughness (Alpha) texture. Stored in alpha channel, the roughness value is in linear space." + }, "extensions": { }, "extras": { } } From 1cbcfd35f2e515d1bde25c4af9f7b895159e8bf9 Mon Sep 17 00:00:00 2001 From: Gary Hsu Date: Mon, 21 Sep 2020 13:44:06 -0700 Subject: [PATCH 12/14] Update extensions/2.0/Khronos/KHR_materials_sheen/README.md --- extensions/2.0/Khronos/KHR_materials_sheen/README.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/extensions/2.0/Khronos/KHR_materials_sheen/README.md b/extensions/2.0/Khronos/KHR_materials_sheen/README.md index a6fdbd1a57..a227ec2fde 100644 --- a/extensions/2.0/Khronos/KHR_materials_sheen/README.md +++ b/extensions/2.0/Khronos/KHR_materials_sheen/README.md @@ -18,7 +18,7 @@ See [Appendix](#appendix-full-khronos-copyright-statement) for full Khronos Copy ## Status -Experimental +Draft ## Dependencies @@ -234,4 +234,4 @@ China, the European Union, Japan and the United Kingdom. OpenCL™ is a trademar and OpenGL® is a registered trademark and the OpenGL ES™ and OpenGL SC™ logos are trademarks of Hewlett Packard Enterprise used under license by Khronos. ASTC is a trademark of ARM Holdings PLC. All other product names, trademarks, and/or company names are used solely -for identification and belong to their respective owners. \ No newline at end of file +for identification and belong to their respective owners. From 1d752f3a9eb42f60817b2bdeb7cf7433be65a7a8 Mon Sep 17 00:00:00 2001 From: sebavan Date: Mon, 21 Sep 2020 23:34:20 +0200 Subject: [PATCH 13/14] PR comment --- extensions/2.0/Khronos/KHR_materials_sheen/README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/extensions/2.0/Khronos/KHR_materials_sheen/README.md b/extensions/2.0/Khronos/KHR_materials_sheen/README.md index a6fdbd1a57..a0f7c54066 100644 --- a/extensions/2.0/Khronos/KHR_materials_sheen/README.md +++ b/extensions/2.0/Khronos/KHR_materials_sheen/README.md @@ -18,7 +18,7 @@ See [Appendix](#appendix-full-khronos-copyright-statement) for full Khronos Copy ## Status -Experimental +Draft ## Dependencies From 9ab2c10579a32158677d721ed4a10ddeb705471c Mon Sep 17 00:00:00 2001 From: sebavan Date: Tue, 22 Sep 2020 16:21:17 +0200 Subject: [PATCH 14/14] PR Comment --- extensions/2.0/Khronos/KHR_materials_sheen/README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/extensions/2.0/Khronos/KHR_materials_sheen/README.md b/extensions/2.0/Khronos/KHR_materials_sheen/README.md index a227ec2fde..eabb6198ce 100644 --- a/extensions/2.0/Khronos/KHR_materials_sheen/README.md +++ b/extensions/2.0/Khronos/KHR_materials_sheen/README.md @@ -10,7 +10,7 @@ * Mike Bond, Adobe, [@MiiBond](https://github.com/MiiBond) * Don McCurdy, Google, [@donmccurdy](https://twitter.com/donrmccurdy) * Gary Hsu, Microsoft, [@bghgary](https://twitter.com/bghgary) -* Eliphas NUIT, Dassault System, [@EliphasNUIT](https://github.com/EliphasNUIT) +* Jekfer Bichon, Dassault System, [@EliphasNUIT](https://github.com/EliphasNUIT) * Aidin Abedi, Epic Games, [@aidinabedi](https://github.com/aidinabedi) Copyright (C) 2018-2020 The Khronos Group Inc. All Rights Reserved. glTF is a trademark of The Khronos Group Inc.