计算着色器遮挡测试仅适用于场景相机

问题描述 投票:0回答:1

使用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-game-engine shader compute-shader
1个回答
0
投票

问题是

UNITY_MATRIX_VP
。我必须像这样计算自己的视图投影矩阵:
GL.GetGPUProjectionMatrix(_cam.projectionMatrix, false) * _cam.worldToCameraMatrix;

© www.soinside.com 2019 - 2024. All rights reserved.