Language:
Page Info
Tags:
Skill Level:
Engine Version:

サブサーフェス プロファイルのシェーディング モデル

アンリアル エンジン 4 (UE4) は、Subsurface Profile (サブサーフェス プロファイル) と呼ばれる皮膚やワックスのようなサーフェス用のシェーディング方法を提供しています。 サブサーフェス プロファイル シェーディイング メソッドは サブサーフェス メソッドと似ていますが、レンダリングの方法が基本的に異なります。サブサーフェス プロファイルは スクリーン スペース をベースにしています。スクリーン スペース レンダリングは人間の皮膚に見られる繊細なサブサーフェス エフェクトの表示により効果的である一方で、背面散乱が二次的なエフェクトとして耳などに表れることが稀にあります。以下のドキュメントでは、サブサーフェス プロファイルがどのようなものであるか、各自の作業でどのように使用できるかについて説明します。

Not using SubsurfaceProfile

Using SubsurfaceProfile

文書の作成および3D スキャン ヘッドモデル提供にご協力いただいた Lee Perry-Smith 氏および Perry-Smith 氏の Infinite Realities に深く感謝いたします。

サブサーフェス プロファイルの概要

サブサーフェス スキャタリング データは、コンテンツ ブラウザ での作成、共有、保存が可能なアセットです。データはアーティストによって作成され、サブサーフェスでライトが散乱する距離、サブサーフェスの色、オブジェクトから出た後のライトのフォールオフ カラーなどを調節します。このデータをサブサーフェス マテリアルに適用することができます。サブサーフェス プロファイル データは、インタラクティブに微調整することもできます。つまり、編集結果を確認するためにマテリアルを再コンパイルする必要はありません。

サブサーフェス プロファイルの有効化、作成および使用

サブサーフェス プロファイルは UE4 で様々な使用方法があります。次のセクションで 1 つずつ説明していきます。

サブサーフェス プロファイルの作成

サブサーフェス プロファイルを作成するには、まず コンテンツ ブラウザ 内を 右クリック します。[Materials & Textures] オプション、そして [Subsurface Profile] オプションを選択します。 Create SubsurfaceProfile

サブサーフェス プロファイルを指定しないと、白色人種の皮膚であるデフォルトのサブサーフェス プロファイルが使用されます。

サブサーフェス プロファイルを編集するには、 コンテンツ ブラウザマウスの左ボタン でダブルクリックして開きます。 一度開くと、サブサーフェス スキャタリング プロファイルの各プロパティを調整できます。これは、キーボードを使用して数字を入力するか、マウスの左ボタン でカラーバーを クリック してカラーピッカーに入れます。

サブサーフェス プロファイルを有効にする

マテリアルでサブサーフェス プロファイルを使用するには、最初にマテリアルの [Details (詳細)] パネルでマテリアルの [Shading Model][Subsurface Profile] に設定して有効にします。有効にすると、Subsurface Profile 入力に新しく追加することで、使用しているデフォルトのサブサーフェス プロファイルをオーバーライドすることができます。

サブサーフェス プロファイルのデフォルト設定は白色人種の皮膚のタイプに近いです。これは、リアルに見える皮膚のひとつのコンポーネントにすぎないことに注意してください。テクスチャのベースカラーがサブサーフェス スキャタリング プロファイルに合うように常に確認してください。

Enable SubsurfaceProfile

サブサーフェス プロファイルは、マテリアル インスタンスでもオーバーライドできます。操作方法は、Material Instance の [Details (詳細)] パネルで [Override Subsurface Profile] を有効にします。有効にしたら、使用するサブサーフェス プロファイルを [Subsurface Profile] で指定します。

6.png

計算全体ではエネルギーを節約しているため、スキャタリングでライトの追加作成はできないことを覚えておいてください。

マテリアル入力チャンネル

スクリーン スペースのサブサーフェス シェーディング プロファイルは、lit (ライティング有り) のシェーディング モードとあまり違いがありません。主な違いは、メタリック入力が再利用され、使用できないことです。

ベースカラーの入力: ベースカラーの入力は通常通りディフューズ ライティングに使用します。スクリーン スペース サブサーフェス スキャタリングは、色や明るさの変更は前提としておらず、近くのピクセルにライティングを再分配するだけです。そのため、追加のサブサーフェス スキャタリング カラーはありません。 従って、マテリアルが特定のカラーでスキャタリングする場合、ベースカラーの一部として表現する必要があります。 ベースカラーは、スキャタリングとディフューズ ライティングとの区別ができないような相当離れた場所からマテリアルを見たかのような最終的なカラーにします。

人間の皮膚は、ライトの量と色をある程度ブロックする薄いレイヤーで、赤みを帯びた肉を覆います。ライトで色付けされた人間の皮膚の可視のスキャタリング距離は約 1.2 cm です。

メタリック入力: メタリック入力チャンネルは、サブサーフェス プロファイルを使用する場合は利用できません。メタリック入力の GBuffer 空間はサブサーフェス プロファイル データに対応するように再利用されているからです。

オパシティ入力: オパシティ入力チャンネルは、サブサーフェス スキャタリングの寄与をマスクするために使用します。 0 がスキャタリングなし、1 はフル スキャタリングの場合、0 から 1 の範囲の値を使用すると、サブサーフェス スキャタリング強度が異なるエリア間のトランジションをスムーズにすることができます。

サブサーフェス スキャタリングの強弱位置をうまく調整するためには、マスク テクスチャの使用が便利です。
1 により近い値すなわち白のマスク テクスチャのエリアでは、最強のサブサーフェス スキャタリング エフェクトになります。一方、0 により近い値すなわち黒のマスク テクスチャのエリアでは、エフェクトは弱くなります。 暗すぎるエリアはサブサーフェス カラーを調整して補正します。使用する色を明るくするほど、サブサーフェス スキャタリングが増えることを覚えておいてください。

以下の画像を見ると、1 つのマテリアルで 2 つのサーフェス タイプをレンダリングするためのマスクの使い方が分かります。トランジションはソフトでトライアングルの境界に制限されていないことに注意してください。

クリックしてフルサイズで表示

フル解像度スキンシェーディング

UE4 がサブサーフェス プロファイル シェーディング モデルでフル解像度のスキンシェーディングをサポートするようになりました。毛穴やしわなどのサーフェスの詳細に対して忠実度の高いライティングを実現します。

Checkboard Rendered Skin Layout

Full Resolution Skin

これまでは皮膚へのライティングはチェッカーボード パターンを使って表していました。この場合、ピクセルの半分はディフューズ ライティングで、残りの半分は スペキュラ ライティングになっています。こうしたライティングは最終的なサブサーフェス プロファイルのフルスクリーン パス中に再結合されます。このようなアプローチは、サブサーフェス ライティングに良い結果をもたらしますが (性質上、低周波)、サーフェスの詳細部分ではライティングの忠実度が低くなることがあります。新しいアプローチを使うと、すべてのピクセルにディフューズとスペキュラのライティング情報が含まれ、RGBA にエンコードされます。これにより、最終的なサブサーフェス プロファイルのフルスクリーン パス中にフル解像度のライティングを再構築して、サーフェスの詳細で良い結果が得られ、テンポラル アンチエイリアスで安定したビヘイビアを示すようになります。

互換性

互換性 フル解像度のスキンシェーディングでは、フルアルファ チャンネルで最低 64 ビットのシーン カラー形式を必要とします。デフォルトの FloatRGBA シーン カラー フォーマットはうまく機能しますが、FloatRGB などの 32 ビットの表現はサポートされていません。シーン カラー フォーマットがフル解像度のスキンと互換性がない場合は、チェッカーボード ベースのライティングに戻ります。

このビヘイビアは r.SSS.Checkerboard コンソール変数を使ってオーバーライドすることができます。これに対する値は以下の通りです。

プロパティ名

説明

r.SSS.Checkerboard

0

チェッカーボード無効

r.SSS.Checkerboard

1

チェッカーボード有効 (従来のビヘイビア)

r.SSS.Checkerboard

2

自動 (デフォルト) - シーン カラーのピクセル フォーマットがサポートしていれば、フル解像度のライティングを使用

制限事項

フル解像度のスキンシェーディングは近似値であることを覚えておいてください。ほとんどの場合うまく機能しますが、マテリアルの一部の機能ではエンコードの方式が原因で問題が生じることがあります。特に、

  • メタリック マテリアル

  • エミッシブ マテリアル

これらは機能するものの、チェッカーボードと比べると出力の違いに気付くかもしれません。これは、RGBA のディフューズ / スペキュラのエンコードが一緒になっていることが原因です。マテリアルをオーサリングする際に、スキンシェーディングが望ましくない場所で オパシティ0 に設定することで特定の問題を回避できます。オパシティ 0 のピクセルは、シェーディングのためにデフォルトの lit (ライティング有り) として扱われます。

不透明でないピクセルをこうしたやり方でマスクするのもパフォーマンス上、意味があります。こうしたピクセルはサブサーフェスのポストプロセスでバイパスされるからです。

パフォーマンスへの配慮

制作しているタイトルが 64 ビットのシーン カラー フォーマットの場合は、テクスチャ フェッチ数が減るため、フル解像度のサブサーフェス ライティングの方がチェッカーボードよりも処理が速くなります。ただし、タイトルが 32 ビットのシーン カラーの場合、削減されたテクスチャの帯域幅によって得られるパフォーマンス ゲインの方が、そのメリットを上回るでしょう (ハードウェアに依存)。

技術的な詳細

現時点では、サブサーフェス スキャタリング プロファイルのシェーディング モデルは Lit (ライティング有り) (ランバート ディフューズ、スペキュラーの GGX、メタリックなし) とあまり変わりがありません。素晴らしい機能のほとんどは、すべてのライティングが計算された後のポスト プロセスで実現します。

サブサーフェス スキャタリング プロファイルは、Jorge Jimenez 氏 の成果に基づいたものです。彼のウェブページで 3D 画像をよりリアルに見せるための役立つヒントをご覧ください。

サブサーフェス マテリアル上のスペキュラに対応するために非スペキュラ (視点に依存しない) ライティングの寄与を分け、パフォーマンスを高めるためにダウンサンプリングします。 ガウスぼかしと同様に、画像を 2 パス (分割可能なカーネルと想定) のポストプロセスでフィルタリングします。 フィルターのカーネルはサブサーフェス スキャタリング プロファイルに依存し、これは、GBuffer (シーン毎に最高 255 アクティブ プロファイル) に格納されています。 カーネルは色付けされたウェイトと特定のサンプル位置を持ち、プロファイルでスケーリングできます (cm 単位で定義)。 最終段階で散乱光の寄与をフル解像度の画像と再結合します。視点依存のライティングと非視点依存のライティングを分けるために、シーンカラーのアルファチャンネルにウェイト付けの条件を格納します。 この近似では、64 ビットのレンダリング ターゲット (r.SceneColorFormat を参照) を必要とし、ほとんどの場合で機能します。

これはスペキュラ (鏡面反射色) をうまく取り除きますが、スペキュラ ピクセルは彩度が減じられた非視点依存のカラーになります。これは、すべてのライティング パスに 2 つの 32 ビットのレンダリング ターゲットを使用することで改善できます。同じメモリ帯域幅を持ちますが、一部のハードウェアでは遅くなることがあります。これは変更対象です (コードの複雑度を追加)。

ここでは、ブラー適用前にスペキュラ (鏡面反射色) を取り除いた例をとりあげます。最終画像 (右端の画像) でスペキュラ反射が鮮明で滑らかなのがわかります。これが目標とするエフェクトです。

クリックしてフルサイズで表示

ここでは、ブラー適用前にスペキュラ (鏡面反射色) が取り除かれなかった例をとりあげます。最終画像 (右端の画像) でスペキュラ反射に光沢がなく伸縮しているのがわかります。これは、このエフェクトの正しいレンダリング方法ではありません。

クリックしてフルサイズで表示

スケーラビリティとコンソール コマンド

高品質なビジュアルと高いパフォーマンスとの間で適切なトレードオフを得るために使用できるスケーリングとパフォーマンスのコンソール コマンドがあります。

r.SSS.Scale:ポストプロセス パスの無効化、または簡単な実験用のエフェクトのスケーリングが行えます。これを 0 にするとエフェクトが無効になります。0 より大きい値に設定すると、以下の画像シーケンスのようにエフェクトが増加します。

スライダーをドラッグすると、r.SSS.Scale の設定を 0 から 10 にした場合の変化が表示されます。

r.SSS.SampleSet:サンプル使用数を設定します。この数を減らすとエフェクトの実行速度が速くなります。しかし、これはエフェクトが低品質になるか、レンダリングのアーティファクトが表示される可能性があることを意味します。

r.SSS.SampleSet = 0

r.SSS.SampleSet = 1

以下の画像は、システム内部を表しています。このビューは、ShowFlag.VisualizeSSS 1 を使用して有効になります。

クリックしてフルサイズで表示

サブサーフェス スキャタリング プロファイルのシェーディング モデルは、皮膚のレンダリングに関しては一歩進んだものですが、行えることにはいくつかの制限があります。 このシステムはますます進歩していくため、このリストは変更の可能性があることにご注意ください。

  • この機能は非ディファード (モバイル) レンダリング モードでは動作しません。

  • 大きな画面でスキャタリング半径を設定すると、極端なライティング条件ではバンディングアーティファクトが表示されるかもしれません。

  • 現在、ライトのバックスキャタリングはありません。

  • 現在、non-SSS Materials が SSS Material をオクルードするとグレイのアウトラインが表示されます。

Subsurface Profile プロパティのリファレンス

Tweak SubsurfaceProfile

プロパティ名

説明

Scatter Radius:

スキャタリングを行うワールド スペース単位の距離です。

Subsurface Color:

サブサーフェス エフェクトのウェイトとして使用できます。黒はサブサーフェス スキャタリングがないことを意味します。白はすべてのライティングがマテリアルに入り、周囲に散乱することを意味します。非グレイスケール値は、どの色の寄与がサーフェスに入ってきて、より複雑な外観のシェーディングになるかをさらに制御します。

Falloff Color

フォールオフ カラーは、ライトがマテリアルに入った後のマテリアルのスキャタリング カラーを定義します。スキャタリングが見えるエリアでシェーディングがより複雑に変化するようにしたければ、ここでは鮮明な色を使用しないようにします。

謝辞

ヘッドモデルの提供とご支援いただいた Lee Perry-Smith 氏と Perry-Smith 氏の Infinite Realities に深く感謝いたします。 また、この機能のもとになった実装をリリースいただいた Jorge Jimenez 氏 にも深く感謝いたします。

Tags