ジャックスの真の使命:WebGLにおけるレイマーチングレンダラー

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:関数のテイラー展開。レイマーチングの高速化や「調和関数のレイトレーシング」に役立つか検討。

数学への機械的共感!

同じ日のほかのニュース

一覧に戻る →

2026/04/02 8:35

新しいC++バックエンド for `ocamlc`

## 日本語訳: 新しいC++バックエンドが `ocamlc` に追加され、インクリメントされていない C ランタイムと外部関数インタフェースを置き換えました。著者は、ユーザーが指定した上限まで素数を生成するプログラムでその使用例を示しています。このプログラムは OCaml の List モジュールの一部を純粋に関数型スタイルで再実装しています。プログラムは `primes.cpp` という慣用的な C++ コードへ翻訳され、`Cons`、`I`、`ifthenelse` などのテンプレートメタプログラミング構造を含みます。`g++ -Dlimit=100 primes.cpp` でコンパイルすると、`print` が型ではないためにコンパイラー風エラーが発生し、出力形式は古い C プリプロセッサのエラー(OCaml の `::` の代わりにネストされた `Cons<hd, tl>`)を模倣します。生成されたコードはデフォルトテンプレート深度を増やす (`-ftemplate-depth=999999`) ことでのみ大きな上限を扱うことができます。著者のマシンでは、`limit = 10000` を実行すると約 30 秒で 10000 以下のすべての素数が出力され、約 11 GiB のメモリを使用します。clang++ は遅く、セグフォールトする可能性があります。アルゴリズム自体は非効率的です——コンテナライブラリからの優先度付きキュー/レフトヒープに基づく改良された純粋関数型素数生成器は、同じ上限で実行時間を約 8 秒、メモリ使用量を約 3.1 GiB に削減します。今後の作業では、このアプローチを他言語へ拡張することが目標です;Rust は部分的な実装特殊化がサポートされれば OCaml プログラムを実行できるようになります。 この改訂された要約は、すべての主要ポイントを反映し、不当な推測を避け、明確な主旨を提示し、あいまいまたは混乱を招く表現を排除しています。

2026/04/02 2:11

NASAの「アーテミス II」クルーが月へ発進します

## Japanese Translation: > **Artemis II 発射成功:** オリオンのソーラーアレイ翼が午後6時59分に完全展開し、各翼は約15,000セルを含み、およそ63フィート(19メートル)にわたります。 > > **主要推進マイルストーン:** 固体ロケットブースターが午後6時37分に分離;SLSコアステージの主エンジンカットオフは午後6時43分に発生;その後、コアステージ分離が午後6時59分に行われ、最初の推進フェーズが終了しました。 > > **打ち上げタイミング:** 打ち上げウィンドウは午後6時24分(EDT)で開き、ロケットコンプレックス-39Bからの離陸は午後6時35分に実施されました。 > > **事前準備:** 最終天気ブリーフィング(約80%が許可)、クルー服チェック、ハッチ閉鎖、打ち上げ中止システム検証をカウントダウン前に完了しました。コアステージとICPSのタンク作業はLH₂/LOX のスロー・フィル→ファスト・フィル→リペンリッシュ段階で行われました。 > > **離陸後の計画マヌーバー:** オリオンは低軌道上昇マヌーバー(PRM)を実施し、その後遠地点上昇バーナー(ARB)で深宇宙軌道を形成します。 > > **クルーと運用:** 乗員の4名は司令官レイド・ウィズマン、パイロットビクター・グローバー、クリスティーナ・コッホ、およびCSA宇宙飛行士ジェレミー・ハンセンです。NASAはケネディ宇宙センターで午後9時に打ち上げ後の記者会見を開催し、その後クルーは中間液体推進ステージを使用した近接操作デモンストレーションの準備に取り組みます。

2026/04/02 6:36

DRAM の価格がホビイスト向けのSBC市場を潰しつつあります。

## Japanese Translation: ### 改訂要約 ホビイスト向けのシングルボードコンピュータ(SBC)市場は、DRAM価格が急騰したため圧迫を受けています。Raspberry Pi は LPDDR4 RAM を搭載したすべての Pi モデルの価格を引き上げ、新しい 3 GB‑RAM の Pi 4 を $83.75 に設定し、16 GB の Pi 5 を $299.99 にしました。これらの値上げは主に LPDDR チップのコスト増によるもので、現在ボードコストの大部分を占めています。その結果、4 GB 以上の RAM を搭載したボードは多くのホビイストにとって手が届かないものとなっています。以前はお得だったミニ PC は 8 GB バリアントで $250 を超え、同様に使用済み PC も 4 GB 超で $250 を上回る価格になっています。Radxa は昨年新しいボードをリリースし続けましたが、ほかのベンダーは発売を減速または停止しています。Raspberry Pi の創設者 Eben Upton は「メモリ価格は現在の非常に高い水準で永続するわけではない」と述べており、その期間は不確実です。著者自身のプロジェクトは学習コストを下げ、破損リスクを減らすために $100 未満の部品を対象としています。DRAM 価格が高止まりする場合、ホビイストは古い SBC やマイクロコントローラへ戻る可能性が高く、手頃な選択肢が狭まり、小規模ベンダーは事業停止のリスクに直面します。Raspberry Pi の強力なマイクロコントローラエコシステムと産業基盤はある程度のレジリエンスを提供しますが、ホビイストセグメント全体での多様性は減少する可能性があります。

ジャックスの真の使命:WebGLにおけるレイマーチングレンダラー | そっか~ニュース