コード例 #1
0
 void OnPreRender()
 {
     if (enabled)
     {
         if (gameObject.tag == "MainCamera" && !hasUpdated)
         {
             OverCloud.CameraUpdate(camera);
             hasUpdated = true;
         }
         else if (renderVolumetricClouds)
         {
             OverCloud.PositionCloudVolume(camera);
         }
         OverCloud.Render(
             camera,
             renderVolumetricClouds,
             render2DFallback,
             renderAtmosphere,
             renderScatteringMask,
             includeCascadedShadows,
             downsample2DClouds,
             scatteringMaskSamples,
             renderRainMask,
             downsampleFactor,
             lightSampleCount,
             highQualityClouds
             );
     }
 }
コード例 #2
0
        private void Update()
        {
            var cloudDensity = OverCloud.GetDensity(transform.position);

            density = Mathf.Lerp(density, cloudDensity.density, interpolationSpeed * Time.deltaTime);
            rain    = Mathf.Lerp(rain, cloudDensity.rain, interpolationSpeed * Time.deltaTime);
        }
コード例 #3
0
 private void OnDrawGizmos()
 {
     if (m_Debug)
     {
         float density = OverCloud.GetDensity(transform.position).density;
         Gizmos.color = Color.Lerp(Color.red, Color.green, density);
         Gizmos.DrawSphere(transform.position, Mathf.Lerp(10, 100, density));
     }
 }
コード例 #4
0
        void EditorUpdate()
        {
            if (enabled)
            {
                var camera = Camera.current;
                if (!camera || camera.name != "SceneCamera")
                {
                    return;
                }

                if (gameObject.tag == "MainCamera")
                {
                    OverCloud.CameraUpdate(camera);
                }
            }
        }
コード例 #5
0
        private void OnPostRender()
        {
            if (enabled)
            {
                // Force keywords off
                Shader.DisableKeyword("OVERCLOUD_ENABLED");
                Shader.DisableKeyword("OVERCLOUD_ATMOSPHERE_ENABLED");
                Shader.DisableKeyword("DOWNSAMPLE_2D_CLOUDS");
                Shader.DisableKeyword("RAIN_MASK_ENABLED");
                Shader.DisableKeyword("OVERCLOUD_SKY_ENABLED");

                // This is set to 1 if the cascaded shadow maps are rendered to.
                // Sometimes, Unity decides that shadows don't need to be rendered which can otherwise lead to weird behaviour.
                Shader.SetGlobalFloat("_CascadeShadowMapPresent", 0f);
            }
            OverCloud.CleanUp();
            // Reset multi-pass flag
            hasUpdated = false;
        }
コード例 #6
0
        void Update()
        {
            // Toggle cloud quality
            if (Input.GetKeyDown("q"))
            {
                m_CloudQuality++;
                if (m_CloudQuality > 2)
                {
                    m_CloudQuality = 0;
                }
                switch (m_CloudQuality)
                {
                case 0:
                    m_OverCloudCamera.downsampleFactor     = DownSampleFactor.Quarter;
                    m_OverCloudCamera.renderScatteringMask = false;
                    m_OverCloudCamera.highQualityClouds    = false;
                    m_OverCloudCamera.lightSampleCount     = SampleCount.Low;
                    break;

                case 1:
                    m_OverCloudCamera.downsampleFactor     = DownSampleFactor.Quarter;
                    m_OverCloudCamera.renderScatteringMask = true;
                    m_OverCloudCamera.highQualityClouds    = true;
                    m_OverCloudCamera.lightSampleCount     = SampleCount.Normal;
                    break;

                case 2:
                    m_OverCloudCamera.downsampleFactor     = DownSampleFactor.Half;
                    m_OverCloudCamera.renderScatteringMask = true;
                    m_OverCloudCamera.highQualityClouds    = true;
                    m_OverCloudCamera.lightSampleCount     = SampleCount.High;
                    break;
                }

                UpdateText();
            }

            m_FPSText.text = "FPS: " + Mathf.CeilToInt(1f / Time.smoothDeltaTime);

            // Weather presets
            if (Input.GetKeyDown("1"))
            {
                OverCloud.SetWeatherPreset("Clear");
            }
            if (Input.GetKeyDown("2"))
            {
                OverCloud.SetWeatherPreset("Broken");
            }
            if (Input.GetKeyDown("3"))
            {
                OverCloud.SetWeatherPreset("Overcast");
            }
            if (Input.GetKeyDown("4"))
            {
                OverCloud.SetWeatherPreset("Foggy");
            }
            if (Input.GetKeyDown("5"))
            {
                OverCloud.SetWeatherPreset("Rain");
            }
            if (Input.GetKeyDown("6"))
            {
                OverCloud.SetWeatherPreset("Storm");
            }

            // Toggle controls text
            if (Input.GetKeyDown("h"))
            {
                m_OutputText.enabled   = !m_ControlsText.enabled;
                m_FPSText.enabled      = !m_ControlsText.enabled;
                m_ControlsText.enabled = !m_ControlsText.enabled;
            }

            // Toggle dynamic reflection probe
            if (Input.GetKeyDown("r"))
            {
                m_DynamicReflectionProbe.enabled = !m_DynamicReflectionProbe.enabled;
            }

                        #if POST_PROCESSING_STACK_V1
            // Toggle post processing
            if (Input.GetKeyDown("p"))
            {
                if (m_PostProcessing.profile == m_EffectsOn)
                {
                    m_PostProcessing.profile = m_EffectsOff;
                }
                else
                {
                    m_PostProcessing.profile = m_EffectsOn;
                }
            }
                        #endif

            // Apply a low pass filter to the propeller when inside the clouds
            m_PropellerFilter.cutoffFrequency = Mathf.Lerp(22000, 800, m_CloudProbe.density);

            // Change time of day
            float scroll = Input.GetAxis("Mouse ScrollWheel");
            if (scroll > Mathf.Epsilon)
            {
                OverCloud.timeOfDay.time += 0.2f;
            }
            else if (scroll < -Mathf.Epsilon)
            {
                OverCloud.timeOfDay.time -= 0.2f;
            }

            // Toggle controls text
            if (Input.GetKeyDown("space"))
            {
                OverCloud.timeOfDay.play = !OverCloud.timeOfDay.play;
            }

            m_OutputText.text  = "Time of Day - " + (OverCloud.timeOfDay.play ? "Playing" : "Paused") + "\n";
            m_OutputText.text += "Timescale - " + OverCloud.timeOfDay.playSpeed + "\n";
            m_OutputText.text += "Year - " + OverCloud.timeOfDay.year + "\n";
            m_OutputText.text += "Month - " + OverCloud.timeOfDay.month + "\n";
            m_OutputText.text += "Day - " + OverCloud.timeOfDay.day + "\n";
            int h = OverCloud.timeOfDay.hour;
            int m = OverCloud.timeOfDay.minute;
            int s = OverCloud.timeOfDay.second;
            m_OutputText.text += "Time - " + (h < 10 ? "0" : "") + h + ":" + (m < 10 ? "0" : "") + m + ":" + (s < 10 ? "0" : "") + s + "\n";
        }