Shadershop Part 2. Noise[1] 的学习笔记.
0. 绘图工具
- Graph Toy by Inigo Quilez
- 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)=x∗x∗(x∗−2+3)
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 相乘 :
再将锯齿反向的 Smooth Saw 和 Step Random 相乘.
可以看到在任意一个 (n,n+1) 区间内, 灰线和黑线沿 x = n+0.5 对称:
将黑线向右平移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(x−1)+1)∗StepRandom(x−1)
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.5∗Noisen(x∗2)
然后就可以得到分形的 Noise .
参考文献
[1] Toby Schachman. (December 2014). Shadershop. Retrieved Jan. 8, 2019, from http://tobyschachman.com/Shadershop/