91 lines
2.0 KiB
C#
91 lines
2.0 KiB
C#
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<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");
|
|
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_UnderWaterEffect>().mask = target;
|
|
target.Release();
|
|
}
|
|
else
|
|
{
|
|
Graphics.Blit(source, destination, mat);
|
|
nextCam.GetComponent<AQUAS_UnderWaterEffect>().mask = target;
|
|
target.Release();
|
|
}
|
|
}
|
|
|
|
private void Update()
|
|
{
|
|
}
|
|
}
|
|
}
|