mirror of
https://github.com/id-Software/DOOM-3-BFG.git
synced 2025-03-14 06:34:10 +00:00
Fixed OpenGL backend, Added r_usePBR to toggle Image Based Lighting
This commit is contained in:
parent
527b1fbfd5
commit
fa3df4e2d2
9 changed files with 77 additions and 33 deletions
|
@ -224,7 +224,7 @@ void main( PS_IN fragment, out PS_OUT result )
|
|||
}
|
||||
|
||||
shadow *= stepSize;
|
||||
#else
|
||||
#elif 1
|
||||
|
||||
const float2 poissonDisk[12] = float2[](
|
||||
float2(0.6111618, 0.1050905),
|
||||
|
@ -269,7 +269,9 @@ void main( PS_IN fragment, out PS_OUT result )
|
|||
|
||||
shadow *= stepSize;
|
||||
|
||||
//float shadow = texture( samp5, shadowTexcoord.xywz );
|
||||
#else
|
||||
|
||||
float shadow = texture( samp5, shadowTexcoord.xywz );
|
||||
#endif
|
||||
|
||||
|
||||
|
|
|
@ -200,7 +200,7 @@ static srfTriangles_t* R_CreateInteractionLightTris( const idRenderEntityLocal*
|
|||
// it is debatable if non-shadowing lights should light back faces. we aren't at the moment
|
||||
// RB: now we do with r_useHalfLambert, so don't cull back faces if we have smooth shadowing enabled
|
||||
if( r_lightAllBackFaces.GetBool() || light->lightShader->LightEffectsBackSides()
|
||||
|| shader->ReceivesLightingOnBackSides() || ent->parms.noSelfShadow || ent->parms.noShadow || ( r_useHalfLambertLighting.GetInteger() && r_useShadowMapping.GetBool() ) )
|
||||
|| shader->ReceivesLightingOnBackSides() || ent->parms.noSelfShadow || ent->parms.noShadow || r_usePBR.GetBool() || ( r_useHalfLambertLighting.GetInteger() && r_useShadowMapping.GetBool() ) )
|
||||
{
|
||||
includeBackFaces = true;
|
||||
}
|
||||
|
|
|
@ -1491,10 +1491,23 @@ void idRenderBackend::CheckCVars()
|
|||
}
|
||||
}
|
||||
|
||||
if( r_useHDR.IsModified() || r_useHalfLambertLighting.IsModified() )
|
||||
if( r_usePBR.IsModified() || r_useHDR.IsModified() || r_useHalfLambertLighting.IsModified() )
|
||||
{
|
||||
bool needShaderReload = false;
|
||||
|
||||
if( r_usePBR.GetBool() && r_useHalfLambertLighting.GetBool() )
|
||||
{
|
||||
r_useHalfLambertLighting.SetBool( false );
|
||||
|
||||
needShaderReload = true;
|
||||
}
|
||||
|
||||
needShaderReload |= r_useHDR.IsModified();
|
||||
|
||||
r_usePBR.ClearModified();
|
||||
r_useHDR.ClearModified();
|
||||
r_useHalfLambertLighting.ClearModified();
|
||||
|
||||
renderProgManager.KillAllShaders();
|
||||
renderProgManager.LoadAllShaders();
|
||||
}
|
||||
|
@ -1598,6 +1611,8 @@ STENCIL SHADOW RENDERING
|
|||
idRenderBackend::DrawStencilShadowPass
|
||||
=====================
|
||||
*/
|
||||
extern idCVar r_useStencilShadowPreload;
|
||||
|
||||
void idRenderBackend::DrawStencilShadowPass( const drawSurf_t* drawSurf, const bool renderZPass )
|
||||
{
|
||||
if( renderZPass )
|
||||
|
|
|
@ -213,7 +213,7 @@ void idRenderProgManager::LoadShader( shader_t& shader )
|
|||
|
||||
idStr hlslCode( hlslFileBuffer );
|
||||
idStr programHLSL = StripDeadCode( hlslCode, inFile, compileMacros, shader.builtin );
|
||||
programGLSL = ConvertCG2GLSL( programHLSL, inFile.c_str(), shader.stage, programUniforms, false, hasGPUSkinning );
|
||||
programGLSL = ConvertCG2GLSL( programHLSL, inFile.c_str(), shader.stage, programUniforms, false, hasGPUSkinning, shader.vertexLayout );
|
||||
|
||||
fileSystem->WriteFile( outFileHLSL, programHLSL.c_str(), programHLSL.Length(), "fs_savepath" );
|
||||
fileSystem->WriteFile( outFileGLSL, programGLSL.c_str(), programGLSL.Length(), "fs_savepath" );
|
||||
|
|
|
@ -1992,6 +1992,16 @@ void idRenderBackend::AmbientPass( const drawSurf_t* const* drawSurfs, int numDr
|
|||
|
||||
const bool hdrIsActive = ( r_useHDR.GetBool() && globalFramebuffers.hdrFBO != NULL && globalFramebuffers.hdrFBO->IsBound() );
|
||||
|
||||
if( !fillGbuffer )
|
||||
{
|
||||
if( r_forceAmbient.GetFloat() <= 0 || r_skipAmbient.GetBool() )
|
||||
{
|
||||
// clear gbuffer
|
||||
GL_Clear( true, false, false, 0, 0.0f, 0.0f, 0.0f, 1.0f, false );
|
||||
return;
|
||||
}
|
||||
}
|
||||
|
||||
/*
|
||||
if( fillGbuffer )
|
||||
{
|
||||
|
@ -2034,8 +2044,15 @@ void idRenderBackend::AmbientPass( const drawSurf_t* const* drawSurfs, int numDr
|
|||
|
||||
idVec4 ambientColor;
|
||||
float ambientBoost = 1.0f;
|
||||
ambientBoost += r_useSSAO.GetBool() ? 0.2f : 0.0f;
|
||||
ambientBoost *= r_useHDR.GetBool() ? 1.1f : 1.0f;
|
||||
|
||||
if( !r_usePBR.GetBool() )
|
||||
{
|
||||
ambientBoost += r_useSSAO.GetBool() ? 0.2f : 0.0f;
|
||||
ambientBoost *= r_useHDR.GetBool() ? 1.1f : 1.0f;
|
||||
}
|
||||
|
||||
bool useIBL = r_usePBR.GetBool() && !fillGbuffer;
|
||||
|
||||
ambientColor.x = r_forceAmbient.GetFloat() * ambientBoost;
|
||||
ambientColor.y = r_forceAmbient.GetFloat() * ambientBoost;
|
||||
ambientColor.z = r_forceAmbient.GetFloat() * ambientBoost;
|
||||
|
@ -2101,33 +2118,36 @@ void idRenderBackend::AmbientPass( const drawSurf_t* const* drawSurfs, int numDr
|
|||
else
|
||||
#endif
|
||||
{
|
||||
#if 1
|
||||
// draw Quake 4 style ambient
|
||||
if( drawSurf->jointCache )
|
||||
if( useIBL )
|
||||
{
|
||||
renderProgManager.BindShader_ImageBasedLightingSkinned();
|
||||
// draw Quake 4 style ambient
|
||||
if( drawSurf->jointCache )
|
||||
{
|
||||
renderProgManager.BindShader_ImageBasedLightingSkinned();
|
||||
}
|
||||
else
|
||||
{
|
||||
renderProgManager.BindShader_ImageBasedLighting();
|
||||
}
|
||||
|
||||
GL_SelectTexture( INTERACTION_TEXUNIT_AMBIENT_CUBE1 );
|
||||
globalImages->defaultUACIrradianceCube->Bind();
|
||||
|
||||
GL_SelectTexture( INTERACTION_TEXUNIT_SPECULAR_CUBE1 );
|
||||
globalImages->defaultUACRadianceCube->Bind();
|
||||
}
|
||||
else
|
||||
{
|
||||
renderProgManager.BindShader_ImageBasedLighting();
|
||||
// draw Quake 4 style ambient
|
||||
if( drawSurf->jointCache )
|
||||
{
|
||||
renderProgManager.BindShader_AmbientLightingSkinned();
|
||||
}
|
||||
else
|
||||
{
|
||||
renderProgManager.BindShader_AmbientLighting();
|
||||
}
|
||||
}
|
||||
|
||||
GL_SelectTexture( INTERACTION_TEXUNIT_AMBIENT_CUBE1 );
|
||||
globalImages->defaultUACIrradianceCube->Bind();
|
||||
|
||||
GL_SelectTexture( INTERACTION_TEXUNIT_SPECULAR_CUBE1 );
|
||||
globalImages->defaultUACRadianceCube->Bind();
|
||||
#else
|
||||
// draw Quake 4 style ambient
|
||||
if( drawSurf->jointCache )
|
||||
{
|
||||
renderProgManager.BindShader_AmbientLightingSkinned();
|
||||
}
|
||||
else
|
||||
{
|
||||
renderProgManager.BindShader_AmbientLighting();
|
||||
}
|
||||
#endif
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -2292,7 +2312,7 @@ void idRenderBackend::AmbientPass( const drawSurf_t* const* drawSurfs, int numDr
|
|||
// draw any previous interaction
|
||||
if( inter.bumpImage != NULL )
|
||||
{
|
||||
DrawSingleInteraction( &inter, !fillGbuffer );
|
||||
DrawSingleInteraction( &inter, useIBL );
|
||||
}
|
||||
inter.bumpImage = surfaceStage->texture.image;
|
||||
inter.diffuseImage = NULL;
|
||||
|
@ -2313,7 +2333,7 @@ void idRenderBackend::AmbientPass( const drawSurf_t* const* drawSurfs, int numDr
|
|||
// draw any previous interaction
|
||||
if( inter.diffuseImage != NULL )
|
||||
{
|
||||
DrawSingleInteraction( &inter, !fillGbuffer );
|
||||
DrawSingleInteraction( &inter, useIBL );
|
||||
}
|
||||
|
||||
inter.diffuseImage = surfaceStage->texture.image;
|
||||
|
@ -2333,7 +2353,7 @@ void idRenderBackend::AmbientPass( const drawSurf_t* const* drawSurfs, int numDr
|
|||
// draw any previous interaction
|
||||
if( inter.specularImage != NULL )
|
||||
{
|
||||
DrawSingleInteraction( &inter, !fillGbuffer );
|
||||
DrawSingleInteraction( &inter, useIBL );
|
||||
}
|
||||
inter.specularImage = surfaceStage->texture.image;
|
||||
inter.vertexColor = surfaceStage->vertexColor;
|
||||
|
@ -2345,7 +2365,7 @@ void idRenderBackend::AmbientPass( const drawSurf_t* const* drawSurfs, int numDr
|
|||
}
|
||||
|
||||
// draw the final interaction
|
||||
DrawSingleInteraction( &inter, !fillGbuffer );
|
||||
DrawSingleInteraction( &inter, useIBL );
|
||||
|
||||
renderLog.CloseBlock();
|
||||
}
|
||||
|
|
|
@ -1118,6 +1118,8 @@ extern idCVar r_ssaoDebug;
|
|||
extern idCVar r_ssaoFiltering;
|
||||
extern idCVar r_useHierarchicalDepthBuffer;
|
||||
|
||||
extern idCVar r_usePBR;
|
||||
|
||||
extern idCVar r_exposure;
|
||||
// RB end
|
||||
|
||||
|
|
|
@ -230,6 +230,7 @@ void idRenderProgManager::Init()
|
|||
|
||||
r_useHalfLambertLighting.ClearModified();
|
||||
r_useHDR.ClearModified();
|
||||
r_usePBR.ClearModified();
|
||||
|
||||
uniforms.SetNum( RENDERPARM_TOTAL, vec4_zero );
|
||||
|
||||
|
|
|
@ -839,11 +839,13 @@ private:
|
|||
progId( INVALID_PROGID ),
|
||||
shaderFeatures( 0 ),
|
||||
builtin( false ),
|
||||
vertexLayout( LAYOUT_DRAW_VERT ),
|
||||
uniformArray( -1 ) {}
|
||||
idStr name;
|
||||
idStr nameOutSuffix;
|
||||
uint32 shaderFeatures; // RB: Cg compile macros
|
||||
bool builtin; // RB: part of the core shaders built into the executable
|
||||
vertexLayoutType_t vertexLayout;
|
||||
rpStage_t stage;
|
||||
uint progId;
|
||||
int uniformArray;
|
||||
|
|
|
@ -283,6 +283,8 @@ idCVar r_ssaoDebug( "r_ssaoDebug", "0", CVAR_RENDERER | CVAR_INTEGER, "" );
|
|||
idCVar r_ssaoFiltering( "r_ssaoFiltering", "1", CVAR_RENDERER | CVAR_BOOL, "" );
|
||||
idCVar r_useHierarchicalDepthBuffer( "r_useHierarchicalDepthBuffer", "1", CVAR_RENDERER | CVAR_BOOL, "" );
|
||||
|
||||
idCVar r_usePBR( "r_usePBR", "1", CVAR_RENDERER | CVAR_ARCHIVE | CVAR_BOOL, "use Physically Based Rendering inlcuding Image Based Lighting" );
|
||||
|
||||
idCVar r_exposure( "r_exposure", "0.5", CVAR_ARCHIVE | CVAR_RENDERER | CVAR_FLOAT, "HDR exposure or LDR brightness [0.0 .. 1.0]", 0.0f, 1.0f );
|
||||
// RB end
|
||||
|
||||
|
|
Loading…
Reference in a new issue