ブログ移行しました -> MochiMochi 3D
この記事はレイトレ(Raytracing) - Qiita Advent Calendar 2025 - Qiitaの一日目の記事です。モンテカルロレイトレーシングにおけるNEE(Next Event Estimation)の名称の由来について調べてみた記事です
NEE(Next Event Estimation)
モンテカルロレイトレーシングにおけるNEE(Next Event Estimation)とは光源点と衝突点を接続するような方向をサンプリングするモンテカルロ法のテクニックの一つです。これ自体はモンテカルロライトレーシングではとてもメジャーな手法です。詳しい理論や実装に関してはshocker氏の記事や私の記事を参照してください。
さて、NEEを勉強したことがある人はきっと一度はこう感じたことがあるのではないでしょうか。
「名前が意味不明すぎる」
何がNext Eventで、どこをEstimationしているんだと疑問に思ったことはあるはずです。私も勉強したての頃からずっと疑念を抱いておりました。
ということで、今回の記事はnext event estimationという名称がどこから来たのか何が由来なのかを調査してみました。
そもそものNEEとは何なのか
とりあえず、PBRのバイブルであるpbrt-4th editionを参照してみます。13,2.3 Incremental Path ConstructionにNEEに対する言及が見つかりました。
With path tracing, the last vertex of the path, which is on the surface of a light source, gets special treatment. Rather than being sampled incrementally, it is sampled from a distribution that is just over the surfaces of the lights. (Sampling the last vertex in this way is often referred to as next event estimation (NEE), after a Monte Carlo technique with that name.)
簡単に翻訳すると
パストレーシングでは光源の表面上にあるパスの最終頂点は特別な扱いを受ける。この最終頂点は逐次的にサンプルされるのではなく、光源上の分布からサンプルされる。(この方法による最終頂点のサンプリングはモンテカルロ法の手法にちなんでnext event estimation(NEE)と呼ばれることが多いです。)
この文面からNEEについて以下のことが読み取れます。
- 3DCGとは無関係に元からNEEというモンテカルロ法のテクニックが存在した
- NEEの本質的な所は経路の最終頂点を強制的に決定するところにある
NEEはよく直接光のlight samplingと混合されがちなイメージがありますが(私も思っていました)、どうやらそういうわけではなくあくまでNEEは「最終頂点を決定する手法」のようです。なので、恐らく光源点以外を最終頂点としてサンプリングしたとしても、それもNEEと呼ぶことができると思います(なので NEE Light sampling)。
NEEの起源
pbrt-4th editionではFurther Renderingの項にNEEの元論文としてAdjoint and importance in Monte Carlo application[Coveyou, et al. 1967]が提示されています。
この論文を見てみると228ページに確かにNext-Event Estimationの文字が確認できました(課金必須)。一応この論文より前にNEEの名前が使われていないかをGoogle Scholarで確認してみましたが、特に見当たらなかったので、NEEという名称の起源はこの論文であることは正しそうです。


ここで語られるNext-Event Estimationについて論文を引用しつつちょっと見ていこうと思います。まずバックグラウンドですが、この論文は3DCGではなく、中性子のtransportの計算を目的としたもので(おそらく原子力周りの研究っぽいです)、それにおける効率的なモンテカルロ法を提案するというものです*1。
簡単に問題設定を説明します。この論文の目的は空間内に粒子(ここでは中性子)が散乱、吸収するなどして飛び回ってる状況において、空間中の中性子の量を推定することです(最終的にはセンサーに入る量みたいなのをシミュレーションするみたいです)。
このモデルでは粒子に関する何らかの事象をイベント eventと呼びます。このモデルでは初期(initial)と消失(lethal)、遷移(transition)の3つのイベントを考えます。
初期イベントというのは単に初期条件で、最初に粒子は位置$x$に対してによって分布していることにします。これはソース関数と呼び、レンダリングで言う所の光源みたいなものです。これは分布であるため、
を満たします(あんま議論の本質ではないので気にしなくていいです)。
対照的に消失と遷移は粒子に対する作用であり、レンダリングの文脈で言う吸収と散乱に相当します。このイベントの表現として、ある位置に対して消失する確率を
、遷移が起きる確率を
と書きます。
遷移はある種の散乱みたいなもので、ある位置から
へと粒子が移動する確率密度を遷移カーネル(transition karnel)と呼び、
と書きます。遷移カーネル
は次のような性質を持ちます。
行ってしまえば遷移カーネルはBSDF的な存在です。
こうして様々なイベントを経てある地点における粒子の確率密度を求めることにします。これをイベント密度と呼び、次のような方程式で求められます。
ここから粒子の割合が分かるわけなので、センサーに検出される粒子数など空間における粒子を把握することが可能になります。論文の大目的はこれの数値計算をすることです。
イベント密度の数値計算法としてモンテカルロ法が当時既に使われていたらしく、効率的な計算手法を求めていたというバックグラウンドがありました。この論文はそれに対してNEE(などの様々な手法)を提案したという流れになっています。
ではNext-Event Estimationがどんなアルゴリズムだったか、論文の記述を追ってみます。まず、estimatorをと定義し、経路
における各点の寄与(contribution)を
として次のように表現することにします。
寄与はいわゆる評価値とpdfで割ったアレです。具体的な値は考えず、とりあえずそのように表現しているという認識でOKです。期待値
の値をここでは
と表記します(論文ではイベント密度に関わらず一般的なモンテカルロ法の議論をしています、イベント密度に適用した場合は
は
です)
これに対して、Next-Event Estimationは次のように説明されています
The principle title of this section is enclosed in quotation marks because the name, though em bedded in the literature, is a thorough misnomer. The method differs from other estimation meth ods, not because the desired answers are esti mated statistically, since all Monte Carlo results are, but because of the way in which these estimates are made. The secondary title is more descriptive of the technique. In the most usual form of the method, the estimator
chosen to replace
for a particle of biography
is given by
with
as defined in Eq. (25). We will see that
. The choice of this estimator is based upon the quite sound intuition that replacing the contribu tion
of an event at
by
(the expected value of this contribution averaged over all pos sible next events) may reduce the variance of the estimate. The contribution of initial events thus neglected is accounted for by the term
. The procedure here is that of Fig. 7.
これをまとめますと、NEEとはestimator の
以降の寄与を
という積分値に置き換えた新しいestimator
を使う手法です。この手法のコアは
というウェイトで、定義を見るとあらゆる
から
に来る寄与
を計算したものであることが分かります。
論文では「この推定量の選択は、ある事象における寄与
を
(この寄与の期待値を全ての可能な次事象について平均したもの)で置き換えることで推定量の分散を低減できるという、非常に妥当な直観に基づいている」(Deepl翻訳)と述べています。パストレしている方ならわかると思いますが、この手の問題のvarianceの原因は高い寄与を持つ地点がとても限られており、サンプルを取ることが上手くできないことにあります。ここにおけるNEEは平均値(積分値)を使うことでvarianceを抑えよう!という直感的な考え方に基づいて考案されたものっぽいです。
それでvarianceが低くなるのは納得ですが、そもそも平均値に積分が入ってるやろどうやって計算すんねんという話です。ですが、どうも論文に具体的なの計算方法が記載されていませんでした。アルゴリズムの解説を見ても単に「
を足す」としか書いていません。事前計算するなり、新しくestimatorを作るなりで
の計算をする感じだったのかと思います。

この辺は論文でも「varianceが減少する保証があるかどうかは分からない」と述べていたりとこの辺は結構曖昧というか議論が十分にされていない感じがあります。記述もシンプルなので恐らく紹介程度のノリで書かれていたのかなと思います。
Although it seems quite plausible that this proce dure is variance-reducing in general, no proof of this was found, and, indeed, it may well be untrue. It is true that in many problems the use of this technique pays handsome dividends in reduced variance.
の式を見ると次のイベントの寄与を全て確認しているわけですから、ある種の推定をしていると解釈してもよさそうです。つまり、次(next)のイベント(event)の推定(estimation)をしているという意味でNext-Event Estimationという名称がつけられたのだと推測できます。確かにこの文脈でつけるなら正しい名称のように感じます。こうしてNEEの名称が生まれたわけですね。
あと、重要な点として、おそらくNEEのアイディア自体はこの論文が初出ではないと思われます。NEEの冒頭に「このセクションの主要タイトルが引用符で囲まれているのは、その名称が文献に定着しているにもかかわらず、完全に誤った呼称であるためである。」とあり、別の名前(Statistical Estimation)で呼ばれていたことが伺えます。従って、[Coveyou, et al. 1967]はNext-Event Estimationという名称の起源ではあるが、アルゴリズムの開祖ではないと思われます。
こうして調べてみると、[Coveyou, et al. 1967]のNEEは現在のNEEと比べると全然内容が大きく違うように見えます。少なくともNEEで次の寄与の積分値を取得しているというわけはありませんし、pbrtの説明のように直接的にパスをつなぐみたいなことをは特に明確な言及はありません。次は現在と過去のNEEがどのように繋がっているのかを調べていこうと思います。
第二種フレッドホルム積分方程式
ちょっと話は変わりますが、イベント密度の方程式はレンダリング方程式とそのまま対応付けることができます。こうしたレンダリング方程式や(式番号)のような自身が積分として含まれているような再帰的な積分方程式はこうした方程式はちゃんと名前があり、第二種フレッドホルム積分方程式(Fredholm Integral Equation of Second Kind)と呼ばれています。
こののことをカーネル(kernel)と言い、先ほどの例では遷移カーネル、レンダリング方程式ではBSDF+cosine項に相当します。
つまるところ、[Coveyou, et al. 1967]の問題とレンダリング方程式は本質的には同じであるわけです。よって、分野は違えど[Coveyou, et al. 1967]で提案されたNEEはレンダリング方程式にも応用可能です(抽象度で言えばイベント密度の方程式の方が高いですし)。ということで、このNEEが3DCGにも持ち込まれ、なんやかんやあることで現在のNEEのアルゴリズムに落ち着いた、という歴史的な経緯が推察できます。
3DCG分野におけるNEE
初期のNEEは原子物理学と分野がかなり離れていますが、これがいつ頃3DCGに応用されたのかが気になるところです。Google Scholarで調べてみる限り、Adjoint Equations and Random Walks for Illumination Computation[Pattanaik, Mudur, 1995]と言う論文が初めて明確にNEEをレンダリング方程式に応用したと思われます。

[Pattanaik, Mudur, 1995]の式を見る限り、手法としては[Coveyou, et al. 1967]のNEEをそのままレンダリング方程式に応用したという感じです。私たちが知るレンダリング方程式のestimatorは(2)の方になります( (1)は多分光源->カメラのパストレーシングの式)。は光源からの放射輝度、
はBSDFを表しています。ここでNEEのウェイトとなる
はdirect lightの積分値として定義されてます。
しかしながら、[Coveyou, et al. 1967]と同様に具体的に積分値をどうやって計算するのかは特に提示されていないようでした。また、(2)の式を見てもらえるとわかるんですが、direct lightの積分値をただ足していく形で寄与が構成されており、かなり怪しい式をしています。実際はindirect lightとして計算する必要があるため、前の反射の値が入ってくるはずなのですが、ここではそう言ったことはされてません。恐らくはPDFによってその辺が打ち消される、という仮定を置いている...のかもしれません(後に紹介する論文もそうだった)。(当時のモンテカルロ感がいまいち把握できない)
ただここで重要なのが、ウェイトの中に使われている被積分関数が光源とカーネルで表されており、これ以上の展開を必要としません。[Coveyou, et al. 1967]ではこの辺かなりぼかして書かれていたのでよくわかりませんでしたが、これでちょっと明確になりました。あるパス
が与えられたら、NEEは各点のlocal directionを計算してそれを加算するということを行うアルゴリズムであることが少なくともここの式から読み取れます(暗黙的にindirect lightの係数がかかったうえで)。

こうしてみるとかなりNEEっぽさが出てきました。もう少し明確なpdfを使った議論をしてみれば繋がりが見えてきそうです。Google Scholarを探ってみると、Mathematical Models and Monte Carlo Algorithms for Physically Based Rendering[Lafortune, 1996]という論文が分かりやすくNEEを定式化しているのを見つけました。
ここではまず、一般的な第二種フレッドホルム積分方程式
に対するNEEの適用を考えます。今回の解説では論文に従いつつ、分かりやすさのためにいくつか変更を加えて話していきます。この論文では次のようなtex: hを定義して、NEEを構築します。
このは再帰的に展開すれば次のように書くことができます。
ある関数のestimatorをここの節では
と表記することにします(前の節とは表記がごっちゃになって申し訳ないですが、論文の表記を重視します)。
のestimator
は
となり、のestimator
は以下のように書きます
ここで、第二項目のestimatorについて次のように変形できます(期待値は変わらないので大丈夫...たぶん)
それぞれのestimatorは独立なので各々サンプリング戦略を持ち、それぞれのサンプルを
とします。こうした時、estimatorは具体的に
と書くことができます。これを再帰的に繰り返すと
従って、のestimatorは次のように書くことができます。
NEEのウェイトを[Pattanaik, Mudur, 1995]に従って定義すると
であるわけですから、を同様にモンテカルロ法をするとしてそのestimator
を使えば
とも表現することができます。つまりの計算はモンテカルロ法で一緒くたに計算するということを意味しています。
ここで重要なのがのestimatorが取るサンプル戦略は完全に独立しているという所です。はっきり言って
をモンテカルロ法でただ解くとしたらそもそもNEEをやる意味がありません(それはナイーブにモンテカルロ法をしているのと何も変わらない)。しかし、ここでは
の計算にはサンプリング戦略
とは異なる
を使って、独立したサンプル
を使用しています。
パスがサンプルされたとして、各地点における
はまた別のサンプリング戦略によって生成されたサンプル
を使って計算されます。そして、各ウェイトを適切な係数をかけて総和を取れば(3.11)を求めることができます。

ここでのサンプリング戦略にlight samplingを使用すれば、これは確かに現在のNEEのアルゴリズムであることが分かります。従って、[Coveyou, et al. 1967]は現在3DCGで使用されているNEEの起源であることが確認できます。
また、ここからNEEの本質的な所は「評価するestimatorとパスを選択するestimatorが独立している」ことで、NEEのアルゴリズムで言う所の「移動して、サンプル取って寄与を計算して、また移動する」部分が原義のNEEであると言えます。パスを大量に作っているともとれるので、パスの終端という視点で見ればpbrtの説明も正しいと言えます。
結論
Next Event Estimationの名称は物理学的な文脈で使われる"event"に由来していた。
おわり
ここまで見て頂きありがとうございました。
レイトレ合宿でNEEって名前変じゃない?みたいな話題が出てきたのが今回の記事のきっかけでした。前々よりこの疑問が頭の片隅にずっとあったので、せっかくなので調査をしてみた、というのが今回の記事です。
調べてみて、まさか原子物理学と関わっているとは思ってもいなかったので結構驚きました。色々見てみると意外とRendering Equationと中性子の散乱が同じ問題であり、なかなか面白い繋がり方しているな~と感じました(まあ、対象が光子から中性子に変わっただけでしかないですしね)。最近はこういう意外な歴史の繋がりを見るのが好きなので、なかなか楽しんで調査できました。
今回の記事に載せた内容はかなり要点だけ抜き出した感じではあるので、実際はもっと深い歴史があると思います。実際1980年代ぐらいの原子物理学の論文でちょこちょこNEEの名前がヒットしていて、恐らくそっちの方で色々発展とかがあったんだろうな~と推測しています(大半が課金しないと閲覧できなかったので断念)。3DCGの方でも資料が残ってないだけで、多分色々あった気がします(もう人に聞きに行く必要がありそう)。とりあえず自分が納得できる範囲でやりました。
正直これが正しいのかよくわからないので、誰か偉い人がまとめてくんないかな~
Reference
Adjoint and importance in Monte Carlo application[Coveyou, et al. 1967]
Adjoint Equations and Random Walks for Illumination Computation[Pattanaik, Mudur, 1995]
Mathematical Models and Monte Carlo Algorithms for Physically Based Rendering[Lafortune, 1996]
https://pbr-book.org/4ed/Light_Transport_I_Surface_Reflection/Path_Tracing