diff --git a/Source/Engine/Graphics/Materials/MaterialShader.h b/Source/Engine/Graphics/Materials/MaterialShader.h
index aedf2e870..117246671 100644
--- a/Source/Engine/Graphics/Materials/MaterialShader.h
+++ b/Source/Engine/Graphics/Materials/MaterialShader.h
@@ -10,7 +10,7 @@
///
/// Current materials shader version.
///
-#define MATERIAL_GRAPH_VERSION 174
+#define MATERIAL_GRAPH_VERSION 175
class Material;
class GPUShader;
diff --git a/Source/Engine/Graphics/Materials/MaterialShaderFeatures.cpp b/Source/Engine/Graphics/Materials/MaterialShaderFeatures.cpp
index 0dae6c93e..a140fb577 100644
--- a/Source/Engine/Graphics/Materials/MaterialShaderFeatures.cpp
+++ b/Source/Engine/Graphics/Materials/MaterialShaderFeatures.cpp
@@ -2,6 +2,7 @@
#include "MaterialShaderFeatures.h"
#include "Engine/Graphics/RenderTask.h"
+#include "Engine/Graphics/RenderBuffers.h"
#include "Engine/Graphics/Textures/GPUTexture.h"
#include "Engine/Renderer/RenderList.h"
#include "Engine/Renderer/ShadowsPass.h"
@@ -24,18 +25,27 @@ void ForwardShadingFeature::Bind(MaterialShader::BindParameters& params, SpanFog)
{
cache->Fog->GetExponentialHeightFogData(view, data.ExponentialHeightFog);
+ VolumetricFogOptions volumetricFog;
+ cache->Fog->GetVolumetricFogOptions(volumetricFog);
+ if (volumetricFog.UseVolumetricFog() && params.RenderContext.Buffers->VolumetricFog)
+ volumetricFogTexture = params.RenderContext.Buffers->VolumetricFog->ViewVolume();
+ else
+ data.ExponentialHeightFog.VolumetricFogMaxDistance = -1.0f;
}
else
{
data.ExponentialHeightFog.FogMinOpacity = 1.0f;
data.ExponentialHeightFog.ApplyDirectionalInscattering = 0.0f;
}
+ params.GPUContext->BindSR(volumetricFogTextureRegisterIndex, volumetricFogTexture);
// Set directional light input
if (cache->DirectionalLights.HasItems())
diff --git a/Source/Engine/Graphics/Materials/MaterialShaderFeatures.h b/Source/Engine/Graphics/Materials/MaterialShaderFeatures.h
index 25689e765..54b91af23 100644
--- a/Source/Engine/Graphics/Materials/MaterialShaderFeatures.h
+++ b/Source/Engine/Graphics/Materials/MaterialShaderFeatures.h
@@ -25,7 +25,7 @@ struct ForwardShadingFeature : MaterialShaderFeature
{
enum { MaxLocalLights = 4 };
- enum { SRVs = 4 };
+ enum { SRVs = 5 };
PACK_STRUCT(struct Data
{
diff --git a/Source/Shaders/ExponentialHeightFog.hlsl b/Source/Shaders/ExponentialHeightFog.hlsl
index f6fb918f5..b5af721d8 100644
--- a/Source/Shaders/ExponentialHeightFog.hlsl
+++ b/Source/Shaders/ExponentialHeightFog.hlsl
@@ -92,4 +92,9 @@ float4 GetExponentialHeightFog(ExponentialHeightFogData exponentialHeightFog, fl
return GetExponentialHeightFog(exponentialHeightFog, posWS, camWS, skipDistance, distance(posWS, camWS));
}
+float4 CombineVolumetricFog(float4 fog, float4 volumetricFog)
+{
+ return float4(volumetricFog.rgb + fog.rgb * volumetricFog.a, volumetricFog.a * fog.a);
+}
+
#endif
diff --git a/Source/Shaders/Fog.shader b/Source/Shaders/Fog.shader
index dfea921cc..5c4344688 100644
--- a/Source/Shaders/Fog.shader
+++ b/Source/Shaders/Fog.shader
@@ -63,7 +63,7 @@ float4 PS_Fog(Quad_VS2PS input) : SV_Target0
#if VOLUMETRIC_FOG
// Sample volumetric fog and mix it in
float4 volumetricFog = IntegratedLightScattering.SampleLevel(SamplerLinearClamp, volumeUV, 0);
- fog = float4(volumetricFog.rgb + fog.rgb * volumetricFog.a, volumetricFog.a * fog.a);
+ fog = CombineVolumetricFog(fog, volumetricFog);
#endif
return fog;