2024年3月15日金曜日

[Arnold]SSS初級編

 CGで生き物の肌などを表現するときによく使われるSubsurface Scattering(以後SSSと記載)について書いていきます。

このアトリビュートをうまく扱えるとCGアセットの表現の幅が広がります。

今回のサンプルです。下の方にSSSを使ってないレンダー画像との比較も載せてます。

SSSとは?

光が半透明な物体の表面を透過し、内部で散乱した後に表面から出て行くメカニズムのこと。表面下散乱という訳語で呼ばれる事もある。by Wikipedia

手~のひらを太陽に~♪

上の画像の指と指の隙間など赤くなってるように見えると思います。これは肌の表面が赤いわけではないです。

肌の表面は半透明なので光が侵入し、内部で光が拡散して出てきた結果になります。

多くの場合内部組織の色に近い色が出ると思います。(人間の場合は体内組織の色から赤色)

これをCGで再現するのがSubsurface Scatteringです。

生き物の肌以外にも植物、大理石、ミルクなどの液体、光を通すプラスチックなどに使われます。

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

Maya 2022.5

Arnold MtoA5.3.3.1

Model Data digital emily 2

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

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

SSSの項目の紹介



Ai Standard SurfaceのSubsurface項目を見ていきましょう!


Weight

SSSをどれくらい効かせるかのパラメーターです。基本0か1かになると思います。肌に汚れがついてる場合などマスクで数値を下げる等あると思いますが、数値入力で0.5みたいな小数値を入れると現実の質感とは違ったものになってしまうので非推奨です。

Subsurface Color

表面の色を決める項目です。カラーテクスチャとよく呼ばれる、BaseのBase Colorを刺すテクスチャと同じものを刺すことが多いです。

テクスチャの作り方も無機物と同じくAlbedoと呼ばれる、影要素の入っていないテクスチャの作り方で問題ないです。

Radius

SSSの光の散乱の強度を調整する項目です。色を入れる項目ですが、RGBチャンネルの数値を見て動作しているのでテクスチャのカラースペースはsRGBではなくRawのほうがよいかと考えます。しかし見た目で調整する項目ではあるので厳格にRawである必要があるわけではないとも思います。

Scale

上記のRadiusに掛け算してSSSの強さの調整をできます。

アセット制作の際には1、または0.1等仕様のシーンスケールに合わせて固定値にしてしまった方がいいと思っています。

質感調整の際にScaleとRadiusを両方いじると沼るので注意です。

Type

現状3種類準備されています。

デフォはRandomwalkです。だいたいの場合これでいいかなと思います。


上の画像は左からDiffusion,Randomwalk,Randomwalk.v2でのレンダリング比較です。

横で並べるとrandomwalkよりrandomwalk.v2のほうが明るく光が通っているようですが、レンダー時間は二倍くらいかかっているのがわかります。

Diffusionは淵の部分が少し色が暗く混ざって濁っているように見えてしまいますね。

Randomwalkの画像だと下の板は緑色が混ざって濁っていますが、こういうのはプロダクションだとRadius Colorを調整して濁らないようにします。

Anistoropy

この項目はRandomwalkのみで動作するようです。生き物の肌を再現する場合は使わない方が自然になると思います。

ここでは説明を省きます。

業務でもかなり特殊な場合(演出的に表現を調整したい場合)くらいしか使ったことはありません。

詳しく知りたい方はArnold User Guideを見てみてください。

SSSを使って人をレンダリングしてみる

SSSを人間モデルに使ってみるとどうなるでしょうか。

比較画像を準備してみました。

左がSSSをつけていないもの、Diffuseでレンダリングしています。

右がSSSを設定しているものです。

このスキャンモデルは少し肌の赤身が書かれているテクスチャではあるのですが、耳や鼻の影の部分を見るとSSSの方が柔らかく光が拡散してるように見えると思います。


以上がSSSの初級編になります。

上の画像をレンダーするためのSSS、Displacementの設定方法は別記事で紹介しています。

SSSもかなり調整が難しいアトリビュートです。

うまく使いこなしてアセットをよりいいものにしていけるよう勉強していきましょう!

また次回!

2024年3月1日金曜日

[Arnold]Displacement初級編

 Displacementは最近かなり手軽に使えるものになってきました。

CGでディテールのあるリアルなものを表現するには必須な項目とも言えるのではないかと思います。

このページではDisplacementとは何かのお話と、Maya,Arnoldでの使い方を紹介していきます。

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

Maya 2022.5

Arnold MtoA5.3.3.1

Model Data digital emily 2

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

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

Displacementとは

Displacementとはオブジェクトにテクスチャを張ることにより、ビューポート上のポリゴンよりもかなり高い解像度でディテルを再現することができるCGのシェーダー表現です。

Normal Map、Bump Mapはライトの影響をシェーディングに反映させるだけですが、Displacementは形状変化までできます。

上の画像は左がNormal Map、右がDisplacement Mapをアサインしている球体です。

Displacementのほうがシルエットが崩れてるのがわかるかと思います。

Displacement Mapの種類

Displacementはグレースケール(一色)のもの、Vector Dispalacementと呼ばれる3色のものの二種類があります。

この記事では一旦ベクターは置いておきます。別記事で紹介します。

グレースケールのDisplacementにも大まかに二種類あります。

それは中間値が0か0.5かというものです。

Displacementは中間値を基準にそれより明るければふくらみ、それより暗ければへこみます。

上の岩っぽいレンダー画像で使ったDisplacement画像がこちらです。

これは中間値(mid)0.5のものになります。

ディーテルを追加するときによく使われるBump Mapと同じ仕様です。

上の画像は中間値0のものです。

この画像はDigital Emilyのモデルに付属してるDisplacementマップです(ここに張るように1kに落としてjpegですが見た目はこんな感じです。)

exrの32bit Floatという形式であればマイナス値や1以上の値も格納できますのでこういった見た目の画像になります。

マイナス値の確認は通常のビューワーではできないので少しわかりにくいですが、黒く見える部分にも情報が入っています。

Nukeで確認するとこんな感じです。

マイナス値が入っていることがわかります。

次の項で中間値の設定も含めた使い方を紹介します。

Maya,Arnoldでの使い方

それではMaya,Arnoldでの使い方を見ていきましょう。

今回は↑で紹介してるDigital Emilyさんを使わせていただきます。

Displacementを入れてないとこんな感じのレンダリングになります。

それでは設定しましょう。

①Displacement Shaderを作成

tabから検索してもいいですし、上記の画像の場所から呼び出すこともできます。

②Shaderにつなぐ

ジオメトリにアサインしてるシェーダーのSG(Shading Engine)のDisplacement Shaderの差し込み口に刺します。

Displacement Shaderを作った際にできたSGは捨てて大丈夫です。

③Displacement MapのMidの確認

この画像は上記の通り中間値0のDisplacementです。

Displacementのシェーダーの中間値の設定は↓の画像の通りです。

Scalar Zero Valueが中間値になります。今回は0ですね。

デフォルトでチェックが入っているAuto Bumpはこのまま入れておいて大丈夫です。

Auto Bumpの細かい説明はまた別記事で紹介します。

④Displacement MapをDisplacement Shaderにつなぐ


Displacement MapをHyperShadeに読み込んでOut Color RをDisplacement ShaderのDisplacementに刺します。

Out Color Rをつなぐ方法のほかにAlpha is luminaceにチェックを入れてOut Alphaでつなぐ方法もあります。

こだわりが無いのならOut Color Rでつなぐ方が見た目もシンプルですし、エラー確認もしやすいのでオススメです。

Displacement MapのテクスチャのColor Spaceの設定はRawです。

Ignore Color Space File Rulesはチェックを入れておくと事故が減ります。

⑤Geometry(モデル)のSmooth設定


Displacementをかけるgeometry(モデル)にも必要な設定をします。

Arnoldタブ→Subdivisionタブで設定していきます。

パラメーターは↓で紹介します。

---------------------------------------------

Type catclarkにします。

Iterations 今回は4にしています。数字を大きくするほどDisplacementの精度は上がりますが重くなります。コストとクオリティのバランスを見ながら設定します。

UV Smoothing 今回はpin_cornersにしました。スカルプトなど自分で作成したDisplacement Mapをアサインする際は作成方法に合わせた設定が必要です。

⑥レンダリングする

ここまで設定してレンダリングするとこうなります。

ディテールが入ってるのがわかりますね!

Displacementを使いこなすことでかなり表現の幅が広がるんじゃないかと思います。

SSSとの組み合わせで考えることや、今回細かく触れなかった設定などまだまだDisplacementは紹介すべき項目があります。

乞うご期待!