
2026/04/02 4:36
ジャックスの真の使命:WebGLにおけるレイマーチングレンダラー
RSS: https://news.ycombinator.com/rss
要約▶
Japanese Translation:
Summary
この記事では、JAXを使ってPythonでコンパクトかつGPUアクセラレーションされたグラフィックスレンダラーを構築し、WebGL経由でウェブブラウザ上で実行できるようにエクスポートする方法を示しています。JAXの自動ベクトル化(
vmap)と微分可能性を活用して、著者はサイン付き距離関数(SDF)を各ピクセルに対して評価するレイマーチングエンジンを実装します。このレンダラーは512 × 512画像の各ピクセルについてSDFを評価し、マウス位置と時間を入力として動的シーンを駆動します。
実装は約100行程度の数式中心のPythonコードで完結しています。標準的なSDF演算(
min、max)を用いて形状を合成し、効率的なレイマーチングのために球追跡(sphere tracing)を採用し、SDFの勾配から表面法線を導出することで、実行時のεトリックなしにコンパイル時に拡散または鏡面反射のライティング計算が可能です。JAXのvmapは2回適用されます:1回目は全ピクセルに対してベクトル化し、2回目は各ピクセル内のレイマーチングループで使用します。
今後の方向性としては、
jax-jsを介したWebGPUサポートの追加、JAXGAによる幾何学代数の実験、SDFコレクションとしてニューラルネットワークを可視化すること、およびJAXの実験的Taylor展開ツール(jet)を用いてコンパイル時レンダリングを高速化することが挙げられます。著者はまた、ReLUやSoftmaxなどのニューラルネットワーク層がソフトインターセクションされたSDFとどのように関連しているかを探求することも示唆しています。
この軽量DSLは、PythonでGPUアクセラレーションされたグラフィックスをプロトタイプしたい開発者にとってエントリーバリアを下げ、ウェブベースの可視化ツール、教育プロジェクト、およびレンダリングと機械学習を統合する研究に恩恵をもたらします。
本文
デモ
マウス/指を画像上に動かしてください。
なぜ JAX なのか?
「クールな子たちが使っているツール、JAX」に夢中になっています。
GPUで高速化された n 次元配列演算と、コンパイル時に差分可能な機能を提供します。自動ベクトル化付き NumPy と言えるので、グラフィックスレンダラーとして試してみるのも面白いでしょう。
上記のアニメーション画像は 512 × 512 × 3(ピクセル × ピクセル × カラー)の 3 次元配列です。
マウス位置と時間を入力に取る関数から内容を生成し、数学的操作や球・立方体のハードコードを組み合わせて… voilà―ピクセルが描画されます。
コードは Python で約 100 行です。JAX は WebGL を介してブラウザ上でも実行できるようにエクスポートできます。
技術と JAX の輝き
Signed Distance Functions (SDF)
- 何か: オブジェクト内部では負、外部では正になる関数です。
- 役立つ理由
- シンプル:球は点からの距離、円柱は線からの距離などと定義できます。
- 合成可能
- 合併 →
min(a, b) - 積分 →
max(a, b) - スムーズユニオン(微分性を保つ)で硬い min/max を置き換えられます。
- 合併 →
- 衝突のない移動が可能:オブジェクトへの距離があれば、衝突せずにどこまで進めるかがわかります。これはレイマーチング/球トレーシングの基盤です。
ベクトル化
SDF は関数なのでベクトル化できます。JAX の
vmap を 2 回呼び出すだけで、ピクセル単位の関数を画像全体を並列に処理するものへ変換します:
ray_colors = jax.vmap( jax.vmap(ray_color, (None, 0, None)), (0, None, None) )
微分可能性
SDF の勾配が表面法線を与えます。JAX のコンパイル時差分で、照明計算を 1 行で行えます:
normal_at_surface = jax.grad(distance_function)(point_at_surface)
これにより実行時の ε トリックを排除し、コードを数理的に純粋に保てます。
試したいこと
- jax-js:WebGPU サポート。
- JAXGA(JAX Geometric Algebra):射影幾何で SDF を表現し、コントラルジックを自動取得できるかもしれません。
- ニューラルネットワークと 3D/SDF の関係を可視化:
- 密結合層 ≈ 半超平面 SDF の集合(ReLU → 多面体、Softmax → ソフト積分)。
- jax.experimental.jet:関数のテイラー展開。レイマーチングの高速化や「調和関数のレイトレーシング」に役立つか検討。
数学への機械的共感!