GLSL OpenGL ES 2.0(iOS)中是否存在噪声功能?

问题描述 投票:4回答:2

或任何同行?如何生成便宜的随机数?

opengl-es random glsl noise fragment-shader
2个回答
5
投票

GLSL ES不附带噪音功能,并且桌面GLSL噪音功能几乎从不实现。

但是有一些freeware noise functions available。他们应该是相当体面和快速的。我从来没有亲自使用过它们,但是它们应该可以工作。如果您担心的话,这是MIT许可的代码。


1
投票

定义“便宜”。

随机数在计算机中的工作方式是,它们并不是真正的随机数。您从一个数字(种子)开始,对于每个随机数,您都希望对该数字进行一些奇特的计算,以获得另一个看起来随机的数字,然后将该数字用作您的随机数,并使用它作为下一个随机数的种子数。详细信息请参见here

问题是,该过程本质上是顺序的,这对着色器没有好处。

从理论上讲,您可以在片段着色器中编写一个函数,该函数可以使例如片段位置以及可能统一的int的哈希值每帧递增一次,但是对于片段着色器来说这是很多工作,只是为了产生看起来像噪音的东西。

在OpenGL中产生噪声效果的常规技术是创建一个嘈杂的纹理,并使着色器以各种方式使用它。您可以简单地将纹理作为标准纹理应用到您的表面,也可以拉伸它或固定其颜色值。对于随时间变化的效果,您可能需要使用3D纹理,或者使用较大的2D纹理,然后通过均匀的每帧将随机纹理坐标偏移传递到片段着色器阶段。]

也请参阅perlin noise,它实质上使用了上述效果的变体。

© www.soinside.com 2019 - 2024. All rights reserved.