为了账号安全,请及时绑定邮箱和手机立即绑定

GLSL的随机/噪声功能

GLSL的随机/噪声功能

由于GPU驱动程序供应商通常不愿意noiseX在GLSL中实现,因此我正在寻找“图形随机化瑞士军刀”实用程序功能集,最好对其进行优化以在GPU着色器中使用。我更喜欢GLSL,但是可以编写任何语言的代码,我可以自己将其翻译为GLSL。具体来说,我期望:a)伪随机函数 -N维,在[-1,1]或[0,1]上均匀分布,根据M维种子计算(理想情况下为任何值,但我可以限制种子设为0..1(用于统一结果分配)。就像是:float random  (T seed);vec2  random2 (T seed);vec3  random3 (T seed);vec4  random4 (T seed);// T being either float, vec2, vec3, vec4 - ideally.b)像Perlin 噪声这样的连续噪声 -同样是N维,分布均匀,具有一组受限制的值,而且看起来不错(一些配置外观(如Perlin级别)的选项也可能有用)。我希望像这样的签名:float noise  (T coord, TT seed);vec2  noise2 (T coord, TT seed);// ...我不太熟悉随机数生成理论,因此我非常希望获得预制的解决方案,但是我也很喜欢这样的回答:“这里有一个非常好的,高效的一维rand(),让我解释一下您如何在其上制作一个良好的N维rand()...”。
查看完整描述

3 回答

?
30秒到达战场

TA贡献1828条经验 获得超6个赞

对于看起来很简单的伪随机事物,我使用在互联网上某个地方找到的这个单件套:


float rand(vec2 co){

    return fract(sin(dot(co.xy ,vec2(12.9898,78.233))) * 43758.5453);

}

您还可以使用任何喜欢的PRNG生成噪声纹理,然后以常规方式上载此噪声并在着色器中采样值。如果您愿意,我可以在以后提取代码示例。


查看完整回答
反对 回复 2019-10-14
  • 3 回答
  • 0 关注
  • 1297 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信