Files
AIGame/AIClient/AgentScripts/TestRealtimeShadowCapture.cs

67 lines
2.2 KiB
C#

#if UNITY_EDITOR
using System.IO;
using UnityEditor;
using UnityEditor.SceneManagement;
using UnityEngine;
using UnityEngine.Rendering.Universal;
public static class TestRealtimeShadowCapture
{
const string ScenePath = "Assets/Bundles/Scenes/Town/HomeCamp/HomeCamp.unity";
public static string Run()
{
var scene = EditorSceneManager.OpenScene(ScenePath, OpenSceneMode.Additive);
try
{
var root = scene.GetRootGameObjects()[0];
var sun = root.transform.Find("HomeCampSun")?.GetComponent<Light>();
if (sun != null)
{
sun.lightmapBakeType = LightmapBakeType.Realtime;
sun.shadows = LightShadows.Soft;
sun.shadowStrength = 0.85f;
sun.shadowBias = 0.05f;
sun.shadowNormalBias = 0.3f;
sun.intensity = 1.8f;
}
var cam = root.transform.Find("HomeCampCamera")?.GetComponent<Camera>();
if (cam == null) return "Camera missing";
var uacd = cam.GetComponent<UniversalAdditionalCameraData>();
if (uacd == null) uacd = cam.gameObject.AddComponent<UniversalAdditionalCameraData>();
uacd.renderShadows = true;
int w = 720, h = 1280;
var rt = new RenderTexture(w, h, 24, RenderTextureFormat.ARGB32) { name = "ShadowTestRT" };
rt.Create();
cam.targetTexture = rt;
cam.Render();
var old = RenderTexture.active;
RenderTexture.active = rt;
var tex = new Texture2D(w, h, TextureFormat.RGB24, false);
tex.ReadPixels(new Rect(0, 0, w, h), 0, 0);
tex.Apply();
RenderTexture.active = old;
cam.targetTexture = null;
rt.Release();
Object.DestroyImmediate(rt);
string outPath = Path.Combine(Application.dataPath, "../../Tools/output/shadow_test.png");
File.WriteAllBytes(outPath, tex.EncodeToPNG());
Object.DestroyImmediate(tex);
return "Rendered to " + outPath;
}
finally
{
EditorSceneManager.CloseScene(scene, true);
}
}
}
#endif