예제 #1
0
        public void RenderAllRealtimeProbesFor(ReflectionProbeType probeType, Camera viewerCamera)
        {
            if ((probeType & ReflectionProbeType.PlanarReflection) != 0)
            {
                var length = Mathf.Min(m_PlanarReflectionProbe_PerCamera_RealtimeUpdate.Count, m_PlanarReflectionProbe_RealtimeUpdate_WorkArray.Length);
                m_PlanarReflectionProbe_PerCamera_RealtimeUpdate.CopyTo(m_PlanarReflectionProbe_RealtimeUpdate_WorkArray);

                // 1. Allocate if necessary target texture
                var renderCamera = GetRenderCamera();
                for (var i = 0; i < length; i++)
                {
                    var probe    = m_PlanarReflectionProbe_RealtimeUpdate_WorkArray[i];
                    var hdCamera = HDCamera.Get(renderCamera, null, probe.frameSettings);
                    if (!IsRealtimeTextureValid(probe.realtimeTexture, hdCamera))
                    {
                        if (probe.realtimeTexture != null)
                        {
                            probe.realtimeTexture.Release();
                        }
                        probe.realtimeTexture = NewRenderTarget(probe);
                    }
                }

                // 2. Render
                for (var i = 0; i < length; i++)
                {
                    var probe = m_PlanarReflectionProbe_RealtimeUpdate_WorkArray[i];
                    Render(probe, probe.realtimeTexture, viewerCamera);
                }
            }
        }
예제 #2
0
        public static HDCamera GetRenderHDCamera(PlanarReflectionProbe probe)
        {
            var camera = GetRenderCamera();

            probe.frameSettings.CopyTo(s_RenderCameraData.GetFrameSettings());

            return(HDCamera.Get(camera, null, probe.frameSettings));
        }
예제 #3
0
        public void RenderAllRealtimeProbesFor(ReflectionProbeType probeType, Camera viewerCamera)
        {
            if ((probeType & ReflectionProbeType.PlanarReflection) != 0)
            {
                var length = Mathf.Min(m_PlanarReflectionProbe_PerCamera_RealtimeUpdate.Count, m_PlanarReflectionProbe_RealtimeUpdate_WorkArray.Length);
                var index  = 0;
                foreach (var p in m_PlanarReflectionProbe_PerCamera_RealtimeUpdate)
                {
                    m_PlanarReflectionProbe_RealtimeUpdate_WorkArray[index] = p;
                    if (++index >= length)
                    {
                        break;
                    }
                }
#if DEBUG
                var discarded = m_PlanarReflectionProbe_PerCamera_RealtimeUpdate.Count - length;
                if (discarded > 0)
                {
                    Debug.LogWarningFormat("There are more planar probe than supported in a single rendering, {0} probes discardeds", discarded);
                }
#endif

                // 1. Allocate if necessary target texture
                var renderCamera = GetRenderCamera();
                for (var i = 0; i < length; i++)
                {
                    var probe = m_PlanarReflectionProbe_RealtimeUpdate_WorkArray[i];

                    var hdCamera = HDCamera.Get(renderCamera);

                    if (hdCamera == null)
                    {
                        // Warning: this is a bad design pattern.
                        // An individual system should not create an HDCamera (which is a shared resource).
                        hdCamera = HDCamera.Create(renderCamera, null);
                    }

                    hdCamera.Update(probe.frameSettings, null, null);

                    if (!IsRealtimeTextureValid(probe.realtimeTexture, hdCamera))
                    {
                        if (probe.realtimeTexture != null)
                        {
                            probe.realtimeTexture.Release();
                        }
                        probe.realtimeTexture = NewRenderTarget(probe);
                    }
                }

                // 2. Render
                for (var i = 0; i < length; i++)
                {
                    var probe = m_PlanarReflectionProbe_RealtimeUpdate_WorkArray[i];
                    Render(probe, probe.realtimeTexture, viewerCamera);
                }
            }
        }
예제 #4
0
        public void RenderAllRealtimeProbes(ReflectionProbeType probeTypes)
        {
            if ((probeTypes & ReflectionProbeType.PlanarReflection) != 0)
            {
                // Discard disabled probes in requested render probes
                m_PlanarReflectionProbe_RequestRealtimeRender.IntersectWith(m_PlanarReflectionProbes);
                // Include all realtime probe modes
                m_PlanarReflectionProbe_RequestRealtimeRender.UnionWith(m_PlanarReflectionProbe_RealtimeUpdate);
                var length = Mathf.Min(m_PlanarReflectionProbe_RequestRealtimeRender.Count, m_PlanarReflectionProbe_RealtimeUpdate_WorkArray.Length);
                m_PlanarReflectionProbe_RequestRealtimeRender.CopyTo(m_PlanarReflectionProbe_RealtimeUpdate_WorkArray);
                m_PlanarReflectionProbe_RequestRealtimeRender.Clear();

                // 1. Allocate if necessary target texture
                var camera = GetRenderCamera();
                for (var i = 0; i < length; i++)
                {
                    var probe = m_PlanarReflectionProbe_RealtimeUpdate_WorkArray[i];

                    var hdCamera = HDCamera.Get(camera);

                    if (hdCamera == null)
                    {
                        // Warning: this is a bad design pattern.
                        // An individual system should not create an HDCamera (which is a shared resource).
                        hdCamera = HDCamera.Create(camera, null);
                    }

                    hdCamera.Update(probe.frameSettings, null, null);

                    if (!IsRealtimeTextureValid(probe.realtimeTexture, hdCamera))
                    {
                        if (probe.realtimeTexture != null)
                        {
                            probe.realtimeTexture.Release();
                        }
                        probe.realtimeTexture = NewRenderTarget(probe);
                    }
                }

                // 2. Render
                for (var i = 0; i < length; i++)
                {
                    var probe = m_PlanarReflectionProbe_RealtimeUpdate_WorkArray[i];
                    Render(probe, probe.realtimeTexture);
                }
            }
        }
예제 #5
0
        public static HDCamera GetRenderHDCamera(PlanarReflectionProbe probe)
        {
            var camera = GetRenderCamera();

            probe.frameSettings.CopyTo(s_RenderCameraData.GetFrameSettings());

            var hdCamera = HDCamera.Get(camera);

            if (hdCamera == null)
            {
                // Warning: this is a bad design pattern.
                // An individual system should not create an HDCamera (which is a shared resource).
                hdCamera = HDCamera.Create(camera, null);
            }

            hdCamera.Update(probe.frameSettings, null, null);

            return(hdCamera);
        }
예제 #6
0
    void OnGUI()
    {
        //minSize = new Vector2(kPreviewWidth, kPreviewHeight);
        //maxSize = new Vector2(kPreviewWidth, kPreviewHeight);

        curWindowSize.x = position.width;
        curWindowSize.y = position.height;
#if USING_MWU_HDRP
        GUILayout.BeginHorizontal();
        {
            if (GUILayout.Button("Converge", GUILayout.Height(STANDARDBUTTONHEIGHT)))
            {
                //Recreate preview buffer on resolution change.
                if (m_RenderCamera.pixelWidth != m_RenderView.width ||
                    m_RenderCamera.pixelHeight != m_RenderView.height)
                {
                    CreatePreviewBuffer();
                }

                //Request the final picture RT frame.
                RenderTexture convertedFrameRT = FilmicMotionBlurManager.Converge();

                //Blit RT to presentation buffer.
                Graphics.Blit(convertedFrameRT, m_RenderView);

                //Destory RT
                RenderTexture.DestroyImmediate(convertedFrameRT);

                // Hack: Currently the final converged from does not include bloom/final grading. Run it through post here...
                PostProcessLayer postProcessing = FilmicMotionBlurManager.GetPostLayer();

                //Supply Depth for DoF.
                CommandBuffer cmd = new CommandBuffer()
                {
                    name = "Render Window"
                };
                cmd.SetGlobalTexture(HDShaderIDs._CameraDepthTexture, HDRPColorDepthCapture.instance.DepthTexture); //Hack: Ask VFX script for depth...

                HDCamera hdCamera = HDCamera.Get(m_RenderCamera);
                var      postProcessRenderContext = hdCamera.postprocessRenderContext;
                postProcessRenderContext.Reset();
                postProcessRenderContext.source           = m_RenderView;
                postProcessRenderContext.destination      = m_RenderView;
                postProcessRenderContext.command          = cmd;
                postProcessRenderContext.camera           = Camera.main;
                postProcessRenderContext.sourceFormat     = RenderTextureFormat.ARGBHalf;
                postProcessRenderContext.flip             = false;
                postProcessRenderContext.skipDepthOfField = true;
                postProcessing.Render(postProcessRenderContext);

                Graphics.ExecuteCommandBuffer(cmd);
                cmd.Dispose();
            }

            if (GUILayout.Button("Save", GUILayout.Height(STANDARDBUTTONHEIGHT)))
            {
                string path = EditorUtility.SaveFilePanel("Save Render Preview", "", "RenderPreview", "png");

                int       w = m_RenderView.width;
                int       h = m_RenderView.height;
                Texture2D t = new Texture2D(w, h, TextureFormat.RGB24, false);

                RenderTexture pRT = RenderTexture.active;
                RenderTexture.active = m_RenderView;
                t.ReadPixels(new Rect(0, 0, w, h), 0, 0);
                RenderTexture.active = pRT;

                //Brute-force Gamma Correct
                for (int x = 0; x < w; x++)
                {
                    for (int y = 0; y < h; ++y)
                    {
                        Color currentColor = t.GetPixel(x, y);
                        t.SetPixel(x, y, currentColor.gamma);
                    }
                }

                byte[] bytes = t.EncodeToPNG();
                CoreUtils.Destroy(t);

                File.WriteAllBytes(path, bytes);
            }

            //if (GUILayout.Button("Close", GUILayout.Height(STANDARDBUTTONHEIGHT)))
            //{
            //    Close();
            //    return;
            //}
        }
        GUILayout.EndHorizontal();

        //Present final picture
        EditorGUI.DrawPreviewTexture(GUILayoutUtility.GetRect(curWindowSize.x, curWindowSize.y), m_RenderView, m_RenderWindowMaterial, ScaleMode.ScaleToFit, 0f);
#else
        GUILayout.Label("Render Window requires Sherman Custom HDRP package. If you have it installed already, add the #USING_MWU_HDRP define in your player defines", EditorStyles.helpBox);
#endif
    }