HLSL修改像素深度而不跳过z-culling

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

我正在尝试编写基于光线跟踪的着色器,其中对于四边形的每个像素,我计算来自相机的光线的原点和方向,并测试与我的场景(当前是球体)的交点。

如果发生交叉,我想将深度缓冲区值设置为交叉点的深度,而不是将其保留为四边形的深度,所以我正在写入DEPTH。我知道这意味着我的像素着色器的早期z剔除将被禁用,因为无法确定我的像素是否在前面或后面,直到完成该像素为止。

然而,我的着色器的一个属性是深度将总是比用于早期z剔除的深度更深,因此它仍然有效执行早期z剔除,因为四边形前面的东西是保证在光线相交的前面。我依稀记得有一些方法告知渲染管道虽然深度被修改,但它总是被修改为更深,这将留下合适的优化,否则将被关闭。尽管有很多谷歌搜索,我还是找不到这是什么,有谁知道它是什么?如果这实际上并不存在并且我记错了,那么即使在像我这样的用例中,有没有办法强制启用早期的z-culling?

directx hlsl depth-buffer depth-testing
1个回答
0
投票

我找到了我正在寻找的解决方案。 DX11中的目标SV_DepthGreater完成了这项工作。

有一个关于这个和其他功能的解释很难在这个链接找到:https://mynameismjp.wordpress.com/2010/11/14/d3d11-features/

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