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時間くらい、違うジャンルの本を読みたいと思った。