static public void RenderNormals(ScriptableRenderContext renderContext, CullingResults cullResults, DrawingSettings drawSettings, FilteringSettings filterSettings) { var cmd = CommandBufferPool.Get("Clear Normals"); cmd.SetRenderTarget(s_NormalsTarget.Identifier()); cmd.ClearRenderTarget(true, true, k_NormalClearColor); renderContext.ExecuteCommandBuffer(cmd); CommandBufferPool.Release(cmd); drawSettings.SetShaderPassName(0, k_NormalsRenderingPassName); renderContext.DrawRenderers(cullResults, ref drawSettings, ref filterSettings); }
/// <inheritdoc/> public override void Execute(ScriptableRenderer renderer, ScriptableRenderContext context, ref RenderingData renderingData) { if (renderer == null) { throw new ArgumentNullException(nameof(renderer)); } CommandBuffer cmd = CommandBufferPool.Get(k_PostProcessingTag); var layer = renderingData.cameraData.postProcessLayer; int effectsCount; if (opaquePost) { effectsCount = layer.sortedBundles[PostProcessEvent.BeforeTransparent].Count; } else { effectsCount = layer.sortedBundles[PostProcessEvent.BeforeStack].Count + layer.sortedBundles[PostProcessEvent.AfterStack].Count; } // If there's only one effect in the stack and soure is same as dest we // create an intermediate blit rendertarget to handle it. // Otherwise, PostProcessing system will create the intermediate blit targets itself. if (effectsCount == 1 && source.id == destination.id) { m_ReleaseTemporaryRenderTexture = true; cmd.GetTemporaryRT(m_TemporaryColorTexture.id, descriptor, FilterMode.Point); renderer.RenderPostProcess(cmd, ref renderingData.cameraData, descriptor.colorFormat, source.Identifier(), m_TemporaryColorTexture.Identifier(), opaquePost, flip); cmd.Blit(m_TemporaryColorTexture.Identifier(), source.Identifier()); } else { renderer.RenderPostProcess(cmd, ref renderingData.cameraData, descriptor.colorFormat, source.Identifier(), destination.Identifier(), opaquePost, flip); } context.ExecuteCommandBuffer(cmd); CommandBufferPool.Release(cmd); }
public override void Execute(ScriptableRenderContext context, ref RenderingData renderingData) { SortingCriteria sortingCriteria = (renderQueueType == RenderQueueType.Transparent) ? SortingCriteria.CommonTransparent : renderingData.cameraData.defaultOpaqueSortFlags; DrawingSettings drawingSettings = CreateDrawingSettings(m_ShaderTagIdList, ref renderingData, sortingCriteria); drawingSettings.overrideMaterial = overrideMaterial; drawingSettings.overrideMaterialPassIndex = overrideMaterialPassIndex; Camera originalCamera = renderingData.cameraData.camera; Camera rtCamera = m_CameraSettings.camera; if (rtCamera != null && rtCamera.targetTexture != null) { float originalCameraAspect = (float)originalCamera.pixelWidth / (float)originalCamera.pixelHeight; float rtCameraAspect = (float)rtCamera.pixelWidth / (float)rtCamera.pixelHeight; CommandBuffer cmd = CommandBufferPool.Get(m_ProfilerTag); using (new ProfilingSample(cmd, m_ProfilerTag)) { context.ExecuteCommandBuffer(cmd); cmd.Clear(); Matrix4x4 rtProjectionMatrix; if (!rtCamera.orthographic) { rtProjectionMatrix = Matrix4x4.Perspective(rtCamera.fieldOfView, rtCameraAspect, rtCamera.nearClipPlane, rtCamera.farClipPlane); } else { float vertical = rtCamera.orthographicSize; float horizontal = vertical * rtCamera.aspect; float left = horizontal * -1; float right = horizontal; float top = vertical; float bottom = vertical * -1; rtProjectionMatrix = Matrix4x4.Ortho(left, right, bottom, top, rtCamera.nearClipPlane, rtCamera.farClipPlane); } cmd.SetRenderTarget(rtCamera.targetTexture); cmd.SetViewProjectionMatrices(rtCamera.worldToCameraMatrix, rtProjectionMatrix); cmd.ClearRenderTarget(true, true, Color.clear); context.ExecuteCommandBuffer(cmd); context.DrawRenderers(renderingData.cullResults, ref drawingSettings, ref m_FilteringSettings, ref m_RenderStateBlock); // restore Matrix4x4 originalProjectionMatrix = Matrix4x4.Perspective(originalCamera.fieldOfView, originalCameraAspect, originalCamera.nearClipPlane, originalCamera.farClipPlane); cmd.Clear(); cmd.SetRenderTarget(m_ColorTextureHandle.Identifier(), m_DepthAttachmentTextureHandle.Identifier()); cmd.SetViewProjectionMatrices(originalCamera.worldToCameraMatrix, originalCamera.projectionMatrix); } context.ExecuteCommandBuffer(cmd); CommandBufferPool.Release(cmd); } }