欢迎光临散文网 会员登陆 & 注册

生成Sinhash和Fracthash Noise

2022-11-17 18:52 作者:Feishiko  | 我要投稿

在Shader中要生成随机数,就要生成Noise图,通常来说我们都知道可以用sin+fract函数。这种方法也叫Sinhash。

f(x)%20%3D%20fract(sin(x)*a)

a越来越大的时候,你会发现其函数图像会变得非常随机的样子,我们取其中一段就实现了随机fract函数的意思是取小数部位。

这也是The Book of shaders介绍的方法,这边是对应章节的链接 https://thebookofshaders.com/10/

我们随后可以用这个方法生成一些噪声图。

简单封装一下大概是这个样子。

我们可以用dot也就是dotproduct也就是点积,这种计算方法会更好一点。输入一个二维向量,然后输出一个范围在0-1的float浮点数。之后再乘以一个更大的数,我们就实现了基本的随机。

随机数会有影响,你可以自己随便选一个数字,但是可能会在具体功能上有一定的偏差,如果不需要解决问题那就用自己随便想的好了。

让我们再来看看另一种随机数生成方法,Fracthash

这种方法没有用到sin,但是同样需要fract。

这是封装后的代码。

这个也不是我自己想出来的,之前写了一个shader评论区下面有人给我指点的意见。

直接调用这个函数,我简单的将两个生成方法放在一起做了对比

左边是sinhash,右边是fracthash,这咋看没啥区别,但是在后面加了一个iTime让其动起来后会发现sinhash有一丝割裂感,而fracthash会更加自然。

具体可以看看我在shadertoy写的这个shader:https://www.shadertoy.com/view/mssXz7

本期内容大概就是这些,希望对你有帮助。

生成Sinhash和Fracthash Noise的评论 (共 条)

分享到微博请遵守国家法律