[iortcw] 339/497: Rend2: Fix player on fire effect
This is an automated email from the git hooks/post-receive script. smcv pushed a commit to annotated tag 1.42d in repository iortcw. commit a3a0a23ad620e8fee7b9eb7caa7be7196813411f Author: Zack Middleton Date: Thu May 7 23:38:05 2015 -0500 Rend2: Fix player on fire effect Add support for alphaGen normalzfade, except the zombie effect part. Add support for negative deform wave frequency only effecting Z using amount based on fireRiseDir. --- MP/code/rend2/glsl/generic_vp.glsl | 55 +++ MP/code/rend2/tr_glsl.c| 9 ++- MP/code/rend2/tr_local.h | 4 ++ MP/code/rend2/tr_shade.c | 136 + MP/code/rend2/tr_shader.c | 1 + SP/code/rend2/glsl/generic_vp.glsl | 55 +++ SP/code/rend2/tr_glsl.c| 9 ++- SP/code/rend2/tr_local.h | 4 ++ SP/code/rend2/tr_shade.c | 136 + SP/code/rend2/tr_shader.c | 1 + 10 files changed, 408 insertions(+), 2 deletions(-) diff --git a/MP/code/rend2/glsl/generic_vp.glsl b/MP/code/rend2/glsl/generic_vp.glsl index e04b201..1cc6484 100644 --- a/MP/code/rend2/glsl/generic_vp.glsl +++ b/MP/code/rend2/glsl/generic_vp.glsl @@ -43,6 +43,10 @@ uniform mat4 u_ModelViewProjectionMatrix; uniform vec4 u_BaseColor; uniform vec4 u_VertColor; +#if defined(USE_DEFORM_VERTEXES) || defined(USE_RGBAGEN) +uniform vec3 u_FireRiseDir; +#endif + #if defined(USE_RGBAGEN) uniform intu_ColorGen; uniform intu_AlphaGen; @@ -50,6 +54,8 @@ uniform vec3 u_AmbientLight; uniform vec3 u_DirectedLight; uniform vec3 u_ModelLightDir; uniform float u_PortalRange; +uniform float u_ZFadeLowest; +uniform float u_ZFadeHighest; #endif #if defined(USE_VERTEX_ANIMATION) @@ -68,6 +74,20 @@ vec3 DeformPosition(const vec3 pos, const vec3 normal, const vec2 st) float frequency = u_DeformParams[3]; float spread =u_DeformParams[4]; + // a negative frequency is for Z deformation based on normal + float zDeformScale = 0; + if (frequency < 0) + { + zDeformScale = 1; + frequency *= -1; + + if (frequency > 999) + { + frequency -= 999; + zDeformScale = -1; + } + } + if (u_DeformGen == DGEN_BULGE) { phase *= st.x; @@ -105,6 +125,20 @@ vec3 DeformPosition(const vec3 pos, const vec3 normal, const vec2 st) func = sin(value); } + if (zDeformScale != 0) + { + vec3 dir = u_FireRiseDir * (0.4 + 0.6 * u_FireRiseDir.z); + float nDot = dot(dir, normal); + float scale = base + func * amplitude; + + if (nDot * scale > 0) + { + return pos + dir * nDot * scale * zDeformScale; + } + + return pos; + } + return pos + normal * (base + func * amplitude); } #endif @@ -178,6 +212,27 @@ vec4 CalcColor(vec3 position, vec3 normal) { color.a = clamp(length(viewer) / u_PortalRange, 0.0, 1.0); } + else if (u_AlphaGen == AGEN_NORMALZFADE) + { + float nDot = dot(normal, u_FireRiseDir); + float halfRange = (u_ZFadeHighest - u_ZFadeLowest) / 2.0; + + if (nDot < u_ZFadeHighest) { + if (nDot > u_ZFadeLowest) { + float frac; + if (nDot < u_ZFadeLowest + halfRange) { + frac = ( nDot - u_ZFadeLowest ) / halfRange; + } else { + frac = 1.0 - ( nDot - u_ZFadeLowest - halfRange ) / halfRange; + } + color.a *= clamp(frac, 0.0, 1.0); + } else { + color.a = 0; + } + } else { + color.a = 0; + } + } return color; } diff --git a/MP/code/rend2/tr_glsl.c b/MP/code/rend2/tr_glsl.c index ca8e5a5..ba62e26 100644 --- a/MP/code/rend2/tr_glsl.c +++ b/MP/code/rend2/tr_glsl.c @@ -146,6 +146,10 @@ static uniformInfo_t uniformsInfo[] = { "u_PrimaryLightRadius", GLSL_FLOAT }, { "u_CubeMapInfo", GLSL_VEC4 }, + + { "u_FireRiseDir", GLSL_VEC3 }, + { "u_ZFadeLowest", GLSL_FLOAT }, + { "u_ZFadeHighest", GLSL_FLOAT }, }; @@ -302,9 +306,11 @@ static void GLSL_GetShaderHeader( GLenum shaderType, const GLcharARB *extra, cha "#define alphaGen_t\n" "#define AGEN_LIGHTING_SPECULAR %i\n" "
[iortcw] 339/497: Rend2: Fix player on fire effect
This is an automated email from the git hooks/post-receive script. smcv pushed a commit to annotated tag 1.42d in repository iortcw. commit a3a0a23ad620e8fee7b9eb7caa7be7196813411f Author: Zack Middleton Date: Thu May 7 23:38:05 2015 -0500 Rend2: Fix player on fire effect Add support for alphaGen normalzfade, except the zombie effect part. Add support for negative deform wave frequency only effecting Z using amount based on fireRiseDir. --- MP/code/rend2/glsl/generic_vp.glsl | 55 +++ MP/code/rend2/tr_glsl.c| 9 ++- MP/code/rend2/tr_local.h | 4 ++ MP/code/rend2/tr_shade.c | 136 + MP/code/rend2/tr_shader.c | 1 + SP/code/rend2/glsl/generic_vp.glsl | 55 +++ SP/code/rend2/tr_glsl.c| 9 ++- SP/code/rend2/tr_local.h | 4 ++ SP/code/rend2/tr_shade.c | 136 + SP/code/rend2/tr_shader.c | 1 + 10 files changed, 408 insertions(+), 2 deletions(-) diff --git a/MP/code/rend2/glsl/generic_vp.glsl b/MP/code/rend2/glsl/generic_vp.glsl index e04b201..1cc6484 100644 --- a/MP/code/rend2/glsl/generic_vp.glsl +++ b/MP/code/rend2/glsl/generic_vp.glsl @@ -43,6 +43,10 @@ uniform mat4 u_ModelViewProjectionMatrix; uniform vec4 u_BaseColor; uniform vec4 u_VertColor; +#if defined(USE_DEFORM_VERTEXES) || defined(USE_RGBAGEN) +uniform vec3 u_FireRiseDir; +#endif + #if defined(USE_RGBAGEN) uniform intu_ColorGen; uniform intu_AlphaGen; @@ -50,6 +54,8 @@ uniform vec3 u_AmbientLight; uniform vec3 u_DirectedLight; uniform vec3 u_ModelLightDir; uniform float u_PortalRange; +uniform float u_ZFadeLowest; +uniform float u_ZFadeHighest; #endif #if defined(USE_VERTEX_ANIMATION) @@ -68,6 +74,20 @@ vec3 DeformPosition(const vec3 pos, const vec3 normal, const vec2 st) float frequency = u_DeformParams[3]; float spread =u_DeformParams[4]; + // a negative frequency is for Z deformation based on normal + float zDeformScale = 0; + if (frequency < 0) + { + zDeformScale = 1; + frequency *= -1; + + if (frequency > 999) + { + frequency -= 999; + zDeformScale = -1; + } + } + if (u_DeformGen == DGEN_BULGE) { phase *= st.x; @@ -105,6 +125,20 @@ vec3 DeformPosition(const vec3 pos, const vec3 normal, const vec2 st) func = sin(value); } + if (zDeformScale != 0) + { + vec3 dir = u_FireRiseDir * (0.4 + 0.6 * u_FireRiseDir.z); + float nDot = dot(dir, normal); + float scale = base + func * amplitude; + + if (nDot * scale > 0) + { + return pos + dir * nDot * scale * zDeformScale; + } + + return pos; + } + return pos + normal * (base + func * amplitude); } #endif @@ -178,6 +212,27 @@ vec4 CalcColor(vec3 position, vec3 normal) { color.a = clamp(length(viewer) / u_PortalRange, 0.0, 1.0); } + else if (u_AlphaGen == AGEN_NORMALZFADE) + { + float nDot = dot(normal, u_FireRiseDir); + float halfRange = (u_ZFadeHighest - u_ZFadeLowest) / 2.0; + + if (nDot < u_ZFadeHighest) { + if (nDot > u_ZFadeLowest) { + float frac; + if (nDot < u_ZFadeLowest + halfRange) { + frac = ( nDot - u_ZFadeLowest ) / halfRange; + } else { + frac = 1.0 - ( nDot - u_ZFadeLowest - halfRange ) / halfRange; + } + color.a *= clamp(frac, 0.0, 1.0); + } else { + color.a = 0; + } + } else { + color.a = 0; + } + } return color; } diff --git a/MP/code/rend2/tr_glsl.c b/MP/code/rend2/tr_glsl.c index ca8e5a5..ba62e26 100644 --- a/MP/code/rend2/tr_glsl.c +++ b/MP/code/rend2/tr_glsl.c @@ -146,6 +146,10 @@ static uniformInfo_t uniformsInfo[] = { "u_PrimaryLightRadius", GLSL_FLOAT }, { "u_CubeMapInfo", GLSL_VEC4 }, + + { "u_FireRiseDir", GLSL_VEC3 }, + { "u_ZFadeLowest", GLSL_FLOAT }, + { "u_ZFadeHighest", GLSL_FLOAT }, }; @@ -302,9 +306,11 @@ static void GLSL_GetShaderHeader( GLenum shaderType, const GLcharARB *extra, cha "#define alphaGen_t\n" "#define AGEN_LIGHTING_SPECULAR %i\n" "