void RenderOpaqueDepth(Camera RenderCamera, FCullingData CullingData, CullingResults CullingResult) { //Request Resource RendererList RenderList = RendererList.Create(CreateRendererListDesc(CullingResult, RenderCamera, InfinityPassIDs.OpaqueDepth, new RenderQueueRange(2450, 2999))); RDGTextureDesc DepthDesc = new RDGTextureDesc(Screen.width, Screen.height) { clearBuffer = true, dimension = TextureDimension.Tex2D, enableMSAA = false, bindTextureMS = false, name = "DepthTexture", depthBufferBits = EDepthBits.Depth32 }; RDGTextureRef DepthTexture = GraphBuilder.ScopeTexture(InfinityShaderIDs.DepthBuffer, DepthDesc); //Add OpaqueDepthPass GraphBuilder.AddPass <FOpaqueDepthData>("OpaqueDepth", ProfilingSampler.Get(CustomSamplerId.OpaqueDepth), (ref FOpaqueDepthData PassData, ref RDGPassBuilder PassBuilder) => { PassData.RendererList = RenderList; PassData.DepthBuffer = PassBuilder.UseDepthBuffer(DepthTexture, EDepthAccess.ReadWrite); DepthPassMeshProcessor.DispatchGather(CullingData, new FMeshPassDesctiption(2450, 2999)); }, (ref FOpaqueDepthData PassData, RDGContext GraphContext) => { RendererList DepthRenderList = PassData.RendererList; DepthRenderList.drawSettings.sortingSettings = new SortingSettings(RenderCamera) { criteria = SortingCriteria.QuantizedFrontToBack }; DepthRenderList.drawSettings.enableInstancing = RenderPipelineAsset.EnableInstanceBatch; DepthRenderList.drawSettings.enableDynamicBatching = RenderPipelineAsset.EnableDynamicBatch; DepthRenderList.filteringSettings.renderQueueRange = new RenderQueueRange(2450, 2999); GraphContext.RenderContext.DrawRenderers(DepthRenderList.cullingResult, ref DepthRenderList.drawSettings, ref DepthRenderList.filteringSettings); //MeshDrawPipeline DepthPassMeshProcessor.DispatchDraw(GraphContext, 1); }); }
void RenderOpaqueMotion(Camera RenderCamera, FCullingData CullingData, CullingResults CullingResult) { RenderCamera.depthTextureMode |= DepthTextureMode.MotionVectors | DepthTextureMode.Depth; //Request Resource RendererList RenderList = RendererList.Create(CreateRendererListDesc(CullingResult, RenderCamera, InfinityPassIDs.OpaqueMotion, RenderQueueRange.opaque, PerObjectData.MotionVectors)); RDGTextureRef DepthTexture = GraphBuilder.ScopeTexture(InfinityShaderIDs.DepthBuffer); RDGTextureDesc MotionDesc = new RDGTextureDesc(Screen.width, Screen.height) { clearBuffer = true, dimension = TextureDimension.Tex2D, clearColor = Color.clear, enableMSAA = false, bindTextureMS = false, name = "MotionBufferTexture", colorFormat = GraphicsFormat.R16G16_SFloat }; RDGTextureRef MotionTexture = GraphBuilder.ScopeTexture(InfinityShaderIDs.MotionBuffer, MotionDesc); //Add OpaqueMotionPass GraphBuilder.AddPass <FOpaqueMotionData>("OpaqueMotion", ProfilingSampler.Get(CustomSamplerId.OpaqueMotion), (ref FOpaqueMotionData PassData, ref RDGPassBuilder PassBuilder) => { PassData.RendererList = RenderList; PassData.MotionBuffer = PassBuilder.UseColorBuffer(MotionTexture, 0); PassData.DepthBuffer = PassBuilder.UseDepthBuffer(DepthTexture, EDepthAccess.Read); }, (ref FOpaqueMotionData PassData, RDGContext GraphContext) => { RendererList MotionRenderList = PassData.RendererList; MotionRenderList.drawSettings.sortingSettings = new SortingSettings(RenderCamera) { criteria = SortingCriteria.CommonOpaque }; MotionRenderList.drawSettings.perObjectData = PerObjectData.MotionVectors; MotionRenderList.drawSettings.enableInstancing = RenderPipelineAsset.EnableInstanceBatch; MotionRenderList.drawSettings.enableDynamicBatching = RenderPipelineAsset.EnableDynamicBatch; MotionRenderList.filteringSettings.renderQueueRange = RenderQueueRange.opaque; MotionRenderList.filteringSettings.excludeMotionVectorObjects = false; GraphContext.RenderContext.DrawRenderers(MotionRenderList.cullingResult, ref MotionRenderList.drawSettings, ref MotionRenderList.filteringSettings); }); }
void RenderOpaqueForward(Camera RenderCamera, FCullingData CullingData, in CullingResults CullingResult)
protected override void Render(ScriptableRenderContext RenderContext, Camera[] Views) { //Init FrameContext GPUScene.Gather(GetWorld().GetMeshBatchColloctor(), true); //Debug.Log("X : " + Screen.width + "__" + "Y : " + Screen.height); RTHandles.Initialize(Screen.width, Screen.height, false, MSAASamples.None); //Render Pipeline BeginFrameRendering(RenderContext, Views); for (int ViewIndex = 0; ViewIndex < Views.Length; ViewIndex++) { //Init View Camera View = Views[ViewIndex]; CommandBuffer CmdBuffer = CommandBufferPool.Get(""); CameraComponent HDView = View.GetComponent <CameraComponent>(); //Render View BeginCameraRendering(RenderContext, View); { using (new ProfilingScope(CmdBuffer, HDView ? HDView.ViewProfiler : ProfilingSampler.Get(ERGProfileId.InfinityRenderer))) { #region InitViewContext bool bSceneView = View.cameraType == CameraType.SceneView; bool bRendererView = View.cameraType == CameraType.Game || View.cameraType == CameraType.Reflection || View.cameraType == CameraType.SceneView; #if UNITY_EDITOR if (bSceneView) { ScriptableRenderContext.EmitWorldGeometryForSceneView(View); } #endif VFXManager.PrepareCamera(View); ViewUnifrom.UnpateBufferData(false, View); ViewUnifrom.BindGPUParameter(CmdBuffer); RenderContext.SetupCameraProperties(View); VFXManager.ProcessCameraCommand(View, CmdBuffer); //Culling Context FCullingData CullingData = new FCullingData(); { CullingData.bRendererView = bRendererView; } ScriptableCullingParameters CullingParameters; View.TryGetCullingParameters(out CullingParameters); CullingResults CullingResult = RenderContext.Cull(ref CullingParameters); //Unity Culling RenderContext.DispatchCull(GPUScene, ref CullingParameters, ref CullingData); //Infinity Culling #endregion //InitViewContext #region InitViewCommand RenderOpaqueDepth(View, CullingData, CullingResult); RenderOpaqueGBuffer(View, CullingData, CullingResult); RenderOpaqueMotion(View, CullingData, CullingResult); RenderOpaqueForward(View, CullingData, CullingResult); RenderSkyBox(View); RenderGizmo(View, GizmoSubset.PostImageEffects); RenderPresentView(View, GraphBuilder.ScopeTexture(InfinityShaderIDs.DiffuseBuffer), View.targetTexture); #endregion //InitViewCommand #region ExecuteViewRender GraphBuilder.Execute(RenderContext, GetWorld(), CmdBuffer, ViewUnifrom.FrameIndex); #endregion //ExecuteViewRender #region ReleaseViewContext CullingData.Release(); ViewUnifrom.UnpateBufferData(true, View); #endregion //ReleaseViewContext } } EndCameraRendering(RenderContext, View); //Submit View RenderContext.ExecuteCommandBuffer(CmdBuffer); CommandBufferPool.Release(CmdBuffer); RenderContext.Submit(); } EndFrameRendering(RenderContext, Views); //Release FrameContext GPUScene.Release(); }
void RenderOpaqueGBuffer(Camera RenderCamera, FCullingData CullingData, in CullingResults CullingResult)