87 lines
1.8 KiB
C#
87 lines
1.8 KiB
C#
using UnityEngine;
|
|
using UnityEngine.Rendering;
|
|
|
|
namespace BodhiDonselaar
|
|
{
|
|
[RequireComponent(typeof(Camera))]
|
|
public class EquiCam : MonoBehaviour
|
|
{
|
|
public enum Size
|
|
{
|
|
High = 2048,
|
|
Default = 1024,
|
|
Low = 512,
|
|
Minimum = 256
|
|
}
|
|
|
|
private static Material equi;
|
|
|
|
public Size RenderResolution = Size.Default;
|
|
|
|
private RenderTexture cubemap;
|
|
|
|
private Camera cam;
|
|
|
|
private GameObject child;
|
|
|
|
private void OnEnable()
|
|
{
|
|
if (equi == null)
|
|
{
|
|
equi = new Material(Resources.Load<Shader>("EquiCam"));
|
|
}
|
|
child = new GameObject();
|
|
child.hideFlags = HideFlags.HideInHierarchy;
|
|
child.transform.SetParent(base.transform);
|
|
child.transform.localPosition = Vector3.zero;
|
|
child.transform.localEulerAngles = Vector3.zero;
|
|
cam = child.AddComponent<Camera>();
|
|
cam.CopyFrom(GetComponent<Camera>());
|
|
child.SetActive(value: false);
|
|
New();
|
|
}
|
|
|
|
private void OnDisable()
|
|
{
|
|
if (child != null)
|
|
{
|
|
Object.DestroyImmediate(child);
|
|
}
|
|
if (cubemap != null)
|
|
{
|
|
cubemap.Release();
|
|
Object.DestroyImmediate(cubemap);
|
|
}
|
|
}
|
|
|
|
private void OnRenderImage(RenderTexture src, RenderTexture des)
|
|
{
|
|
if (cubemap.width != (int)RenderResolution)
|
|
{
|
|
New();
|
|
}
|
|
cam.RenderToCubemap(cubemap);
|
|
Shader.SetGlobalFloat("FORWARD", cam.transform.eulerAngles.y * 0.01745f);
|
|
Graphics.Blit(cubemap, des, equi);
|
|
}
|
|
|
|
private void New()
|
|
{
|
|
cam.targetTexture = null;
|
|
if (cubemap != null)
|
|
{
|
|
cubemap.Release();
|
|
Object.DestroyImmediate(cubemap);
|
|
}
|
|
cubemap = new RenderTexture((int)RenderResolution, (int)RenderResolution, 0, RenderTextureFormat.ARGB32);
|
|
cubemap.antiAliasing = 1;
|
|
cubemap.filterMode = FilterMode.Bilinear;
|
|
cubemap.anisoLevel = 0;
|
|
cubemap.dimension = TextureDimension.Cube;
|
|
cubemap.autoGenerateMips = false;
|
|
cubemap.useMipMap = false;
|
|
cam.targetTexture = cubemap;
|
|
}
|
|
}
|
|
}
|