using System.Collections; using System.Collections.Generic; using UnityEngine; using UnityEditor; using UnityEngine.Rendering; public class GenerateLightProbes : MonoBehaviour { [MenuItem("Tools/Light Probe Generation/Generate Light Probe Groups - Low Resolution")] static void generateLow() { GameObject lightProbes; List<Vector3> probeLocations = new List<Vector3>(); if(GameObject.Find("Light Probe Group") != null){ DestroyImmediate(GameObject.Find("Light Probe Group")); } lightProbes = new GameObject("Light Probe Group"); lightProbes.AddComponent<LightProbeGroup>(); lightProbes.GetComponent<LightProbeGroup>().probePositions = probeLocations.ToArray(); GameObject[] objectsInScene = UnityEngine.Object.FindObjectsOfType<GameObject>() ; foreach(GameObject obj in objectsInScene) { if(obj.isStatic){ if(obj.GetComponent<Renderer>() != null){ probeLocations.Add( obj.GetComponent<Renderer>().bounds.max); } } } lightProbes.GetComponent<LightProbeGroup>().probePositions = probeLocations.ToArray(); } [MenuItem("Tools/Light Probe Generation/Generate Light Probe Groups - Medium Resolution")] static void generateMedium() { GameObject lightProbes; List<Vector3> probeLocations = new List<Vector3>(); if(GameObject.Find("Light Probe Group") != null){ DestroyImmediate(GameObject.Find("Light Probe Group")); } lightProbes = new GameObject("Light Probe Group"); lightProbes.AddComponent<LightProbeGroup>(); lightProbes.GetComponent<LightProbeGroup>().probePositions = probeLocations.ToArray(); GameObject[] objectsInScene = UnityEngine.Object.FindObjectsOfType<GameObject>() ; foreach(GameObject obj in objectsInScene) { if (!obj.isStatic) continue; if (obj.GetComponent<Renderer>() == null) continue; probeLocations.Add( obj.GetComponent<Renderer>().bounds.max); probeLocations.Add( obj.GetComponent<Renderer>().bounds.min); } lightProbes.GetComponent<LightProbeGroup>().probePositions = probeLocations.ToArray(); } [MenuItem("Tools/Light Probe Generation/Generate Light Probe Groups - High Resolution")] static void generateHigh() { GameObject lightProbes; List<Vector3> probeLocations = new List<Vector3>(); if(GameObject.Find("Light Probe Group") != null){ DestroyImmediate(GameObject.Find("Light Probe Group")); } lightProbes = new GameObject("Light Probe Group"); lightProbes.AddComponent<LightProbeGroup>(); lightProbes.GetComponent<LightProbeGroup>().probePositions = probeLocations.ToArray(); GameObject[] objectsInScene = UnityEngine.Object.FindObjectsOfType<GameObject>() ; foreach(GameObject obj in objectsInScene) { if (!obj.isStatic) continue; if (obj.GetComponent<Renderer>() == null) continue; if (obj.name.ToLower().Contains("light") || obj.name.ToLower().Contains("lamp")) continue; if (obj.GetComponent<Renderer>().lightProbeUsage == LightProbeUsage.Off) continue; probeLocations.Add( obj.GetComponent<Renderer>().bounds.max); probeLocations.Add( obj.GetComponent<Renderer>().bounds.min); } int boundProbes = probeLocations.Count *2; for(var i = 0; i < boundProbes; i++) { probeLocations.Add(Vector3.Lerp(probeLocations[Random.Range(0,boundProbes/2)], probeLocations[Random.Range(0,boundProbes/2)], 0.5f)); } lightProbes.GetComponent<LightProbeGroup>().probePositions = probeLocations.ToArray(); } [MenuItem("Tools/Light Probe Generation/Generate Light Probe Groups - Very High Resolution")] static void generateVeryHigh() { GameObject lightProbes; List<Vector3> probeLocations = new List<Vector3>(); if(GameObject.Find("Light Probe Group") != null){ DestroyImmediate(GameObject.Find("Light Probe Group")); } lightProbes = new GameObject("Light Probe Group"); lightProbes.AddComponent<LightProbeGroup>(); lightProbes.GetComponent<LightProbeGroup>().probePositions = probeLocations.ToArray(); GameObject[] objectsInScene = UnityEngine.Object.FindObjectsOfType<GameObject>() ; foreach(GameObject obj in objectsInScene) { if (!obj.isStatic) continue; if (obj.GetComponent<Renderer>() == null) continue; if (obj.name.ToLower().Contains("light") || obj.name.ToLower().Contains("lamp")) continue; if (obj.GetComponent<Renderer>().lightProbeUsage == LightProbeUsage.Off) continue; probeLocations.Add( obj.GetComponent<Renderer>().bounds.max); probeLocations.Add( obj.GetComponent<Renderer>().bounds.min); } int boundProbes = probeLocations.Count *4; for(int i = 0; i < boundProbes; i++) { probeLocations.Add(Vector3.Lerp(probeLocations[Random.Range(0,boundProbes/4)], probeLocations[Random.Range(0,boundProbes/4)], 0.5f)); } lightProbes.GetComponent<LightProbeGroup>().probePositions = probeLocations.ToArray(); } }