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 ); } }
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); }
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)); } }
void EditorUpdate() { if (enabled) { var camera = Camera.current; if (!camera || camera.name != "SceneCamera") { return; } if (gameObject.tag == "MainCamera") { OverCloud.CameraUpdate(camera); } } }
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; }
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"; }