diff --git a/neo/renderer/ImageManager.cpp b/neo/renderer/ImageManager.cpp index eaa20120..ffe95956 100644 --- a/neo/renderer/ImageManager.cpp +++ b/neo/renderer/ImageManager.cpp @@ -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 ) { diff --git a/neo/renderer/NVRHI/RenderBackend_NVRHI.cpp b/neo/renderer/NVRHI/RenderBackend_NVRHI.cpp index 5602c2a9..97ccfb59 100644 --- a/neo/renderer/NVRHI/RenderBackend_NVRHI.cpp +++ b/neo/renderer/NVRHI/RenderBackend_NVRHI.cpp @@ -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 ) { diff --git a/neo/renderer/RenderProgs.cpp b/neo/renderer/RenderProgs.cpp index 7434b3bf..d605421f 100644 --- a/neo/renderer/RenderProgs.cpp +++ b/neo/renderer/RenderProgs.cpp @@ -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 ); diff --git a/neo/shaders/builtin/lighting/ambient_lightgrid_IBL.ps.hlsl b/neo/shaders/builtin/lighting/ambient_lightgrid_IBL.ps.hlsl index b6c5a5f0..dbf72c8c 100644 --- a/neo/shaders/builtin/lighting/ambient_lightgrid_IBL.ps.hlsl +++ b/neo/shaders/builtin/lighting/ambient_lightgrid_IBL.ps.hlsl @@ -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 diff --git a/neo/shaders/builtin/lighting/ambient_lighting_IBL.ps.hlsl b/neo/shaders/builtin/lighting/ambient_lighting_IBL.ps.hlsl index e1cd4182..b9315f94 100644 --- a/neo/shaders/builtin/lighting/ambient_lighting_IBL.ps.hlsl +++ b/neo/shaders/builtin/lighting/ambient_lighting_IBL.ps.hlsl @@ -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 );