3/24

日記

2026/03/24

GLSL

ドメインワープ

関数を評価する座標そのものを、別の関数で歪ませてから使う手法。

Three.jsJourneyでもよくあった。positionをnoiseで歪ませてから別の関数で使用するみたいな。
今まで使ってたテクニックが、ドメインワープやらフラクタルノイズやら名前があったのが、なんか嬉しい。

フラクタル

部分を拡大すると全体と同じ形が現れる「自己相似」な図形。

シェーダーでは、UV座標を折り返し、ループの中でずらしたりして対象な図形を描画。
繰り返すたびに空間が細かく分割され、フラクタル模様になる。

Three.js

Matrix4.decompose / compose

  • compose: 「位置・回転・スケール」がバラバラに分かれているときに、1つの4×4行列にまとめる
  • decompose: 1つの4×4行列から、「位置・回転・スケール」を取り出す。

通常はmesh.position / mesh.quaternion / mesh.scale を更新して updateMatrixWorld() させる、という流れが基本。

decomposeも同様で、行列しか持っていない/行列からしか取れない状況で初めて使う。

decompose使用例

よくわからなかったので使用例で

const wm = mesh.matrixWorld.clone();
wm.decompose(pos, quat, scl);

これで、空のpos,quat,sclにwmから計算された値が上書きされる。

BufferGeometry.toJSON()

ジオメトリをjsonでシリアル化。

戻すときは
const parsed = JSON.parse(serialized)
const loader = new THREE.BufferGeometryLoader();
return loader.parse(parsed as object);

内省

あまり意味のない仕事かなと思っていても、思わぬ発見があるものだ。
つまり意味のない仕事はない...?
いや、皿洗いしていたとき何の実りもなかったな。

昨日休んだからだろうか、勉強したい意欲が湧いてくる。
違うプログラミング言語とかやってみたいもんね。
オフって大事なんだね。

It is important to take time off. isn't it?