【问题标题】:Texture partially off screen - performance difference纹理部分离屏 - 性能差异
【发布时间】:2014-04-20 18:35:49
【问题描述】:

图片上是两种情况的示例,其中正在渲染带纹理的多边形。全部由 Opengl ES2 完成。

A) 多边形部分离开视口 B) 多边形完全在里面

我的问题:

情况 'A)' 会消耗更少的系统/gpu 资源*,因为纹理部分不在屏幕上,还是会像我在视口内渲染它一样执行,为什么?

*“资源” - 表示速度,而不是内存。

我知道opengl在渲染纹理之前会先计算顶点,如果顶点不在屏幕/视口之外,它会跳过任何进一步的计算,但是对于部分不在屏幕上的纹理对象,情况是否相同? 会省略掉纹理中不可见的部分吗?

【问题讨论】:

    标签: java android textures opengl-es-2.0 performance-testing


    【解决方案1】:

    情况 A 应该更快。顶点处理将是相同的。之后,应用裁剪到视图体积。在情况 A 中,部分多边形将被剪裁,而在情况 B 中整个多边形将被剪切。之后,多边形被光栅化,生成的片段进入片段处理。由于情况 A 中的碎片较少,因此在此阶段要做的工作较少。片段着色器会进行纹理采样,因此在这种情况下只会对纹理的可见部分进行采样。

    剪辑也可以在片段生成之后发生,但我总是希望它在片段着色器之前完成。

    虽然情况 A 中的工作量总是会减少,但这并不一定意味着您会在渲染中看到速度差异。您可能在管道的其他部分或您的应用代码中遇到瓶颈。

    【讨论】:

    • 什么时候可以在片段生成后进行剪辑?谢谢。
    • 这是硬件特性和效率的问题。例如,如果硬件在顶点剪裁方面效率不高,则在片段级别进行剪裁或使用两者的混合可能是有益的。或者可能有硬件(将重命名为无名)在某些情况下顶点剪裁被破坏,在这些情况下您必须在片段级别进行所有剪裁。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-05-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多