tags : WebGL, Three.js

概要

DOM 要素や Canvas にビジュアルエフェクトを適用する手法・ライブラリの参考情報。 WebGL シェーダー、SVG フィルターなど、アプローチは問わず収集。 Web ページの既存 HTML 要素にグリッチ、液体歪み、RGB シフトなどの視覚効果を後付けで適用したり、 HTML コンテンツを3D 空間にマッピングするような表現に使える。

参考リンク

HTML to Canvas → Three.js テクスチャ投影

HTML コンテンツを SVG ForeignObject 経由で Canvas にレンダリングし、 それを Three.js の3D シーンにシェーダー経由でテクスチャとして投影する手法。 リアルタイムに HTML の変更が3D オブジェクトに反映される。

パイプライン: HTML → SVG ForeignObject → Canvas → Three.js Projection Material

VFX-JS / REACT-VFX

DOM 要素(img, video, div, canvas)に WebGL シェーダーエフェクトを適用するライブラリ。 要素を指定してシェーダー名を渡すだけで、グリッチ・RGB シフト・レインボーなどのエフェクトがかかる。 カスタム GLSL シェーダーやマルチパスレンダリングにも対応。

  • サイト: https://amagi.dev/vfx-js/
  • GitHub: https://github.com/fand/vfx-js (1K stars, MIT)
  • npm: @vfx-js/core
  • 作者: AMAGI (@amagitakayosi)
  • モノレポ構成:
    • @vfx-js/core — バニラJS向けコアライブラリ
    • react-vfx — React コンポーネント版
    • storybook, docs

主な機能:

  • 対応要素: <img>, <video>, <div>(実験的), <canvas>

  • プリセットシェーダー: glitch, rgbShift, rainbow, halftone, duotone

  • トランジション: slitScan, warp, pixelate, focus(viewport進入時にアニメーション)

  • カスタムGLSLシェーダー対応(uniform変数でスクロール位置・時間等を渡せる)

  • マルチパスシェーダー(ブラー→グロー等のチェーン処理)

  • div要素ではinput/textareaもインタラクティブなまま動作

  • 元ポスト: https://x.com/amagitakayosi/status/2040948719353552960

  • 関連: Shu (@shuding_) がHTML-in-Canvas APIを使わずにDOMにWebGLシェーダーを適用する手法を共有し、AMAGIがVFX-JSとの類似性を指摘した流れ https://x.com/shuding/status/2040446529623015743

liquid-distort

カーソル追従の液体歪みエフェクトを DOM 要素に適用するライブラリ。 WebGL や Canvas オーバーレイを使わず、SVG feDisplacementMap フィルターで実際の DOM を歪ませる。 依存関係ゼロ、9KB (gzipped)。1行のコードで導入可能。

歪みモード:

  • refract, attract, swirl, ripple, wave

  • 形状: circle, ellipse, rect, roundedRect

  • 物理シミュレーション(スプリングダイナミクス、減衰)

  • トレイル/テイルエフェクト(カーソル軌跡に沿った歪み)

  • トリガー: always, hover, click

  • 元ポスト: https://x.com/suriadesign/status/2038979405381595174

HTML on Möbius Strip (メビウスの帯へのHTML投影)

HTML をメビウスの帯(Möbius strip)の表面にテクスチャとして投影する実験。 メビウスの帯は一周すると表裏が入れ替わる向き付け不可能面で、 HTML コンテンツがねじれながら連続する視覚効果が生まれる。

想定される技術アプローチ:

  • HTML を html2canvas 等でオフスクリーンキャンバスにレンダリング → WebGL テクスチャ化

  • メビウスの帯のジオメトリをパラメトリック方程式で生成し UV マッピング

  • Three.js の CSS3DRenderer で DOM 要素を3D 空間に配置する手法もあるが、 曲面への完全なマッピングには WebGL シェーダーが必要

  • 元ポスト: https://x.com/kaolti/status/2043859499056832836

  • 作者: Zsolt Kacso (@kaolti) — スタートアップ向けフラクショナル・デザインリード