Files
UltimateFishing2020/Assets/Scripts/Assembly-CSharp/VolumeFogSM_SRPRenderer.cs
2026-03-04 10:03:45 +08:00

127 lines
6.1 KiB
C#

using UnityEngine;
using UnityEngine.Rendering.PostProcessing;
public sealed class VolumeFogSM_SRPRenderer : PostProcessEffectRenderer<VolumeFogSM_SRP>
{
[SerializeField]
private bool _useRadialDistance;
[SerializeField]
private bool _fadeToSkybox = true;
public override void Render(PostProcessRenderContext context)
{
PropertySheet propertySheet = context.propertySheets.Get(Shader.Find("Hidden/InverseProjectVFogLWRP"));
propertySheet.properties.SetFloat("_DistanceOffset", base.settings._startDistance);
propertySheet.properties.SetFloat("_Height", base.settings._fogHeight);
propertySheet.properties.SetFloat("_cameraRoll", base.settings._cameraRoll);
propertySheet.properties.SetVector("_cameraDiff", base.settings._cameraDiff);
propertySheet.properties.SetFloat("_cameraTiltSign", base.settings._cameraTiltSign);
switch (RenderSettings.fogMode)
{
case FogMode.Linear:
{
float fogStartDistance = RenderSettings.fogStartDistance;
float fogEndDistance = RenderSettings.fogEndDistance;
float num = 1f / Mathf.Max(fogEndDistance - fogStartDistance, 1E-06f);
propertySheet.properties.SetFloat("_LinearGrad", 0f - num);
propertySheet.properties.SetFloat("_LinearOffs", fogEndDistance * num);
propertySheet.DisableKeyword("FOG_EXP");
propertySheet.DisableKeyword("FOG_EXP2");
break;
}
case FogMode.Exponential:
{
float fogDensity2 = RenderSettings.fogDensity;
propertySheet.properties.SetFloat("_Density", 1.442695f * fogDensity2 * (float)base.settings._fogDensity);
propertySheet.EnableKeyword("FOG_EXP");
propertySheet.DisableKeyword("FOG_EXP2");
break;
}
default:
{
float fogDensity = RenderSettings.fogDensity;
propertySheet.properties.SetFloat("_Density", 1.2011224f * fogDensity * (float)base.settings._fogDensity);
propertySheet.DisableKeyword("FOG_EXP");
propertySheet.EnableKeyword("FOG_EXP2");
break;
}
}
if (_useRadialDistance)
{
propertySheet.EnableKeyword("RADIAL_DIST");
}
else
{
propertySheet.DisableKeyword("RADIAL_DIST");
}
if (_fadeToSkybox)
{
propertySheet.DisableKeyword("USE_SKYBOX");
propertySheet.properties.SetColor("_FogColor", base.settings._FogColor);
}
else
{
propertySheet.DisableKeyword("USE_SKYBOX");
propertySheet.properties.SetColor("_FogColor", base.settings._FogColor);
}
if (base.settings.noiseTexture.value == null)
{
base.settings.noiseTexture.value = new Texture2D(1280, 720);
}
if (propertySheet != null && base.settings.noiseTexture != null)
{
if (base.settings.noiseTexture.value == null)
{
base.settings.noiseTexture.value = new Texture2D(1280, 720);
}
propertySheet.properties.SetTexture("_NoiseTex", base.settings.noiseTexture.value);
}
Camera main = Camera.main;
Vector3 position = main.transform.position;
float num2 = position.y - (float)base.settings._fogHeight;
float z = ((num2 <= 0f) ? 1f : 0f);
propertySheet.properties.SetVector("_CameraWS", position);
propertySheet.properties.SetVector("_HeightParams", new Vector4(base.settings._fogHeight, num2, z, (float)base.settings.heightDensity * 0.5f));
propertySheet.properties.SetVector("_DistanceParams", new Vector4(0f - Mathf.Max(base.settings.startDistance, 0f), 0f, 0f, 0f));
propertySheet.properties.SetFloat("_NoiseDensity", base.settings.noiseDensity);
propertySheet.properties.SetFloat("_NoiseScale", base.settings.noiseScale);
propertySheet.properties.SetFloat("_NoiseThickness", base.settings.noiseThickness);
propertySheet.properties.SetVector("_NoiseSpeed", base.settings.noiseSpeed);
propertySheet.properties.SetFloat("_OcclusionDrop", base.settings.occlusionDrop);
propertySheet.properties.SetFloat("_OcclusionExp", base.settings.occlusionExp);
propertySheet.properties.SetInt("noise3D", base.settings.noise3D);
propertySheet.properties.SetFloat("luminance", base.settings.luminance);
propertySheet.properties.SetFloat("lumFac", base.settings.lumFac);
propertySheet.properties.SetFloat("Multiplier1", base.settings.ScatterFac);
propertySheet.properties.SetFloat("Multiplier2", base.settings.TurbFac);
propertySheet.properties.SetFloat("Multiplier3", base.settings.HorizFac);
propertySheet.properties.SetFloat("turbidity", base.settings.turbidity);
propertySheet.properties.SetFloat("reileigh", base.settings.reileigh);
propertySheet.properties.SetFloat("mieCoefficient", base.settings.mieCoefficient);
propertySheet.properties.SetFloat("mieDirectionalG", base.settings.mieDirectionalG);
propertySheet.properties.SetFloat("bias", base.settings.bias);
propertySheet.properties.SetFloat("contrast", base.settings.contrast);
propertySheet.properties.SetVector("v3LightDir", base.settings.Sun);
propertySheet.properties.SetVector("_TintColor", new Vector4(base.settings.TintColor.value.r, base.settings.TintColor.value.g, base.settings.TintColor.value.b, 1f));
float value = 0f;
if ((bool)base.settings.FogSky)
{
value = 1f;
}
propertySheet.properties.SetFloat("FogSky", value);
propertySheet.properties.SetFloat("ClearSkyFac", base.settings.ClearSkyFac);
propertySheet.properties.SetVector("localLightPos", new Vector4(base.settings.PointL.value.x, base.settings.PointL.value.y, base.settings.PointL.value.z, base.settings.PointL.value.w));
propertySheet.properties.SetVector("localLightColor", new Vector4(base.settings.PointLParams.value.x, base.settings.PointLParams.value.y, base.settings.PointLParams.value.z, base.settings.PointLParams.value.w));
RenderTextureFormat format = (main.allowHDR ? RenderTextureFormat.DefaultHDR : RenderTextureFormat.Default);
RenderTexture renderTexture = (RenderTexture.active = RenderTexture.GetTemporary(context.width, context.height, 0, format));
GL.ClearWithSkybox(clearDepth: false, main);
context.command.BlitFullscreenTriangle(context.source, renderTexture);
propertySheet.properties.SetTexture("_MainTex", renderTexture);
Matrix4x4 cameraToWorldMatrix = context.camera.cameraToWorldMatrix;
propertySheet.properties.SetMatrix("_InverseView", cameraToWorldMatrix);
context.command.BlitFullscreenTriangle(context.source, context.destination, propertySheet, 0);
RenderTexture.ReleaseTemporary(renderTexture);
}
}