Skip to content

Commit

Permalink
Merge pull request #21148 from elalish/variantNormals
Browse files Browse the repository at this point in the history
GLTFLoader: Fixed variants normal map scale
  • Loading branch information
mrdoob committed Jan 27, 2021
2 parents c5acc71 + 65d597d commit b14f0ee
Show file tree
Hide file tree
Showing 4 changed files with 33 additions and 35 deletions.
32 changes: 15 additions & 17 deletions examples/js/loaders/GLTFLoader.js
Expand Up @@ -620,7 +620,8 @@ THREE.GLTFLoader = ( function () {

var scale = extension.clearcoatNormalTexture.scale;

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

}

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

if ( useSkinning ) cachedMaterial.skinning = true;
if ( useVertexTangents ) cachedMaterial.vertexTangents = true;
if ( useVertexColors ) cachedMaterial.vertexColors = true;
if ( useFlatShading ) cachedMaterial.flatShading = true;
if ( useMorphTargets ) cachedMaterial.morphTargets = true;
if ( useMorphNormals ) cachedMaterial.morphNormals = true;

if ( useVertexTangents ) {

cachedMaterial.vertexTangents = true;

// https://github.com/mrdoob/three.js/issues/11438#issuecomment-507003995
if ( material.normalScale ) material.normalScale.y *= -1;
if ( material.clearcoatNormalScale ) material.clearcoatNormalScale.y *= -1;

}

this.cache.add( cacheKey, cachedMaterial );

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

}

// https://github.com/mrdoob/three.js/issues/11438#issuecomment-507003995
if ( material.normalScale && ! useVertexTangents ) {

material.normalScale.y = - material.normalScale.y;

}

if ( material.clearcoatNormalScale && ! useVertexTangents ) {

material.clearcoatNormalScale.y = - material.clearcoatNormalScale.y;

}

mesh.material = material;

};
Expand Down Expand Up @@ -2778,11 +2775,12 @@ THREE.GLTFLoader = ( function () {

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

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

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

materialParams.normalScale.set( materialDef.normalTexture.scale, materialDef.normalTexture.scale );
materialParams.normalScale.set( materialDef.normalTexture.scale, -materialDef.normalTexture.scale );

}

Expand Down
1 change: 1 addition & 0 deletions examples/jsm/loaders/GLTFLoader.d.ts
Expand Up @@ -67,6 +67,7 @@ export class GLTFParser {

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

}

Expand Down
32 changes: 15 additions & 17 deletions examples/jsm/loaders/GLTFLoader.js
Expand Up @@ -685,7 +685,8 @@ var GLTFLoader = ( function () {

var scale = extension.clearcoatNormalTexture.scale;

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

}

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

if ( useSkinning ) cachedMaterial.skinning = true;
if ( useVertexTangents ) cachedMaterial.vertexTangents = true;
if ( useVertexColors ) cachedMaterial.vertexColors = true;
if ( useFlatShading ) cachedMaterial.flatShading = true;
if ( useMorphTargets ) cachedMaterial.morphTargets = true;
if ( useMorphNormals ) cachedMaterial.morphNormals = true;

if ( useVertexTangents ) {

cachedMaterial.vertexTangents = true;

// https://github.com/mrdoob/three.js/issues/11438#issuecomment-507003995
if ( material.normalScale ) material.normalScale.y *= -1;
if ( material.clearcoatNormalScale ) material.clearcoatNormalScale.y *= -1;

}

this.cache.add( cacheKey, cachedMaterial );

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

}

// https://github.com/mrdoob/three.js/issues/11438#issuecomment-507003995
if ( material.normalScale && ! useVertexTangents ) {

material.normalScale.y = - material.normalScale.y;

}

if ( material.clearcoatNormalScale && ! useVertexTangents ) {

material.clearcoatNormalScale.y = - material.clearcoatNormalScale.y;

}

mesh.material = material;

};
Expand Down Expand Up @@ -2843,11 +2840,12 @@ var GLTFLoader = ( function () {

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

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

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

materialParams.normalScale.set( materialDef.normalTexture.scale, materialDef.normalTexture.scale );
materialParams.normalScale.set( materialDef.normalTexture.scale, -materialDef.normalTexture.scale );

}

Expand Down
3 changes: 2 additions & 1 deletion examples/webgl_loader_gltf_variants.html
Expand Up @@ -132,10 +132,11 @@
if ( mapping ) {

object.material = await parser.getDependency( 'material', mapping.material );
parser.assignFinalMaterial(object);

} else {

object.material = object.originalMaterial;
object.material = object.userData.originalMaterial;

}

Expand Down

0 comments on commit b14f0ee

Please sign in to comment.