ali*_*ali 4 shader glsl invariants keyword
我试图理解这两个概念.我正在阅读的手册非常简短,像多通道算法这样的东西对我来说是新的.我想有一些例子(不是代码)我需要在哪里使用不变量或精确变量,只是为了得到一个大致的想法,所以我可以继续而不留下任何东西.
当他们说
GLSL不保证不同着色器中的两个相同计算将产生完全相同的值
我不知道在不同的着色器中我将如何以及何时需要2个相同的计算.
需要这些关键字以避免"破解"以及在不同着色器中由于计算稍有不同而产生的其他视觉伪像.
渲染的场景是由大量的"图元"构成的 - 每个图像的小块图像(通常是三角形,有时是更复杂的"补丁"),每个图像的累积构成整个图像.在两个基元相邻的情况下,两个着色器以完全相同的方式计算边界是至关重要的.如果没有,那么浮点舍入可能会导致事物偶尔相差很小,导致背景泄漏并变得可见的"裂缝".
对于简单(顶点+片段)着色器设置,invariant关键字足够用于此 - 通常在顶点着色器中的顶点位置计算中使用它,并且可能用于对可能导致伪像的舍入具有类似敏感性的其他变换.
当你添加几何和细分着色器时,事情变得更糟,因为补丁/基元之间的边界可能是复杂的形状而不是直线.通常情况下,一个tessaltaion着色器将在一个方向上计算边界,而相邻的一个在另一个方向上计算边界,因此使用完全对称的计算并且在两个方向上产生位相同的结果是至关重要的.这是precise关键字发挥作用的地方,通常在你有像*b + c*d这样的计算时.因此precise不能编译为MUL + FMA,而必须是MUL + MUL + ADD.
| 归档时间: |
|
| 查看次数: |
1226 次 |
| 最近记录: |