3/26
2026/03/26
リアルタイムグラフィックスの数学
値ノイズの箇所、わかるようになってる。bookofshaderで似たようなものが書いてたからな。
ノイズの条件
- ばらつき
- ゆるやかさ
ビット演算で求めたhashとかはばらつきのあるものだが、緩やかさがない。
なので、上下左右の格子のばらつきをsmoothstepとかで緩やかにして、ノイズを作る。
vec3 を返す valuenoiseを作れ
はい、作ります。といっても、8つのvec3を同じ重みで補間するだけ。
vec3 vnoise33(vec3 p) {
vec3 i = floor(p);
vec3 f = fract(p);
f = smoothstep(0.0, 1.0, f);
vec3 n000 = hash33(i + vec3(0,0,0));
vec3 n100 = hash33(i + vec3(1,0,0));
vec3 n010 = hash33(i + vec3(0,1,0));
vec3 n110 = hash33(i + vec3(1,1,0));
vec3 n001 = hash33(i + vec3(0,0,1));
vec3 n101 = hash33(i + vec3(1,0,1));
vec3 n011 = hash33(i + vec3(0,1,1));
vec3 n111 = hash33(i + vec3(0,1,1));
// x方向をつなぐ
vec3 nx00 = mix(n000, n100, f.x);
vec3 nx10 = mix(n010, n110, f.x);
vec3 nx01 = mix(n001, n101, f.x);
vec3 nx11 = mix(n011, n111, f.x);
// 繋いだものをy方向でもつなぐ
vec3 nxy0 = mix(nx00, nx10, f.y);
vec3 nxy1 = mix(nx01, nx11, f.y);
// 最後z方向でつなぐ
return mix(nxy0, nxy1, f.z);
}まず立方体8つのコーナーそれぞれでhashを呼び、少数部で保管していくだけ。
ループ使うとスマートに見える。わかりやすさ重視で書いてます。
内省
spの実装を初めたが、挫けそうだ。galleryでplaneの動画を上手く表示してくれない。
旧のときは上手く動いていた気がしたんだけどなあ。
散々試行錯誤した挙げ句、dreiのvideoTextureを参考にできた。
あしたまとめよう。。。
お昼、久しぶりに本を読んだ。
なんだか文字が頭に入ってこず、頭が悪くなっているのを感じた。
ただ、本を読んでいる時、得も知れぬ充実感というか、脳の懐かしいところを使っている感じがした。
一日1時間くらい、違うジャンルの本を読みたいと思った。