2024年5月4日土曜日

[Arnold][チュートリアル]SSS「デジタルエミリーにスキンシェーダーを設定してレンダーしてみる編」

(2024/10/05 カラーテクスチャ、HDRIのColor Spaceが間違えていたので修正、画像の差し替え) 


今回はデジタルエミリーのレンダー画像をレンダーするまでの諸々の設定を紹介します。

なるだけどうしてこうしてるのか説明しながら進めていこうと思います。

こんな感じのレンダー画像を作っていきます。

前回と違う点はHDRをフリーのものにしたのと、目のシェーダー設定の説明はこの記事では省きたかったためグレーマテリアルにしています。

スキャンモデルでシェーダーの勉強をするメリットは、形状情報がある程度物理的に再現されてる保証があるということです。

シェーダーでできること、形状(スカルプト等)でできることを切り分けて考えられるようになると思います。そうするとモデルを1から作成した際にあなたのモデルの何が足りてないのかが見えてくるようになると思いますので重要なプロセスだと考えます。

使用ソフトウェアとデータ

Maya 2022.5

Arnold MtoA5.3.3.1

Model Data digital emily 2

https://vgl.ict.usc.edu/Data/DigitalEmily2/

モデルはこちらからお借りしてます。感謝!

https://polyhaven.com/a/cyclorama_hard_light

HDRはこちらを利用してます!


モデルの設定

Emily_2_1.objをmayaに読み込みましょう。

このモデルはフルスケール(実寸)ですのでサイズはこのままで大丈夫です。

subdivisionの設定をしていきます。

設定内容はこちらの記事で紹介した通りです。

↑こんな感じです。

Iterationsの数値は高いほどレンダーが重くなります。

後程設定するDisplacementをアサインするものは4、アサインしないものは2でいいかもしれません。

ColorManagementの設定

カラースペースをACEScgにしてレンダリングしたいので設定を確認しましょう。

今回使用するMayaのバージョンだとデフォで設定されています。

↑こんな感じです。

View(Transform)はMayaが古いバージョンだとAcesRRTみたいな感じのものがこれと同じ設定になると思います。

ライトの設定

Ai Sky Dome Lightを作成します。

今回使うHDRIはこちらです。

HDRIをHypershadeにドラッグ&ドロップします。HDRIテクスチャのカラースペースはscene-linear Rec,709-sRGBです。

ColorにこのHDRIを刺します。

Samplesに上げておきます。

レンダー設定

一度レンダー設定をします。

過去記事で紹介したレンダー設定のスクリプトを走らせます。

必要に応じてレンダリングしながら設定は変えていきます。

AOVの設定はこの記事では省きます。

シェーダー設定

今回はEmily_head以外の設定を省きたいのでまずベースのグレーマテリアルを作成します。

Ai Standard Surfaceを作成して以下の設定にしています。

これを一度全部にアサインします。

次にEmily_head用のシェーダーを準備しましょう

もう一つAi Standard Surfaceを作成して顔のジオメトリにアサインします。

まずはカラーテクチャを入れていきましょう。

今回のDLしたデータだと眉毛や髪の毛の毛根のあるカラーテクスチャとそれを省かれてるカラーテクスチャがあるので、省かれてる方を使います。

Color_unpaintedのほうの00_diffuse_unlit_unpainted.exrを読み込んでSubsurface Colorに刺します。

このテクスチャはexrなのでscene-linear Rec,709-sRGBにColor Spaceを設定します。

tif,pngなどでカラーテクスチャを作成する場合は大抵sRGBに設定することになると思います。

作成したテクスチャをどのColor Spaceで使うと狙い通りになるのかはちゃんと把握しながらテクスチャを作成する必要があります。

他にDLデータにはScatterマップとSpecularマップも入っているのですが、今回は利用しません。

ScatterマップはSubsurfaceのWeightに差し込む想定と思われますが、ArnoldのAi Standard Surfaceの場合SSSはきれいな肌の場合はWeightは1にして、Radiusのほうで強弱をつけるほうが物理的に正しくなると考えられます。

肌の表面に汚れ(土とか、血とか)がついてる場合、濃いめの化粧をしてる場合にマスクを使ってSubsurfaceのWeightを調整するのが望ましいと考えられます。

次にSpecularマップですが、これはSpecularのWeightに刺す想定と思われます。

しかし、多くの物資は光が当たって反射されるエネルギー量は箇所によって変化は無いはずです。

肌の表面のザラザラ具合、ツルツル具合で質感(鏡面反射と影)が変わるので、これはDisplacement,Bumpによる形状ディテールと、SpecularのRoughnessによるマイクロディテールで再現されるべきです。

この場合付属してるSpecularマップを編集してRoughnessマップとしていい感じにするとよいと思います。

今回はそこまでしません。

RoughnessIORを数値で設定します。

今のところカラーテクスチャのみを使っています。

一度レンダリングしてみましょう。

SSSが強すぎるて肌がかなり透けてしまっているようですね。調整していきましょう。

ScaleRadiusを調整します。

ここではアーノルドユーザーガイドにのってるパラメーターを拝借します。参照元

このヒントを参考に設定します。

Scaleは1だと強すぎる印象だったので0.1にしたところ丁度良さそうでした。

質感調整の際にScaleRadiusは両方をいじらず、Scaleは固定して、Radiusに集中したほうがいいでしょう。

これでレンダーしてみます。

一気に人っぽくなりましたね。

SSSのサンプルが足りなさ過ぎて画面がジャギジャギしてますね。

レンダー設定を変更します。

SamplingSSSの数値を1から3に上げます。レンダーしてみましょう。

これでディテールが確認しやすくなりました。

肌の感じはよさそうですね。これでSSSの設定は完了です。

次にDisplacementマップを設定していきましょう。

Displacementは00_displacement.exr00_displacement_micro.exrの二枚が付属しています。

これは両方使います。

二枚のDisplacementマップをMayaのHypershade上で合成します。

一枚ずつどんな情報が入ってるのかを確認しましょう。

まずは00_displacement.exrを設定していきましょう

HyperShadeでDisplacement Shaderを作成しましょう。

マップも読み込んで、RチャンネルをDisplacementに差し込みます。

レンダーしてみましょう

細かい凹凸や眉頭あたりの隆起などが追加されてよりいい感じになってきました。

次にDisplacement_microも設定していきましょう。

このmicroにどういう情報が入っているのか確認します。

Displacementマップをmicroに差し替えてレンダーしてみます。

ちょっとけばけばしてるように見えますね。

Displacementの強度が強いようなので調整します。

どれくらい弱めればいいの?ってなりますが、自分で1から作ってるモデルならAOVsのNとSpecularを見ながら微調整をする形になります。

今回はデータ配布元でMicroは0.01倍すると書いてるのでそれに一度従ってみましょう。

HypershadeでAi Multiplyを作成し0.01を乗算します。

レンダーするとこんな感じです。

これでよさそうですね。

Microマップは名前の通りかなりかなり小さい凹凸を表現してるマップのようです。

そうしたらこの二枚のDisplacementマップをHyperShadeで合成して使いましょう。

Ai Addを作成し、2つのDisplacementマップを刺して合成し、OutColorのRチャンネルをDisplacementに刺してあげましょう。

これでレンダーするとこんな感じです。

これで完成です!お疲れ様でした!

もっとよくするには?

さて、今回は配布データをもとになるだけPBRに沿った形式で簡易的に質感を付けてみました。

もっとリアルにしたい場合にはどうすればいいでしょうか?

・ラフネスマップを作成し場所によるスペキュラの強さの違いを出す。例えば唇はもう少しプルっとしていてもいかもしれません。

・SSSRadiusのマップを作成、SSSの強度の場所による違いを出す。例えば瞼は周りはSSSが強く出てしまっているので、もう少し弱くしてあげたほうが自然に見えるかもしません。

他にも実際の人間の写真、自分の顔と見比べるといろいろ違和感が出てくるでしょう。それをひとつずつ向き合って解決していくことでリアルなCGに少しずつ近づいていけるのではないかと思います。

地道な積み重ねですので、SSSにたくさん触れて慣れていきましょう!

また次回!