77 lines
2.0 KiB
C#
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);
|
|
}
|
|
}
|
|
}
|