元記事:
blender.org - Subsurface Scattering
サブサーフェススキャッタリング
はじめに
サブサーフェススキャッタリング(Subsurface scattering)は、新しい Material オプションであり、皮膚や大理石、ミルクのような材質をレンダリングするためのものです。これらの材質への光線は常に表面(サーフェス)で反射するわけではなく、表面の下で散乱(スキャッタリング)し、他の場所に出て行くこともあります。これにより、表面上の光がぼやけ、柔らかな感じになります。
サブサーフェススキャッタリングによる手。Cire氏作
Blender でのディフューズライティングにおいて、このエフェクトをシミュレートするのに、Object の前面と背面のライトマップをあらかじめレンダリングすることにより、二つのステップの処理を行う方法を使用しています。その実装は下記の論文を元にしています。
Henrik Wann Jensen and Juan Buhler:
"A Rapid Hierarchical Rendering Technique for Translucent Materials"Proceedings of SIGGRAPH'2002
設定
新しい SSS パネルが MaterialButtons 内にあり、サブサーフェススキャッタリングの設定と、いくつかのプリセットの設定を選択できます。以下が設定可能です。
新しい SSS パネル
[wiki]
-''Scale:'' Object のスケール。Radius R、G、B のグローバルスケーリング係数として使用されます。プリセットの Scale 1.0は1 blender 単位が1mmと等しいことを意味します。Scale 0.001では、1 blender 単位は1mと等しくなります。
-''Radius R、G、B:'' ぼかす範囲、もしくはサーフェスの下で散乱する光線の距離の平均。現実では、それぞれのカラーチャネルは違う範囲を持ちます。例えば、皮膚(Skin)では赤色が遠くまで散乱するため、手でランプを覆うと、赤く見えます(実際のサンプルとして、はじめにの項にある Cire氏の画像をご覧下さい)。
-''IOR:'' 屈折率(Index Of Refraction)。ほとんどの材質では1.3が最適です。
-''Error:'' このアルゴリズムがどれだけ正確に周辺をサンプリングするかをコントロールするパラメータ。0.05のままでエラーのない画像になるでしょう。高い値にするとレンダリングがスピードアップしますが、エラーが発生する可能性があります。
すばやくプレビューを見たい時には1.0にするといいでしょう。
-''カラーボタン:'' サーフェスでのディフューズ反射率。色と、スキャッタリング動作への影響を調節します。
-''Col(色の影響度):'' R、G、B オプションがその色をどれだけ調節するかをコントロールします。このオプションを0.0にしてもなお、R、G、B オプションはスキャッタリング動作に影響することに注意して下さい。
-''Tex(テクスチャぼかし量):'' テクスチャをシェーディングに従いどれだけぼかすかをコントロールします。
-''Front weight:'' (カメラに向かって)前方に散乱する重み係数。
-''Back weight:'' 後方に散乱する重み係数。
[/wiki]
Enrico Cerica氏によるトマト。左:サブサーフェススキャッタリングあり。右:なし
材質のプリセットがすでにいくつか用意されています。例えば、皮膚のバリエーション(Skin 1、Skin 2、Chicken)、液体(Skim milk(スキムミルク)、Whole milk(全乳))、野菜(Potato、Apple)、鉱物(Marble(大理石))、クリーム(Kethup(ケチャップ)、Cream)まであります。
また、プリセットの一つから編集することで、簡単に自分の SSS 設定を生成することができます。
Enrico Cerica氏による材質テスト
既知の制限
[wiki]
-SSS Material を持つ Object がそのカメラビューの外にあるとき、 SSS Material が反射(Ray Reflection)や屈折(Ray Refraction)に正しく写りこみません。
-サンプリングは(その Camera から見て)Object の前後からのみ行われ、その間はサンプリングされません。つまり、Object が重なっている時、バックスキャッタリングが失われることがあるということです。しかしこの処理には利点もあり、メモリ消費量を抑え、更に重要なこととしてジオメトリの内部からの不必要な影響も防ぐことができます。
-Irregular シャドウバッファが SSS Material の後ろに正しく影を落としません。
-Normal が正しい方向を向いている必要があります。自動的にカメラの方向に補正したりはしません。SSS がバックスキャッタリングの計算時、どの Face が裏向きなのかを認識できないといけないからです。
-Panorama と広角レンズでのレンダリングでは、貧相な結果になることが報告されています。
[/wiki]
実装
SSS の基本サンプルである陶磁器のティーポット
レンダーパイプラインへの SSS の統合に、コードの変更はあまり必要ありませんでした。
[wiki]
-SSS を持つそれぞれの Mateirlal について、環境マッピング同様、前処理の Pass が行われます。
-この Pass は完全にスレッド化されており、通常のレイヤへのレンダリング同様に動作します。
--それぞれのタイルごとに、二つの Z バッファが作成され、一つは最前面の Face、もう一つは最後方の Face を使用します。
--この時、これらの Face 上のポイントがシェーディングされますが、AO と Radiosity を含むディフューズシェーディングのみです。
--これらのポイントはすべて一つのリスト内に集められ、色、3D座標、エリアが格納されます。
-このポイントリストを使用し、オクツリーがレンダリング時のルックアップテーブル用に作成されます。
-通常のレンダリングが行われる時、ディフューズシェーディングを使用する代わりに、オクツリー内のポイントの加重平均を取って色の計算が行われます。
[/wiki]
元記事:
blender.org - Subsurface Scattering