WuhuIslandTesting/Library/PackageCache/com.unity.render-pipelines.universal@8148.0.7-4/Runtime/Volumetrics/SkyManager.cs.bak
2025-01-07 02:06:59 +01:00

117 lines
3.9 KiB
C#

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.Rendering;
using UnityEngine.Experimental.Rendering;
using UnityEngine.Rendering.Universal;
public class SkyManager
{
public static Texture skytexture;
static readonly int ID_SkyTexture = Shader.PropertyToID("_SkyTexture");
static readonly int ID_SkyMipCount = Shader.PropertyToID("_SkyMipCount");
static readonly int ID_MipFogParam = Shader.PropertyToID("_MipFogParameters");
static void GenerateSkyTexture()
{
Debug.Log("Generating Sky");
//Generate Skybox
RenderTexture cubetex = new RenderTexture(256, 256, 1, RenderTextureFormat.DefaultHDR);
cubetex.enableRandomWrite = true;
cubetex.useMipMap = true;
cubetex.dimension = UnityEngine.Rendering.TextureDimension.Cube;
cubetex.autoGenerateMips = true;
//cubetex.
// cubetex.Create();
Camera renderCam = new GameObject().AddComponent<Camera>();
renderCam.gameObject.hideFlags = HideFlags.DontSave;
renderCam.enabled = false;
renderCam.cullingMask = 0;
renderCam.backgroundColor = Color.black;
renderCam.clearFlags = CameraClearFlags.Skybox;
renderCam.RenderToCubemap(cubetex);
//cubetex.GenerateMips();
#if UNITY_EDITOR
if (Application.isPlaying)
{
Object.Destroy(renderCam.gameObject);
}
else
{
Object.DestroyImmediate(renderCam.gameObject);
}
#else
Object.Destroy(renderCam.gameObject);
#endif
skytexture = cubetex;
}
static public void CheckSky()
{
//Debug.Log("Running CheckSky");
if (skytexture == null)
{
GenerateSkyTexture();
}
if (RenderSettings.defaultReflectionMode == DefaultReflectionMode.Custom)
{
if (RenderSettings.customReflectionTexture != null && RenderSettings.customReflectionTexture.GetType() == typeof(Cubemap)) SetSkyTexture(RenderSettings.customReflectionTexture);
else SetSkyTexture(CoreUtils.blackCubeTexture);
}
else //DefaultReflectionMode.Skybox
{
if (skytexture != null)
{
SetSkyTexture(CoreUtils.blackCubeTexture);
}
else SetSkyTexture(CoreUtils.blackCubeTexture);
}
}
static public void SetSkyMips(Vector4 MipFogParam)
{
Shader.SetGlobalVector(ID_MipFogParam, MipFogParam);
}
static public void SetSkyTexture(Texture SkyTex)
{
Shader.SetGlobalTexture(ID_SkyTexture, SkyTex);
Shader.SetGlobalInt(ID_SkyMipCount, SkyTex.mipmapCount);
}
void ClearRenderTexture(RenderTexture rt, Color color)
{
RenderTexture activeRT = RenderTexture.active;
RenderTexture.active = rt;
GL.sRGBWrite = rt.sRGB;
if (rt.dimension == TextureDimension.Tex3D)
{
for (int i = 0; i < rt.depth; i++)
{
Graphics.SetRenderTarget(rt, 0, CubemapFace.Unknown, i);
GL.Clear(false, true, color);
}
}
else if (rt.dimension == TextureDimension.Cube)
{
Graphics.SetRenderTarget(rt, 0, CubemapFace.PositiveX, 0);
GL.Clear(false, true, color);
Graphics.SetRenderTarget(rt, 0, CubemapFace.PositiveY, 0);
GL.Clear(false, true, color);
Graphics.SetRenderTarget(rt, 0, CubemapFace.PositiveZ, 0);
GL.Clear(false, true, color);
Graphics.SetRenderTarget(rt, 0, CubemapFace.NegativeX, 0);
GL.Clear(false, true, color);
Graphics.SetRenderTarget(rt, 0, CubemapFace.NegativeY, 0);
GL.Clear(false, true, color);
Graphics.SetRenderTarget(rt, 0, CubemapFace.NegativeZ, 0);
GL.Clear(false, true, color);
}
RenderTexture.active = activeRT;
}
}