Files
2026-03-04 10:03:45 +08:00

89 lines
2.0 KiB
C#

using UnityEngine;
namespace AQUAS
{
public class AQUAS_VolumeMask : MonoBehaviour
{
public Material mat;
private Material matNull;
private RenderTexture target;
private Camera cam;
public GameObject nextCam;
public GameObject waterObj;
public Renderer rend;
public Shader[] waterShaders;
public bool checkForGridProjection = true;
private void Start()
{
mat = new Material(Shader.Find("Hidden/AQUAS/Utils/Volume Mask"));
matNull = new Material(Shader.Find("Hidden/AQUAS/Null"));
target = new RenderTexture(Screen.width, Screen.height, 32, RenderTextureFormat.ARGBHalf);
cam = GetComponent<Camera>();
cam.targetTexture = target;
cam.pixelRect = new Rect(0f, 0f, Screen.width, Screen.height);
waterShaders = new Shader[2];
}
private void OnPreCull()
{
if (waterObj == null)
{
return;
}
waterObj.layer = LayerMask.NameToLayer("Water");
Material[] sharedMaterials = rend.sharedMaterials;
foreach (Material material in sharedMaterials)
{
material.shader = Shader.Find("Hidden/AQUAS/Utils/Depth Only Back");
if (base.transform.parent.GetComponent<AQUAS_ProjectedGrid>() == null)
{
material.SetFloat("_ProjectGrid", 0f);
}
else
{
material.SetFloat("_ProjectGrid", 1f);
}
}
}
private void OnPostRender()
{
if (!(waterObj == null))
{
waterObj.layer = LayerMask.NameToLayer("Default");
rend.sharedMaterials[0].shader = waterShaders[0];
rend.sharedMaterials[1].shader = waterShaders[1];
}
}
private void OnRenderImage(RenderTexture source, RenderTexture destination)
{
if (waterObj == null)
{
Graphics.Blit(source, destination, matNull);
nextCam.GetComponent<AQUAS_FrontFaceMask>().mat.SetTexture("_MaskTex", target);
target.Release();
}
else
{
Graphics.Blit(source, destination, mat);
nextCam.GetComponent<AQUAS_FrontFaceMask>().mat.SetTexture("_MaskTex", target);
target.Release();
}
}
private void Update()
{
}
}
}