Blenderのマテリアルシェーダーなどで使われるLight Path(ライトパス)ノードについてなるべくわかりやすく解説してみようと思います。
このノードをうまく活用することで、たとえば「HDRIの背景はライティングには使いたいけれど、レンダリング画像には映したくない」「鏡に映ったときだけ色を変える」といった、条件付きのマテリアル制御が可能になります。
また、「レイの種類」というLight Pathの概念を理解することで、コンポジットやレンダーパス(Diffuse/Glossy/Transmissionなど)の意味もより明確になり、出力画像の構成・加工の自由度が飛躍的に高まります。
まずLight Pathノードのそれぞれのパスについて解説し、ノードの利用法などをいくつか紹介しようと思います。
この記事は、BlenderのLight Path(ライトパス)ノードについて書いた初心者~中級者向けの記事です。
難易度
ライトパスとは
Cyclesではパストレーシングという手法でレンダリングされており、カメラからレイを出してシーン内のオブジェクトに当て、その表面で反射・屈折・透過などを繰り返しながら光の経路を追跡して最終的な色を計算します。
パストレーシングについて詳しくは以下の記事に書いています↓
このレイの進み方(経路)には種類があり、たとえば反射光・屈折光・透過光・シャドウレイなど、様々な光線パスが存在します。
Cyclesではこれらのレイの種類や経路をライトパスと呼び、それを判定・条件分岐するためのノードがLight Path(ライトパス)ノードです。
※EEVEEでは一部のレイをサポートしていますが全て適切に値を出力するわけではないです。
レイの種類
レイの種類は大きく4つに分けられます。

- Camera(カメラ):
カメラから直接飛んできたレイです。 - Reflection(反射):
何かの表面で反射したことで生成されたレイです。 - Transmission(透過):
表面を透過して生成されたレイです(たとえばガラスを通り抜けた光)。 - Shadow(影):
影(特に透明なもの)を計算するために使われるレイです。(詳細は後述)
反射と透過レイの性質
反射(Reflection)や透過(Transmission)のレイには、さらに細かい性質があります:
- Diffuse(ディフューズ):
拡散反射や透過(半透明)によって生成されたレイ。マットな質感の光の散乱を表します。 - Glossy(グロッシー):
光沢のある鏡面反射や透過によって生まれたレイ。 - Singular(シンギュラー):
完全に鋭い反射や透過(たとえば鏡のように正確な反射)で発生したレイ。

※ちなみに透過(半透明)はDiffuseだとありますが、Translucentやサブサーフェスを使ってもDiffuse Rayとして反応しませんでした。
Light Pathノードの出力を実験で確認する
Cyclesで右図のようなシーンを構成し、ピンクの球にLight Pathノードをつけて表示の変化がどうなるか見てみます。
鏡やガラスは表面が荒いところと滑らかなところを交互に作っています。

鏡…Metallic 1.0/ Roughness 0.0と0.25/ IOR 1.5
ガラス…glass BSDF IOR 1.5/ Roughness 0.0と0.2
球に右図のようにシェーダーノードをつけます。Light Pathから出力される結果によって、球がピンクに表示されたり青く表示されます。
例:Is Camera Ray(カメラレイか?)の場合、カメラレイの部分は1として出力され、青く表示されます。(カメラレイではない部分は0が出力されます。)

Is Camera Ray
青い部分がカメラから出たレイが当たっているところです。
手前のガラスはレイが透過しているのでカメラレイではなく、ピンクになっています。

Is Shadow Ray
シャドウレイは透明度のある影でないと反応しないので、Transparent BSDFに変更しています。
シャドウレイが当たっている影の部分のみが青くなっています。

Is Diffuse Ray
球の周囲の床部分が青くなっています。
これは、球から拡散反射された光が床を照らしている部分です。一番最初の画像を見ると、ピンクの球から散乱した光が床に映って、床が少しピンクになっているのがわかります。

Is Glossy Ray
鏡に映った球と、ガラスに透過して見えている球の部分が青くなっています。
表面が荒いか荒くないかに関係なく、Glass BSDFやTransmission、Metallicなど、鏡面反射や透過させるノードを使うとGlossy Rayとなります。

Is Singular Ray
(Cycles Only)
鏡の表面が滑らかな部分に映った球、ガラスの滑らかな部分に透過した球のみが青くなっています。
滑らかな表面(ラフネス0)で完全な鏡面反射、透過した部分だけがSingular Rayになります。

Is Reflection Ray
(Cycles Only)
鏡に反射して映った部分と床に色が拡散反射した部分が反応しています。
とにかく反射しているレイがReflection Rayとなります。

Is Transmission Ray
(Cycles Only)
ガラスに透過した球の部分のみが青くなっています。透過したレイを検出します。
(※Transparent BSDFは透過扱いにはなりません)

Ray Length
(Cycles Only)
Greater Thanノードなどをつないで、ある長さ以上のレイを判定できます。

上にあったこの図のボールに向かう最後のレイの長さなので、Diffuse < Transmission < Reflection < Camera というレイの長さの順番になっています。

Ray Depth
レイが反射、または透過した回数。
手前のガラスの場合ガラスに入って出てボールに当たるので二回透過することになるみたいです。
ガラスに透過した床上の拡散反射などもRay Depthが大きくなっています。

Diffuse Depth (Cycles Only)
レイががディフューズ反射または伝播を通過した回数。
Glossy Depth (Cycles Only)
レイが光沢のある反射または透過を通過した回数。(とマニュアルにはありますが、実際はGlossy Rayだと判定されたはずのglassの透過では通過したとカウントしてくれません。反射のみです。)

Transparent Depth (Cycles Only)
レイが透明なサーフェス(Transparent BSDFなど)を通過した回数。(2回通過)
※右図は、手前にあったGlass BSDFをTransparent BSDFに変更したものです。

GlassやTransmissionの伝播・透過・屈折と、Transparentの透明は別物として扱われています
Transmission Depth (Cycles Only)
レイが透過性のあるサーフェス(Glass BSDFなど)を通過した回数。(2回通過)

EEVEEでの機能
EEVEEはラスタライズ方式でレンダリングしており、実際にレイを飛ばしているのは限られた部分だけです。
特に透過表現は、カメラ視点から見た画面上の情報(スクリーンスペース)を使って、擬似的に透過を再現しています。
そのため、たとえ実際には物体の裏が見えていなくても、カメラレイとして球の向こう側が表示されることがあります。
これは本当の意味での屈折ではなく、EEVEE特有の近似表現であり、Cyclesのようなパストレーシングとは異なります。

反射に関しても疑似的な表現ですが、Light Probe Planeを置けば、Glossy Ray, Singular Ray, Reflection Rayとして判定してくれます。(Singular Rayは表面が荒くても判定されてしまいます)

レイも正しく判定されるのは一部なので、Ray LengthなどもCyclesの結果とは違い、正しい結果は出ていないと思われます。
Light Pathノードの利用法
Light Pathノードを用いたいろいろな表現について紹介します。
HDRI背景を隠す
右図のように、HDRI画像を背景に使ってオブジェクトに当たる複雑な光を表現したいけど、背景を表示したくないという場合にLight Pathノードはよく使われています。

設定の仕方
マテリアルシェーダーノードをWorldに切り替えます。
BackgroundをHDRI背景のものとColorのもの二つを用意してMix Shaderにつなぎます。
Light PathノードのIs Camera Rayで背景だけをColorにします。
HDRI背景はオブジェクトとしてカメラレイが当たっていないと判定されるのでここで表示を分けることができます。

鏡の中だけ表示を変える
Is Reflection Rayで表示を出しわければ、鏡の中だけマテリアル表示を変更することができます。
右図のように、鏡の中のスザンヌは顔全体の色と目の色を変更しています。

鏡の中では笑うスザンヌ…?

上図のように鏡の中では違うオブジェクトを映す場合、ライトパスノードではなく、オブジェクトプロパティのRay Visibilityを調節することになります。
Ray Visibilityはマテリアルごとではなく、オブジェクトごとにレイの可視性を制御することができます。

鏡に映るかどうかはGlossyやTransmissionが関係していますが、二つの物体が重なることで影やDiffuseが影響するので切っています。
レントゲン
人体をTransparentな物体で遮ったときだけ中身の骨が見えるようにします。
ガラス(GlassBSDF)で遮るとなぜか中身が黒くなったのでTransparentを使いました。手前に透明な板をおいて、そこを通ったレイかどうかで肌を透明にするかしないかを判定します。
他にも箱の中とか扉の向こうなどを透視できるような表現に使えます。

まとめ
ライトパスはBlender独自のレイのタイプ分けなどがあるのでちょっとわかりにくいです。Glossy Rayとして判定しているのにDepthではカウントしてくれないなど謎の挙動もあって、複雑なレイの制御についてはやってみないとわからないところもあるかもしれません…。
ライトパスがなんとなくわかるようになると表現の幅が広がるし、コンポジットやRay visibilityの操作をするときにも知識が生きてくるので、使えるようになると便利だと思います。
そもそもライトパスとかレイがよくわからん、って方は「ライトパスとは」の項目にも書いてますが、パストレーシングについて一回理解しておいた方がわかりやすいと思います。