使用Unity 2022.3.40f1和URP。
我正在尝试使用计算着色器中的深度缓冲区来实现遮挡剔除。
我不知道这里出了什么问题,但我的代码只适用于场景相机,但不适用于游戏相机。
我已经调试了深度纹理,效果很好。
你知道这里缺少什么吗?
我的着色器设置如下所示:
void Render (uint3 id : SV_DispatchThreadID)
{
Chunk chunk = chunkBuffer[id.x];
float4 clipPos = UnityWorldToClipPos(chunk.position);
float2 screenPos = ComputeScreenPos(clipPos);
float4 projectedPos = mul(UNITY_MATRIX_VP, float4(chunk.position, 1.0f));
float2 projectedUV = (projectedPos.xy / projectedPos.w + 1.0f) * 0.5f;
float sceneDepth = _DepthTexture.SampleLevel(sampler_DepthTexture, projectedUV, 0).r;
float chunkDepth = (projectedPos.z / projectedPos.w);
if (chunkDepth < sceneDepth) {
return; // is occluded
}
}
问题是
UNITY_MATRIX_VP
。我必须像这样计算自己的视图投影矩阵:GL.GetGPUProjectionMatrix(_cam.projectionMatrix, false) * _cam.worldToCameraMatrix;