/// <summary> /// Configure MeshRenderer receive only direct lighting and contribute indirect lighting /// </summary> /// <param name="meshRenderer"></param> /// <param name="keepUnused"></param> public static void ConvertToLightDirect(MeshRenderer meshRenderer, bool keepUnused = false) { var staticFlags = GameObjectUtility.GetStaticEditorFlags(meshRenderer.gameObject); staticFlags |= StaticEditorFlags.ContributeGI; GameObjectUtility.SetStaticEditorFlags(meshRenderer.gameObject, staticFlags); meshRenderer.receiveGI = ReceiveGI.LightProbes; meshRenderer.lightProbeUsage = UnityEngine.Rendering.LightProbeUsage.Off; meshRenderer.receiveShadows = true; meshRenderer.shadowCastingMode = UnityEngine.Rendering.ShadowCastingMode.On; // IDEA: Use lowest level of detail as shadow proxy meshRenderer.reflectionProbeUsage = UnityEngine.Rendering.ReflectionProbeUsage.Off; var sharedMesh = AutoLightCharts.SharedMesh(meshRenderer); if (!sharedMesh) { return; } if (!keepUnused && sharedMesh.uv2.Length != 0) { sharedMesh.uv2 = new Vector2[0]; } }
public static void AddDefaults(string scenePath) { var sceneSetup = EditorSceneManager.GetSceneManagerSetup(); try { // IMPORTANT: Lightmapping.Bake() should be called when only scenes contributing to bake are open var scene = EditorSceneManager.OpenScene(scenePath, OpenSceneMode.Single); // Get bounds of all models in scene var sceneBounds = SceneBounds(scene); // NOTE: Modifications of scene prefabs instances will be overrides foreach (var gameObject in scene.GetRootGameObjects()) { // IDEA: In the case of combined scenes, lights from one scene could contribute to others foreach (var light in gameObject.GetComponentsInChildren <Light>()) { SetLightRange(sceneBounds, light); } // TODO: Hook for intensity adjustment based on light target AutoLightCharts.ApplyTo(gameObject); AutoLightProbes.ApplyTo(gameObject); AutoLightSources.ApplyTo(gameObject); // TODO: Hook for Reflection probes, Acoustic probes... } CreateSun(sceneBounds); CreatePlayer(sceneBounds); // TODO: Use IConfigurable to configure objects in scene. // TODO: When Player and Sun can be configured the can be input as arguments by RePort. EditorSceneManager.SaveScene(scene); } finally { EditorSceneManager.RestoreSceneManagerSetup(sceneSetup); } }