Skip to content

Commit b14f0ee

Browse files
authored
Merge pull request #21148 from elalish/variantNormals
GLTFLoader: Fixed variants normal map scale
2 parents c5acc71 + 65d597d commit b14f0ee

File tree

4 files changed

+33
-35
lines changed

4 files changed

+33
-35
lines changed

examples/js/loaders/GLTFLoader.js

Lines changed: 15 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -620,7 +620,8 @@ THREE.GLTFLoader = ( function () {
620620

621621
var scale = extension.clearcoatNormalTexture.scale;
622622

623-
materialParams.clearcoatNormalScale = new THREE.Vector2( scale, scale );
623+
// https://github.com/mrdoob/three.js/issues/11438#issuecomment-507003995
624+
materialParams.clearcoatNormalScale = new THREE.Vector2( scale, -scale );
624625

625626
}
626627

@@ -2621,11 +2622,20 @@ THREE.GLTFLoader = ( function () {
26212622
cachedMaterial = material.clone();
26222623

26232624
if ( useSkinning ) cachedMaterial.skinning = true;
2624-
if ( useVertexTangents ) cachedMaterial.vertexTangents = true;
26252625
if ( useVertexColors ) cachedMaterial.vertexColors = true;
26262626
if ( useFlatShading ) cachedMaterial.flatShading = true;
26272627
if ( useMorphTargets ) cachedMaterial.morphTargets = true;
26282628
if ( useMorphNormals ) cachedMaterial.morphNormals = true;
2629+
2630+
if ( useVertexTangents ) {
2631+
2632+
cachedMaterial.vertexTangents = true;
2633+
2634+
// https://github.com/mrdoob/three.js/issues/11438#issuecomment-507003995
2635+
if ( material.normalScale ) material.normalScale.y *= -1;
2636+
if ( material.clearcoatNormalScale ) material.clearcoatNormalScale.y *= -1;
2637+
2638+
}
26292639

26302640
this.cache.add( cacheKey, cachedMaterial );
26312641

@@ -2645,19 +2655,6 @@ THREE.GLTFLoader = ( function () {
26452655

26462656
}
26472657

2648-
// https://github.com/mrdoob/three.js/issues/11438#issuecomment-507003995
2649-
if ( material.normalScale && ! useVertexTangents ) {
2650-
2651-
material.normalScale.y = - material.normalScale.y;
2652-
2653-
}
2654-
2655-
if ( material.clearcoatNormalScale && ! useVertexTangents ) {
2656-
2657-
material.clearcoatNormalScale.y = - material.clearcoatNormalScale.y;
2658-
2659-
}
2660-
26612658
mesh.material = material;
26622659

26632660
};
@@ -2778,11 +2775,12 @@ THREE.GLTFLoader = ( function () {
27782775

27792776
pending.push( parser.assignTexture( materialParams, 'normalMap', materialDef.normalTexture ) );
27802777

2781-
materialParams.normalScale = new THREE.Vector2( 1, 1 );
2778+
// https://github.com/mrdoob/three.js/issues/11438#issuecomment-507003995
2779+
materialParams.normalScale = new THREE.Vector2( 1, -1 );
27822780

27832781
if ( materialDef.normalTexture.scale !== undefined ) {
27842782

2785-
materialParams.normalScale.set( materialDef.normalTexture.scale, materialDef.normalTexture.scale );
2783+
materialParams.normalScale.set( materialDef.normalTexture.scale, -materialDef.normalTexture.scale );
27862784

27872785
}
27882786

examples/jsm/loaders/GLTFLoader.d.ts

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -67,6 +67,7 @@ export class GLTFParser {
6767

6868
getDependency: ( type: string, index: number ) => Promise<any>;
6969
getDependencies: ( type: string ) => Promise<any[]>;
70+
assignFinalMaterial: ( object: Mesh ) => void;
7071

7172
}
7273

examples/jsm/loaders/GLTFLoader.js

Lines changed: 15 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -685,7 +685,8 @@ var GLTFLoader = ( function () {
685685

686686
var scale = extension.clearcoatNormalTexture.scale;
687687

688-
materialParams.clearcoatNormalScale = new Vector2( scale, scale );
688+
// https://github.com/mrdoob/three.js/issues/11438#issuecomment-507003995
689+
materialParams.clearcoatNormalScale = new Vector2( scale, -scale );
689690

690691
}
691692

@@ -2686,12 +2687,21 @@ var GLTFLoader = ( function () {
26862687
cachedMaterial = material.clone();
26872688

26882689
if ( useSkinning ) cachedMaterial.skinning = true;
2689-
if ( useVertexTangents ) cachedMaterial.vertexTangents = true;
26902690
if ( useVertexColors ) cachedMaterial.vertexColors = true;
26912691
if ( useFlatShading ) cachedMaterial.flatShading = true;
26922692
if ( useMorphTargets ) cachedMaterial.morphTargets = true;
26932693
if ( useMorphNormals ) cachedMaterial.morphNormals = true;
26942694

2695+
if ( useVertexTangents ) {
2696+
2697+
cachedMaterial.vertexTangents = true;
2698+
2699+
// https://github.com/mrdoob/three.js/issues/11438#issuecomment-507003995
2700+
if ( material.normalScale ) material.normalScale.y *= -1;
2701+
if ( material.clearcoatNormalScale ) material.clearcoatNormalScale.y *= -1;
2702+
2703+
}
2704+
26952705
this.cache.add( cacheKey, cachedMaterial );
26962706

26972707
this.associations.set( cachedMaterial, this.associations.get( material ) );
@@ -2710,19 +2720,6 @@ var GLTFLoader = ( function () {
27102720

27112721
}
27122722

2713-
// https://github.com/mrdoob/three.js/issues/11438#issuecomment-507003995
2714-
if ( material.normalScale && ! useVertexTangents ) {
2715-
2716-
material.normalScale.y = - material.normalScale.y;
2717-
2718-
}
2719-
2720-
if ( material.clearcoatNormalScale && ! useVertexTangents ) {
2721-
2722-
material.clearcoatNormalScale.y = - material.clearcoatNormalScale.y;
2723-
2724-
}
2725-
27262723
mesh.material = material;
27272724

27282725
};
@@ -2843,11 +2840,12 @@ var GLTFLoader = ( function () {
28432840

28442841
pending.push( parser.assignTexture( materialParams, 'normalMap', materialDef.normalTexture ) );
28452842

2846-
materialParams.normalScale = new Vector2( 1, 1 );
2843+
// https://github.com/mrdoob/three.js/issues/11438#issuecomment-507003995
2844+
materialParams.normalScale = new Vector2( 1, -1 );
28472845

28482846
if ( materialDef.normalTexture.scale !== undefined ) {
28492847

2850-
materialParams.normalScale.set( materialDef.normalTexture.scale, materialDef.normalTexture.scale );
2848+
materialParams.normalScale.set( materialDef.normalTexture.scale, -materialDef.normalTexture.scale );
28512849

28522850
}
28532851

examples/webgl_loader_gltf_variants.html

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -132,10 +132,11 @@
132132
if ( mapping ) {
133133

134134
object.material = await parser.getDependency( 'material', mapping.material );
135+
parser.assignFinalMaterial(object);
135136

136137
} else {
137138

138-
object.material = object.originalMaterial;
139+
object.material = object.userData.originalMaterial;
139140

140141
}
141142

0 commit comments

Comments
 (0)