public override void DrawClusterOccDoubleCheck(ref RenderClusterOptions options, ref HizOptions hizOpts, ref RenderTargets rendTargets) { CommandBuffer buffer = options.command; ComputeShader gpuFrustumShader = options.cullingShader; PipelineFunctions.UpdateOcclusionBuffer( baseBuffer, gpuFrustumShader, buffer, hizOpts.hizData, options.frustumPlanes, options.isOrtho); //绘制第一次剔除结果 PipelineFunctions.DrawLastFrameCullResult(baseBuffer, buffer, options.proceduralMaterial); //更新Vector,Depth Mip Map hizOpts.hizData.lastFrameCameraUp = hizOpts.currentCameraUpVec; PipelineFunctions.ClearOcclusionData(baseBuffer, buffer, gpuFrustumShader); //TODO 绘制其他物体 //TODO buffer.Blit(hizOpts.currentDepthTex, hizOpts.hizData.historyDepth, hizOpts.linearLODMaterial, 0); hizOpts.hizDepth.GetMipMap(hizOpts.hizData.historyDepth, buffer); //使用新数据进行二次剔除 PipelineFunctions.OcclusionRecheck(baseBuffer, gpuFrustumShader, buffer, hizOpts.hizData); //绘制二次剔除结果 buffer.SetRenderTarget(rendTargets.gbufferIdentifier, rendTargets.depthIdentifier); PipelineFunctions.DrawRecheckCullResult(baseBuffer, options.proceduralMaterial, buffer); buffer.Blit(hizOpts.currentDepthTex, hizOpts.hizData.historyDepth, hizOpts.linearLODMaterial, 0); hizOpts.hizDepth.GetMipMap(hizOpts.hizData.historyDepth, buffer); }