diff --git a/docs/api/en/materials/MeshPhysicalMaterial.html b/docs/api/en/materials/MeshPhysicalMaterial.html index eae40c0e3ccf4d..b8099aad156c67 100644 --- a/docs/api/en/materials/MeshPhysicalMaterial.html +++ b/docs/api/en/materials/MeshPhysicalMaterial.html @@ -61,7 +61,6 @@

Examples

[example:webgl_materials_variations_physical materials / variations / physical]
[example:webgl_materials_physical_clearcoat materials / physical / clearcoat]
[example:webgl_materials_physical_reflectivity materials / physical / reflectivity]
- [example:webgl_materials_physical_sheen materials / physical / sheen]
[example:webgl_materials_physical_transmission materials / physical / transmission]

diff --git a/docs/api/zh/materials/MeshPhysicalMaterial.html b/docs/api/zh/materials/MeshPhysicalMaterial.html index b360eeea8095a2..49511c412d76e9 100644 --- a/docs/api/zh/materials/MeshPhysicalMaterial.html +++ b/docs/api/zh/materials/MeshPhysicalMaterial.html @@ -62,7 +62,6 @@

例子

[example:webgl_materials_variations_physical materials / variations / physical]
[example:webgl_materials_physical_clearcoat materials / physical / clearcoat]
[example:webgl_materials_physical_reflectivity materials / physical / reflectivity]
- [example:webgl_materials_physical_sheen materials / physical / sheen]
[example:webgl_materials_physical_transmission materials / physical / transmission]

diff --git a/examples/files.json b/examples/files.json index 5c3cc6c2543b46..a803fa908f8a4d 100644 --- a/examples/files.json +++ b/examples/files.json @@ -84,6 +84,7 @@ "webgl_loader_gcode", "webgl_loader_gltf", "webgl_loader_gltf_compressed", + "webgl_loader_gltf_sheen", "webgl_loader_gltf_transmission", "webgl_loader_gltf_variants", "webgl_loader_ifc", @@ -146,7 +147,6 @@ "webgl_materials_normalmap_object_space", "webgl_materials_physical_clearcoat", "webgl_materials_physical_reflectivity", - "webgl_materials_physical_sheen", "webgl_materials_physical_transmission", "webgl_materials_standard", "webgl_materials_subsurface_scattering", diff --git a/examples/jsm/loaders/GLTFLoader.js b/examples/jsm/loaders/GLTFLoader.js index 3e95e5391d5bf3..de743b8bf96c13 100644 --- a/examples/jsm/loaders/GLTFLoader.js +++ b/examples/jsm/loaders/GLTFLoader.js @@ -94,6 +94,12 @@ class GLTFLoader extends Loader { } ); + this.register( function ( parser ) { + + return new GLTFMaterialsSheenExtension( parser ); + + } ); + this.register( function ( parser ) { return new GLTFMaterialsTransmissionExtension( parser ); @@ -428,6 +434,7 @@ const EXTENSIONS = { KHR_MATERIALS_CLEARCOAT: 'KHR_materials_clearcoat', KHR_MATERIALS_IOR: 'KHR_materials_ior', KHR_MATERIALS_PBR_SPECULAR_GLOSSINESS: 'KHR_materials_pbrSpecularGlossiness', + KHR_MATERIALS_SHEEN: 'KHR_materials_sheen', KHR_MATERIALS_SPECULAR: 'KHR_materials_specular', KHR_MATERIALS_TRANSMISSION: 'KHR_materials_transmission', KHR_MATERIALS_UNLIT: 'KHR_materials_unlit', @@ -704,6 +711,70 @@ class GLTFMaterialsClearcoatExtension { } +/** + * Sheen Materials Extension + * + * Specification: https://github.com/KhronosGroup/glTF/tree/main/extensions/2.0/Khronos/KHR_materials_sheen + */ +class GLTFMaterialsSheenExtension { + + constructor( parser ) { + + this.parser = parser; + this.name = EXTENSIONS.KHR_MATERIALS_SHEEN; + + } + + getMaterialType( materialIndex ) { + + const parser = this.parser; + const materialDef = parser.json.materials[ materialIndex ]; + + if ( ! materialDef.extensions || ! materialDef.extensions[ this.name ] ) return null; + + return MeshPhysicalMaterial; + + } + + extendMaterialParams( materialIndex, materialParams ) { + + const parser = this.parser; + const materialDef = parser.json.materials[ materialIndex ]; + + if ( ! materialDef.extensions || ! materialDef.extensions[ this.name ] ) { + + return Promise.resolve(); + + } + + const pending = []; + + materialParams.sheenTint = new Color( 0, 0, 0 ); + materialParams.sheenRoughness = 0; + materialParams.sheen = 1; + + const extension = materialDef.extensions[ this.name ]; + + if ( extension.sheenColorFactor !== undefined ) { + + materialParams.sheenTint.fromArray( extension.sheenColorFactor ); + + } + + if ( extension.sheenRoughnessFactor !== undefined ) { + + materialParams.sheenRoughness = extension.sheenRoughnessFactor; + + } + + // TODO sheenColorTexture and sheenRoughnessTexture + + return Promise.all( pending ); + + } + +} + /** * Transmission Materials Extension * diff --git a/examples/models/fbx/cloth.fbx b/examples/models/fbx/cloth.fbx deleted file mode 100644 index 91b5858c218491..00000000000000 Binary files a/examples/models/fbx/cloth.fbx and /dev/null differ diff --git a/examples/models/gltf/SheenChair.glb b/examples/models/gltf/SheenChair.glb new file mode 100644 index 00000000000000..b17772fdb79c56 Binary files /dev/null and b/examples/models/gltf/SheenChair.glb differ diff --git a/examples/screenshots/webgl_loader_gltf_sheen.jpg b/examples/screenshots/webgl_loader_gltf_sheen.jpg new file mode 100644 index 00000000000000..bbfa0e1b341a53 Binary files /dev/null and b/examples/screenshots/webgl_loader_gltf_sheen.jpg differ diff --git a/examples/screenshots/webgl_materials_physical_sheen.jpg b/examples/screenshots/webgl_materials_physical_sheen.jpg deleted file mode 100644 index f627b5d8ff1c63..00000000000000 Binary files a/examples/screenshots/webgl_materials_physical_sheen.jpg and /dev/null differ diff --git a/examples/webgl_loader_gltf_sheen.html b/examples/webgl_loader_gltf_sheen.html new file mode 100644 index 00000000000000..27d807d7a19ecd --- /dev/null +++ b/examples/webgl_loader_gltf_sheen.html @@ -0,0 +1,113 @@ + + + + three.js webgl - glTF 2.0 - transmission + + + + + + +
+ three.js - GLTFLoader + KHR_materials_sheen extension
+ Sheen Chair from glTF-Sample-Models +
+ + + + + diff --git a/examples/webgl_materials_physical_sheen.html b/examples/webgl_materials_physical_sheen.html deleted file mode 100644 index 7b67daa2a230f8..00000000000000 --- a/examples/webgl_materials_physical_sheen.html +++ /dev/null @@ -1,198 +0,0 @@ - - - Sheen demo (material property) - - - - - - -
Sheen demo by DanielSturk
-
- - - - -