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

43 lines
1.1 KiB
C#

using UnityEngine;
namespace VolumetricFogAndMist
{
[RequireComponent(typeof(Camera), typeof(VolumetricFog))]
[AddComponentMenu("")]
[ExecuteInEditMode]
public class VolumetricFogPosT : MonoBehaviour, IVolumetricFogRenderComponent
{
private Material copyOpaqueMat;
public VolumetricFog fog { get; set; }
private void OnRenderImage(RenderTexture source, RenderTexture destination)
{
if (fog == null || !fog.enabled)
{
Graphics.Blit(source, destination);
return;
}
if (fog.transparencyBlendMode == TRANSPARENT_MODE.None)
{
fog.DoOnRenderImage(source, destination);
return;
}
RenderTextureDescriptor descriptor = source.descriptor;
RenderTexture temporary = RenderTexture.GetTemporary(descriptor);
if (copyOpaqueMat == null)
{
copyOpaqueMat = new Material(Shader.Find("VolumetricFogAndMist/CopyOpaque"));
}
copyOpaqueMat.SetFloat("_BlendPower", fog.transparencyBlendPower);
Graphics.Blit(source, destination, copyOpaqueMat, (fog.computeDepth && fog.downsampling == 1) ? 1 : 0);
RenderTexture.ReleaseTemporary(temporary);
}
public void DestroySelf()
{
Object.DestroyImmediate(this);
}
}
}