Ger*_*eri 4 random opengl-es glsl noise fragment-shader
或任何同行?如何生成便宜的随机数?
GLSL ES没有附带噪声功能,并且台式GLSL噪声功能几乎从未实现。
但是,有一些可用的免费软件噪声功能。他们应该是相当体面和快速的。我从来没有亲自使用过它们,但是它们应该可以工作。如果您担心的话,那是MIT许可的代码。
定义“便宜”。
随机数在计算机中的工作方式是,它们并不是真正随机的。您从一个数字(种子)开始,对于您想要的每个随机数,您对该数字进行一些奇特的计算以获得另一个看起来随机的数字,然后使用该数字作为您的随机数和下一个随机数的种子数字。请参阅此处了解血淋淋的细节。
问题是,该过程本质上是连续的,这对着色器没有好处。
理论上,您可以在片段着色器中编写一个函数,该函数可以根据片段位置和可能每帧递增的某个统一整数生成一些散列,但这对于片段着色器来说是一项巨大的工作,只是为了产生一些东西看起来像噪音。
在 OpenGL 中产生噪声效果的传统技术是创建噪声纹理并让着色器以各种方式使用它。您可以简单地将纹理作为标准纹理应用到表面,也可以拉伸它或限制它的颜色值。对于时变效果,您可能需要使用 3D 纹理,或者拥有更大的 2D 纹理,并通过统一将随机纹理坐标偏移传递到每帧的片段着色器阶段。
另请看一下柏林噪声,它本质上使用了上述效果的变体。