Simplex noise
https://gyazo.com/0a8a8b23244e8efbfada009b120a2608
コードは長くなると思うよ
手順 (2D)
座標系を三角形状のグリッドに分ける
https://gyazo.com/d9f4844d479c3d609c3ea4d10d0bb4fe
code:glsl
const mat2 SKEW = mat2(1.0, 0.0, 0.0, 1.0) + (SQRT3 - 1.0) / 2.0;
const mat2 UNSKEW = mat2(1.0, 0.0, 0.0, 1.0) - (1.0 - 1.0 / SQRT3) / 2.0;
https://gyazo.com/55e7e508fc09b0c7a994f52f982a9b19
各グリッドの角にランダムな方向ベクトルを生成する
https://gyazo.com/08f0bb2e593dabde165c9eee1e7e8f92
各ピクセル、3つの角に対して、角からの相対座標で、ベクトルの向きとの内積を取る https://gyazo.com/f2358fd3f4f0f9544f50e498a0be0bf3
Simplexの各角からピクセルまでの距離を$ rとおいたとき、$ w = 8 \ {\rm max}(0.6 - r^2, 0.0)^4
https://gyazo.com/38b22ad65469c0089d79b125bac52daa
3Dの場合
Simplexは、各単位立方体ごとに6つ定義される 単位立方体内のx, y, z座標の大小関係ごとに、4角が定義可能
$ (0, 0, 0)と$ (1, 1, 1)は必ず含まれるよ
table:simplex
大小関係 頂点0 頂点1 頂点2 頂点3
x > y > z (0, 0, 0) (1, 0, 0) (1, 1, 0) (1, 1, 1)
x > z > y (0, 0, 0) (1, 0, 0) (1, 0, 1) (1, 1, 1)
y > x > z (0, 0, 0) (0, 1, 0) (1, 1, 0) (1, 1, 1)
y > z > x (0, 0, 0) (0, 1, 0) (0, 1, 1) (1, 1, 1)
z > x > y (0, 0, 0) (0, 0, 1) (1, 0, 1) (1, 1, 1)
z > y > x (0, 0, 0) (0, 0, 1) (0, 1, 1) (1, 1, 1)
https://gyazo.com/eaa0b8a993496da5b7c34a131b471302