/// <summary>
        /// Optimizes the planar reflections
        /// </summary>
        /// <param name="planarReflectionProbe"></param>
        private void OptimizePlanarReflections(PlanarReflectionProbe planarReflectionProbe)
        {
            if (planarReflectionProbe != null)
            {
                PlanarReflectionProbe planar = planarReflectionProbe;
                if (planar != null)
                {
#if !UNITY_2019_1_OR_NEWER
                    planar.mode        = UnityEngine.Rendering.ReflectionProbeMode.Realtime;
                    planar.refreshMode = UnityEngine.Rendering.ReflectionProbeRefreshMode.OnAwake;
                    planar.captureSettings.farClipPlane = 25f;
                    planar.captureSettings.overrides    = CaptureSettingsOverrides.FieldOfview;
                    planar.captureSettings.fieldOfView  = 90f;
                    planar.RequestRealtimeRender();
#else
                    planar.mode = ProbeSettings.Mode.Realtime;
#endif
                }

                HDAdditionalReflectionData data = planar.gameObject.GetComponent <HDAdditionalReflectionData>();
                if (data != null)
                {
#if !UNITY_2019_1_OR_NEWER
                    data.mode        = UnityEngine.Rendering.ReflectionProbeMode.Realtime;
                    data.refreshMode = UnityEngine.Rendering.ReflectionProbeRefreshMode.OnAwake;
                    data.captureSettings.farClipPlane = 250f;
                    data.captureSettings.fieldOfView  = 90f;
#else
                    data.mode = ProbeSettings.Mode.Realtime;
#endif
                }
            }
        }
Exemplo n.º 2
0
        public SerializedHDReflectionProbe(SerializedObject so, SerializedObject addso)
        {
            this.so    = so;
            this.addso = addso;

            proxyVolumeComponent = addso.Find((HDAdditionalReflectionData d) => d.proxyVolume);
            influenceVolume      = new SerializedInfluenceVolume(addso.Find((HDAdditionalReflectionData d) => d.influenceVolume));

            target     = (ReflectionProbe)so.targetObject;
            targetData = target.GetComponent <HDAdditionalReflectionData>();

            mode = so.FindProperty("m_Mode");
            customBakedTexture   = so.FindProperty("m_CustomBakedTexture");
            renderDynamicObjects = so.FindProperty("m_RenderDynamicObjects");
            refreshMode          = so.FindProperty("m_RefreshMode");
            timeSlicingMode      = so.FindProperty("m_TimeSlicingMode");
            intensityMultiplier  = so.FindProperty("m_IntensityMultiplier");
            boxSize             = so.FindProperty("m_BoxSize");
            boxOffset           = so.FindProperty("m_BoxOffset");
            resolution          = so.FindProperty("m_Resolution");
            shadowDistance      = so.FindProperty("m_ShadowDistance");
            cullingMask         = so.FindProperty("m_CullingMask");
            useOcclusionCulling = so.FindProperty("m_UseOcclusionCulling");
            nearClip            = so.FindProperty("m_NearClip");
            farClip             = so.FindProperty("m_FarClip");
            boxProjection       = so.FindProperty("m_BoxProjection");
            legacyBlendDistance = so.FindProperty("m_BlendDistance");

            weight     = addso.Find((HDAdditionalReflectionData d) => d.weight);
            multiplier = addso.Find((HDAdditionalReflectionData d) => d.multiplier);
        }
Exemplo n.º 3
0
        protected override void OnEnable()
        {
            var additionalData = CoreEditorUtils.GetAdditionalData <HDAdditionalReflectionData>(targets);

            m_AdditionalDataSerializedObject = new SerializedObject(additionalData);
            m_SerializedHDProbe = new SerializedHDReflectionProbe(serializedObject, m_AdditionalDataSerializedObject);

            foreach (var t in targets)
            {
                var p = (ReflectionProbe)t;
                s_ReflectionProbeEditors[p] = this;
            }

            base.OnEnable();

            m_UIState.owner = this;
            m_UIState.Reset(m_SerializedHDProbe, Repaint);

            InitializeTargetProbe();

            HDAdditionalReflectionData probe = (HDAdditionalReflectionData)m_AdditionalDataSerializedObject.targetObject;

            probe.influenceVolume.Init(probe);

            //unhide previously hidden components
            probe.hideFlags = HideFlags.None;
        }
Exemplo n.º 4
0
        internal static void InitializeProbe(ReflectionProbe p, HDAdditionalReflectionData data)
        {
            var meshFilter   = p.GetComponent <MeshFilter>() ?? p.gameObject.AddComponent <MeshFilter>();
            var meshRenderer = p.GetComponent <MeshRenderer>() ?? p.gameObject.AddComponent <MeshRenderer>();

            meshFilter.sharedMesh = s_SphereMesh;

            // Lazy evaluation attempt to avoid shader compil error issue in Editor (The shader is not found the first time
            // we load after deleting Library folder)
            if (s_PreviewMaterial == null)
            {
                s_PreviewMaterial = new Material(Shader.Find("Debug/ReflectionProbePreview"))
                {
                    hideFlags = HideFlags.HideAndDontSave
                };
            }

            var material = meshRenderer.sharedMaterial;

            if (material == null ||
                material == s_PreviewMaterial ||
                material.shader != s_PreviewMaterial.shader)
            {
                material = Object.Instantiate(s_PreviewMaterial);
                material.SetTexture(_Cubemap, p.texture);
                material.hideFlags    = HideFlags.HideAndDontSave;
                meshRenderer.material = material;
            }

            meshRenderer.lightProbeUsage            = UnityEngine.Rendering.LightProbeUsage.Off;
            meshRenderer.shadowCastingMode          = UnityEngine.Rendering.ShadowCastingMode.Off;
            meshRenderer.motionVectorGenerationMode = MotionVectorGenerationMode.ForceNoMotion;
        }
        static void SetupCameraForRender(Camera camera, HDAdditionalReflectionData additional, Camera viewerCamera = null)
        {
            float            nearClipPlane, farClipPlane, aspect, fov;
            Color            backgroundColor;
            CameraClearFlags clearFlags;
            Vector3          capturePosition;
            Quaternion       captureRotation;
            Matrix4x4        worldToCamera, projection;

            CalculateCaptureCameraProperties(additional,
                                             out nearClipPlane, out farClipPlane,
                                             out aspect, out fov, out clearFlags, out backgroundColor,
                                             out worldToCamera, out projection,
                                             out capturePosition, out captureRotation, viewerCamera);

            camera.farClipPlane        = farClipPlane;
            camera.nearClipPlane       = nearClipPlane;
            camera.fieldOfView         = fov;
            camera.aspect              = aspect;
            camera.clearFlags          = clearFlags;
            camera.backgroundColor     = camera.backgroundColor;
            camera.projectionMatrix    = projection;
            camera.worldToCameraMatrix = worldToCamera;
            camera.cullingMask         = additional.reflectionProbe.cullingMask;

            var ctr = camera.transform;

            ctr.position = capturePosition;
            ctr.rotation = captureRotation;
        }
Exemplo n.º 6
0
        static void Gizmos_Influence(ReflectionProbe p, HDAdditionalReflectionData a, HDReflectionProbeEditor e, bool isEdit)
        {
            var col = Gizmos.color;
            var mat = Gizmos.matrix;

            Gizmos.matrix = HDReflectionProbeEditorUtility.GetLocalSpace(p);
            switch (a.influenceShape)
            {
            case ShapeType.Box:
            {
                Gizmos.color = k_GizmoThemeColorExtentFace;
                e.m_UIState.alternativeBoxInfluenceHandle.DrawHull(isEdit);
                break;
            }

            case ShapeType.Sphere:
            {
                Gizmos.color = k_GizmoThemeColorExtentFace;
                if (isEdit)
                {
                    Gizmos.DrawSphere(p.center, a.influenceSphereRadius);
                }
                else
                {
                    Gizmos.DrawWireSphere(p.center, a.influenceSphereRadius);
                }
                break;
            }
            }

            Gizmos.matrix = mat;
            Gizmos.color  = col;
        }
        public void Render(HDAdditionalReflectionData additional, RenderTexture target, Camera viewerCamera = null)
        {
            var renderCamera = GetRenderCamera();

            // Copy current frameSettings of this probe to the HDAdditionalData of the render camera
            //probe.frameSettings.CopyTo(s_RenderCameraData.GetFrameSettings());

            SetupCameraForRender(renderCamera, additional, viewerCamera);
            renderCamera.RenderToCubemap(target);
            target.IncrementUpdateCount();
        }
Exemplo n.º 8
0
        public RenderTexture NewRenderTarget(HDAdditionalReflectionData probe)
        {
            var rt = new RenderTexture(m_Parameters.reflectionProbeSize, m_Parameters.reflectionProbeSize, 0, RenderTextureFormat.ARGBHalf);

            // No hide and don't save for this one
            rt.useMipMap        = true;
            rt.autoGenerateMips = false;
            rt.name             = CoreUtils.GetRenderTargetAutoName(m_Parameters.reflectionProbeSize, m_Parameters.reflectionProbeSize, 1, RenderTextureFormat.ARGBHalf, "ProbeRT");
            rt.dimension        = TextureDimension.Cube;
            rt.Create();
            return(rt);
        }
Exemplo n.º 9
0
 static void Gizmos_CapturePoint(ReflectionProbe p, HDAdditionalReflectionData a, HDReflectionProbeEditor e)
 {
     if (sphere == null)
     {
         sphere = Resources.GetBuiltinResource <Mesh>("New-Sphere.fbx");
     }
     if (material == null)
     {
         material = new Material(Shader.Find("Debug/ReflectionProbePreview"));
     }
     material.SetTexture("_Cubemap", p.texture);
     material.SetPass(0);
     Graphics.DrawMeshNow(sphere, Matrix4x4.TRS(p.transform.position, Quaternion.identity, Vector3.one));
 }
Exemplo n.º 10
0
    IEnumerator Start()
    {
        yield return(new WaitForSeconds(0.5f));

        foreach (var probe in refProbe)
        {
            Lightmapping.BakeReflectionProbe(probe, "Assets/" + probe.ToString() + ".hdr");
            HDAdditionalReflectionData addRefData = probe.gameObject.GetComponent <HDAdditionalReflectionData>();

            Texture texture = (Texture)AssetDatabase.LoadAssetAtPath("Assets/" + probe.ToString() + ".hdr", typeof(Texture));
            addRefData.bakedTexture = texture;
            yield return(null);
        }
    }
Exemplo n.º 11
0
        public static void CalculateCaptureCameraProperties(HDAdditionalReflectionData additional, out float nearClipPlane, out float farClipPlane, out float aspect, out float fov, out CameraClearFlags clearFlags, out Color backgroundColor, out Matrix4x4 worldToCamera, out Matrix4x4 projection, out Vector3 capturePosition, out Quaternion captureRotation, Camera viewerCamera = null)
        {
            nearClipPlane   = additional.reflectionProbe.nearClipPlane;
            farClipPlane    = additional.reflectionProbe.farClipPlane;
            aspect          = 1f;
            fov             = 90f;
            clearFlags      = CameraClearFlags.Nothing;
            backgroundColor = Color.white;

            capturePosition = additional.capturePosition;
            captureRotation = Quaternion.identity;

            worldToCamera = GeometryUtils.CalculateWorldToCameraMatrixRHS(capturePosition, captureRotation);
            projection    = Matrix4x4.Perspective(fov, aspect, nearClipPlane, farClipPlane);
        }
Exemplo n.º 12
0
        protected virtual UnityEngine.Object[] GetHDReflectionProbes()
        {
            #if UNITY_2020_1_OR_NEWER
            var reflectionProbes = Resources.FindObjectsOfTypeAll <ReflectionProbe>();
            #else
            var reflectionProbes = UnityEngine.Object.FindObjectsOfType <ReflectionProbe>();
            #endif

            foreach (ReflectionProbe probe in reflectionProbes)
            {
                HDAdditionalReflectionData hdAdditionalReflectionData = probe.GetComponent <HDAdditionalReflectionData>();
                serializedReflectionProbeDataPairing[probe] = hdAdditionalReflectionData != null ? new SerializedObject(hdAdditionalReflectionData) : null;
            }
            return(reflectionProbes);
        }
Exemplo n.º 13
0
        public void RegisterProbe(HDAdditionalReflectionData additional)
        {
            m_AdditionalDataReflectionProbes.Add(additional);
            //SetProbeBoundsDirty(probe);

            if (additional.mode == ReflectionProbeMode.Realtime)
            {
                //switch (additional.refreshMode)
                //{
                //    case ReflectionProbeRefreshMode.OnAwake:
                //        m_AdditionalDataReflectionProbe_RequestRealtimeRender.Add(additional);
                //        break;
                //    case ReflectionProbeRefreshMode.EveryFrame:
                m_AdditionalDataReflectionProbe_RealtimeUpdate.Add(additional);
                //        break;
                //}
            }
        }
Exemplo n.º 14
0
        static void ResetReflectionProbe(MenuCommand menuCommand)
        {
            GameObject go = ((ReflectionProbe)menuCommand.context).gameObject;

            Assert.IsNotNull(go);

            ReflectionProbe            reflectionProbe = go.GetComponent <ReflectionProbe>();
            HDAdditionalReflectionData reflectionProbeAdditionalData = go.GetComponent <HDAdditionalReflectionData>();

            Assert.IsNotNull(reflectionProbe);
            Assert.IsNotNull(reflectionProbeAdditionalData);

            Undo.SetCurrentGroupName("Reset HD Reflection Probe");
            Undo.RecordObjects(new UnityEngine.Object[] { reflectionProbe, reflectionProbeAdditionalData }, "Reset HD Reflection Probe");
            reflectionProbe.Reset();
            // To avoid duplicating init code we copy default settings to Reset additional data
            // Note: we can't call this code inside the HDAdditionalReflectionData, thus why we don't wrap it in Reset() function
            EditorUtility.CopySerialized(HDUtils.s_DefaultHDAdditionalReflectionData, reflectionProbeAdditionalData);
        }
Exemplo n.º 15
0
        public SerializedHDReflectionProbe(SerializedObject so, SerializedObject addso)
        {
            this.so    = so;
            this.addso = addso;

            target     = (ReflectionProbe)so.targetObject;
            targetData = target.GetComponent <HDAdditionalReflectionData>();

            mode = so.FindProperty("m_Mode");
            customBakedTexture   = so.FindProperty("m_CustomBakedTexture");
            renderDynamicObjects = so.FindProperty("m_RenderDynamicObjects");
            refreshMode          = so.FindProperty("m_RefreshMode");
            timeSlicingMode      = so.FindProperty("m_TimeSlicingMode");
            intensityMultiplier  = so.FindProperty("m_IntensityMultiplier");
            boxSize             = so.FindProperty("m_BoxSize");
            boxOffset           = so.FindProperty("m_BoxOffset");
            resolution          = so.FindProperty("m_Resolution");
            shadowDistance      = so.FindProperty("m_ShadowDistance");
            cullingMask         = so.FindProperty("m_CullingMask");
            useOcclusionCulling = so.FindProperty("m_UseOcclusionCulling");
            nearClip            = so.FindProperty("m_NearClip");
            farClip             = so.FindProperty("m_FarClip");
            boxProjection       = so.FindProperty("m_BoxProjection");
            legacyBlendDistance = so.FindProperty("m_BlendDistance");

            influenceShape                 = addso.Find((HDAdditionalReflectionData d) => d.influenceShape);
            influenceSphereRadius          = addso.Find((HDAdditionalReflectionData d) => d.influenceSphereRadius);
            useSeparateProjectionVolume    = addso.Find((HDAdditionalReflectionData d) => d.useSeparateProjectionVolume);
            boxReprojectionVolumeSize      = addso.Find((HDAdditionalReflectionData d) => d.boxReprojectionVolumeSize);
            boxReprojectionVolumeCenter    = addso.Find((HDAdditionalReflectionData d) => d.boxReprojectionVolumeCenter);
            sphereReprojectionVolumeRadius = addso.Find((HDAdditionalReflectionData d) => d.sphereReprojectionVolumeRadius);
            dimmer = addso.Find((HDAdditionalReflectionData d) => d.dimmer);
            blendDistancePositive       = addso.Find((HDAdditionalReflectionData d) => d.blendDistancePositive);
            blendDistanceNegative       = addso.Find((HDAdditionalReflectionData d) => d.blendDistanceNegative);
            blendNormalDistancePositive = addso.Find((HDAdditionalReflectionData d) => d.blendNormalDistancePositive);
            blendNormalDistanceNegative = addso.Find((HDAdditionalReflectionData d) => d.blendNormalDistanceNegative);
            boxSideFadePositive         = addso.Find((HDAdditionalReflectionData d) => d.boxSideFadePositive);
            boxSideFadeNegative         = addso.Find((HDAdditionalReflectionData d) => d.boxSideFadeNegative);

            proxyVolumeComponent = addso.Find((HDAdditionalReflectionData d) => d.proxyVolumeComponent);
        }
        void OnEnable()
        {
            var additionalData = CoreEditorUtils.GetAdditionalData <HDAdditionalReflectionData>(targets);

            m_AdditionalDataSerializedObject = new SerializedObject(additionalData);
            m_SerializedHdReflectionProbe    = new SerializedHDReflectionProbe(serializedObject, m_AdditionalDataSerializedObject);
            m_UIState.owner = this;
            m_UIState.Reset(m_SerializedHdReflectionProbe, Repaint);

            foreach (var t in targets)
            {
                var p = (ReflectionProbe)t;
                s_ReflectionProbeEditors[p] = this;
            }

            InitializeAllTargetProbes();

            HDAdditionalReflectionData probe = (HDAdditionalReflectionData)m_AdditionalDataSerializedObject.targetObject;

            probe.influenceVolume.Init(probe);
        }
Exemplo n.º 17
0
        static void Gizmos_Influence(ReflectionProbe p, HDAdditionalReflectionData a, Editor e, bool isEdit)
        {
            var col = Gizmos.color;
            var mat = Gizmos.matrix;

            Gizmos.matrix = HDReflectionProbeEditorUtility.GetLocalSpace(p);
            switch (a.influenceShape)
            {
            case ReflectionInfluenceShape.Box:
            {
                Gizmos.color = isEdit ? k_GizmoThemeColorExtentFace : k_GizmoThemeColorExtent;
                if (isEdit)
                {
                    Gizmos.DrawCube(p.center, p.size);
                }
                else
                {
                    Gizmos.DrawWireCube(p.center, p.size);
                }
                break;
            }

            case ReflectionInfluenceShape.Sphere:
            {
                Gizmos.color = k_GizmoThemeColorExtentFace;
                if (isEdit)
                {
                    Gizmos.DrawSphere(p.center, a.influenceSphereRadius);
                }
                else
                {
                    Gizmos.DrawWireSphere(p.center, a.influenceSphereRadius);
                }
                break;
            }
            }

            Gizmos.matrix = mat;
            Gizmos.color  = col;
        }
        internal static void InitializeProbe(ReflectionProbe p, HDAdditionalReflectionData data)
        {
            var meshFilter   = p.GetComponent <MeshFilter>() ?? p.gameObject.AddComponent <MeshFilter>();
            var meshRenderer = p.GetComponent <MeshRenderer>() ?? p.gameObject.AddComponent <MeshRenderer>();

            meshFilter.sharedMesh = s_SphereMesh;

            var material = meshRenderer.sharedMaterial;

            if (material == null ||
                material == s_PreviewMaterial ||
                material.shader != s_PreviewMaterial.shader)
            {
                material = Object.Instantiate(s_PreviewMaterial);
                material.SetTexture(_Cubemap, p.texture);
                material.hideFlags    = HideFlags.HideAndDontSave;
                meshRenderer.material = material;
            }

            meshRenderer.lightProbeUsage            = UnityEngine.Rendering.LightProbeUsage.Off;
            meshRenderer.shadowCastingMode          = UnityEngine.Rendering.ShadowCastingMode.Off;
            meshRenderer.motionVectorGenerationMode = MotionVectorGenerationMode.ForceNoMotion;
        }
Exemplo n.º 19
0
        static void Gizmos_InfluenceFade(ReflectionProbe p, HDAdditionalReflectionData a, Editor e, InfluenceType type, bool isEdit)
        {
            var col = Gizmos.color;
            var mat = Gizmos.matrix;

            Vector3 boxCenterOffset;
            Vector3 boxSizeOffset;
            float   sphereRadiusOffset;
            Color   color;

            switch (type)
            {
            default:
            case InfluenceType.Standard:
            {
                boxCenterOffset    = a.boxBlendCenterOffset;
                boxSizeOffset      = a.boxBlendSizeOffset;
                sphereRadiusOffset = a.sphereBlendRadiusOffset;
                color = isEdit ? k_GizmoThemeColorInfluenceBlendFace : k_GizmoThemeColorInfluenceBlend;
                break;
            }

            case InfluenceType.Normal:
            {
                boxCenterOffset    = a.boxBlendNormalCenterOffset;
                boxSizeOffset      = a.boxBlendNormalSizeOffset;
                sphereRadiusOffset = a.sphereBlendNormalRadiusOffset;
                color = isEdit ? k_GizmoThemeColorInfluenceNormalBlendFace : k_GizmoThemeColorInfluenceNormalBlend;
                break;
            }
            }

            Gizmos.matrix = HDReflectionProbeEditorUtility.GetLocalSpace(p);
            switch (a.influenceShape)
            {
            case ReflectionInfluenceShape.Box:
            {
                Gizmos.color = color;
                if (isEdit)
                {
                    Gizmos.DrawCube(p.center + boxCenterOffset, p.size + boxSizeOffset);
                }
                else
                {
                    Gizmos.DrawWireCube(p.center + boxCenterOffset, p.size + boxSizeOffset);
                }
                break;
            }

            case ReflectionInfluenceShape.Sphere:
            {
                Gizmos.color = color;
                if (isEdit)
                {
                    Gizmos.DrawSphere(p.center, a.influenceSphereRadius + sphereRadiusOffset);
                }
                else
                {
                    Gizmos.DrawWireSphere(p.center, a.influenceSphereRadius + sphereRadiusOffset);
                }
                break;
            }
            }

            Gizmos.matrix = mat;
            Gizmos.color  = col;
        }
        public SerializedHDReflectionProbe(SerializedObject so, SerializedObject addso)
        {
            this.so    = so;
            this.addso = addso;

            target     = (ReflectionProbe)so.targetObject;
            targetData = target.GetComponent <HDAdditionalReflectionData>();

            mode = so.FindProperty("m_Mode");
            customBakedTexture   = so.FindProperty("m_CustomBakedTexture");
            renderDynamicObjects = so.FindProperty("m_RenderDynamicObjects");
            refreshMode          = so.FindProperty("m_RefreshMode");
            timeSlicingMode      = so.FindProperty("m_TimeSlicingMode");
            intensityMultiplier  = so.FindProperty("m_IntensityMultiplier");
            boxSize             = so.FindProperty("m_BoxSize");
            boxOffset           = so.FindProperty("m_BoxOffset");
            resolution          = so.FindProperty("m_Resolution");
            shadowDistance      = so.FindProperty("m_ShadowDistance");
            cullingMask         = so.FindProperty("m_CullingMask");
            useOcclusionCulling = so.FindProperty("m_UseOcclusionCulling");
            nearClip            = so.FindProperty("m_NearClip");
            farClip             = so.FindProperty("m_FarClip");
            boxProjection       = so.FindProperty("m_BoxProjection");
            legacyBlendDistance = so.FindProperty("m_BlendDistance");

            influenceShape                 = addso.Find((HDAdditionalReflectionData d) => d.influenceShape);
            influenceSphereRadius          = addso.Find((HDAdditionalReflectionData d) => d.influenceSphereRadius);
            useSeparateProjectionVolume    = addso.Find((HDAdditionalReflectionData d) => d.useSeparateProjectionVolume);
            boxReprojectionVolumeSize      = addso.Find((HDAdditionalReflectionData d) => d.boxReprojectionVolumeSize);
            boxReprojectionVolumeCenter    = addso.Find((HDAdditionalReflectionData d) => d.boxReprojectionVolumeCenter);
            sphereReprojectionVolumeRadius = addso.Find((HDAdditionalReflectionData d) => d.sphereReprojectionVolumeRadius);
            weight                      = addso.Find((HDAdditionalReflectionData d) => d.weight);
            multiplier                  = addso.Find((HDAdditionalReflectionData d) => d.multiplier);
            blendDistancePositive       = addso.Find((HDAdditionalReflectionData d) => d.blendDistancePositive);
            blendDistanceNegative       = addso.Find((HDAdditionalReflectionData d) => d.blendDistanceNegative);
            blendNormalDistancePositive = addso.Find((HDAdditionalReflectionData d) => d.blendNormalDistancePositive);
            blendNormalDistanceNegative = addso.Find((HDAdditionalReflectionData d) => d.blendNormalDistanceNegative);
            boxSideFadePositive         = addso.Find((HDAdditionalReflectionData d) => d.boxSideFadePositive);
            boxSideFadeNegative         = addso.Find((HDAdditionalReflectionData d) => d.boxSideFadeNegative);

            editorAdvancedModeBlendDistancePositive       = addso.FindProperty("editorAdvancedModeBlendDistancePositive");
            editorAdvancedModeBlendDistanceNegative       = addso.FindProperty("editorAdvancedModeBlendDistanceNegative");
            editorSimplifiedModeBlendDistance             = addso.FindProperty("editorSimplifiedModeBlendDistance");
            editorAdvancedModeBlendNormalDistancePositive = addso.FindProperty("editorAdvancedModeBlendNormalDistancePositive");
            editorAdvancedModeBlendNormalDistanceNegative = addso.FindProperty("editorAdvancedModeBlendNormalDistanceNegative");
            editorSimplifiedModeBlendNormalDistance       = addso.FindProperty("editorSimplifiedModeBlendNormalDistance");
            editorAdvancedModeEnabled = addso.FindProperty("editorAdvancedModeEnabled");
            //handle data migration from before editor value were saved
            if (editorAdvancedModeBlendDistancePositive.vector3Value == Vector3.zero &&
                editorAdvancedModeBlendDistanceNegative.vector3Value == Vector3.zero &&
                editorSimplifiedModeBlendDistance.floatValue == 0f &&
                editorAdvancedModeBlendNormalDistancePositive.vector3Value == Vector3.zero &&
                editorAdvancedModeBlendNormalDistanceNegative.vector3Value == Vector3.zero &&
                editorSimplifiedModeBlendNormalDistance.floatValue == 0f &&
                (blendDistancePositive.vector3Value != Vector3.zero ||
                 blendDistanceNegative.vector3Value != Vector3.zero ||
                 blendNormalDistancePositive.vector3Value != Vector3.zero ||
                 blendNormalDistanceNegative.vector3Value != Vector3.zero))
            {
                Vector3 positive = blendDistancePositive.vector3Value;
                Vector3 negative = blendDistanceNegative.vector3Value;
                //exact advanced
                editorAdvancedModeBlendDistancePositive.vector3Value = positive;
                editorAdvancedModeBlendDistanceNegative.vector3Value = negative;
                //aproximated simplified
                editorSimplifiedModeBlendDistance.floatValue = Mathf.Max(positive.x, positive.y, positive.z, negative.x, negative.y, negative.z);

                positive = blendNormalDistancePositive.vector3Value;
                negative = blendNormalDistanceNegative.vector3Value;
                //exact advanced
                editorAdvancedModeBlendNormalDistancePositive.vector3Value = positive;
                editorAdvancedModeBlendNormalDistanceNegative.vector3Value = negative;
                //aproximated simplified
                editorSimplifiedModeBlendNormalDistance.floatValue = Mathf.Max(positive.x, positive.y, positive.z, negative.x, negative.y, negative.z);

                //display old data
                editorAdvancedModeEnabled.boolValue = true;
                Apply();
            }

            proxyVolumeComponent = addso.Find((HDAdditionalReflectionData d) => d.proxyVolume);
        }
Exemplo n.º 21
0
        static void SetupCameraForRender(Camera camera, HDAdditionalCameraData additionalData, HDAdditionalReflectionData additional)
        {
            Vector3    capturePosition = additional.capturePosition;
            Quaternion captureRotation = Quaternion.identity;
            float      nearClipPlane   = additional.captureSettings.nearClipPlane;
            float      farClipPlane    = additional.captureSettings.farClipPlane;
            float      aspect          = 1f;
            float      fov             = additional.captureSettings.fieldOfView;

            camera.clearFlags      = CameraClearFlags.Nothing;
            camera.backgroundColor = Color.white;
            camera.aspect          = 1f;

            additionalData.backgroundColorHDR = additional.captureSettings.backgroundColorHDR;
            additionalData.clearColorMode     = additional.captureSettings.clearColorMode;
            additionalData.clearDepth         = additional.captureSettings.clearDepth;
            camera.cullingMask                  = additional.captureSettings.cullingMask;
            additionalData.volumeLayerMask      = additional.captureSettings.volumeLayerMask;
            additionalData.volumeAnchorOverride = additional.captureSettings.volumeAnchorOverride;
            camera.useOcclusionCulling          = additional.captureSettings.useOcclusionCulling;
            camera.orthographic                 = additional.captureSettings.projection == CameraProjection.Orthographic;
            camera.farClipPlane                 = farClipPlane;
            camera.nearClipPlane                = nearClipPlane;
            camera.fieldOfView                  = fov;
            camera.orthographicSize             = additional.captureSettings.orthographicSize;

            //additionalData.aperture = additional.captureSettings.aperture;
            //additionalData.shutterspeed = additional.captureSettings.shutterspeed;
            //additionalData.iso = additional.captureSettings.iso;

            additionalData.renderingPath = additional.captureSettings.renderingPath;

            SetupFrameSettings(additionalData, additional);

            camera.projectionMatrix    = Matrix4x4.Perspective(fov, aspect, nearClipPlane, farClipPlane);
            camera.worldToCameraMatrix = GeometryUtils.CalculateWorldToCameraMatrixRHS(capturePosition, captureRotation);

            var ctr = camera.transform;

            ctr.position = capturePosition;
            ctr.rotation = captureRotation;
        }
Exemplo n.º 22
0
        static void Gizmos_InfluenceFade(ReflectionProbe p, HDAdditionalReflectionData a, HDReflectionProbeEditor e, InfluenceType type, bool isEdit)
        {
            var col = Gizmos.color;
            var mat = Gizmos.matrix;

            Gizmo6FacesBoxContained box;
            Vector3 boxCenterOffset;
            Vector3 boxSizeOffset;
            float   sphereRadiusOffset;
            Color   color;

            switch (type)
            {
            default:
            case InfluenceType.Standard:
            {
                box                = e != null ? e.m_UIState.alternativeBoxBlendHandle : null;
                boxCenterOffset    = a.boxBlendCenterOffset;
                boxSizeOffset      = a.boxBlendSizeOffset;
                sphereRadiusOffset = a.sphereBlendRadiusOffset;
                color              = isEdit ? k_GizmoThemeColorInfluenceBlendFace : k_GizmoThemeColorInfluenceBlend;
                break;
            }

            case InfluenceType.Normal:
            {
                box                = e != null ? e.m_UIState.alternativeBoxBlendNormalHandle : null;
                boxCenterOffset    = a.boxBlendNormalCenterOffset;
                boxSizeOffset      = a.boxBlendNormalSizeOffset;
                sphereRadiusOffset = a.sphereBlendNormalRadiusOffset;
                color              = isEdit ? k_GizmoThemeColorInfluenceNormalBlendFace : k_GizmoThemeColorInfluenceNormalBlend;
                break;
            }
            }

            Gizmos.matrix = HDReflectionProbeEditorUtility.GetLocalSpace(p);
            switch (a.influenceShape)
            {
            case ShapeType.Box:
            {
                Gizmos.color = color;
                if (e != null)         // e == null may occure when editor have still not been created at selection while the tool is not used for this part
                {
                    box.DrawHull(isEdit);
                }
                else
                {
                    if (isEdit)
                    {
                        Gizmos.DrawCube(p.center + boxCenterOffset, p.size + boxSizeOffset);
                    }
                    else
                    {
                        Gizmos.DrawWireCube(p.center + boxCenterOffset, p.size + boxSizeOffset);
                    }
                }
                break;
            }

            case ShapeType.Sphere:
            {
                Gizmos.color = color;
                if (isEdit)
                {
                    Gizmos.DrawSphere(p.center, a.influenceSphereRadius + sphereRadiusOffset);
                }
                else
                {
                    Gizmos.DrawWireSphere(p.center, a.influenceSphereRadius + sphereRadiusOffset);
                }
                break;
            }
            }

            Gizmos.matrix = mat;
            Gizmos.color  = col;
        }
        /// <summary>
        /// Setup for the automatically probe spawning
        /// </summary>
        /// <param name="profile"></param>
        public static void CreateAutomaticProbes(AmbientLightingProfile profile, AmbientSkiesConsts.RenderPipelineSettings renderPipelineSettings)
        {
            GameObject oldReflectionProbe = GameObject.Find("Global Reflection Probe");

            if (oldReflectionProbe != null)
            {
                Object.DestroyImmediate(oldReflectionProbe);
                Debug.Log("Old Reflection Probe Destroyed");
            }

            GameObject relfectionParentObject = ReflectionProbeParenting(true);
            int        numberTerrains         = Terrain.activeTerrains.Length;

            if (numberTerrains == 0)
            {
                Debug.LogError("Unable to initiate probe spawning systen. No terrain found");
                return;
            }
            else
            {
                if (profile.reflectionProbesPerRow < 2)
                {
                    Debug.LogError("Please set Probes Per Row to a value of 2 or higher");
                    return;
                }
                else
                {
                    m_currentProbeCount = 0;

                    float seaLevel       = 0f;
                    bool  seaLevelActive = false;

#if GAIA_PRESENT
                    Gaia.GaiaSessionManager gaiaSession = Object.FindObjectOfType <Gaia.GaiaSessionManager>();
                    if (gaiaSession != null)
                    {
                        seaLevel       = profile.seaLevel;
                        seaLevelActive = true;
                    }
#else
                    seaLevel = profile.seaLevel;
#endif

                    for (int terrainIdx = 0; terrainIdx < numberTerrains; terrainIdx++)
                    {
                        Terrain terrain     = Terrain.activeTerrains[terrainIdx];
                        Vector3 terrainSize = terrain.terrainData.size;

                        for (int row = 0; row < profile.reflectionProbesPerRow; ++row)
                        {
                            for (int columns = 0; columns < profile.reflectionProbesPerRow; ++columns)
                            {
                                GameObject probeObject = new GameObject("Global Generated Reflection Probe");
                                Vector3    newPosition = probeObject.transform.position;
                                newPosition.x = ((columns + 1) * terrainSize.x / profile.reflectionProbesPerRow) - terrainSize.x / profile.reflectionProbesPerRow / 2f + terrain.transform.position.x;
                                newPosition.z = ((row + 1) * terrainSize.z / profile.reflectionProbesPerRow) - terrainSize.z / profile.reflectionProbesPerRow / 2f + terrain.transform.position.z;
                                float sampledHeight = terrain.SampleHeight(newPosition);

                                ReflectionProbe probeData = probeObject.AddComponent <ReflectionProbe>();
                                probeData.enabled       = false;
                                probeData.blendDistance = 0f;
                                probeData.cullingMask   = profile.reflectionprobeCullingMask;
                                probeData.farClipPlane  = profile.reflectionProbeClipPlaneDistance;
                                probeData.mode          = profile.reflectionProbeMode;
                                probeData.refreshMode   = profile.reflectionProbeRefresh;

                                if (seaLevelActive)
                                {
                                    newPosition.y = 500f + seaLevel + 0.2f;
                                }
                                else
                                {
                                    newPosition.y    = sampledHeight + profile.reflectionProbeOffset;
                                    probeData.center = new Vector3(0f, 0f - profile.reflectionProbeOffset - sampledHeight, 0f);
                                }


                                probeObject.transform.position = newPosition;
                                probeObject.transform.SetParent(relfectionParentObject.transform);

                                switch (profile.reflectionProbeResolution)
                                {
                                case AmbientSkiesConsts.ReflectionProbeResolution.Resolution16:
                                    probeData.resolution = 16;
                                    break;

                                case AmbientSkiesConsts.ReflectionProbeResolution.Resolution32:
                                    probeData.resolution = 32;
                                    break;

                                case AmbientSkiesConsts.ReflectionProbeResolution.Resolution64:
                                    probeData.resolution = 64;
                                    break;

                                case AmbientSkiesConsts.ReflectionProbeResolution.Resolution128:
                                    probeData.resolution = 128;
                                    break;

                                case AmbientSkiesConsts.ReflectionProbeResolution.Resolution256:
                                    probeData.resolution = 256;
                                    break;

                                case AmbientSkiesConsts.ReflectionProbeResolution.Resolution512:
                                    probeData.resolution = 512;
                                    break;

                                case AmbientSkiesConsts.ReflectionProbeResolution.Resolution1024:
                                    probeData.resolution = 1024;
                                    break;

                                case AmbientSkiesConsts.ReflectionProbeResolution.Resolution2048:
                                    probeData.resolution = 2048;
                                    break;
                                }

                                probeData.shadowDistance  = 80f;
                                probeData.size            = new Vector3(terrainSize.x / profile.reflectionProbesPerRow, terrainSize.y, terrainSize.z / profile.reflectionProbesPerRow);
                                probeData.timeSlicingMode = profile.reflectionProbeTimeSlicingMode;
                                probeData.hdr             = true;
                                probeData.shadowDistance  = profile.reflectionProbeShadowDistance;

                                //If HDRP
                                if (renderPipelineSettings == AmbientSkiesConsts.RenderPipelineSettings.HighDefinition)
                                {
#if HDPipeline && UNITY_2018_3_OR_NEWER
                                    HDAdditionalReflectionData reflectionData = probeObject.GetComponent <HDAdditionalReflectionData>();
                                    if (reflectionData == null)
                                    {
                                        reflectionData            = probeObject.AddComponent <HDAdditionalReflectionData>();
                                        reflectionData.multiplier = 1f;
                                    }
                                    else
                                    {
                                        reflectionData.multiplier = 1f;
                                    }
#endif
                                }

                                m_storedProbes.Add(probeData);
                                m_currentProbeCount++;
                            }
                        }
                    }

#if HDPipeline && GAIA_PRESENT
                    if (seaLevelActive)
                    {
                        GameObject planarObject = GameObject.Find("Gaia Water Planar Reflections Object");
                        if (planarObject == null)
                        {
                            planarObject = new GameObject("Gaia Water Planar Reflections Object");
                            PlanarReflectionProbe planar = planarObject.AddComponent <PlanarReflectionProbe>();
                            planar.mode                    = ProbeSettings.Mode.Realtime;
                            planar.realtimeMode            = ProbeSettings.RealtimeMode.OnEnable;
                            planar.influenceVolume.shape   = InfluenceShape.Box;
                            planar.influenceVolume.boxSize = new Vector3(10000f, 5f, 10000f);

                            planarObject.transform.position = new Vector3(0f, profile.seaLevel + 0.2f, 0f);
                            planarObject.transform.SetParent(relfectionParentObject.transform);
                        }
                    }
#endif

                    m_probeRenderActive = true;
                }
            }
        }
        /// <summary>
        /// Creates a reflection probe at current scene view camera location
        /// </summary>
        /// <param name="profile"></param>
        /// <param name="renderPipelineSettings"></param>
        public static void CreateProbeAtLocation(AmbientLightingProfile profile, AmbientSkiesConsts.RenderPipelineSettings renderPipelineSettings)
        {
            GameObject oldReflectionProbe = GameObject.Find("Global Reflection Probe");

            if (oldReflectionProbe != null)
            {
                Object.DestroyImmediate(oldReflectionProbe);
                Debug.Log("Old Reflection Probe Destroyed");
            }

            //Creates the probe
            GameObject createdProbeObject = new GameObject(profile.reflectionProbeName);

            //Assign scene view camera
            Vector3 position = SceneView.lastActiveSceneView.camera.transform.position;

            if (SceneView.lastActiveSceneView.pivot != position)
            {
                //Set position based on scene view camera position
                createdProbeObject.transform.localPosition = position;
            }
            else
            {
                Debug.LogWarning("Scene View camera not found, probe spawned at position 0, 0, 0");
            }

            //Parent the probe object
            GameObject reflectionProbeParent = ReflectionProbeParenting(true);

            createdProbeObject.transform.SetParent(reflectionProbeParent.transform);

            //Add probe data
            ReflectionProbe probeData = createdProbeObject.AddComponent <ReflectionProbe>();

            //Configure Probe settings
            probeData.blendDistance = profile.reflectionProbeBlendDistance;
            probeData.cullingMask   = profile.reflectionprobeCullingMask;
            probeData.farClipPlane  = profile.reflectionProbeClipPlaneDistance;
            probeData.mode          = profile.reflectionProbeMode;
            probeData.refreshMode   = profile.reflectionProbeRefresh;
            probeData.blendDistance = 5f;

            switch (profile.reflectionProbeResolution)
            {
            case AmbientSkiesConsts.ReflectionProbeResolution.Resolution16:
                probeData.resolution = 16;
                break;

            case AmbientSkiesConsts.ReflectionProbeResolution.Resolution32:
                probeData.resolution = 32;
                break;

            case AmbientSkiesConsts.ReflectionProbeResolution.Resolution64:
                probeData.resolution = 64;
                break;

            case AmbientSkiesConsts.ReflectionProbeResolution.Resolution128:
                probeData.resolution = 128;
                break;

            case AmbientSkiesConsts.ReflectionProbeResolution.Resolution256:
                probeData.resolution = 256;
                break;

            case AmbientSkiesConsts.ReflectionProbeResolution.Resolution512:
                probeData.resolution = 512;
                break;

            case AmbientSkiesConsts.ReflectionProbeResolution.Resolution1024:
                probeData.resolution = 1024;
                break;

            case AmbientSkiesConsts.ReflectionProbeResolution.Resolution2048:
                probeData.resolution = 2048;
                break;
            }

            probeData.shadowDistance  = profile.reflectionProbeShadowDistance;
            probeData.size            = profile.reflectionProbeScale;
            probeData.timeSlicingMode = profile.reflectionProbeTimeSlicingMode;
            probeData.hdr             = true;
            probeData.shadowDistance  = profile.reflectionProbeShadowDistance;

            //If HDRP
            if (renderPipelineSettings == AmbientSkiesConsts.RenderPipelineSettings.HighDefinition)
            {
#if HDPipeline && UNITY_2018_3_OR_NEWER
                HDAdditionalReflectionData reflectionData = createdProbeObject.GetComponent <HDAdditionalReflectionData>();
                if (reflectionData == null)
                {
                    reflectionData            = createdProbeObject.AddComponent <HDAdditionalReflectionData>();
                    reflectionData.multiplier = 1f;
                }
                else
                {
                    reflectionData.multiplier = 1f;
                }
#endif
            }

            m_currentProbeCount++;

            SceneView.lastActiveSceneView.Repaint();
            EditorGUIUtility.PingObject(createdProbeObject);
        }
Exemplo n.º 25
0
        /// <summary>
        /// Creates a single Reflection Probe in the given position
        /// </summary>
        /// <param name="position"></param>
        /// <param name="terrain"></param>
        /// <param name="reflectionProbeData"></param>
        /// <param name="seaLevelActive"></param>
        /// <param name="seaLevel"></param>
        /// <param name="parentTransform"></param>
        /// <param name="isHDRP"></param>
        /// <returns></returns>
        public static ReflectionProbe CreateReflectionProbe(Vector3 position, Vector3 size, Terrain terrain, ReflectionProbeData reflectionProbeData, bool seaLevelActive, float seaLevel, Transform parentTransform, bool isHDRP, bool probeCulling = false)
        {
            GameObject probeObject = new GameObject("Global Generated Reflection Probe");

            float sampledHeight = terrain.SampleHeight(position);

            ReflectionProbe reflectionProbe = probeObject.AddComponent <ReflectionProbe>();

            reflectionProbe.enabled       = false;
            reflectionProbe.blendDistance = 0f;
            reflectionProbe.cullingMask   = reflectionProbeData.reflectionprobeCullingMask;
            reflectionProbe.farClipPlane  = reflectionProbeData.reflectionProbeClipPlaneDistance;
            reflectionProbe.mode          = reflectionProbeData.reflectionProbeMode;
            switch (reflectionProbeData.reflectionProbeRefresh)
            {
            case GaiaConstants.ReflectionProbeRefreshModePW.OnAwake:
                reflectionProbe.refreshMode = ReflectionProbeRefreshMode.OnAwake;
                break;

            case GaiaConstants.ReflectionProbeRefreshModePW.EveryFrame:
                reflectionProbe.refreshMode = ReflectionProbeRefreshMode.EveryFrame;
                break;

            case GaiaConstants.ReflectionProbeRefreshModePW.ViaScripting:
                reflectionProbe.refreshMode = ReflectionProbeRefreshMode.ViaScripting;
                break;

            case GaiaConstants.ReflectionProbeRefreshModePW.ProbeManager:
                reflectionProbe.refreshMode = ReflectionProbeRefreshMode.ViaScripting;
                break;
            }

            if (!seaLevelActive)
            {
                position.y = 500f + seaLevel + 0.2f;
            }
            else
            {
                position.y             = sampledHeight + reflectionProbeData.reflectionProbeOffset;
                reflectionProbe.center = new Vector3(0f, 0f - reflectionProbeData.reflectionProbeOffset - sampledHeight, 0f);
            }

            if (position.y < seaLevel)
            {
                position.y = seaLevel + reflectionProbeData.reflectionProbeOffset;
            }
            probeObject.transform.position = position;
            probeObject.transform.SetParent(parentTransform);

            switch (reflectionProbeData.reflectionProbeResolution)
            {
            case GaiaConstants.ReflectionProbeResolution.Resolution16:
                reflectionProbe.resolution = 16;
                break;

            case GaiaConstants.ReflectionProbeResolution.Resolution32:
                reflectionProbe.resolution = 32;
                break;

            case GaiaConstants.ReflectionProbeResolution.Resolution64:
                reflectionProbe.resolution = 64;
                break;

            case GaiaConstants.ReflectionProbeResolution.Resolution128:
                reflectionProbe.resolution = 128;
                break;

            case GaiaConstants.ReflectionProbeResolution.Resolution256:
                reflectionProbe.resolution = 256;
                break;

            case GaiaConstants.ReflectionProbeResolution.Resolution512:
                reflectionProbe.resolution = 512;
                break;

            case GaiaConstants.ReflectionProbeResolution.Resolution1024:
                reflectionProbe.resolution = 1024;
                break;

            case GaiaConstants.ReflectionProbeResolution.Resolution2048:
                reflectionProbe.resolution = 2048;
                break;
            }

            reflectionProbe.shadowDistance  = 80f;
            reflectionProbe.size            = size;
            reflectionProbe.timeSlicingMode = reflectionProbeData.reflectionProbeTimeSlicingMode;
            reflectionProbe.hdr             = true;
            reflectionProbe.shadowDistance  = reflectionProbeData.reflectionProbeShadowDistance;

            //If HDRP
            if (isHDRP)
            {
#if HDPipeline
                HDAdditionalReflectionData reflectionData = probeObject.GetComponent <HDAdditionalReflectionData>();
                if (reflectionData == null)
                {
                    reflectionData = probeObject.AddComponent <HDAdditionalReflectionData>();
                }

                reflectionData.multiplier   = 1f;
                reflectionData.realtimeMode = ProbeSettings.RealtimeMode.OnEnable;
#endif
            }

#if GAIA_PRO_PRESENT
            ReflectionProbeCuller culler = reflectionProbe.GetComponent <ReflectionProbeCuller>();
            if (probeCulling)
            {
                if (culler == null)
                {
                    culler         = reflectionProbe.gameObject.AddComponent <ReflectionProbeCuller>();
                    culler.m_probe = reflectionProbe;
                    culler.Initialize();
                }
            }
            else
            {
                if (culler != null)
                {
                    GameObject.DestroyImmediate(culler);
                }
            }
#endif

            return(reflectionProbe);
        }
Exemplo n.º 26
0
 public void UnregisterProbe(HDAdditionalReflectionData additional)
 {
     m_AdditionalDataReflectionProbes.Remove(additional);
     m_AdditionalDataReflectionProbe_RequestRealtimeRender.Remove(additional);
     m_AdditionalDataReflectionProbe_RealtimeUpdate.Remove(additional);
 }
Exemplo n.º 27
0
        /// <summary>
        /// Start function
        /// </summary>
        void Start()
        {
#if UNITY_POST_PROCESSING_STACK_V2
            transitionPostFX = GameObject.Find("Underwater Transition PostFX").GetComponent <PostProcessVolume>();

            underwaterPostFX = GameObject.Find("Underwater PostFX").GetComponent <PostProcessVolume>();

            if (Application.isPlaying)
            {
                if (transitionPostFX != null)
                {
                    transitionPostFX.enabled = true;
                }
                if (underwaterPostFX != null)
                {
                    underwaterPostFX.enabled = true;
                }
            }
            else
            {
                if (transitionPostFX != null)
                {
                    transitionPostFX.enabled = false;
                }
                if (underwaterPostFX != null)
                {
                    underwaterPostFX.enabled = false;
                }
            }
#endif

            if (m_gaiaSettings == null)
            {
                m_gaiaSettings = GaiaUtils.GetGaiaSettings();
            }

            if (m_gaiaSceneInfo == null)
            {
                m_gaiaSceneInfo = GaiaSceneInfo.GetSceneInfo();
            }

            if (m_gaiaSettings != null)
            {
                m_currentRenderer = m_gaiaSettings.m_currentRenderer;
            }

#if HDPipeline
            if (m_currentRenderer == GaiaConstants.EnvironmentRenderer.HighDefinition2018x)
            {
                GameObject underwaterProbe = GameObject.Find("Underwater Reflection Probe");
                if (underwaterProbe != null)
                {
                    m_underwaterProbe = GameObject.Find("Underwater Reflection Probe").GetComponent <ReflectionProbe>();
                }
            }
#endif
            GameObject waterPlanar = GameObject.Find("Water Planar Reflections");
            if (waterPlanar != null)
            {
                ReflectionProbe reflection = GameObject.Find("Water Planar Reflections").GetComponent <ReflectionProbe>();
                {
                    if (reflection != null)
                    {
                        reflection.mode = UnityEngine.Rendering.ReflectionProbeMode.Custom;
                    }
#if HDPipeline
                    HDAdditionalReflectionData reflectionData = GameObject.Find("Water Planar Reflections").GetComponent <HDAdditionalReflectionData>();
                    if (reflectionData != null)
                    {
#if !UNITY_2019_1_OR_NEWER
                        reflectionData.mode = UnityEngine.Rendering.ReflectionProbeMode.Custom;
#else
                        reflectionData.mode = ProbeSettings.Mode.Realtime;
#endif
                    }
#endif
                }
            }

#if HDPipeline
            if (m_underwaterProbe != null)
            {
                m_underwaterProbe.enabled = false;
            }
#endif

            mainlight        = gameObject.GetComponent <Light>();
            mainlight.cookie = null;
            causticsObject   = gameObject.transform;
            partentObject    = GetOrCreateEnvironmentParent().transform;
            if (m_currentRenderer == GaiaConstants.EnvironmentRenderer.HighDefinition2018x)
            {
#if UNITY_2019_1_OR_NEWER && HDPipeline
                postVolume = GameObject.Find("Gaia HDRP Post Processing").GetComponent <Volume>();

                volume = GameObject.Find("High Definition Environment Volume").GetComponent <Volume>();
                if (volume != null)
                {
                    VolumeProfile profile = volume.sharedProfile;
                    if (profile != null)
                    {
                        VolumetricFog fog;
                        if (profile.TryGet(out fog))
                        {
                            storedFogColor    = fog.albedo.value;
                            storedFogDistance = fog.meanFreePath.value;
                        }
                    }
                }
#endif
            }
            else
            {
                storedFogColor    = RenderSettings.fogColor;
                storedFogDistance = RenderSettings.fogEndDistance;
            }

            ambientAudio = null;
            if (ambientAudio == null)
            {
                ambientAudio = GameObject.Find("Ambient Audio");
            }

            underwaterAudio = null;
            if (underwaterAudio == null)
            {
                underwaterAudio = GameObject.Find("Underwater SoundFX");
            }
#if UNITY_EDITOR
            if (player == null)
            {
                player = GetThePlayer();
            }
#endif
            if (m_gaiaSceneInfo != null)
            {
                m_sealevel = m_gaiaSceneInfo.m_seaLevel;
            }

            if (m_useHorizonFix)
            {
                horizonObject = GameObject.Find("Ambient Underwater Horizon");
                if (horizonObjectStored != null)
                {
                    horizonObject      = Instantiate(horizonObjectStored);
                    horizonObject.name = "Ambient Underwater Horizon";
                    if (partentObject != null)
                    {
                        horizonObject.transform.parent = partentObject;
                    }

                    MeshRenderer[] theRenders = horizonObject.GetComponentsInChildren <MeshRenderer>();
                    foreach (MeshRenderer rends in theRenders)
                    {
                        rends.enabled = false;
                    }
                }
            }

            if (m_useUnderwaterparticles)
            {
                underwaterParticles = GameObject.Find("Underwater Particles Effects");
                if (underwaterParticlesStored != null)
                {
                    underwaterParticles      = Instantiate(underwaterParticlesStored);
                    underwaterParticles.name = "Underwater Particles Effects";
                    underwaterParticles.SetActive(false);
                    if (partentObject != null)
                    {
                        underwaterParticles.transform.parent = partentObject;
                    }
                }
            }

            if (gameObject.GetComponent <AudioSource>() == null)
            {
                gameObject.AddComponent <AudioSource>();
                objectAudioSource        = gameObject.GetComponent <AudioSource>();
                objectAudioSource.volume = m_waterSubmergeSounfFXVolume;
            }
            else
            {
                objectAudioSource        = gameObject.GetComponent <AudioSource>();
                objectAudioSource.volume = m_waterSubmergeSounfFXVolume;
            }

            if (mainlight.type == LightType.Directional)
            {
                mainlight.cookieSize = m_causticsSize;
            }

            StopAllCoroutines();
        }