| | |
| | | using UnityEngine.Rendering; |
| | | |
| | | namespace UnityEngine.PostProcessing |
| | | { |
| | | public sealed class FogComponent : PostProcessingComponentCommandBuffer<FogModel> |
| | | { |
| | | static class Uniforms |
| | | { |
| | | internal static readonly int _FogColor = Shader.PropertyToID("_FogColor"); |
| | | internal static readonly int _Density = Shader.PropertyToID("_Density"); |
| | | internal static readonly int _Start = Shader.PropertyToID("_Start"); |
| | | internal static readonly int _End = Shader.PropertyToID("_End"); |
| | | internal static readonly int _TempRT = Shader.PropertyToID("_TempRT"); |
| | | } |
| | | |
| | | const string k_ShaderString = "Hidden/Post FX/Fog"; |
| | | |
| | | public override bool active |
| | | { |
| | | get |
| | | { |
| | | return model.enabled |
| | | && context.isGBufferAvailable // In forward fog is already done at shader level |
| | | && RenderSettings.fog |
| | | && !context.interrupted; |
| | | } |
| | | } |
| | | |
| | | public override string GetName() |
| | | { |
| | | return "Fog"; |
| | | } |
| | | |
| | | public override DepthTextureMode GetCameraFlags() |
| | | { |
| | | return DepthTextureMode.Depth; |
| | | } |
| | | |
| | | public override CameraEvent GetCameraEvent() |
| | | { |
| | | return CameraEvent.AfterImageEffectsOpaque; |
| | | } |
| | | |
| | | public override void PopulateCommandBuffer(CommandBuffer cb) |
| | | { |
| | | var settings = model.settings; |
| | | |
| | | var material = context.materialFactory.Get(k_ShaderString); |
| | | material.shaderKeywords = null; |
| | | var fogColor = GraphicsUtils.isLinearColorSpace ? RenderSettings.fogColor.linear : RenderSettings.fogColor; |
| | | material.SetColor(Uniforms._FogColor, fogColor); |
| | | material.SetFloat(Uniforms._Density, RenderSettings.fogDensity); |
| | | material.SetFloat(Uniforms._Start, RenderSettings.fogStartDistance); |
| | | material.SetFloat(Uniforms._End, RenderSettings.fogEndDistance); |
| | | |
| | | switch (RenderSettings.fogMode) |
| | | { |
| | | case FogMode.Linear: |
| | | material.EnableKeyword("FOG_LINEAR"); |
| | | break; |
| | | case FogMode.Exponential: |
| | | material.EnableKeyword("FOG_EXP"); |
| | | break; |
| | | case FogMode.ExponentialSquared: |
| | | material.EnableKeyword("FOG_EXP2"); |
| | | break; |
| | | } |
| | | |
| | | var fbFormat = context.isHdr |
| | | ? RenderTextureFormat.DefaultHDR |
| | | : RenderTextureFormat.Default; |
| | | |
| | | cb.GetTemporaryRT(Uniforms._TempRT, context.width, context.height, 24, FilterMode.Bilinear, fbFormat); |
| | | cb.Blit(BuiltinRenderTextureType.CameraTarget, Uniforms._TempRT); |
| | | cb.Blit(Uniforms._TempRT, BuiltinRenderTextureType.CameraTarget, material, settings.excludeSkybox ? 1 : 0); |
| | | cb.ReleaseTemporaryRT(Uniforms._TempRT); |
| | | } |
| | | } |
| | | } |
| | | using UnityEngine.Rendering;
|
| | |
|
| | | namespace UnityEngine.PostProcessing
|
| | | {
|
| | | public sealed class FogComponent : PostProcessingComponentCommandBuffer<FogModel>
|
| | | {
|
| | | static class Uniforms
|
| | | {
|
| | | internal static readonly int _FogColor = Shader.PropertyToID("_FogColor");
|
| | | internal static readonly int _Density = Shader.PropertyToID("_Density");
|
| | | internal static readonly int _Start = Shader.PropertyToID("_Start");
|
| | | internal static readonly int _End = Shader.PropertyToID("_End");
|
| | | internal static readonly int _TempRT = Shader.PropertyToID("_TempRT");
|
| | | }
|
| | |
|
| | | const string k_ShaderString = "Hidden/Post FX/Fog";
|
| | |
|
| | | public override bool active
|
| | | {
|
| | | get
|
| | | {
|
| | | return model.enabled
|
| | | && context.isGBufferAvailable // In forward fog is already done at shader level
|
| | | && RenderSettings.fog
|
| | | && !context.interrupted;
|
| | | }
|
| | | }
|
| | |
|
| | | public override string GetName()
|
| | | {
|
| | | return "Fog";
|
| | | }
|
| | |
|
| | | public override DepthTextureMode GetCameraFlags()
|
| | | {
|
| | | return DepthTextureMode.Depth;
|
| | | }
|
| | |
|
| | | public override CameraEvent GetCameraEvent()
|
| | | {
|
| | | return CameraEvent.AfterImageEffectsOpaque;
|
| | | }
|
| | |
|
| | | public override void PopulateCommandBuffer(CommandBuffer cb)
|
| | | {
|
| | | var settings = model.settings;
|
| | |
|
| | | var material = context.materialFactory.Get(k_ShaderString);
|
| | | material.shaderKeywords = null;
|
| | | var fogColor = GraphicsUtils.isLinearColorSpace ? RenderSettings.fogColor.linear : RenderSettings.fogColor;
|
| | | material.SetColor(Uniforms._FogColor, fogColor);
|
| | | material.SetFloat(Uniforms._Density, RenderSettings.fogDensity);
|
| | | material.SetFloat(Uniforms._Start, RenderSettings.fogStartDistance);
|
| | | material.SetFloat(Uniforms._End, RenderSettings.fogEndDistance);
|
| | |
|
| | | switch (RenderSettings.fogMode)
|
| | | {
|
| | | case FogMode.Linear:
|
| | | material.EnableKeyword("FOG_LINEAR");
|
| | | break;
|
| | | case FogMode.Exponential:
|
| | | material.EnableKeyword("FOG_EXP");
|
| | | break;
|
| | | case FogMode.ExponentialSquared:
|
| | | material.EnableKeyword("FOG_EXP2");
|
| | | break;
|
| | | }
|
| | |
|
| | | var fbFormat = context.isHdr
|
| | | ? RenderTextureFormat.DefaultHDR
|
| | | : RenderTextureFormat.Default;
|
| | |
|
| | | cb.GetTemporaryRT(Uniforms._TempRT, context.width, context.height, 24, FilterMode.Bilinear, fbFormat);
|
| | | cb.Blit(BuiltinRenderTextureType.CameraTarget, Uniforms._TempRT);
|
| | | cb.Blit(Uniforms._TempRT, BuiltinRenderTextureType.CameraTarget, material, settings.excludeSkybox ? 1 : 0);
|
| | | cb.ReleaseTemporaryRT(Uniforms._TempRT);
|
| | | }
|
| | | }
|
| | | }
|