超雑訳 Physically Based Hair Shading in Unreal

こんにちわ。Pocolです。
今日は,
[Karis 2016] Brian Karis, “Physically Based Hair Shading in Unreal”, SIGGRAPH 2016 Course: Physically Based Shading in Theory and Practice.
のスライドを読んでみようと思います。
いつもながら誤字・誤訳があるかと思いますので,ご指摘頂ける場合は正しい翻訳例と共に指摘していただけると幸いです。
尚,図は[Karis 2016]より引用しています。


最近では、ヘアレンダリングの分野では大きな進歩がありましたが、シェーディングの分野ではあまり進歩がありませんでした。


このような作業を始める前に、私たちは結果を比較するための大量の写真資料を入手したいと考えています。
これは本物の人毛を使ったエクステンションで、さまざまな色を楽しむことができます。


また、プロのスタイリストを招いて、Paragonのキャラクターのような髪型にしてもらいました。
これはtwin blastというキャラクターのための3点照明のセットです。



これはアンビエント・ライティングです。


Sparrowというキャラクターのシングルライトです。


パスの名前は、パスが遭遇する反射イベントのRと透過イベントのTで付けられています。


これがRパスです。
光線が髪の毛の繊維の前面で反射しています。


これがTTパスです。
光線はファイバーの前面を透過し、内部を通過する際に吸収されて色がつきます。そして、反対側を透過します。


これがTRTパスです。
光線はファイバーの前面を透過します。
着色された内部を通過します。
反対側の面で反射します。
再び内部を通過し、正面を通過します。

このように、内部での反射を繰り返すこともできますが、吸収が多いため、通常はかなり暗くなります。


Rの経路は、ファイバーの内部を通過していないため白くなっています。
TRTはファイバーを2回通過しているため色がついています。
キューティクル・スケールが傾いているため、それぞれが分離しています。


反対側からはTTパスが見える。
繊維の内部を通過しているので色がついていますが、1回しか通過していないのでTRTよりも飽和していません。


Marschnerによるシェーディングの因数分解では、これらのローブの合計に分けられ、pはパスが内部を通過する回数を表しています。

それぞれのローブはまた、MとNという2つの関数に分けられます…。


これらは経度方向と方位方向の散乱関数MとNです。

経度方向の関数は、ファイバーの経度方向の散乱を記述し、方位角方向の関数は、ファイバーの半径方向の散乱を記述します。


それは私たちにとって現実的ではありません。


髪の毛の色やラフな感じなど、いろんな色が必要です。
場合によっては、同じヘアスタイルの中でもそれらが変化する必要があります。色の筋、毛皮のパターン。
Paragonにはまだ発表されていないキャラクターがたくさんいますので、お見せすることはできませんが、太陽の下でのあらゆる髪のバリエーションに対応する必要があります。



それでは、これらの機能についてご紹介します。
WetaのモデルがMarschnerのモデルに比べて改善した点の1つは、エネルギーを保存すする経度方向の散乱関数です。

我々は代わりにガウスを使います。d’Eonの関数に代わる、より安価で正確な関数があればいいですね。これは私が特に改善したいと思っている部分です。

ここで説明するのに適した2つの記号は、βとαです。
βは繊維の粗さに基づいています。
αはキューティクルのスケールの傾きに基づいています。


私たちは、Wetaのフォローアップ論文にある方位依存性の修正を使用しました。Rではこれは十分に安く、見た目も少し良くなっています。


Rパスの方位角はかなりシンプルです。
分布関数はCosHalfPhiだけです。
三角恒等式を使えば、逆三角関数を省略することができます。

減衰はフレネル関数です。




Wetaは、ガウス検出器を用いた数値積分により、ファイバー内部のパスを解決しました。これは、問題を非常にうまく一般化したものですが、我々の目的にはあまりにも高価です。

私たちの近似値を理解するために、この積分を理解することは重要ではありません。ただ、この問題を解くにはコストがかかりすぎることだけは知っておいてください。

代わりに、他のパスをシングルローブとして解くことにします。これは、Marschnerが最初に行った方法と同じです。

減衰項A()を理解しておくと便利です。これはフレネルと吸収の2つのサブ項に分かれています。


まず、ファイバーの中心からのオフセットであるhを解く必要があります。
Eta primeは修正屈折率です。

これを少し簡略化することができますが、まだ私が望むよりも重たいですね。


…だから、近似しました!

関数をグラフ化します。
このような関数の近似は、ちょっとしたブラックアートのようなものです。
何を削除したり置き換えたりするか、知的な推測をしてみましょう。試しにやってみて、うまくいくかどうか確認します。
このような結果になりました。
前から持っていたCosHalfPhiを使います。

hの符号を無視すると、これは我々の使用には関係ないことがわかましたが、我々はより安価な方程式を持っています。


さて、修正された屈折率について。
元の屈折率を、人間の髪の毛のIORである1.55に固定すると、これは非常に正確な近似値となります。

ボーナス:
この一般的な近似値を得るには、複数の方法があります。

私が見つけた方法は、cosθdの観点から、関数が1/xに非常によく似ていることに気づいたことです。線形項を追加すると、フィット感が非常に良くなりました。最大相対誤差が小さくなるまで、定数を微調整します。完了です。

別の方法として、cos theta dをxに置き換えた分子のテイラー級数があります。最初の2つの項は同じ形ですが、定数が少し異なります。ここで設定した定数の方がよりフィットします。


見た目の美しさにもこだわりました。

Cは髪の毛のBaseColorです。


これをγtに差し込み、簡略化します。hは常に2乗されているので、hの符号は我々には関係ないことがわかります。


sTTのための定式化は、ツールが少ししか改善されていないのに、私たちには高すぎました。

sについては、Pixarのソリューションを使用する代わりに、定数0.35を選択します。
ここから、逆三角法を避けるために cos phi でガウスを使ってロジスティックを近似します。

ボーナス:
ピクサーは、重要性サンプリングをクローズドフォームにするために、ガウス分布からロジスティック分布に変更しただけであることに注意してください。これは私たちにとっては役に立ちません。私がロジスティックから始めた理由は、Pixar の sTT の近似から始めたからです。一周回って面白いのですが、これが歴史です。




TRTのためには残酷にならざるを得ません。

Marschnerはこの問題を解決し、複数の解を持つhの根元を見つけることで、複数のローブを意味する光を放ちました。
Wetaは重い数値積分でこれを解決しました。
Pixarは非常に大きなルックアップテーブルで解決しました。

私は、単一の単純なローブを選択しました。
h、ファイバーセンターからのパスのオフセット、フレネルの目的のために私は定数を使用します。
吸収項では、hや修正屈折率の使用はすべてなくなり、定数に置き換えられます。
分布については、再びロジスティック関数から始めて、cos phiの観点からガウスで近似しました。





しかし、まだ何かが足りません。


特に明るい髪は、繊維1本あたりの吸収量が少ないので、注意が必要です。


この部分を物理ベースシェーディングのコースで紹介するのは間違っていると思いますが、むしろこれは呼びかけなのです。
これは、他の人がこのモデルを改良する最大のチャンスです。



その様子をご紹介します。他の項のように比較する参考資料がありません。

ボーナス:
三つ編みのハイライトは無視してください。実際には髪の毛の下のサーフェイスにあるものです。





前述したように、シェーディングモデルはシャドウに頼っています。シャドウを無効にすれば一目瞭然ですが、見た目には絶対に欠かせません。

シャドウマップは、ハード比較の代わりに指数関数的なフォールオフでPCFフィルタリングされています。
その結果、法線がなくてもボリューメトリックな外観になります。



“Analytic Tangent Irradiance Environment Maps for Anisotropic Surfaces “は、同様のコストで、より正確な結果が得られるはずです。正直なところ、私は開発時間が足りなかったため、これらのオプションのいずれも追求しませんでした。当時、私がテストしていたケースでは、この非常にシンプルなソリューションで十分でした。


これが私たちが行ったことです。

より広い範囲の光源の近似値として、ラフネスを大きくします。

シャドウマップによる影がないので、髪の毛のボリュームで遮られそうなパスに人工的に影をつける必要があります。これは主に、反対側からの光です。

ベントコーンのような計算された方向性のあるオクルージョンがあれば、どのパスがブロックされているかについての仮定を減らすことができます。








次のバージョンのUnrealでリリースされる予定の人間の頭部の写真をご紹介しますが、これは最近行ったすべてのキャラクターレンダリング作業の高品質な例です。




最後になりましたが、Epic、キャラクターアートチーム、Stephen HillとStephen McAuleyには、このスライドをレビューしていただきました。










コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です

このサイトはスパムを低減するために Akismet を使っています。コメントデータの処理方法の詳細はこちらをご覧ください