@@ -9,28 +9,33 @@ void ADD_IDX(ComputeLayerTexCoord)(FragInput input, bool isTriplanar, inout Laye
9
9
ADD_IDX (layerTexCoord.base).uv = ADD_IDX (_UVMappingMask).x * input.texCoord0 +
10
10
ADD_IDX (_UVMappingMask).y * input.texCoord1 +
11
11
ADD_IDX (_UVMappingMask).z * input.texCoord3 +
12
- ADD_IDX (_UVMappingMask).w * position.xz;
12
+ ADD_IDX (_UVMappingMask).w * - position.xz;
13
13
14
14
float2 uvDetails = ADD_IDX (_UVDetailsMappingMask).x * input.texCoord0 +
15
15
ADD_IDX (_UVDetailsMappingMask).y * input.texCoord1 +
16
16
ADD_IDX (_UVDetailsMappingMask).z * input.texCoord3 +
17
17
// Note that if base is planar, detail map is planar
18
- ADD_IDX (_UVMappingMask).w * position.xz;
18
+ ADD_IDX (_UVMappingMask).w * - position.xz;
19
19
20
20
ADD_IDX (layerTexCoord.details).uv = TRANSFORM_TEX (uvDetails, ADD_IDX (_DetailMap));
21
21
22
22
// triplanar
23
23
ADD_IDX (layerTexCoord.base).isTriplanar = isTriplanar;
24
24
25
- ADD_IDX (layerTexCoord.base).uvYZ = position.zy;
26
- ADD_IDX (layerTexCoord.base).uvZX = position.xz;
27
- ADD_IDX (layerTexCoord.base).uvXY = float2 (-position.x, position.y);
25
+ float3 direction = sign (input.tangentToWorld[2 ].xyz);
26
+
27
+ // In triplanar, if we are facing away from the world axis, a different axis will be flipped for each direction.
28
+ // This is particularly problematic for tangent space normal maps which need to be in the right direction.
29
+ // So we multiplying the offending coordinate by the sign of the normal.
30
+ ADD_IDX (layerTexCoord.base).uvYZ = float2 (direction.x * position.z, position.y);
31
+ ADD_IDX (layerTexCoord.base).uvZX = -float2 (position.x, direction.y * position.z);
32
+ ADD_IDX (layerTexCoord.base).uvXY = float2 (-position.x, direction.z * position.y);
28
33
29
34
ADD_IDX (layerTexCoord.details).isTriplanar = isTriplanar;
30
35
31
- ADD_IDX (layerTexCoord.details).uvYZ = TRANSFORM_TEX (position.zy , ADD_IDX (_DetailMap));
32
- ADD_IDX (layerTexCoord.details).uvZX = TRANSFORM_TEX (position.xz , ADD_IDX (_DetailMap));
33
- ADD_IDX (layerTexCoord.details).uvXY = TRANSFORM_TEX (float2 (-position.x, position.y) , ADD_IDX (_DetailMap));
36
+ ADD_IDX (layerTexCoord.details).uvYZ = TRANSFORM_TEX (ADD_IDX (layerTexCoord.base).uvYZ , ADD_IDX (_DetailMap));
37
+ ADD_IDX (layerTexCoord.details).uvZX = TRANSFORM_TEX (ADD_IDX (layerTexCoord.base).uvZX , ADD_IDX (_DetailMap));
38
+ ADD_IDX (layerTexCoord.details).uvXY = TRANSFORM_TEX (ADD_IDX (layerTexCoord.base).uvXY , ADD_IDX (_DetailMap));
34
39
}
35
40
36
41
void ADD_IDX (ApplyDisplacement)(inout FragInput input, inout LayerTexCoord layerTexCoord)
0 commit comments