Skip to content

Commit ad952b9

Browse files
committed
OpenGL2: Merge several cvars into r_pbr.
r_glossIsRoughness, r_specularIsMetallic, r_framebufferGamma, r_tonemapGamma, r_materialGamma, r_lightGamma
1 parent 41791c6 commit ad952b9

11 files changed

+88
-108
lines changed

code/renderergl2/glsl/calclevels4x_fp.glsl

+2-2
Original file line numberDiff line numberDiff line change
@@ -14,8 +14,8 @@ vec3 GetValues(vec2 offset, vec3 current)
1414

1515
#ifdef FIRST_PASS
1616

17-
#if defined(r_framebufferGamma)
18-
minAvgMax = pow(minAvgMax, vec3(r_framebufferGamma));
17+
#if defined(USE_PBR)
18+
minAvgMax = pow(minAvgMax, vec3(2.2));
1919
#endif
2020

2121
float lumi = max(dot(LUMINANCE_VECTOR, minAvgMax), 0.000001);

code/renderergl2/glsl/lightall_fp.glsl

+19-29
Original file line numberDiff line numberDiff line change
@@ -276,9 +276,9 @@ void main()
276276
attenuation = 1.0;
277277
#endif
278278

279-
#if defined(r_lightGamma)
280-
lightColor = pow(lightColor, vec3(r_lightGamma));
281-
ambientColor = pow(ambientColor, vec3(r_lightGamma));
279+
#if defined(USE_PBR)
280+
lightColor = pow(lightColor, vec3(2.2));
281+
ambientColor = pow(ambientColor, vec3(2.2));
282282
#endif
283283

284284
#if defined(USE_NORMALMAP)
@@ -319,7 +319,7 @@ void main()
319319

320320
// Recover any unused light as ambient, in case attenuation is over 4x or
321321
// light is below the surface
322-
ambientColor = clamp(ambientColor - lightColor * surfNL, 0.0, 1.0);
322+
ambientColor = max(ambientColor - lightColor * surfNL, vec3(0.0));
323323
#endif
324324

325325
vec3 reflectance;
@@ -335,21 +335,18 @@ void main()
335335

336336
specular *= u_SpecularScale;
337337

338-
#if defined(r_materialGamma)
339-
diffuse.rgb = pow(diffuse.rgb, vec3(r_materialGamma));
340-
#if !defined(SPECULAR_IS_METALLIC)
341-
specular.rgb = pow(specular.rgb, vec3(r_materialGamma));
342-
#endif
338+
#if defined(USE_PBR)
339+
diffuse.rgb = pow(diffuse.rgb, vec3(2.2));
343340
#endif
344341

345342
float gloss = specular.a;
346-
#if defined(GLOSS_IS_ROUGHNESS)
347-
float roughness = gloss;
343+
#if defined(USE_PBR)
344+
float roughness = 1.0 - specular.r;
348345
#else
349346
float roughness = exp2(-3.0 * gloss);
350347
#endif
351348

352-
#if defined(SPECULAR_IS_METALLIC)
349+
#if defined(USE_PBR)
353350
// diffuse is actually base color, and green of specular is metallicness
354351
float metallic = specular.g;
355352

@@ -374,7 +371,7 @@ void main()
374371
// from http://seblagarde.wordpress.com/2012/09/29/image-based-lighting-approaches-and-parallax-corrected-cubemap/
375372
vec3 parallax = u_CubeMapInfo.xyz + u_CubeMapInfo.w * viewDir;
376373

377-
#if defined(GLOSS_IS_ROUGHNESS)
374+
#if defined(USE_PBR)
378375
vec3 cubeLightColor = textureCubeLod(u_CubeMap, R + parallax, 7.0 * roughness).rgb * u_EnableTextures.w;
379376
#else
380377
vec3 cubeLightColor = textureCubeLod(u_CubeMap, R + parallax, 7.0 - gloss * 7.0).rgb * u_EnableTextures.w;
@@ -385,8 +382,8 @@ void main()
385382
//vec3 cubeLightDiffuse = max(textureCubeLod(u_CubeMap, N, 6.0).rgb, 0.5 / 255.0);
386383
//cubeLightColor /= dot(cubeLightDiffuse, vec3(0.2125, 0.7154, 0.0721));
387384

388-
#if defined(r_framebufferGamma)
389-
cubeLightColor = pow(cubeLightColor, vec3(r_framebufferGamma));
385+
#if defined(USE_PBR)
386+
cubeLightColor = pow(cubeLightColor, vec3(2.2));
390387
#endif
391388

392389
// multiply cubemap values by lighting
@@ -421,8 +418,8 @@ void main()
421418

422419
lightColor = u_PrimaryLightColor;
423420

424-
#if defined(r_lightGamma)
425-
lightColor = pow(lightColor, vec3(r_lightGamma));
421+
#if defined(USE_PBR)
422+
lightColor = pow(lightColor, vec3(2.2));
426423
#endif
427424

428425
#if defined(USE_SHADOWMAP)
@@ -434,28 +431,21 @@ void main()
434431

435432
gl_FragColor.rgb += lightColor * reflectance * NL2;
436433
#endif
434+
435+
#if defined(USE_PBR)
436+
gl_FragColor.rgb = pow(gl_FragColor.rgb, vec3(1.0 / 2.2));
437+
#endif
438+
437439
#else
438440
lightColor = var_Color.rgb;
439441

440442
#if defined(USE_LIGHTMAP)
441443
lightColor *= lightmapColor.rgb;
442444
#endif
443445

444-
#if defined(r_lightGamma)
445-
lightColor = pow(lightColor, vec3(r_lightGamma));
446-
#endif
447-
448-
#if defined(r_materialGamma)
449-
diffuse.rgb = pow(diffuse.rgb, vec3(r_materialGamma));
450-
#endif
451-
452446
gl_FragColor.rgb = diffuse.rgb * lightColor;
453447

454448
#endif
455449

456-
#if defined(r_framebufferGamma)
457-
gl_FragColor.rgb = pow(gl_FragColor.rgb, vec3(1.0 / r_framebufferGamma));
458-
#endif
459-
460450
gl_FragColor.a = diffuse.a * var_Color.a;
461451
}

code/renderergl2/glsl/tonemap_fp.glsl

+4-4
Original file line numberDiff line numberDiff line change
@@ -28,8 +28,8 @@ void main()
2828
{
2929
vec4 color = texture2D(u_TextureMap, var_TexCoords) * u_Color;
3030

31-
#if defined(r_framebufferGamma)
32-
color.rgb = pow(color.rgb, vec3(r_framebufferGamma));
31+
#if defined(USE_PBR)
32+
color.rgb = pow(color.rgb, vec3(2.2));
3333
#endif
3434

3535
vec3 minAvgMax = texture2D(u_LevelsMap, var_TexCoords).rgb;
@@ -46,8 +46,8 @@ void main()
4646

4747
color.rgb = clamp(color.rgb * var_InvWhite, 0.0, 1.0);
4848

49-
#if defined(r_tonemapGamma)
50-
color.rgb = pow(color.rgb, vec3(1.0 / r_tonemapGamma));
49+
#if defined(USE_PBR)
50+
color.rgb = pow(color.rgb, vec3(1.0 / 2.2));
5151
#endif
5252

5353
gl_FragColor = color;

code/renderergl2/tr_bsp.c

+2-2
Original file line numberDiff line numberDiff line change
@@ -141,7 +141,7 @@ static void R_ColorShiftLightingFloats(float in[4], float out[4], float scale )
141141
float r, g, b;
142142

143143
#if defined(USE_OVERBRIGHT)
144-
scale *= pow(2.0f, r_mapOverBrightBits->integer - tr.overbrightBits);
144+
scale *= 1 << (r_mapOverBrightBits->integer - tr.overbrightBits);
145145
#endif
146146

147147
r = in[0] * scale;
@@ -2762,7 +2762,7 @@ void R_LoadLightGrid( lump_t *l ) {
27622762
if (hdrLightGrid)
27632763
{
27642764
#if defined(USE_OVERBRIGHT)
2765-
float lightScale = pow(2, r_mapOverBrightBits->integer - tr.overbrightBits);
2765+
float lightScale = 1 << (r_mapOverBrightBits->integer - tr.overbrightBits);
27662766
#else
27672767
float lightScale = 1.0f;
27682768
#endif

code/renderergl2/tr_glsl.c

+2-17
Original file line numberDiff line numberDiff line change
@@ -322,17 +322,8 @@ static void GLSL_GetShaderHeader( GLenum shaderType, const GLcharARB *extra, cha
322322
Q_strcat(dest, size,
323323
va("#ifndef r_FBufScale\n#define r_FBufScale vec2(%f, %f)\n#endif\n", fbufWidthScale, fbufHeightScale));
324324

325-
if (r_materialGamma->value != 1.0f)
326-
Q_strcat(dest, size, va("#ifndef r_materialGamma\n#define r_materialGamma %f\n#endif\n", r_materialGamma->value));
327-
328-
if (r_lightGamma->value != 1.0f)
329-
Q_strcat(dest, size, va("#ifndef r_lightGamma\n#define r_lightGamma %f\n#endif\n", r_lightGamma->value));
330-
331-
if (r_framebufferGamma->value != 1.0f)
332-
Q_strcat(dest, size, va("#ifndef r_framebufferGamma\n#define r_framebufferGamma %f\n#endif\n", r_framebufferGamma->value));
333-
334-
if (r_tonemapGamma->value != 1.0f)
335-
Q_strcat(dest, size, va("#ifndef r_tonemapGamma\n#define r_tonemapGamma %f\n#endif\n", r_tonemapGamma->value));
325+
if (r_pbr->integer)
326+
Q_strcat(dest, size, "#define USE_PBR\n");
336327

337328
if (extra)
338329
{
@@ -1009,12 +1000,6 @@ void GLSL_InitGPUShaders(void)
10091000

10101001
extradefines[0] = '\0';
10111002

1012-
if (r_specularIsMetallic->value)
1013-
Q_strcat(extradefines, 1024, "#define SPECULAR_IS_METALLIC\n");
1014-
1015-
if (r_glossIsRoughness->value)
1016-
Q_strcat(extradefines, 1024, "#define GLOSS_IS_ROUGHNESS\n");
1017-
10181003
if (r_dlightMode->integer >= 2)
10191004
Q_strcat(extradefines, 1024, "#define USE_SHADOWMAP\n");
10201005

code/renderergl2/tr_image.c

+5
Original file line numberDiff line numberDiff line change
@@ -2858,6 +2858,11 @@ void R_SetColorMappings( void ) {
28582858
tr.overbrightBits = 0;
28592859
}
28602860

2861+
// don't allow more overbright bits than map overbright bits
2862+
if ( tr.overbrightBits > r_mapOverBrightBits->integer ) {
2863+
tr.overbrightBits = r_mapOverBrightBits->integer;
2864+
}
2865+
28612866
tr.identityLight = 1.0f / ( 1 << tr.overbrightBits );
28622867
tr.identityLightByte = 255 * tr.identityLight;
28632868

code/renderergl2/tr_init.c

+3-15
Original file line numberDiff line numberDiff line change
@@ -132,11 +132,6 @@ cvar_t *r_forceAutoExposure;
132132
cvar_t *r_forceAutoExposureMin;
133133
cvar_t *r_forceAutoExposureMax;
134134

135-
cvar_t *r_materialGamma;
136-
cvar_t *r_lightGamma;
137-
cvar_t *r_framebufferGamma;
138-
cvar_t *r_tonemapGamma;
139-
140135
cvar_t *r_depthPrepass;
141136
cvar_t *r_ssao;
142137

@@ -146,8 +141,7 @@ cvar_t *r_deluxeMapping;
146141
cvar_t *r_parallaxMapping;
147142
cvar_t *r_cubeMapping;
148143
cvar_t *r_cubemapSize;
149-
cvar_t *r_specularIsMetallic;
150-
cvar_t *r_glossIsRoughness;
144+
cvar_t *r_pbr;
151145
cvar_t *r_baseNormalX;
152146
cvar_t *r_baseNormalY;
153147
cvar_t *r_baseParallax;
@@ -1213,7 +1207,7 @@ void R_Register( void )
12131207
r_floatLightmap = ri.Cvar_Get( "r_floatLightmap", "0", CVAR_ARCHIVE | CVAR_LATCH );
12141208
r_postProcess = ri.Cvar_Get( "r_postProcess", "1", CVAR_ARCHIVE );
12151209

1216-
r_toneMap = ri.Cvar_Get( "r_toneMap", "1", CVAR_ARCHIVE | CVAR_LATCH );
1210+
r_toneMap = ri.Cvar_Get( "r_toneMap", "1", CVAR_ARCHIVE );
12171211
r_forceToneMap = ri.Cvar_Get( "r_forceToneMap", "0", CVAR_CHEAT );
12181212
r_forceToneMapMin = ri.Cvar_Get( "r_forceToneMapMin", "-8.0", CVAR_CHEAT );
12191213
r_forceToneMapAvg = ri.Cvar_Get( "r_forceToneMapAvg", "-2.0", CVAR_CHEAT );
@@ -1226,11 +1220,6 @@ void R_Register( void )
12261220

12271221
r_cameraExposure = ri.Cvar_Get( "r_cameraExposure", "0", CVAR_CHEAT );
12281222

1229-
r_materialGamma = ri.Cvar_Get( "r_materialGamma", "1.0", CVAR_ARCHIVE | CVAR_LATCH );
1230-
r_lightGamma = ri.Cvar_Get( "r_lightGamma", "1.0", CVAR_ARCHIVE | CVAR_LATCH );
1231-
r_framebufferGamma = ri.Cvar_Get( "r_framebufferGamma", "1.0", CVAR_ARCHIVE | CVAR_LATCH );
1232-
r_tonemapGamma = ri.Cvar_Get( "r_tonemapGamma", "1.0", CVAR_ARCHIVE | CVAR_LATCH );
1233-
12341223
r_depthPrepass = ri.Cvar_Get( "r_depthPrepass", "1", CVAR_ARCHIVE );
12351224
r_ssao = ri.Cvar_Get( "r_ssao", "0", CVAR_LATCH | CVAR_ARCHIVE );
12361225

@@ -1240,8 +1229,7 @@ void R_Register( void )
12401229
r_parallaxMapping = ri.Cvar_Get( "r_parallaxMapping", "0", CVAR_ARCHIVE | CVAR_LATCH );
12411230
r_cubeMapping = ri.Cvar_Get( "r_cubeMapping", "0", CVAR_ARCHIVE | CVAR_LATCH );
12421231
r_cubemapSize = ri.Cvar_Get( "r_cubemapSize", "128", CVAR_ARCHIVE | CVAR_LATCH );
1243-
r_specularIsMetallic = ri.Cvar_Get( "r_specularIsMetallic", "0", CVAR_ARCHIVE | CVAR_LATCH );
1244-
r_glossIsRoughness = ri.Cvar_Get("r_glossIsRoughness", "0", CVAR_ARCHIVE | CVAR_LATCH);
1232+
r_pbr = ri.Cvar_Get("r_pbr", "0", CVAR_ARCHIVE | CVAR_LATCH);
12451233
r_baseNormalX = ri.Cvar_Get( "r_baseNormalX", "1.0", CVAR_ARCHIVE | CVAR_LATCH );
12461234
r_baseNormalY = ri.Cvar_Get( "r_baseNormalY", "1.0", CVAR_ARCHIVE | CVAR_LATCH );
12471235
r_baseParallax = ri.Cvar_Get( "r_baseParallax", "0.05", CVAR_ARCHIVE | CVAR_LATCH );

code/renderergl2/tr_local.h

+1-7
Original file line numberDiff line numberDiff line change
@@ -1776,11 +1776,6 @@ extern cvar_t *r_forceAutoExposureMax;
17761776

17771777
extern cvar_t *r_cameraExposure;
17781778

1779-
extern cvar_t *r_materialGamma;
1780-
extern cvar_t *r_lightGamma;
1781-
extern cvar_t *r_framebufferGamma;
1782-
extern cvar_t *r_tonemapGamma;
1783-
17841779
extern cvar_t *r_depthPrepass;
17851780
extern cvar_t *r_ssao;
17861781

@@ -1790,8 +1785,7 @@ extern cvar_t *r_deluxeMapping;
17901785
extern cvar_t *r_parallaxMapping;
17911786
extern cvar_t *r_cubeMapping;
17921787
extern cvar_t *r_cubemapSize;
1793-
extern cvar_t *r_specularIsMetallic;
1794-
extern cvar_t *r_glossIsRoughness;
1788+
extern cvar_t *r_pbr;
17951789
extern cvar_t *r_baseNormalX;
17961790
extern cvar_t *r_baseNormalY;
17971791
extern cvar_t *r_baseParallax;

code/renderergl2/tr_scene.c

+1-1
Original file line numberDiff line numberDiff line change
@@ -336,7 +336,7 @@ void RE_BeginScene(const refdef_t *fd)
336336
else
337337
{
338338
#if defined(USE_OVERBRIGHT)
339-
float scale = pow(2, r_mapOverBrightBits->integer - tr.overbrightBits - 8);
339+
float scale = (1 << (r_mapOverBrightBits->integer - tr.overbrightBits)) / 255.0f;;
340340
#else
341341
float scale = (1 << r_mapOverBrightBits->integer) / 255.0f;
342342
#endif

0 commit comments

Comments
 (0)