世界を動かす技術を、日本語で。

第一原理に基づく物理的レンダリング

概要

  • 光の本質 とその歴史的な解釈の変遷を解説
  • 電磁気学相対性理論 による光の理解
  • 光の発生原理 (白熱・発光・その他)を紹介
  • 物質との相互作用 (吸収・散乱・反射・屈折)の抽象化
  • 物理ベースのレンダリング への応用の基礎を整理

光とは何か?

  • は、私たちが世界を見て、色や質感を識別し、宇宙を暗闇から救う存在
  • 古代ギリシャでは、光は宇宙を構成する 四大元素 の一つとされ、目から発せられる「火のビーム」と考えられていた
  • Descartes は波動説を、 Newton は粒子説(コーパスキュール説)を提唱し、それぞれが光の一部の性質を説明
  • 1920年代に 量子電磁力学(Quantum Electrodynamics) が登場し、光と物質のすべての相互作用を正確に記述
  • コンピュータグラフィックスでは 光線光学(Ray Optics) モデルが十分な精度を持つが、科学的好奇心から他のモデルも概観

電磁気学と光

  • 物質の基本的性質の一つが 電荷 で、正と負の2種類が存在

  • 同じ種類の電荷は反発し、異なる種類は引き合う( クーロンの法則

  • すべての電荷は 電場 を作り出し、空間中の他の電荷に力を及ぼす

  • 特殊相対性理論 により、運動する電荷が磁場を生み出し、これが 磁気現象 の本質

  • Maxwell方程式 により、電場と磁場の相互作用を体系的に記述

    • 第三式(ファラデーの法則):磁場の変化が電流を誘起
    • 第四式(アンペールの法則):電流が磁場を生成
  • これらの法則により、 電磁波 (光を含む)が媒質なしで空間を伝播可能

電磁波としての光

  • 電磁波 は、電場と磁場の振動が同期して伝わる波動

  • 振幅が大きいほど「明るさ」や強度が増し、量子的には フォトン数 が多い

  • 周波数 が高いほど、フォトン1つあたりのエネルギーが大きい

  • 可視光 は波長400~700nmの範囲で人間に見える

  • 他の波長(紫外線、赤外線、X線、ガンマ線など)は様々な用途や自然現象に利用

    • 例:ミツバチは紫外線を見分けて花を識別
    • ガンマ線は非常に高エネルギーで危険、宇宙や核反応で発生

光の発生原理

  • 日常で最も多い光の発生は 白熱(Incandescence)発光(Electroluminescence)

  • 白熱 :物質が高温になることで光を放射

    • 白熱電球はタングステンフィラメントを加熱し発光(ジュール熱)

    • 太陽は核融合で生じたエネルギーを放射

      • 太陽からの放射の約49%が赤外線、43%が可視光、8%が紫外線
  • 発光ダイオード(LED)エレクトロルミネセンス 現象による

    • 半導体の p型n型 の接合部で電流が流れると、電子とホールが再結合し光子を放出
  • その他、 蛍光生物発光 (例:ホタル)など多様な発光現象が存在

光と物質の相互作用

  • 光子が物質に当たると、 吸収 または 散乱 のいずれかが起こる

  • 電子は 原子軌道 に存在し、高いエネルギーの光子が吸収されると高い軌道へ遷移

    • 吸収後、電子は低い軌道に戻り、エネルギーを熱として放出
  • 吸収されなかった場合、光の電場が電子を振動させ、 二次波 が発生し複雑な干渉が起こる

  • 実用上は以下の仮定を置き、モデルを単純化

    • 材料は 均質 (どこでも同じ性質)
    • 表面は 完全に滑らか
  • Maxwell方程式 から、理想的な平面では入射光が 反射屈折 に分かれる

    • 反射の法則 :入射角=反射角
    • 屈折の法則(スネルの法則) :屈折率により屈折角が決定
    • 屈折率が特定の条件で臨界角を超えると 全反射 が発生
  • 反射・屈折の割合は Fresnel方程式 で計算

    • リアルタイム計算には Schlick近似 が用いられる

次章へのつながり

  • ここまでの物理現象の抽象化をもとに、 物理ベースレンダリング の基礎的な計算モデルへ発展予定

Hackerたちの意見

ウェブページがFirefoxやAndroidで動かないんだよね。

一見したところ、Chromeはちゃんと動いてるみたい。

この記事はFirefoxのデスクトップで作って、SafariのiOSでテストしたんだけど、もっと徹底的にテストしてると思ってたよ!AndroidのWebGLのバグじゃないことを願ってる。フィードバックありがとう、調べてみるね。

俺のはちゃんと動いてるよ。FF: 142.0.1 OS: Android 15

「ファーストプリンシプル」についての話し方があんまり好きじゃないんだよね。混乱を招くだけだと思うし。これはコンピュータサイエンスでよく使われるフレーズだけど、他の科学コミュニティからは嫌がられることが多い。ファーストプリンシプルってのは、簡単には減らせないもので、これらの公理にはしっかりした正当化が必要なんだ。だから他の科学コミュニティが嫌がるのは、(ほとんどの場合)使い方を間違えてて、誰かが無知をさらけ出そうとしてるからか、あるいは細かいニュアンスの煩わしい議論に突入することを知ってるからだと思う。実際、ファーストプリンシプルから学ぶべきじゃないって言いたいな、少なくとも最初はね。この記事はファーストプリンシプルからのものじゃないけど、ファーストプリンシプルの問題を示してるよ:それは細かすぎるんだ。すべてはファーストプリンシプルから派生するから、過度に細かくて正確にならざるを得ない。小さなエラーが大きな問題になることもあるし、実際に興味があることを見たときにはそのエラーが膨れ上がってる。しかも、エラーは微妙だから見つけるのが難しい。だから、専門家同士の議論でも、ファーストプリンシプルから始めるのは良くないと思う。特に、専門家が非専門家に教えるときは絶対に避けるべきだね。著者が物理学者じゃないことが明らかになるのは、彼らが基礎的な現象を理解していないからだと思う。これがこの投稿が無秩序に感じる大きな理由だと思う。彼らが話している現象は同じだけど、もっと深く掘り下げないとそのことがわからない(物理学者でも同じだと知っているけど、どうしてそうなるのかはわからないこともある)。ただ、彼らが物理の知識を見せびらかしているように感じるけど、学部の物理学の学位に比べるとかなりレベルが低い。だから、ファーストプリンシプルから始めるべきじゃない、そのシンプルさが逆に複雑すぎる。QEDよりも複雑なテーマから始める必要があるよ。残りは、何か大きな統一理論から派生するものだと思う。でも、物理ベースのレンダリングを結構やってきた人間としては、この投稿がそれに何の関係があるのか不明だな。著者が言ってる「Physically Based Rendering: From Theory To Implementation」って本を強く勧めるよ。この記事の基になってるって言ってるし、目標を紹介するのがずっと上手だし、読者をスピードに乗せることに焦点を当ててる。特に、PBRの目標は実際の写真と区別がつかないものを作ることだって定義してるけど、これは実際の写真を生成することとは微妙だけど重要な違いだよね。とはいえ、この投稿には良い点もあって、著者は恥じる必要はないと思う。彼らはたくさんの努力をしているし、本当に素晴らしいアニメーションもある。たくさん学んだことが明らかだし、そこにあるアニメーションは見た目ほど簡単じゃない。批判的に見てるけど、頑張ってほしいし、改善が必要だと思う。シリーズの声を見つけるのは結構難しいし、最初のつまずきが続けるのを妨げないようにしてほしい。

著者は光の電磁波理論にまで降りていったんだね。これ以上「ファーストプリンシプル」な記事ってあるのかな!?

建設的な批評ありがとう!いくつか話したいポイントがあるよ:もしこの記事の目的が本当にファーストプリンシプルからPBRを学ぶことだったら、どんな感じになるんだろう?量子電磁力学?楽しみや科学的好奇心のために、いろんな物理モデルを探るのは価値があると思う(最初の章でも言ったけど)。個人的には、スネルの法則みたいにただ方程式を並べるだけじゃつまらないと思うし、その背後にある深い意味を探らないと理解しづらいとも感じる。もっと複雑な物理モデルについての表面的な知識があれば、理解しやすいと思う。ただ、物理を勉強してないから多くの間違いをしたかもしれないし、改善のためのフィードバックがあればありがたいな。「Physically Based Rendering: From Theory To Implementation」はあんまり好きじゃない。個人的には、この本のリテラルプログラミングアプローチがめちゃくちゃ混乱してて、整理されてないと思う。Naty HoffmanのSIGGRAPHのトークの方が好きだな。

マスクがこのフレーズを本当に乱用してる最初の人だったと思う。便利なフレーズではあるけど、なんか「核心的な合意された前提」とか何か別の呼び方をするべきだと思う。

コンピュータサイエンスの人たちだけじゃなくて、MBAスタイルのクラスでもよくあることだと思う。専門外の分野についてアプローチする方法としてね。特に、マネジメントの話をする人たちの間ではよく見かけるよ。基本的には「最初の原則に戻る」っていう考え方なんだと思う。確かに、時には初期の教えが間違ってたってことを学ぶこともあるけど、単純なモデルから得られる知見は、みんなが認めたがらないほど多いことがある。だから、うまく使えばこれは価値があると思う。初期の教えに反することはあまりないけど、特定の仮定に依存していて、それが今でも適用されるのかどうかを考えるべきだね。

学部の学位を取得する頃には、物理学者は物理について何も知らないような気持ちになるべきだ。まさにその通りだね。大学で物理を学んだ後、すごくバカになった気がしたよ。成績もあまり良くなかったし…。

このコメントのおかげで、元の記事を読む気が完全になくなったわ。

もしかしたら読み飛ばしすぎたかもだけど、第一章はほとんど関係ないように感じた。車のメンテナンスの授業を受けるのに、最初に原子や金属の原子の働き、金属がどうやって磁気を持つかみたいな話から始まるようなもので、最終的に車の整備士が実際に気にすることにたどり着くまでが長いって感じ。これが役立つ人もいるかもしれないけど、ちょっと批判的に聞こえるかもしれないけど、これって「バイブコーディングされたプロジェクト」なんじゃないかって思った部分もあった。ビジュアルはすごく印象的だけど、ジェミニキャンバスに頼めば作ってくれるし、実際にそういう例もあるよ。https://jsbin.com/webudilaha/edit?html,output ちなみに、上のバナーを閉じないとラフネススライダーが見えないと思う。ちょっと手を加えれば動くけどね。たとえバイブコーディングされていなくても、こういう記事を作るのに役立つかもしれないって伝えたかったんだ。たとえ始めるきっかけになればいいし。まあ、面白い記事だったよ!

問題の一部は、電磁気学から始めることが必ずしもクラシックなPBRスタイルのレイトレーシングに自然に繋がるわけじゃないってことかもね。そこにたどり着くには、波から光線光学に行くとか、(通常は)スペクトルからRGBトリプレットに行くみたいな、かなりの概念的な飛躍が必要なんだ。グラフィックスレンダリングでは、シーンがうまく動作していて、比較的シンプルであることが多いけど、これは第一原理から来た場合には明らかではないかもしれない。さらに、レンダリングをもっと物理に基づいたものにしたら何ができるかを見るのも面白いよ。一例として、波光学とパストレーシングを組み合わせて、より広範な現象をシミュレーションできるwave_tracerがある。彼らのウェブページにはいい理論の説明が載ってるよ。https://wavetracer.dev/theory.html

詳細なインタラクティブなビジュアル解説が大好き!https://samwho.dev/もCiechanow.skiみたいなサイトだね。

インタラクティブな要素やアニメーションがすごく好きだよ!ただ、言葉の使い方にちょっとだけ気になる点がある。「この連続的なサイクルは自己持続的で自己伝播する電磁波を可能にする」っていう表現。 “自己伝播”って言うと、フィールド同士が何かを押し合ってるみたいに聞こえるけど、実際はマクスウェルの方程式の結合された解に過ぎないんだよね。

インタラクティブ性はどうやって実現されたの?ソースをリンクしてくれたら、勉強できるかも。クォートでこういうのを動かそうとしてるんだけど、すごく複雑になっちゃってるんだ。

JavaScriptとWebGLで全てをゼロから書いたよ。この記事のソースコードはここで確認できるよ:https://imadr.me/pbr/main.js でも、注意してね。8000行以上のコードがあって、すごく整理されてないから、良いコードの参考にはならないよ。ただ、既存のライブラリを使うよりも、手で全部書く方が長期的には楽だと思ってる。コードには全ての数学関数、メッシュのプリミティブ生成、シェーダー、そしてSDFフォントを使ったちょっと怪しいテキストレンダラーも含まれてる。もしもう一度作るなら、TypeScriptを使うかな。型エラーが一番のバグの原因だったから。

Pixel 7aのAndroid Chromeで、インタラクティブなデモが全然表示されない。真っ白な画面だけだよ。

物理ベースのレンダリングにデータ駆動型のアプローチはないの?レーザースペックルを使って実世界の材料のマイクロファセットの深さや角度分布を測定して、それを法線分布関数に活用できないかな?最初の原則から理想を導くのは素晴らしいけど、実世界の測定と照らし合わせるのは最低限必要なことだと思う。

確かに、マイクロファセットモデルの考案やその精度を確認するための一部は、こういったことから来ているんじゃないかな。例えば、この論文を見てみてよ。https://www.cs.cornell.edu/~srm/publications/EGSR07-btdf.pdf 実際の測定値も逆レンダリングには役立つよね。

実際の材料の一般化されたBRDF測定に関する研究は数十年にわたって行われてきたんだ。通常は、全てのカメラ角度と全ての照明角度を組み合わせたキャリブレーション済みの画像を撮影するところから始まるよ。https://www.researchgate.net/figure/Picture-of-the-BRDF-meas... https://www.iosb.fraunhofer.de/en/projects-and-products/sig_...

これ、すごく美しく仕上がってるね。ありがとう!

関連情報:仮想カメラを作成して、ブレンダーのパストレーシングを使って仮想空間でのカメラからの光のキャプチャをシミュレートする。https://youtu.be/YE9rEQAGpLw?si=2YArt9l95c7VUCqa

新しい人にとっては、これは本当に興味深い読み物だったよ。頑張ってくれてありがとう。水中から見た空の様子を知るのは驚きだった。『第一原理』の議論についてだけど、これは名前とは裏腹に相対的な用語なんだ。普通の説明の一つ下の抽象レイヤーから説明することだね。誰かがコンピュータの仕組みをマシン命令から説明しているのは第一原理に基づいているけど、原子の詳細を説明しないかもしれない。文字通りの意味で実装するのはほぼ不可能だし、例えばニュートンの研究は今日の知識を考えると第一原理にはならない。似たように、現在の物理学も未来の原理に包含されることがあるんだ。