12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879 |
- 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);
- }
- }
- }
|