HLSL修改像素深度而不跳过z消隐

时间:2019-03-08 11:35:53

标签: directx hlsl depth-buffer depth-testing

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

如果发生相交,我想将深度缓冲值设置为相交的深度,而不是将其保留为四边形的深度,因此我正在写DEPTH。我知道这意味着将禁用像素着色器的早期z消隐,因为在完成该像素操作之前,无法确定像素是向前还是向后。

但是,我的着色器的一个属性是深度将始终比用于早期z剔除的深度更深,因此,将早期z剔除作为位于前面的东西仍然有效。保证四边形位于光线相交的前面。我隐约记得有一种方法可以通知渲染管道,尽管深度已被修改,但始终会修改为更深,这将留下适当的优化,否则将被关闭。尽管进行了很多谷歌搜索,但我仍然找不到这是什么,有人知道这是什么吗?如果这实际上不存在并且我记错了,有没有办法强迫即使在像我这样的用例中也要启用早期z剔除?

1 个答案:

答案 0 :(得分:0)

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

有关此功能和其他功能的说明在此链接上很难找到:https://mynameismjp.wordpress.com/2010/11/14/d3d11-features/