Files
2026-02-21 16:45:37 +08:00

77 lines
2.0 KiB
C#

using UnityEngine;
using UnityEngine.XR;
namespace DynamicFogAndMist
{
[ExecuteInEditMode]
[ImageEffectAllowedInSceneView]
[HelpURLAttribute("http://kronnect.com/taptapgo")]
[RequireComponent(typeof(Camera))]
public class DynamicFogExclusive : DynamicFogBase
{
private RenderTexture rt;
[Range(0.1f, 2f)]
public float renderScale = 1f;
private void OnPreRender()
{
if (!(fogMat == null) && _alpha != 0f && !(currentCamera == null))
{
if (XRSettings.enabled)
{
RenderTextureDescriptor eyeTextureDesc = XRSettings.eyeTextureDesc;
eyeTextureDesc.width = (int)((float)eyeTextureDesc.width * renderScale);
eyeTextureDesc.height = (int)((float)eyeTextureDesc.height * renderScale);
rt = RenderTexture.GetTemporary(eyeTextureDesc);
}
else
{
int width = (int)((float)currentCamera.pixelWidth * renderScale);
int num = (int)((float)currentCamera.pixelHeight * renderScale);
rt = RenderTexture.GetTemporary(width, num, 24, RenderTextureFormat.ARGB32);
rt.antiAliasing = 1;
}
rt.wrapMode = TextureWrapMode.Clamp;
currentCamera.targetTexture = rt;
}
}
private void OnPostRender()
{
if (fogMat == null || _alpha == 0f || currentCamera == null)
{
return;
}
if (shouldUpdateMaterialProperties)
{
shouldUpdateMaterialProperties = false;
UpdateMaterialPropertiesNow();
}
if (currentCamera.orthographic)
{
if (!matOrtho)
{
ResetMaterial();
}
fogMat.SetVector("_ClipDir", currentCamera.transform.forward);
}
else if (matOrtho)
{
ResetMaterial();
}
if (_useSinglePassStereoRenderingMatrix && XRSettings.enabled)
{
fogMat.SetMatrix("_ClipToWorld", currentCamera.cameraToWorldMatrix);
}
else
{
fogMat.SetMatrix("_ClipToWorld", currentCamera.cameraToWorldMatrix * currentCamera.projectionMatrix.inverse);
}
currentCamera.targetTexture = null;
Graphics.Blit(rt, null, fogMat);
RenderTexture.ReleaseTemporary(rt);
}
}
}