You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
79 lines
2.9 KiB
79 lines
2.9 KiB
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); |
|
} |
|
} |
|
}
|
|
|