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);
            }
        }
Exemplo n.º 2
0
        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);
                }
            }
        }