From 66cb20a7f39e85629c18f5f37cb040d155efa452 Mon Sep 17 00:00:00 2001 From: James Canete Date: Mon, 5 Jul 2021 21:50:39 -0700 Subject: [PATCH 1/5] Add epsilon to avoid division by zero in CalcSpecular(). --- code/renderergl2/glsl/lightall_fp.glsl | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/code/renderergl2/glsl/lightall_fp.glsl b/code/renderergl2/glsl/lightall_fp.glsl index 26f9a995..a6a6f133 100644 --- a/code/renderergl2/glsl/lightall_fp.glsl +++ b/code/renderergl2/glsl/lightall_fp.glsl @@ -201,7 +201,7 @@ vec3 CalcSpecular(vec3 specular, float NH, float EH, float roughness) float rr = roughness*roughness; float rrrr = rr*rr; float d = (NH * NH) * (rrrr - 1.0) + 1.0; - float v = (EH * EH) * (roughness + 0.5); + float v = (EH * EH) * (roughness + 0.5) + EPSILON; return specular * (rrrr / (4.0 * d * d * v)); } From 69ec389335a347773c719c7b76d2b1326b6de7b3 Mon Sep 17 00:00:00 2001 From: James Canete Date: Mon, 5 Jul 2021 21:59:20 -0700 Subject: [PATCH 2/5] Add r_parallaxMapOffset. --- code/renderergl2/glsl/lightall_fp.glsl | 4 ++++ code/renderergl2/tr_glsl.c | 2 ++ code/renderergl2/tr_init.c | 2 ++ code/renderergl2/tr_local.h | 1 + opengl2-readme.md | 5 +++++ 5 files changed, 14 insertions(+) diff --git a/code/renderergl2/glsl/lightall_fp.glsl b/code/renderergl2/glsl/lightall_fp.glsl index a6a6f133..7d23b24d 100644 --- a/code/renderergl2/glsl/lightall_fp.glsl +++ b/code/renderergl2/glsl/lightall_fp.glsl @@ -89,6 +89,9 @@ float RayIntersectDisplaceMap(vec2 dp, vec2 ds, sampler2D normalMap) // current size of search window float size = 1.0 / float(linearSearchSteps); + // adjust position if offset above surface + dp -= ds * r_parallaxMapOffset; + // current depth position float depth = 0.0; @@ -142,6 +145,7 @@ float RayIntersectDisplaceMap(vec2 dp, vec2 ds, sampler2D normalMap) #endif return bestDepth; + return bestDepth - r_parallaxMapOffset; } float LightRay(vec2 dp, vec2 ds, sampler2D normalMap) diff --git a/code/renderergl2/tr_glsl.c b/code/renderergl2/tr_glsl.c index 0d95d0df..86cca599 100644 --- a/code/renderergl2/tr_glsl.c +++ b/code/renderergl2/tr_glsl.c @@ -1125,6 +1125,8 @@ void GLSL_InitGPUShaders(void) if (r_parallaxMapShadows->integer) Q_strcat(extradefines, 1024, "#define USE_PARALLAXMAP_SHADOWS\n"); + + Q_strcat(extradefines, 1024, va("#define r_parallaxMapOffset %f\n", r_parallaxMapOffset->value)); } } diff --git a/code/renderergl2/tr_init.c b/code/renderergl2/tr_init.c index 6e502f58..945aa02c 100644 --- a/code/renderergl2/tr_init.c +++ b/code/renderergl2/tr_init.c @@ -132,6 +132,7 @@ cvar_t *r_normalMapping; cvar_t *r_specularMapping; cvar_t *r_deluxeMapping; cvar_t *r_parallaxMapping; +cvar_t *r_parallaxMapOffset; cvar_t *r_parallaxMapShadows; cvar_t *r_cubeMapping; cvar_t *r_cubemapSize; @@ -1243,6 +1244,7 @@ void R_Register( void ) r_specularMapping = ri.Cvar_Get( "r_specularMapping", "1", CVAR_ARCHIVE | CVAR_LATCH ); r_deluxeMapping = ri.Cvar_Get( "r_deluxeMapping", "1", CVAR_ARCHIVE | CVAR_LATCH ); r_parallaxMapping = ri.Cvar_Get( "r_parallaxMapping", "0", CVAR_ARCHIVE | CVAR_LATCH ); + r_parallaxMapOffset = ri.Cvar_Get( "r_parallaxMapOffset", "0", CVAR_ARCHIVE | CVAR_LATCH ); r_parallaxMapShadows = ri.Cvar_Get( "r_parallaxMapShadows", "0", CVAR_ARCHIVE | CVAR_LATCH ); r_cubeMapping = ri.Cvar_Get( "r_cubeMapping", "0", CVAR_ARCHIVE | CVAR_LATCH ); r_cubemapSize = ri.Cvar_Get( "r_cubemapSize", "128", CVAR_ARCHIVE | CVAR_LATCH ); diff --git a/code/renderergl2/tr_local.h b/code/renderergl2/tr_local.h index 39f6f7a2..668dbbdd 100644 --- a/code/renderergl2/tr_local.h +++ b/code/renderergl2/tr_local.h @@ -1778,6 +1778,7 @@ extern cvar_t *r_normalMapping; extern cvar_t *r_specularMapping; extern cvar_t *r_deluxeMapping; extern cvar_t *r_parallaxMapping; +extern cvar_t *r_parallaxMapOffset; extern cvar_t *r_parallaxMapShadows; extern cvar_t *r_cubeMapping; extern cvar_t *r_cubemapSize; diff --git a/opengl2-readme.md b/opengl2-readme.md index c1a031c7..ee85c02c 100644 --- a/opengl2-readme.md +++ b/opengl2-readme.md @@ -184,6 +184,11 @@ Cvars for advanced material usage: 1 - Use parallax occlusion mapping. 2 - Use relief mapping. (slower) +* `r_parallaxMapOffset` - Set the parallax height offset. + 0 - Values map to -255 - 0. (default) + 0.5 - Values map to -127 - 127. + 1.0 - Values map to 0 - 255. + * `r_parallaxMapShadows` - Enable self-shadowing on parallax map supported materials. 0 - No. (default) From b8be5a8bd7f5489b0ef0343d3de56b98ea357798 Mon Sep 17 00:00:00 2001 From: James Canete Date: Tue, 6 Jul 2021 00:18:06 -0700 Subject: [PATCH 3/5] Fix line not removed in previous commit. --- code/renderergl2/glsl/lightall_fp.glsl | 1 - 1 file changed, 1 deletion(-) diff --git a/code/renderergl2/glsl/lightall_fp.glsl b/code/renderergl2/glsl/lightall_fp.glsl index 7d23b24d..ff7fc125 100644 --- a/code/renderergl2/glsl/lightall_fp.glsl +++ b/code/renderergl2/glsl/lightall_fp.glsl @@ -144,7 +144,6 @@ float RayIntersectDisplaceMap(vec2 dp, vec2 ds, sampler2D normalMap) } #endif - return bestDepth; return bestDepth - r_parallaxMapOffset; } From bc8737d707595aebd7cc11d6d5a5d65ede750f59 Mon Sep 17 00:00:00 2001 From: James Canete Date: Tue, 20 Jul 2021 13:51:19 -0700 Subject: [PATCH 4/5] OpenGL2: Flip normals for backfacing triangles. https://github.com/ioquake/ioq3/issues/513 --- code/renderergl2/glsl/lightall_fp.glsl | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/code/renderergl2/glsl/lightall_fp.glsl b/code/renderergl2/glsl/lightall_fp.glsl index ff7fc125..28b59eb7 100644 --- a/code/renderergl2/glsl/lightall_fp.glsl +++ b/code/renderergl2/glsl/lightall_fp.glsl @@ -264,7 +264,8 @@ void main() float NL, NH, NE, EH, attenuation; #if defined(USE_LIGHT) && !defined(USE_FAST_LIGHT) - mat3 tangentToWorld = mat3(var_Tangent.xyz, var_Bitangent.xyz, var_Normal.xyz); + vec3 surfNormal = (!gl_FrontFacing ? var_Normal : -var_Normal).xyz; + mat3 tangentToWorld = mat3(var_Tangent.xyz, var_Bitangent.xyz, surfNormal); viewDir = vec3(var_Normal.w, var_Tangent.w, var_Bitangent.w); E = normalize(viewDir); #endif @@ -335,7 +336,7 @@ void main() N.z = sqrt(clamp((0.25 - N.x * N.x) - N.y * N.y, 0.0, 1.0)); N = tangentToWorld * N; #else - N = var_Normal.xyz; + N = surfNormal; #endif N = normalize(N); @@ -361,7 +362,7 @@ void main() #if !defined(USE_LIGHT_VECTOR) ambientColor = lightColor; - float surfNL = clamp(dot(var_Normal.xyz, L), 0.0, 1.0); + float surfNL = clamp(dot(surfNormal, L), 0.0, 1.0); // reserve 25% ambient to avoid black areas on normalmaps lightColor *= 0.75; From 77d6cde137d9dca0ac4f2473d25c278bc65e34d9 Mon Sep 17 00:00:00 2001 From: Zack Middleton Date: Sun, 15 Aug 2021 12:07:02 -0400 Subject: [PATCH 5/5] Fix compiling against SDL 2.0.17 KMOD_RESERVED was replaced with KMOD_SCROLL. --- code/sdl/sdl_input.c | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/code/sdl/sdl_input.c b/code/sdl/sdl_input.c index 2ad324e3..63274c61 100644 --- a/code/sdl/sdl_input.c +++ b/code/sdl/sdl_input.c @@ -33,6 +33,10 @@ Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA #include "../client/client.h" #include "../sys/sys_local.h" +#if !SDL_VERSION_ATLEAST(2, 0, 17) +#define KMOD_SCROLL KMOD_RESERVED +#endif + static cvar_t *in_keyboardDebug = NULL; static SDL_GameController *gamepad = NULL; @@ -84,7 +88,7 @@ static void IN_PrintKey( const SDL_Keysym *keysym, keyNum_t key, qboolean down ) if( keysym->mod & KMOD_NUM ) Com_Printf( " KMOD_NUM" ); if( keysym->mod & KMOD_CAPS ) Com_Printf( " KMOD_CAPS" ); if( keysym->mod & KMOD_MODE ) Com_Printf( " KMOD_MODE" ); - if( keysym->mod & KMOD_RESERVED ) Com_Printf( " KMOD_RESERVED" ); + if( keysym->mod & KMOD_SCROLL ) Com_Printf( " KMOD_SCROLL" ); Com_Printf( " Q:0x%02x(%s)\n", key, Key_KeynumToString( key ) ); }