media
liquid distortion / displacement map warp / water ripple filter
ノイズを「どれだけピクセルをずらすか」の地図として使い、要素そのものを水面のように歪ませ続ける処理。ノイズを上に重ねるグレインと違い、中身の輪郭が動くので質感ではなく物理が変わって見える。WebGLなしにSVGフィルタだけで作れるのが利点。
02 — Prompt template
03 — Params
scale(歪みの強さ px) — 範囲 0〜60 / 初期 22
変位マップが動かす最大ピクセル数。文字に掛けるなら12〜24pxが読める限界。40pxを超えると溶けて判読できなくなるので、背景や装飾面にだけ使う。frequency(波の細かさ baseFrequency) — 範囲 0.004〜0.06 / 初期 0.012
小さいほど大きくうねり、大きいほど細かく震える。水面らしさは0.008〜0.016。0.03を超えるとブレたノイズに近づく。duration(ゆらぎ1周の秒数) — 範囲 2〜20 / 初期 9
8〜12sが「気づかれずに動き続ける」目安。3s以下は明確な脈動になり、背景のはずが視線を奪う。octaves(重ねるノイズの層数) — 範囲 1〜4 / 初期 2
層を増やすほど細部が複雑になるが計算量も比例して増える。2で十分で、3以上は常時再生する面には重い。
04 — Vocab
feDisplacementMap — 第2入力の色を「ずらし量」として読み、第1入力のピクセルを移動させるSVGフィルタ。歪み系の中核。
feTurbulence — Perlinノイズを生成するSVGフィルタ。単体では雲状の模様だが、変位マップの入力にすると有機的な歪みになる。
baseFrequency — ノイズの細かさ。小さいほど波長が長い。X/Yを別値にすると歪みに方向性が出る。
color-interpolation-filters — フィルタ計算の色空間。既定のlinearRGBだと結果が暗く沈むため、sRGBを明示するのが実務の定石。
SMIL() — SVG組み込みのアニメーション要素。フィルタ属性はCSSから動かせないため、ここだけは現役で使う。
05 — NG → OK examples
NG
言い方: 「「背景を水っぽくゆらゆらさせて」」
なぜNG: 「水っぽく」だけだと canvas や three.js のシェーダで実装され、たった1枚の装飾のために数百KBのライブラリが入ることがある。歪みの強さと周期を数値で言わないと、1〜2秒周期で大きく波打つ「酔う背景」が返ってくるのもほぼ定番。
OK
言い方: 「「liquid distortionをSVGフィルタで。feTurbulence(fractalNoise, baseFrequency 0.012, numOctaves 2)→feDisplacementMap(scale 22, R/G)を作り、対象にfilter: url(#id)。baseFrequencyを9sでspline往復。WebGL不使用、reduced-motionでは静止」」
なぜOK: 実装方式(SVGフィルタ)を名指しして重いWebGL実装を封じ、歪み量・細かさ・周期を数値で固定している。「reduced-motionでは静止」まで言えば、動きだけ止めて見た目は保つ正しい分岐になる。
