From 0049678c256fec14998adb246b6acd88b9a6196c Mon Sep 17 00:00:00 2001 From: Azaezel Date: Tue, 6 Dec 2016 23:41:28 -0600 Subject: [PATCH] [workaround] pinches parallax steps so the 0-1 range has minimal artifacting --- .../Full/game/shaders/common/gl/torque.glsl | 16 ++++++++-------- Templates/Full/game/shaders/common/torque.hlsl | 16 ++++++++-------- 2 files changed, 16 insertions(+), 16 deletions(-) diff --git a/Templates/Full/game/shaders/common/gl/torque.glsl b/Templates/Full/game/shaders/common/gl/torque.glsl index abe1cd76d..6e369bd5e 100644 --- a/Templates/Full/game/shaders/common/gl/torque.glsl +++ b/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 ) { - 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++ ) { - 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; @@ -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 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++) { - 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; diff --git a/Templates/Full/game/shaders/common/torque.hlsl b/Templates/Full/game/shaders/common/torque.hlsl index f1099abf8..7081c7153 100644 --- a/Templates/Full/game/shaders/common/torque.hlsl +++ b/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) { - 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++) { - 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; @@ -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 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++) { - 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;