42 lines
2.7 KiB
C#
42 lines
2.7 KiB
C#
using System;
|
|
using System.IO;
|
|
using System.Linq;
|
|
using Newtonsoft.Json;
|
|
using UnityEngine;
|
|
using UnityEngine.Rendering;
|
|
using UnityEngine.Rendering.Universal;
|
|
using UnityEngine.SceneManagement;
|
|
|
|
// Read-only diagnosis of the actual running camp, without rendering an extra camera frame.
|
|
public static class InspectCampLighting
|
|
{
|
|
public static string Run()
|
|
{
|
|
var pipeline = GraphicsSettings.currentRenderPipeline as UniversalRenderPipelineAsset;
|
|
var cameras = UnityEngine.Object.FindObjectsOfType<Camera>(true);
|
|
var lights = UnityEngine.Object.FindObjectsOfType<Light>(true);
|
|
var renderers = UnityEngine.Object.FindObjectsOfType<Renderer>(true).Where(r => r.gameObject.layer == 29).ToArray();
|
|
var report = new {
|
|
time = DateTime.UtcNow, activeScene = SceneManager.GetActiveScene().path,
|
|
scenes = Enumerable.Range(0,SceneManager.sceneCount).Select(i=>new { SceneManager.GetSceneAt(i).path, SceneManager.GetSceneAt(i).isLoaded }).ToArray(),
|
|
maps = LightmapSettings.lightmaps.Length, ambient = RenderSettings.ambientMode.ToString(),
|
|
sky = RenderSettings.ambientSkyColor.ToString(), equator = RenderSettings.ambientEquatorColor.ToString(),
|
|
sun = RenderSettings.sun != null ? RenderSettings.sun.name : null,
|
|
pipeline = pipeline != null ? pipeline.name : null, mainShadows = pipeline != null && pipeline.supportsMainLightShadows,
|
|
shadowDistance = pipeline != null ? pipeline.shadowDistance : 0,
|
|
cameras = cameras.Select(c => new { c.name, c.enabled, active = c.gameObject.activeInHierarchy,
|
|
c.cullingMask, target = c.targetTexture != null ? c.targetTexture.name : null,
|
|
shadows = c.GetComponent<UniversalAdditionalCameraData>()?.renderShadows }).ToArray(),
|
|
lights = lights.Select(l=>new { l.name, l.enabled, active = l.gameObject.activeInHierarchy, l.intensity, l.cullingMask,
|
|
bake=l.lightmapBakeType.ToString(), shadows=l.shadows.ToString(), l.shadowStrength }).ToArray(),
|
|
rendererCount=renderers.Length, lightmapped=renderers.Count(r=>r.lightmapIndex>=0 && r.lightmapIndex<LightmapSettings.lightmaps.Length),
|
|
renderers=renderers.Take(12).Select(r=>new {r.name, r.lightmapIndex, shadows=r.shadowCastingMode.ToString(), r.receiveShadows,
|
|
shader=r.sharedMaterial!=null?r.sharedMaterial.shader.name:null}).ToArray()
|
|
};
|
|
string json = JsonConvert.SerializeObject(report,Formatting.Indented);
|
|
string folder=Path.GetFullPath(Path.Combine(Application.dataPath,"../../Tools/output/camp_lighting"));
|
|
Directory.CreateDirectory(folder); File.WriteAllText(Path.Combine(folder,"runtime_diagnosis.json"),json);
|
|
return json;
|
|
}
|
|
}
|