TL

サブサーフェススキャタリング

肌や大理石が「内側から光っている」ように見える理由を、内部散乱・拡散プロファイル・スクリーン空間SSSの原理からたどり、透過や単なる拡散との違いを踏まえて根拠を持って質感を作れるようになります。

応用グラフィックスサブサーフェススキャタリングレンダリング拡散プロファイルシェーディングリアルタイム最終更新: 2026-06-21
TL;DR要点だけ先に
  • 1.SSSは光が表面を透過して内部で多重散乱し、入射点と別の場所から出てくる現象で、表面点だけで完結するBRDFでは表現できない。
  • 2.実務は多重散乱を拡散プロファイル(入射点からの距離に対する出射光の重み関数)で近似し、放射照度を空間的に畳み込んで柔らかい光の回り込みを再現する。
  • 3.スクリーン空間SSSはこの畳み込みをライティング後のバッファ上で深度を考慮したぼかしとして実行し、リアルタイムで肌を安価に表現する。

サブサーフェススキャタリングとは何か

サブサーフェススキャタリング(SSS、表面下散乱)は、光が半透明な物体の表面を透過して内部で何度も散乱し、入射した点とは別の場所の表面から出てくる現象です。肌・大理石・牛乳・ロウ・葉・翡翠が「内側から柔らかく光っている」ように見えるのは、これが原因です。

ここで押さえるべき本質は、SSS が BRDF の枠組みでは原理的に表現できない という点です。BRDF は「表面のある1点に届いた光が、同じ点から視線方向へどれだけ返るか」を記述します。つまり入射点と出射点が同一であることを暗黙に仮定しています。ところが肌の中では、額に当たった光が数ミリ内部を旅して隣の位置からにじみ出ます。入射点と出射点がずれる以上、点対点の反射率関数では足りず、面から面への光の伝達を扱う枠組みが要ります。

BRDF を一般化した BSSRDF

SSS を厳密に記述する関数を BSSRDF(Bidirectional Surface Scattering Reflectance Distribution Function)と呼びます。入射点 xi・入射方向・出射点 xo・出射方向の8変数関数で、出射点での放射輝度は表面全体にわたる入射光の積分になります。BRDF が xi = xo に退化した特殊ケース、と捉えると位置づけが明確です。

透過(トランスペアレンシー)との違い

SSS はしばしば「半透明」と混同されますが、光学的には別物です。透過(屈折を伴うトランスペアレンシー)は、ガラスや澄んだ水のように、光がほとんど散乱せず媒質を通り抜ける現象です。スネルの法則で屈折し、向こう側の像がゆがんで見えます。屈折の扱いは レイトレーシング の項目が詳しいです。

対して SSS の媒質は濁っている(散乱係数が高い)ため、内部で光の向きがランダムに何度もかき混ぜられます。結果として向こう側の像は運ばれず、光のエネルギーだけが方向情報を失って拡散的に広がります。両者を分けるのは、内部での散乱イベントの回数です。

観点透過(クリア)サブサーフェススキャタリング
内部散乱ほぼなし。直進または一様屈折多重散乱。向きがランダム化される
向こう側の像運ばれる(歪んだ像が見える)運ばれない(光量だけ拡散して漏れる)
代表的な素材ガラス・澄んだ水・アクリル肌・大理石・牛乳・ロウ・葉
支配パラメータ屈折率(IOR)散乱係数・吸収係数・平均自由行程

物理的には両者は同じ 放射伝達方程式 の両端です。散乱係数がほぼゼロなら純粋な透過、大きければ SSS になります。牛乳を薄く延ばすと向こうが透けるのは、光路が短く散乱回数が減って透過寄りに振れるためです。

なぜ内部で「拡散」するのか ── 多重散乱の帰結

濁った媒質に入った光は、微粒子にぶつかるたびに向きを変えます。1回の散乱の方向の偏りは位相関数で決まりますが、数十回・数百回と散乱を重ねると、個々の偏りは平均化され、最終的な出射光の分布は入射方向をほとんど忘れて等方的になります。これが SSS の柔らかさの根源です。

重要な帰結は、出射位置が入射位置から離れるほど、そこへ届く光は指数関数的に減衰することです。媒質内を進む距離が長いほど吸収される確率が上がるためです。この「入射点からの距離に対する出射光の重み」を関数化したものが、実務で中心的な役割を果たす拡散プロファイルです。

拡散プロファイル R(r) の直感:

  R(r) = 入射点から距離 r だけ離れた表面点に、
         単位の光を入れたときに出てくる光の割合

    r 小(入射点の近く) → 出射光は大きい(すぐ出てくる)
    r 大(入射点から遠く) → 出射光は小さく、距離とともに急減
    プロファイルの広がり → 素材が光を通す度合い(肌は数mm規模)

赤・緑・青で減衰の速さが違う点が肌の表現では決定的です。ヘモグロビンの吸収特性により、赤い光が最も深く長く潜るため、影の縁や薄い部位(耳・小鼻・指の間)が赤みを帯びてにじみます。この波長依存を色ごとに別々の広がりを持つプロファイルとして与えることで、肌特有の赤い滲みが再現されます。

拡散プロファイルによる近似 ── 畳み込みとしてのSSS

多重散乱をそのまま追跡するのは高価です。そこで半無限の平らな媒質という仮定を置くと、SSS は放射照度(表面が受けた光の分布)を拡散プロファイルで畳み込む操作に帰着できます。これが Jensen らの拡散近似の核心です。

表面上の出射放射輝度(拡散近似):

  Lo(xo) = ∫  E(xi) · R( |xo − xi| )  dxi
           表面

    E(xi)         : 入射点 xi での放射照度(そこに届いた光の量)
    R(r)          : 距離 r の拡散プロファイル(重み)
    |xo − xi|     : 出射点と入射点の表面上の距離

要するに、まず各点が受けた光 E を普通に計算し、それをプロファイルという「ぼかしカーネル」で空間的にならすと、光の回り込みが得られます。プロファイル R(r) の実装には、初期は物理から導かれるダイポール(双極子)モデルが使われましたが、計算が重いため、実務では複数のガウス関数の和で近似するのが定番になりました。

なぜガウスの和で近似するのか

ダイポールの正確なプロファイルは、少数のガウス関数を重み付きで足し合わせるだけで高精度に再現できることが知られています。ガウスは分離可能(2次元のぼかしを横方向と縦方向の2回の1次元ぼかしに分けられる)で、かつ二つのガウスの畳み込みが再びガウスになるため、多段でも効率よく合成できます。この数学的な扱いやすさが、後述のスクリーン空間SSSを実用速度に押し上げました。

テクスチャ空間拡散 ── オフラインと映画品質

畳み込みをどの空間で行うかで手法が分かれます。映画やハイエンドでは テクスチャ空間拡散 が使われました。まずモデルの放射照度をライトマップのように UV テクスチャへ焼き込み、そのテクスチャ上でプロファイル(ガウス和)を畳み込み、最後に描画時に読み戻します。

この方式は物体の表面に沿った正しい距離で拡散するため、耳や指のような込み入った形状でも破綻しにくいのが長所です。一方、UV 展開の継ぎ目やテクスチャ解像度に品質が縛られ、全キャラクタぶんの放射照度テクスチャを毎フレーム生成・ぼかしするコストがかかります。より厳密には、光路を実際に追う経路積分(パストレーシング 系)でボリューム散乱として解く方法もあり、リファレンス品質はこちらが基準になります。

スクリーン空間SSS ── リアルタイムの主流

ゲームなど実時間では、テクスチャ空間の重さを避けるため スクリーン空間SSS(SSSS) が主流です。着想は「表面に沿った拡散を、画面上のライティング結果に対するぼかしで近似する」ことです。手順はこうなります。

スクリーン空間SSS の流れ:

  1. 通常どおりライティングし、拡散成分をバッファへ描く
     (鏡面ハイライトは分離してぼかさない ← 重要)
  2. 深度バッファを読みながら、画面上でプロファイル(ガウス和)を畳み込む
     ・水平パス → 垂直パス(分離可能を利用)で2回のぼかし
  3. ぼかした拡散に、ぼかしていない鏡面を足し戻す

肝は2つあります。第一に、鏡面反射は表面の一番外側で起きる現象なのでぼかしてはいけないこと。SSS の対象は内部を潜って出てきた拡散光だけです。第二に、深度を考慮したぼかしであること。単純な画面ぼかしだと、手前の顔と背景など奥行きが不連続な境界を越えて色が漏れます。そこでカーネルの各タップで深度差を見て、離れすぎたサンプルの重みを落とし、輪郭を越えた滲みを防ぎます。

スクリーン空間ゆえの限界

SSSS はライティング後の可視ピクセルしか材料にできないため、いくつかの限界があります。画面外や物体の裏側の情報は使えず(背面照明の透過は別途、厚みを近似する専用処理が要る)、深度不連続の境界では拡散が途切れます。また物体が斜めを向くほど、画面上の1ピクセルが表面上では長い距離に対応するため、ぼかし半径を深度と法線の傾きに応じて補正しないと近距離で滲みすぎ・遠距離で滲み不足になります。これらの近似の代償が、テクスチャ空間や経路積分との品質差として現れます。

このぼかしは G バッファを前提にする 遅延レンダリング と特に相性が良く、拡散ライティングのバッファと深度が既に揃っているため、後処理パスとして自然に差し込めます。

厚みと背面照明 ── 耳が透ける表現

もう一つ実務で重要なのが、光源が物体の裏側にある場合の透過光です。逆光の耳や、手をかざしたときに指の縁が赤く光るのがこれで、光が物体を貫通するほど薄い部位で顕著に出ます。スクリーン空間の畳み込みは表側の回り込みは扱えても、この貫通は表現できません。

そこで、物体の厚み(局所的にどれだけ薄いか)を事前計算のテクスチャなどで近似し、視線と光源の位置関係から裏抜けする光量を別途加算します。厚みが小さいほど強く透過させ、拡散プロファイルの色(赤が抜けやすい)を掛けることで、薄い部位が赤く発光する見た目を安価に得られます。表側の畳み込みと裏側の厚み透過を足し合わせて、はじめて肌全体の説得力が出ます。

まとめ

  • SSS は光が表面を透過して内部で多重散乱し、入射点と別の点から出てくる現象で、入射点と出射点が同一と仮定する BRDF では表現できず、面から面への伝達を扱う BSSRDF が必要。
  • 透過は散乱がほぼなく向こう側の像を運ぶのに対し、SSS は多重散乱で像を失い光量だけを拡散させる。両者は放射伝達の両端で、散乱回数が分ける。
  • 実務は多重散乱を 拡散プロファイル R(r)(入射点からの距離に対する出射光の重み)で近似し、放射照度をプロファイルで 畳み込む。プロファイルは扱いやすさからガウス関数の和で表す。
  • リアルタイムの主流は スクリーン空間SSSで、拡散バッファを深度考慮のぼかしで畳み込み、鏡面は分離し、境界を越えた滲みを抑える。裏側から抜ける光は厚み近似で別途加算する。

グラフィックス Article

サブサーフェススキャタリングを実務で読む

TL;DRは入口です。実際に選ぶ・使う段階では、何を解決するか、何と比較するか、導入後にどこで詰まるかまで見る必要があります。

解決すること

グラフィックス

比較で見る軸

難易度: advanced / カテゴリ: グラフィックス / タグ数: 6

導入後に効く点

実務は多重散乱を拡散プロファイル(入射点からの距離に対する出射光の重み関数)で近似し、放射照度を空間的に畳み込んで柔らかい光の回り込みを再現する。

先に潰すリスク

用語だけ覚えても、設計・実装・運用でどこに効くかを確認しないと判断を誤る。

数字・仕様の読み方
難易度
advanced
カテゴリ
グラフィックス
タグ数
6

判断チェックリスト

  • 自社の用途が「グラフィックス / サブサーフェススキャタリング」に近いか確認する。
  • 強みである「SSSは光が表面を透過して内部で多重散乱し、入射点と別の場所から出てくる現象で、表面点だけで完結するBRDFでは表現できない。」が本当に評価軸になるか確認する。
  • 注意点の「用語だけ覚えても、設計・実装・運用でどこに効くかを確認しないと判断を誤る。」を運用で吸収できるか確認する。
  • 公開値や仕様値は、対象プラン・対象機種・対象リージョンまで確認する。
  • 既存システム、ID、ネットワーク、監視、バックアップとの接続方法を先に洗い出す。
  • 小さく試してから、本番移行、権限設計、障害時手順、コスト監視を決める。

次に確認する観点

グラフィックスサブサーフェススキャタリングレンダリング拡散プロファイルシェーディンググラフィックスサブサーフェススキャタリングレンダリング