首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >片段着色器只对可见片段运行吗?

片段着色器只对可见片段运行吗?
EN

Stack Overflow用户
提问于 2019-05-18 14:41:56
回答 1查看 1.1K关注 0票数 1

我们需要用OpenGL写一个射线追踪器。现在,我决定为每个片段着色器调用拍摄一条射线,因为据我所知,片段是一个可以被几何对象写入的屏幕像素。所以我想知道片段着色器是只对可见像素运行还是对所有像素运行。如果它只对可见光运行,那么主光线(从一个屏幕到另一个物体)就不会被阻挡。这样就省去了很多计算。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2019-05-18 15:31:25

绝对不能保证片段着色器的执行意味着片段一定是可见的。

早期深度测试本身并不能拯救你。呈现每个三角形前后都不会拯救您;在OpenGL中无法保证按顺序生成片段(只按顺序“似乎”)。这就忽略了重叠的情况,在这种情况下,不可能有适当的排序。即使在自己单独的呈现命令中发出每个三角形,对于OpenGL来说也不能保证什么。

要确保这一点,唯一能做的就是执行深度预过。也就是说,渲染您的整个场景,但没有片段着色器活动(并关闭写到帧缓冲区的颜色)。这将将所有深度数据写入深度缓冲区。这样,如果您使用早期深度测试,当您再次呈现场景时,唯一通过深度测试的片段将是那些可见的片段。

深度预过可以相当快,取决于你的顶点着色器和渲染管道的其他方面。

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/56199983

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档