5

或者任何对应物?如何生成便宜的随机数?

4

2 回答 2

5

GLSL ES 没有自带噪音功能,桌面 GLSL 噪音功能几乎没有实现。

但是,有一些免费软件噪音功能可用。他们应该相当体面和快速。我自己从未使用过它们,但它们应该可以工作。如果你担心的话,这是 MIT 许可的代码。

于 2012-05-07T10:10:33.437 回答
1

定义“便宜”。

随机数在计算机中的工作方式是,它们并不是真正随机的。您从一个数字(种子)开始,对于您想要的每个随机数,您对该数字进行一些花哨的计算以获得另一个看起来随机的数字,然后将该数字用作您的随机数和下一个随机数的种子数字。有关血腥细节,请参见此处

问题是,该过程本质上是顺序的,这对着色器不利。

从理论上讲,您可以在片段着色器中编写一个函数,该函数可以从片段位置和可能的每帧递增的一些统一 int 中产生一些散列,但这对于片段着色器来说是一项非常多的工作,只是为了产生一些东西看起来像噪音。

在 OpenGL 中产生噪声效果的常规技术是创建噪声纹理并让着色器以各种方式使用它。您可以简单地将纹理作为标准纹理应用到您的表面,或者您可以拉伸它或钳制它的颜色值。对于随时间变化的效果,您可能想要使用 3D 纹理,或者拥有更大的 2D 纹理,并通过统一将随机纹理坐标偏移量传递给每帧的片段着色器阶段。

另请查看perlin noise,它基本上使用了上述效果的变体。

于 2012-05-07T09:28:22.490 回答