Removed obsolete samplers from lightgrid/envprobe shaders

This commit is contained in:
Robert Beckebans 2022-03-14 10:47:20 +01:00
parent 851e8179bb
commit 59349e88f3
5 changed files with 33 additions and 41 deletions

View file

@ -897,10 +897,13 @@ int idImageManager::LoadLevelImages( bool pacifier )
{
idImage* image = images[ i ];
#if !defined( USE_NVRHI )
if( pacifier )
{
// SP: Cannot update the pacifier because then two command lists would be open at once.
common->UpdateLevelLoadPacifier();
}
#endif
if( image->generatorFunction )
{

View file

@ -744,9 +744,7 @@ void idRenderBackend::GetCurrentBindingLayout( nvrhi::BindingSetDesc& bindingSet
.addItem( nvrhi::BindingSetItem::Texture_SRV( 9, ( nvrhi::ITexture* )GetImageAt( 9 )->GetTextureID() ) )
.addItem( nvrhi::BindingSetItem::Texture_SRV( 10, ( nvrhi::ITexture* )GetImageAt( 10 )->GetTextureID() ) )
.addItem( nvrhi::BindingSetItem::Sampler( 0, commonPasses.m_AnisotropicWrapSampler ) )
.addItem( nvrhi::BindingSetItem::Sampler( 1, commonPasses.m_PointWrapSampler ) )
.addItem( nvrhi::BindingSetItem::Sampler( 2, commonPasses.m_LinearClampSampler ) )
.addItem( nvrhi::BindingSetItem::Sampler( 3, commonPasses.m_AnisotropicClampEdgeSampler ) );
.addItem( nvrhi::BindingSetItem::Sampler( 1, commonPasses.m_LinearClampSampler ) );
}
else if( renderProgManager.BindingLayoutType() == BINDING_LAYOUT_DRAW_AO )
{

View file

@ -192,9 +192,7 @@ void idRenderProgManager::Init( nvrhi::IDevice* _device )
.addItem( nvrhi::BindingLayoutItem::Texture_SRV( 9 ) ) // radiance cube map 2
.addItem( nvrhi::BindingLayoutItem::Texture_SRV( 10 ) ) // radiance cube map 3
.addItem( nvrhi::BindingLayoutItem::Sampler( 0 ) ) // (Wrap) Anisotropic sampler: normal sampler & specular sampler
.addItem( nvrhi::BindingLayoutItem::Sampler( 1 ) ) // (Wrap) Point sampler: base color sampler
.addItem( nvrhi::BindingLayoutItem::Sampler( 2 ) ) // (Clamp) Linear sampler: brdf lut sampler & ssao sampler
.addItem( nvrhi::BindingLayoutItem::Sampler( 3 ) ); // (Clamp) Anisotropic sampler: irradiance, radiance 1, 2 and 3.
.addItem( nvrhi::BindingLayoutItem::Sampler( 1 ) ); // (Clamp) Linear sampler: brdf lut sampler & ssao sampler
bindingLayouts[BINDING_LAYOUT_AMBIENT_LIGHTING_IBL] = device->createBindingLayout( ambientIblLayoutDesc );

View file

@ -44,10 +44,9 @@ Texture2D t_RadianceCubeMap1 : register( t8 );
Texture2D t_RadianceCubeMap2 : register( t9 );
Texture2D t_RadianceCubeMap3 : register( t10 );
SamplerState samp0 : register( s0 ); // (Wrap) Anisotropic sampler: normal sampler & specular sampler
SamplerState samp1 : register( s1 ); // (Wrap) Point sampler: base color sampler
SamplerState samp2 : register( s2 ); // (Clamp) Linear sampler: brdf lut sampler & ssao sampler
SamplerState samp3 : register( s3 ); // (Clamp) Anisotropic sampler: irradiance, radiance 1, 2 and 3.
SamplerState s_Material : register( s0 ); // (Wrap) Anisotropic sampler: normal sampler & specular sampler
SamplerState s_LinearClamp : register( s1 ); // (Clamp) Linear sampler: brdf lut sampler & ssao sampler
//SamplerState s_Light : register( s2 ); // (Clamp) Anisotropic sampler: irradiance, radiance 1, 2 and 3.
struct PS_IN
{
@ -128,9 +127,9 @@ bool AABBRayIntersection( float3 b[2], float3 start, float3 dir, out float scale
void main( PS_IN fragment, out PS_OUT result )
{
half4 bumpMap = t_Normal.Sample( samp0, fragment.texcoord0.xy );
half4 YCoCG = t_BaseColor.Sample( samp1, fragment.texcoord1.xy );
half4 specMapSRGB = t_Specular.Sample( samp0, fragment.texcoord2.xy );
half4 bumpMap = t_Normal.Sample( s_Material, fragment.texcoord0.xy );
half4 YCoCG = t_BaseColor.Sample( s_Material, fragment.texcoord1.xy );
half4 specMapSRGB = t_Specular.Sample( s_Material, fragment.texcoord2.xy );
half4 specMap = sRGBAToLinearRGBA( specMapSRGB );
half3 diffuseMap = sRGBToLinearRGB( ConvertYCoCgToRGB( YCoCG ) );
@ -196,7 +195,7 @@ void main( PS_IN fragment, out PS_OUT result )
// values in a very narrow range (~0.02 - 0.08)
// approximate non-metals with linear RGB 0.04 which is 0.08 * 0.5 (default in UE4)
const half3 dielectricColor = half3( 0.04, 0.04, 0.04 );
const half3 dielectricColor = _half3( 0.04 );
// derive diffuse and specular from albedo(m) base color
const half3 baseColor = diffuseMap;
@ -238,7 +237,7 @@ void main( PS_IN fragment, out PS_OUT result )
float2 screenTexCoord = fragment.position.xy * rpWindowCoord.xy;
float ao = 1.0;
ao = t_Ssao.Sample( samp2, screenTexCoord ).r;
ao = t_Ssao.Sample( s_LinearClamp, screenTexCoord ).r;
//diffuseColor.rgb *= ao;
@ -366,7 +365,7 @@ void main( PS_IN fragment, out PS_OUT result )
float2 atlasCoord = normalizedOctCoordZeroOne + atlasOffset;
#endif
float3 color = t_IrradianceCubeMap.Sample( samp3, atlasCoord, 0 ).rgb;
float3 color = t_IrradianceCubeMap.Sample( s_LinearClamp, atlasCoord, 0 ).rgb;
if( ( color.r + color.g + color.b ) < 0.0001 )
{
@ -402,18 +401,12 @@ void main( PS_IN fragment, out PS_OUT result )
normalizedOctCoord = octEncode( reflectionVector );
normalizedOctCoordZeroOne = ( normalizedOctCoord + float2( 1.0, 1.0 ) ) * 0.5;
float3 radiance = t_RadianceCubeMap1.SampleLevel( samp3, normalizedOctCoordZeroOne, mip ).rgb * rpLocalLightOrigin.x;
radiance += t_RadianceCubeMap2.SampleLevel( samp3, normalizedOctCoordZeroOne, mip ).rgb * rpLocalLightOrigin.y;
radiance += t_RadianceCubeMap3.SampleLevel( samp3, normalizedOctCoordZeroOne, mip ).rgb * rpLocalLightOrigin.z;
float3 radiance = t_RadianceCubeMap1.SampleLevel( s_LinearClamp, normalizedOctCoordZeroOne, mip ).rgb * rpLocalLightOrigin.x;
radiance += t_RadianceCubeMap2.SampleLevel( s_LinearClamp, normalizedOctCoordZeroOne, mip ).rgb * rpLocalLightOrigin.y;
radiance += t_RadianceCubeMap3.SampleLevel( s_LinearClamp, normalizedOctCoordZeroOne, mip ).rgb * rpLocalLightOrigin.z;
//radiance = float3( 0.0 );
// RB: HACK dim down room radiance by better local irradiance brightness
//float luma = PhotoLuma( irradiance );
//float luma = dot( irradiance, LUMINANCE_LINEAR.rgb );
//float luma = length( irradiance.rgb );
//radiance *= ( luma * rpSpecularModifier.x * 3.0 );
float2 envBRDF = t_BrdfLut.Sample( samp2, float2( max( vDotN, 0.0 ), roughness ) ).rg;
float2 envBRDF = t_BrdfLut.Sample( s_LinearClamp, float2( max( vDotN, 0.0 ), roughness ) ).rg;
#if 0
result.color.rgb = float3( envBRDF.x, envBRDF.y, 0.0 );
@ -422,7 +415,7 @@ void main( PS_IN fragment, out PS_OUT result )
#endif
float specAO = ComputeSpecularAO( vDotN, ao, roughness );
float3 specularLight = radiance * ( kS * envBRDF.x + float3( envBRDF.y, envBRDF.y, envBRDF.y ) ) * specAO * ( rpSpecularModifier.xyz * 1.0 );
float3 specularLight = radiance * ( kS * envBRDF.x + envBRDF.y ) * specAO * ( rpSpecularModifier.xyz * 1.0 );
#if 1
// Marmoset Horizon Fade trick

View file

@ -44,10 +44,9 @@ Texture2D t_RadianceCubeMap1 : register( t8 );
Texture2D t_RadianceCubeMap2 : register( t9 );
Texture2D t_RadianceCubeMap3 : register( t10 );
SamplerState samp0 : register(s0); // (Wrap) Anisotropic sampler: normal sampler & specular sampler
SamplerState samp1 : register(s1); // (Wrap) Point sampler: base color sampler
SamplerState samp2 : register(s2); // (Clamp) Linear sampler: brdf lut sampler & ssao sampler
SamplerState samp3 : register(s3); // (Clamp) Anisotropic sampler: irradiance, radiance 1, 2 and 3.
SamplerState s_Material : register( s0 ); // (Wrap) Anisotropic sampler: normal sampler & specular sampler
SamplerState s_LinearClamp : register( s1 ); // (Clamp) Linear sampler: brdf lut sampler & ssao sampler
//SamplerState s_Light : register( s2 ); // (Clamp) Anisotropic sampler: irradiance, radiance 1, 2 and 3.
struct PS_IN
{
@ -148,10 +147,10 @@ float2 OctTexCoord( float3 worldDir )
void main( PS_IN fragment, out PS_OUT result )
{
half4 bumpMap = t_Normal.Sample( samp0, fragment.texcoord0.xy );
half4 YCoCG = t_BaseColor.Sample( samp1, fragment.texcoord1.xy );
half4 specMapSRGB = t_Specular.Sample( samp0, fragment.texcoord2.xy );
half4 specMap = sRGBAToLinearRGBA( specMapSRGB );
half4 bumpMap = t_Normal.Sample( s_Material, fragment.texcoord0.xy );
half4 YCoCG = t_BaseColor.Sample( s_Material, fragment.texcoord1.xy );
half4 specMapSRGB = t_Specular.Sample( s_Material, fragment.texcoord2.xy );
half4 specMap = sRGBAToLinearRGBA( specMapSRGB );
half3 diffuseMap = sRGBToLinearRGB( ConvertYCoCgToRGB( YCoCG ) );
@ -258,14 +257,15 @@ void main( PS_IN fragment, out PS_OUT result )
float2 screenTexCoord = fragment.position.xy * rpWindowCoord.xy;
float ao = 1.0;
ao = t_Ssao.Sample( samp2, screenTexCoord ).r;
ao = t_Ssao.Sample( s_LinearClamp, screenTexCoord ).r;
//diffuseColor.rgb *= ao;
// evaluate diffuse IBL
float2 normalizedOctCoordZeroOne = OctTexCoord( globalNormal );
float3 irradiance = t_IrradianceCubeMap.Sample( samp2, normalizedOctCoordZeroOne ).rgb;
float3 irradiance = t_IrradianceCubeMap.Sample( s_LinearClamp, normalizedOctCoordZeroOne ).rgb;
float3 diffuseLight = ( kD * irradiance * diffuseColor ) * ao * ( rpDiffuseModifier.xyz * 1.0 );
// evaluate specular IBL
@ -279,12 +279,12 @@ void main( PS_IN fragment, out PS_OUT result )
normalizedOctCoordZeroOne = OctTexCoord( reflectionVector );
float3 radiance = t_RadianceCubeMap1.SampleLevel( samp3, normalizedOctCoordZeroOne, mip ).rgb * rpLocalLightOrigin.x;
radiance += t_RadianceCubeMap2.SampleLevel( samp3, normalizedOctCoordZeroOne, mip ).rgb * rpLocalLightOrigin.y;
radiance += t_RadianceCubeMap3.SampleLevel( samp3, normalizedOctCoordZeroOne, mip ).rgb * rpLocalLightOrigin.z;
float3 radiance = t_RadianceCubeMap1.SampleLevel( s_LinearClamp, normalizedOctCoordZeroOne, mip ).rgb * rpLocalLightOrigin.x;
radiance += t_RadianceCubeMap2.SampleLevel( s_LinearClamp, normalizedOctCoordZeroOne, mip ).rgb * rpLocalLightOrigin.y;
radiance += t_RadianceCubeMap3.SampleLevel( s_LinearClamp, normalizedOctCoordZeroOne, mip ).rgb * rpLocalLightOrigin.z;
//radiance = float3( 0.0 );
float2 envBRDF = t_BrdfLut.SampleLevel( samp2, float2( max( vDotN, 0.0 ), roughness ), 0 ).rg;
float2 envBRDF = t_BrdfLut.Sample( s_LinearClamp, float2( max( vDotN, 0.0 ), roughness ) ).rg;
#if 0
result.color.rgb = float3( envBRDF.x, envBRDF.y, 0.0 );