2
0
Эх сурвалжийг харах

Merge pull request #1848 from Azaezel/ParallaxPinch

[workaround] pinches parallax steps so the 0-1 range has minimal artifacting
Areloch 8 жил өмнө
parent
commit
f77e4b960d

+ 8 - 8
Templates/Full/game/shaders/common/gl/torque.glsl

@@ -138,13 +138,13 @@ mat3x3 quatToMat( vec4 quat )
 ///
 ///
 vec2 parallaxOffset( sampler2D texMap, vec2 texCoord, vec3 negViewTS, float depthScale )
 vec2 parallaxOffset( sampler2D texMap, vec2 texCoord, vec3 negViewTS, float depthScale )
 {
 {
-   float depth = texture( texMap, texCoord ).a;
-   vec2 offset = negViewTS.xy * vec2( depth * depthScale );
+   float depth = texture( texMap, texCoord ).a/(PARALLAX_REFINE_STEPS*2);
+   vec2 offset = negViewTS.xy * vec2( depth * depthScale )/vec2(PARALLAX_REFINE_STEPS*2);
 
 
    for ( int i=0; i < PARALLAX_REFINE_STEPS; i++ )
    for ( int i=0; i < PARALLAX_REFINE_STEPS; i++ )
    {
    {
-      depth = ( depth + texture( texMap, texCoord + offset ).a ) * 0.5;
-      offset = negViewTS.xy * vec2( depth * depthScale );
+      depth = ( depth + texture( texMap, texCoord + offset ).a )/(PARALLAX_REFINE_STEPS*2);
+      offset = negViewTS.xy * vec2( depth * depthScale )/vec2(PARALLAX_REFINE_STEPS*2);
    }
    }
 
 
    return offset;
    return offset;
@@ -153,13 +153,13 @@ vec2 parallaxOffset( sampler2D texMap, vec2 texCoord, vec3 negViewTS, float dept
 /// Same as parallaxOffset but for dxtnm where depth is stored in the red channel instead of the alpha
 /// Same as parallaxOffset but for dxtnm where depth is stored in the red channel instead of the alpha
 vec2 parallaxOffsetDxtnm(sampler2D texMap, vec2 texCoord, vec3 negViewTS, float depthScale)
 vec2 parallaxOffsetDxtnm(sampler2D texMap, vec2 texCoord, vec3 negViewTS, float depthScale)
 {
 {
-   float depth = texture(texMap, texCoord).r;
-   vec2 offset = negViewTS.xy * vec2(depth * depthScale);
+   float depth = texture(texMap, texCoord).r/(PARALLAX_REFINE_STEPS*2);
+   vec2 offset = negViewTS.xy * vec2(depth * depthScale)/vec2(PARALLAX_REFINE_STEPS*2);
 
 
    for (int i = 0; i < PARALLAX_REFINE_STEPS; i++)
    for (int i = 0; i < PARALLAX_REFINE_STEPS; i++)
    {
    {
-      depth = (depth + texture(texMap, texCoord + offset).r) * 0.5;
-      offset = negViewTS.xy * vec2(depth * depthScale);
+      depth = (depth + texture(texMap, texCoord + offset).r)/(PARALLAX_REFINE_STEPS*2);
+      offset = negViewTS.xy * vec2(depth * depthScale)/vec2(PARALLAX_REFINE_STEPS*2);
    }
    }
 
 
    return offset;
    return offset;

+ 8 - 8
Templates/Full/game/shaders/common/torque.hlsl

@@ -140,13 +140,13 @@ float3x3 quatToMat( float4 quat )
 ///
 ///
 float2 parallaxOffset(TORQUE_SAMPLER2D(texMap), float2 texCoord, float3 negViewTS, float depthScale)
 float2 parallaxOffset(TORQUE_SAMPLER2D(texMap), float2 texCoord, float3 negViewTS, float depthScale)
 {
 {
-   float depth = TORQUE_TEX2D(texMap, texCoord).a;
-   float2 offset = negViewTS.xy * (depth * depthScale);
+   float depth = TORQUE_TEX2D(texMap, texCoord).a/(PARALLAX_REFINE_STEPS*2);
+   float2 offset = negViewTS.xy * (depth * depthScale)/(PARALLAX_REFINE_STEPS);
 
 
    for (int i = 0; i < PARALLAX_REFINE_STEPS; i++)
    for (int i = 0; i < PARALLAX_REFINE_STEPS; i++)
    {
    {
-      depth = (depth + TORQUE_TEX2D(texMap, texCoord + offset).a) * 0.5;
-      offset = negViewTS.xy * (depth * depthScale);
+      depth = (depth + TORQUE_TEX2D(texMap, texCoord + offset).a)/(PARALLAX_REFINE_STEPS*2);
+      offset = negViewTS.xy * (depth * depthScale)/(PARALLAX_REFINE_STEPS);
    }
    }
 
 
    return offset;
    return offset;
@@ -155,13 +155,13 @@ float2 parallaxOffset(TORQUE_SAMPLER2D(texMap), float2 texCoord, float3 negViewT
 /// Same as parallaxOffset but for dxtnm where depth is stored in the red channel instead of the alpha
 /// Same as parallaxOffset but for dxtnm where depth is stored in the red channel instead of the alpha
 float2 parallaxOffsetDxtnm(TORQUE_SAMPLER2D(texMap), float2 texCoord, float3 negViewTS, float depthScale)
 float2 parallaxOffsetDxtnm(TORQUE_SAMPLER2D(texMap), float2 texCoord, float3 negViewTS, float depthScale)
 {
 {
-   float depth = TORQUE_TEX2D(texMap, texCoord).r;
-   float2 offset = negViewTS.xy * (depth * depthScale);
+   float depth = TORQUE_TEX2D(texMap, texCoord).r/(PARALLAX_REFINE_STEPS*2);
+   float2 offset = negViewTS.xy * (depth * depthScale)/(PARALLAX_REFINE_STEPS*2);
 
 
    for (int i = 0; i < PARALLAX_REFINE_STEPS; i++)
    for (int i = 0; i < PARALLAX_REFINE_STEPS; i++)
    {
    {
-      depth = (depth + TORQUE_TEX2D(texMap, texCoord + offset).r) * 0.5;
-      offset = negViewTS.xy * (depth * depthScale);
+      depth = (depth + TORQUE_TEX2D(texMap, texCoord + offset).r)/(PARALLAX_REFINE_STEPS*2);
+      offset = negViewTS.xy * (depth * depthScale)/(PARALLAX_REFINE_STEPS*2);
    }
    }
 
 
    return offset;
    return offset;