using UnityEngine; namespace AQUAS { public class AQUAS_FrontFaceMask : MonoBehaviour { public Material mat; private Material bufferMat; 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/Front Face Mask")); matNull = new Material(Shader.Find("Hidden/AQUAS/Null")); target = new RenderTexture(Screen.width, Screen.height, 32, RenderTextureFormat.ARGBHalf); cam = GetComponent(); 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"); if (base.transform.parent.GetComponent() == 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().mask = target; target.Release(); } else { Graphics.Blit(source, destination, mat); nextCam.GetComponent().mask = target; target.Release(); } } private void Update() { } } }