由于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生成噪声纹理,然后以常规方式上载此噪声并在着色器中采样值。如果您愿意,我可以在以后提取代码示例。
添加回答
举报
0/150
提交
取消