gpt4 book ai didi

glsl - GLSL 中不变和精确的关键字

转载 作者:行者123 更新时间:2023-12-04 23:21:52 29 4
gpt4 key购买 nike

我试图理解这两个概念。我正在阅读的手册对它们非常简短,像多 channel 算法这样的东西对我来说是新的。我想要一些示例(不是代码),说明我需要在哪里使用不变变量或精确变量,只是为了获得一个大致的想法,这样我就可以继续而不留下任何东西。

当他们说

GLSL does not guarantee that two identical computations in different shaders will result in exactly the same value



我不知道如何以及何时需要在不同的着色器中进行 2 个相同的计算。

最佳答案

需要这些关键字来避免“开裂”和其他视觉伪像,这些伪像可能是由于在不同着色器中进行的计算略有不同而引起的。

渲染场景由大量“原语”组成——每个渲染的小块图像(通常是三角形,有时是更复杂的“补丁”),累积构成整个图像。在两个基元相邻的地方,涉及的两个着色器以完全相同的方式计算边界是至关重要的。如果不是,那么浮点舍入可能会导致事物偶尔出现微小的差异,从而导致背景泄漏并变得可见的“裂缝”。

对于简单的(顶点+片段)着色器设置,invariant关键字就足够了——您通常将它用于顶点着色器中顶点位置的计算,并且可能用于其他对舍入具有相似敏感性的变量,这可能会导致伪影。

当您添加几何体和分割着色器时,情况会变得更糟,因为面片/基元之间的边界可能是复杂的形状而不是直线。通常情况下,一个曲面分割着色器会在一个方向上计算边界,而相邻的着色器会在另一个方向上计算边界,因此使用完全对称的计算并在双向产生位相同的结果是至关重要的。这是precise的地方关键字开始发挥作用,通常当你有像 ab + cd 这样的计算时。与 precise不能编译为 MUL + FMA,而必须是 MUL + MUL + ADD。

关于glsl - GLSL 中不变和精确的关键字,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23345125/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com