Are there noise functions in GLSL OpenGL ES 2.0 (iOS)?
或任何同行?
如何生成便宜的随机数?
GLSL ES没有附带噪声功能,并且台式GLSL噪声功能几乎从未实现。
但是,有一些免费软件噪声功能可用。他们应该是相当体面和快速的。我从来没有亲自使用过它们,但是它们应该可以工作。如果您担心的话,那是MIT许可的代码。
定义"便宜"。
随机数在计算机中的工作方式并不是真正的随机。您从一个数字(种子)开始,对于每个随机数,您都希望对该数字进行一些花哨的计算,以获得另一个看起来随机的数字,然后将该数字用作您的随机数,并使用它作为下一个随机数的种子数。详细信息请参见此处。
问题是,该过程本质上是顺序的,这对着色器不利。
从理论上讲,您可以在片段着色器中编写一个函数,该函数从例如片段位置以及可能会在每帧递增的统一int中进行散列,但这对于片段着色器来说需要做很多工作,只是为了产生一些东西看起来像噪音。
在OpenGL中产生噪声效果的常规技术是创建一个嘈杂的纹理,并使着色器以多种方式使用它。您可以简单地将纹理作为标准纹理应用于表面,也可以拉伸它或固定其颜色值。对于随时间变化的效果,您可能需要使用3D纹理,或者使用更大的2D纹理,并通过统一将随机纹理坐标偏移传递给每个帧的片段着色器阶段。
还可以看看Perlin噪声,它本质上是使用上述效果的一种变化。