【问题标题】:Tessellation shader culling unseen vertices?镶嵌着色器剔除看不见的顶点?
【发布时间】:2012-10-18 05:02:10
【问题描述】:

我注意到,在我的程序中,当我将视线从镶嵌网格上移开时,帧时间会大幅下降,这表明屏幕上未出现的网格上没有发生镶嵌。 (我没有自定义剔除代码)

但出于我的目的,我需要在几何着色器中访问镶嵌顶点,无论它们是否在屏幕上。

这些镶嵌三角形是否进入几何着色器阶段?或者他们甚至在进入曲面细分评估阶段之前就被淘汰了。

【问题讨论】:

  • “但出于我的目的,我需要在几何着色器中访问镶嵌顶点,无论它们是否在屏幕上。”我很好奇这有什么关系。除非你正在做变换反馈(在这种情况下,你应该能够判断几何是否在那里),或者图像加载/存储操作,我不确定你如何知道或关心三角形是否到达 GS .

标签: opengl tessellation


【解决方案1】:

当我从我的细分网格上移开视线时,帧时间会大幅下降,这表明屏幕上没有发生细分。

那是你的问题;相信更快的速度意味着缺乏镶嵌。

许多原因说明屏幕外的多边形比屏幕上的更快。例如,就速度而言,您可能部分或完全受片段着色器和/或像素限制。因此,一旦这些片段完全在屏幕外被剔除,您的渲染时间就会减少。

简而言之,一切都很好。 OpenGL 和 D3D 都不允许曲面细分阶段任意丢弃几何图形。请记住:您不必在剪辑空间中进行镶嵌,因此系统甚至无法知道三角形是否“不在屏幕上”。您的 GS 可以在屏幕上显示屏幕外的三角形。所以当时没有足够的信息来决定什么是屏幕外,什么不是屏幕外。

很可能,您的渲染器的性能与光栅化器/片段着色器有关,而不是与顶点处理有关。因此,即使顶点仍在处理中,由于三角形不在屏幕上,因此不会执行昂贵的每个片段操作。因此,性能有所提高。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-12-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多