Beispiel #1
0
        /// <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];
            }
        }
Beispiel #2
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);
            }
        }