80 lines
		
	
	
		
			3.1 KiB
		
	
	
	
		
			C#
		
	
	
	
			
		
		
	
	
			80 lines
		
	
	
		
			3.1 KiB
		
	
	
	
		
			C#
		
	
	
	
| //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);
 | |
| //        }
 | |
| //    }
 | |
| //}
 |