WGSL中生成随机数
-
怎么在wgsl中生成随机数?
我想要在fragment shader中render一个有黑白噪声的图片
就是每个pixel都增加一个随机的颜色,代码如下:
fn main() -> [[location(0)]] vec4<f32> { let color: f32 = random(); return vec4<f32>(color, color, color, 1.0); }
但是wgsl貌似没有random()这个函数,在webgpu specification的文档里也没找到有关信息,请问,有没有办法可以在fragment shader中产生随机数呢?"
-
这个跟 WGSL 无关,任何一种shader 语言都没有自带 Math.random() 这种API,都需要开发者实现基本的伪随机算法,网上公开的算法和例子很多,比如
https://zhuanlan.zhihu.com/p/390862782
https://gamedev.stackexchange.com/questions/32681/random-number-hlsl基本上利用 fract/sin/cos 处理 position/uv/ 就可以实现基本的伪随机