private void CameraPreCull(Camera camera) { if (Flare == null || !Flare.enabled || LensFlareBlocker == null || WeatherMakerFullScreenCloudsScript.Instance == null || WeatherMakerFullScreenCloudsScript.Instance.CloudProfile == null || WeatherMakerCommandBufferManagerScript.CameraStack > 1 || MinimumCloudCoverToBlockLensFlare <= 0.0f) { return; } LensFlareBlocker.transform.position = camera.transform.position + (transform.forward * Mathf.Min(1000.0f, camera.farClipPlane) * -0.9f); if (WeatherMakerFullScreenCloudsScript.CloudProbeEnabled && WeatherMakerFullScreenCloudsScript.Instance != null && FlareCloudProbeTarget != null && SystemInfo.supportsComputeShaders) { FlareCloudProbeTarget.transform.position = camera.transform.position + (transform.forward * -100000.0f); WeatherMakerFullScreenCloudsScript.CloudProbeResult result = WeatherMakerFullScreenCloudsScript.Instance.GetCloudProbe(camera, camera.transform, FlareCloudProbeTarget.transform); LensFlareBlocker.SetActive(result.DensityRaySum > MinimumCloudCoverToBlockLensFlare); //Debug.Log("Flare probe: " + result.DensityRayAverage); } else if (WeatherMakerFullScreenCloudsScript.Instance.CloudProfile.CloudCoverTotal < MinimumCloudCoverToBlockLensFlare) { LensFlareBlocker.SetActive(false); } else { LensFlareBlocker.SetActive(true); } }
private void OnDrawGizmos() { if (!ShowGizmos) { return; } Transform source = (ProbeSourceIsCamera ? Camera.current.transform : (ProbeSource == null ? transform : ProbeSource)); if (WeatherMakerFullScreenCloudsScript.Instance != null && source != null) { // https://gamedev.stackexchange.com/questions/120960/how-can-i-debug-draw-different-shapes-in-unity WeatherMakerFullScreenCloudsScript.CloudProbeResult result = WeatherMakerFullScreenCloudsScript.Instance.GetCloudProbe(Camera.current ?? Camera.main, source, ProbeDestination); float d = Mathf.Min(1.0f, result.DensitySource * 5.0f); UnityEditor.Handles.color = new Color(d, d, d, 1.0f); UnityEditor.Handles.SphereHandleCap(0, source.position, Quaternion.identity, 16.0f, EventType.Repaint); GUIStyle textStyle = new GUIStyle(); textStyle.normal.textColor = textStyle.active.textColor = Color.white; if (blackTexture == null) { blackTexture = new Texture2D(1, 1); blackTexture.SetPixel(0, 0, Color.black); blackTexture.Apply(); } textStyle.normal.background = textStyle.active.background = blackTexture; UnityEditor.Handles.Label(source.position, "Cloud: " + result.DensitySource.ToString("0.000"), textStyle); if (ProbeDestination != null && ProbeDestination != source) { UnityEditor.Handles.SphereHandleCap(0, ProbeDestination.position, Quaternion.identity, 16.0f, EventType.Repaint); UnityEditor.Handles.color = Color.green; UnityEditor.Handles.DrawLine(source.position, ProbeDestination.position); Vector3 dir = (ProbeDestination.position - source.position).normalized; Quaternion rot = Quaternion.LookRotation(dir); UnityEditor.Handles.ArrowHandleCap(0, ProbeDestination.position - (dir * 96.0f), rot, 64.0f, EventType.Repaint); UnityEditor.Handles.Label(0.5f * (source.position + ProbeDestination.position), "Cloud: " + result.DensityRaySum.ToString("0.000"), textStyle); UnityEditor.Handles.Label(ProbeDestination.position, "Cloud: " + result.DensityTarget.ToString("0.000"), textStyle); } } }