[Fragment Shader] Noise 1D 可视化理解

Shadershop Part 2. Noise[1] 的学习笔记.


0. 绘图工具

  1. Graph Toy by Inigo Quilez
  2. Shader Shop Editor by Toby Schachman

1. Random

R a n d o m ( x ) = F r a c t ( S i n e ( x ) ∗ 999 ) Random(x)=Fract(Sine(x)∗999) Random(x)=Fract(Sine(x)999)
在这里插入图片描述

2. Step Random

S t e p R a n d o m ( x ) = R a n d o m ( F l o o r ( x ) ) StepRandom(x)=Random(Floor(x)) StepRandom(x)=Random(Floor(x))
在这里插入图片描述

3. Noise

3.1 Smooth Step

S m o o t h S t e p ( x ) = x ∗ x ∗ ( x ∗ − 2 + 3 ) SmoothStep(x)=x∗x∗(x∗−2+3) SmoothStep(x)=xx(x2+3)
三条直线相乘, 区间(0,1)为Smooth Step

3.2 Smooth Saw

S m o o t h S a w ( x ) = S m o o t h S t e p ( F r a c t ( x ) ) SmoothSaw(x)=SmoothStep(Fract(x)) SmoothSaw(x)=SmoothStep(Fract(x))
在这里插入图片描述

3.3 Noise

首先将 Smooth Saw 和 Step Random 相乘 :
SmoothSaw(x) * StepRandom(x)
再将锯齿反向的 Smooth Saw 和 Step Random 相乘.
可以看到在任意一个 (n,n+1) 区间内, 灰线和黑线沿 x = n+0.5 对称:
灰线 : SmoothSaw(x) * StepRandom(x); 黑线 : ( - SmoothSaw(x) + 1) * StepRandom(x)
将黑线向右平移1, 然后和灰线相加,
最后得到一个平滑的噪音 :
N o i s e ( x ) = S m o o t h S a w ( x ) ∗ S t e p R a n d o m ( x ) + ( − S m o o t h S a w ( x − 1 ) + 1 ) ∗ S t e p R a n d o m ( x − 1 ) Noise(x)=SmoothSaw(x)∗StepRandom(x)+(−SmoothSaw(x−1)+1)∗StepRandom(x−1) Noise(x)=SmoothSaw(x)StepRandom(x)+(SmoothSaw(x1)+1)StepRandom(x1)
在这里插入图片描述

4. Fractal Noise

将上面得到的 Noise 多层叠加, 每一层比上一层比例小1/2, 即: N o i s e n + 1 ( x ) = 0.5 ∗ N o i s e n ( x ∗ 2 ) Noise _{n+1}(x)=0.5∗Noise_n(x∗2) Noisen+1(x)=0.5Noisen(x2)
然后就可以得到分形的 Noise .
在这里插入图片描述


参考文献

[1] Toby Schachman. (December 2014). Shadershop. Retrieved Jan. 8, 2019, from http://tobyschachman.com/Shadershop/

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值