Skip to content

Commit 7e0aafa

Browse files
authored
Merge pull request mrdoob#17831 from higharc/simplify-normal-shader
Fix simultaneous usage of clearcoat and tangent data
2 parents afc30e1 + cedcd18 commit 7e0aafa

4 files changed

+16
-14
lines changed

src/renderers/shaders/ShaderChunk/clearcoat_normal_fragment_maps.glsl.js

+5-5
Original file line numberDiff line numberDiff line change
@@ -1,16 +1,16 @@
11
export default /* glsl */`
22
#ifdef USE_CLEARCOAT_NORMALMAP
33
4+
vec3 clearcoatMapN = texture2D( clearcoatNormalMap, vUv ).xyz * 2.0 - 1.0;
5+
clearcoatMapN.xy *= clearcoatNormalScale;
6+
47
#ifdef USE_TANGENT
58
6-
mat3 vTBN = mat3( tangent, bitangent, clearcoatNormal );
7-
vec3 mapN = texture2D( normalMap, vUv ).xyz * 2.0 - 1.0;
8-
mapN.xy = clearcoatNormalScale * mapN.xy;
9-
clearcoatNormal = normalize( vTBN * mapN );
9+
clearcoatNormal = normalize( vTBN * clearcoatMapN );
1010
1111
#else
1212
13-
clearcoatNormal = perturbNormal2Arb( - vViewPosition, clearcoatNormal, clearcoatNormalScale, clearcoatNormalMap );
13+
clearcoatNormal = perturbNormal2Arb( - vViewPosition, clearcoatNormal, clearcoatMapN );
1414
1515
#endif
1616

src/renderers/shaders/ShaderChunk/normal_fragment_begin.glsl.js

+6
Original file line numberDiff line numberDiff line change
@@ -29,6 +29,12 @@ export default /* glsl */`
2929
3030
#endif
3131
32+
#if defined( TANGENTSPACE_NORMALMAP ) || defined( USE_CLEARCOAT_NORMALMAP )
33+
34+
mat3 vTBN = mat3( tangent, bitangent, normal );
35+
36+
#endif
37+
3238
#endif
3339
3440
#endif

src/renderers/shaders/ShaderChunk/normal_fragment_maps.glsl.js

+4-4
Original file line numberDiff line numberDiff line change
@@ -20,16 +20,16 @@ export default /* glsl */`
2020
2121
#elif defined( TANGENTSPACE_NORMALMAP )
2222
23+
vec3 mapN = texture2D( normalMap, vUv ).xyz * 2.0 - 1.0;
24+
mapN.xy *= normalScale;
25+
2326
#ifdef USE_TANGENT
2427
25-
mat3 vTBN = mat3( tangent, bitangent, normal );
26-
vec3 mapN = texture2D( normalMap, vUv ).xyz * 2.0 - 1.0;
27-
mapN.xy = normalScale * mapN.xy;
2828
normal = normalize( vTBN * mapN );
2929
3030
#else
3131
32-
normal = perturbNormal2Arb( -vViewPosition, normal, normalScale, normalMap );
32+
normal = perturbNormal2Arb( -vViewPosition, normal, mapN );
3333
3434
#endif
3535

src/renderers/shaders/ShaderChunk/normalmap_pars_fragment.glsl.js

+1-5
Original file line numberDiff line numberDiff line change
@@ -17,7 +17,7 @@ export default /* glsl */`
1717
// Per-Pixel Tangent Space Normal Mapping
1818
// http://hacksoflife.blogspot.ch/2009/11/per-pixel-tangent-space-normal-mapping.html
1919
20-
vec3 perturbNormal2Arb( vec3 eye_pos, vec3 surf_norm, vec2 normalScale, in sampler2D normalMap ) {
20+
vec3 perturbNormal2Arb( vec3 eye_pos, vec3 surf_norm, vec3 mapN ) {
2121
2222
// Workaround for Adreno 3XX dFd*( vec3 ) bug. See #9988
2323
@@ -32,10 +32,6 @@ export default /* glsl */`
3232
vec3 T = normalize( ( - q0 * st1.s + q1 * st0.s ) * scale );
3333
vec3 N = normalize( surf_norm );
3434
35-
vec3 mapN = texture2D( normalMap, vUv ).xyz * 2.0 - 1.0;
36-
37-
mapN.xy *= normalScale;
38-
3935
#ifdef DOUBLE_SIDED
4036
4137
// Workaround for Adreno GPUs gl_FrontFacing bug. See #15850 and #10331

0 commit comments

Comments
 (0)