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); } } }
public static HDCamera GetRenderHDCamera(PlanarReflectionProbe probe) { var camera = GetRenderCamera(); probe.frameSettings.CopyTo(s_RenderCameraData.GetFrameSettings()); return(HDCamera.Get(camera, null, probe.frameSettings)); }
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); } } }
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); } } }
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); }
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 }