gpt4 book ai didi

GLSL 的随机/噪声函数

转载 作者:行者123 更新时间:2023-12-03 04:16:34 26 4
gpt4 key购买 nike

由于 GPU 驱动程序供应商通常不会在 GLSL 中实现 noiseX,因此我正在寻找一个“图形随机化瑞士军刀” 实用函数集,最好优化为在 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()...” .

最佳答案

对于非常简单的伪随机外观的东西,我使用我在互联网上找到的这个 oneliner:

float rand(vec2 co){
return fract(sin(dot(co, vec2(12.9898, 78.233))) * 43758.5453);
}

您还可以使用您喜欢的任何 PRNG 生成噪声纹理,然后以正常方式上传它并在着色器中对值进行采样;如果您愿意,我可以稍后找到代码示例。

此外,请查看this file用于 Perlin 和 Simplex 噪声的 GLSL 实现,作者:Stefan Gustavson。

关于GLSL 的随机/噪声函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4200224/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com