2024年10月11日金曜日

[Arnold]シェーダーパラメーター・Specular初級編

ArnoldのAi Standard SurfaceのSpecular(鏡面反射)の項目に関してまとめてみました。今回は初級編ということでパラメーターの紹介をしていこうと思います。

Ai Standard SurfaceのSpecularの項目

6項目ありますが極端な話


Roughness以外一旦放置して大丈夫です。
もちろん作成する質感によって調整することはありますが、必要になったら調整する
という考え方がいいと思います。
なんとなくでいじると物理法則から簡単に外れてしまうので根拠をもって調整しましょう。

それでは上から見ていきましょう。

Weight


鏡面反射の強度の調整をできます。
これは基本的に1のままにします。
物質の表面が光を反射するとき、その強度は場所によって変わらず一定であり、鏡面反射のハイライトの強弱はWeightではなく、Roughnessによる表面の細かい凸凹で再現されるべきです。
物理的に正しくない形状の補完(モデリングの省略をした場合)使うこともあります。
例えば人間キャラの鼻や喉の奥がふさがってるのが鏡面反射でばれてしまうのを防ぐために奥の部分はマップを書いて0にすることもあります。


Color


これは特殊な物質を表現するとき以外は白です。
鏡面反射に色がつくものは金属、一部の構造色をもつとされる物質、サテン、ベルベットのような布地等です。
多くのものはライトの光の色をそのままに返しますので白が物理的に正しいです。


Roughnes


物質の表面のザラザラ、ツルツル感を表現します。
これはBumpよりも更に細かい凸凹になります。
数値を上げるほど表面がザラザラになり、鏡面反射が拡散され、弱くなるように見えます。
上記のWeightの項目で書いた通り、鏡面反射の見た目的な強弱はこのパラメーターで調整するべきです。
Roughnessは物質ごとの決まった値は無く、表面処理を再現するものです。
PBR環境においてアーティストが唯一自由に扱える項目と言えるかもしれません。
腕の見せ所です!


IOR


Index of Refractionの略です。日本語で屈折率と呼ばれます。
物質の測定値がだいたいのもので出ているので、再現したい物質の測定値を調べて入れてあげるとよりリアルになります。
しかし、その情報が間違えている場合変な見ためになってしまうこともあるので慎重になるべきです。
プラスチック、塗装、陶器、ゴム等の絶縁体の際は数値で悩むくらいであれば既定値の1.5のままにしてしまうのが無難でしょう。
このIORはTransmision(屈折)にも影響を与えます。
透過物を作成の際は数値でかなり見ためが変わるので、これも気を付けて数値を設定する必要があります。

Anistoropy


異方性反射を再現するのに使います。
金属のブラシ表現、サテン等の布の表現などで使ったりします。

こんな金属の平面を

こんな感じの金属の鍋の底面みたいにすることができます。

詳しい使い方は他の記事で紹介します。


Rotation


異方性反射の方向を制御します。
異方性反射はUVベースで方向がきまり、それを回転させることができます。
なので、同じ方向に延びてほしいもののUVは同じ方向にそろえる必要があります。
ちなみに上の例の画像はこのRotationにRampテクスチャが入っています。

まとめ


これにて初級編は終了です。
Specularはどんなアセットでも調整が必要なパラメーターの一つだと思います。
しっかりコントロールして、良いSpecularの出るアセットが制作できるといいですね。
中級編に続きます!

2024年9月20日金曜日

[Arnold]複数のDisplacementMapをMayaで合成する方法

違うソフトで作成した複数種類のDsiplacementを合成したい!ということがよくあると思います。

今回はそれを簡単に紹介します!


Ai Addを使う

この二枚を合成します。(このプレビューテクスチャは視認性を上げています。)

それぞれレンダリングするとこんな感じです。

    

この二枚の画像のDisplacementを合成して一緒に反映させましょう。

aiAddノードを作成して



このようにノードをつなぎます。

このDisplacementは中間値が0のものですので、シンプルにadd(足し算)で大丈夫です。

これでレンダーすると

こうなります!

簡単ですね!

ai addじゃなくても2つのinputを足し算するノードがあれば同じ結果になるはずです。

Displacementの中間値の確認

各ソフトでDisplacementを作成する際にそのマップの基準値を気にする必要があります。

ZbrushでDisplacementを書き出す際にはこちらのパラメーターを設定します。


読み込んだマップの中間値をアーノルドに指定してあげるのはここです。


Displacementは変形する際に基準値から高い数値は膨らみ、低い数値はへこみます。

もし中間値が0.5と0のDisplacementマップがあった場合はaddで合成して、アーノルドの中間値の設定を0.5にしてあげれば大丈夫です。

うまく使いこなして表現力を上げていけるといいですね!

それではまた次回!

2024年8月27日火曜日

[Arnold]Ai Standard Surfaceで使うテクスチャのColor Space,bit数早見表

こんなのあったら便利かなという早見表です!

ArnoldのAi Standard Surfaceの各項目にどのColorSpace、Bit数のテクスチャを刺したらいいかの早見表です。

異論は認めます!

※この表はあくまで一例です。絶対正しいというものでもなく、自分の経験、知識をもとに作成しています。個人製作ならこんな感じで使っています。

※業務ではプロジェクトの仕様に従ってください。

この記事を書く際に参考にしてるソフトのバージョン

Maya 2024.2

Arnold MtoA5.4.1

この早見表が想定している仕様

この早見表は以下の仕様を想定して作成しています。

・テクスチャ制作環境のカラースペースはsRGBを想定しています。

・テクスチャのフォーマットはtif,またはpngの8か16bit、Displacementのみexrの32bitを想定しています。tifかpngかはこの早見表の内容的には問題ありませんのでお好みで大丈夫です。

・bit数は最低限確保すべきbit数を記入しています。データが重くてもよければ全部32bitでもいいと思います。ただし、カラー系のテクスチャはColor Spaceが変わる場合があるので注意が必要です。

・Color Spaceはfile nodeのColor Spaceを示しています。


Base

Weight---------------------Raw,8bit

Color-----------------------sRGB,8bit

Diffuse Roughness--------Raw,8bit

Metalness------------------Raw,8bit


Specular

Weight---------------------Raw,8bit

Color-----------------------sRGB,8bit

Roughness-----------------Raw,8bit

IOR-------------------------Texture非推奨

Anistoropy-----------------Raw,8bit

Rotation--------------------Raw,8bit


Transmission

Weight---------------------Raw,8bit

Color-----------------------sRGB,8bit

Depth----------------------Texture非推奨

Scatter---------------------sRGB,8bit

Scatter Anistoroy----------Raw,8bit

Dispression Abbe----------Texture非推奨

Extra Roughness----------Raw,8bit


Subsurface

Weight---------------------Raw,8bit

Subsurface Color----------sRGB,8bit

Radius---------------------Raw,8bit 要確認

Scale-----------------------Texture非推奨

Anistoropy-----------------Raw,8bit


Coat

Weight---------------------Raw,8bit

Color-----------------------sRGB,8bit

IOR-------------------------Texture非推奨

Anistoropy-----------------Raw,8bit

Rotation--------------------Raw,8bit

Normal---------------------Raw,16bit

Coat Affect Color----------Raw,8bit

Coat Affect Roughness----Raw,8bit


Sheen

Weight---------------------Raw,8bit

Color-----------------------sRGB,8bit

Roughness-----------------Raw,8bit


Emission

Weight---------------------Raw,8bit

Color-----------------------sRGB,8bit


ThinFilm

Thickness------------------Texture非推奨

IOR-------------------------Texture非推奨


Geometry

Opacity---------------------Raw,8bit

Bump Mapping-------------Raw,8bit

Anistoropy Tangent--------Texture非推奨


Displacement Shader

Displacement---------------Raw,32bit

Vector Displacement-------Raw,32bit

Scale------------------------Texture非推奨


以上です。これ以下の項目はテクスチャを使うことがかなりイレギュラーかと思いますので省きます。

細かい解説はそれぞれのアトリビュートの紹介ページでしていきます。

以下リンク集(随時足していきます)

[Arnold]SSS初級編


2024年8月2日金曜日

[Arnold]SSS Set Name

ArnoldでSSSを扱う際にはシェーダーだけでなく、ジオメオトリのアトリビュートも設定する必要があります。

今回はそのいくつかあるアトリビュートの中のひとつ、SSS Set Nameをご紹介します。

(↑の画像はサムネ用です)

SSS Set Nameとは?

SSSのシェーダーを設定している複数のジオメトリが交差するときに交差点が黒くなってしまうことがあります。

これを避けるのにSSS Set Nameを使います。

画像引用元:SSS Set Name - Arnold User Guide

こちらは公式ドキュメントの画像です。

左の画像は球体と棒の交差点が黒くなってしまっているのがわかると思います。

右が設定されている画像で、黒ズミが取れていることがわかります。

多くの場合、左で出ている黒ズミはエラーに見えたり、暗くなって汚く見えたりして取り除きたくなると思います。

その場合にSSS Set Nameを設定してあげます。

SSS Set Nameの設定方法 

アトリビュートの場所は↑の画像の通りです。

ジオメトリのShapeのほうにあります。

それぞれのジオメトリのSSS Set Nameの箇所に同じ名前を入力するだけで機能します。

名前はなんでも大丈夫です。(例 skinとか、アセット名とか)

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

キャラのモデルでレンダリングしてみるとどうなるでしょうか?

人のスキャンモデルの口内モデルをレンダリングしてみました。

ちょっとわかりにくいですが、左の画像は歯と歯茎の交差点を中心にオクルージョンのような影が少し入っているような感じで、右はそれが解消されています。

意図したレンダリング結果にするためには必要な項目になりますので覚えておいてください。

それではまた次回!



2024年7月10日水曜日

[PBR]pbrマテリアルのSpecularRoughness初級編

Arnoldに限らず近年(2024年現在)のpbrマテリアルではSpecular(鏡面反射)のコントロールパラメーターとしてRoughnessが実装されてることが多いです。

今回はそのRoughnessの使い方について説明します。

この記事で紹介するRoughnessはSpecular Roughness、つまりSpecularのコントロールをするパラメーターの説明になります。

DiffuseやTransmissionにもRoughness(粗さ)をコントロールするパラメーターがありますがそれはまた別の機会に。

Specular Roghnessとは

Roughnessは名前の通り表面の粗さを表現するためのパラメーターです。

身近なものでも表面の荒さが違うものは多いですよね。

上の写真はこのブログを見てくださってる多くの方にはなじみ深いであろうペンタブのペンです。

これは室内で撮った写真です。

グリップの部分は電灯の光が柔らかく拡散し、上部のほうがはっきりとハイライトが映り込んでるように見えますね。

この表面処理の違いだったり、凹凸をほぼ感じない細かい傷などはRoughnessで再現するといいと思います。

それではRoughnessの動きを見てみましょう。

パラメーターによる見ための変化

上の画像は左がRoughness0、右が1で徐々に数値が変わっていくように設定しています。

左の方がツルツルで、右に行くほどザラザラになって鏡面反射がボケていくのがわかると思います。

これはもちろん金属でも同じように動きます。

上の画像はRoughnessの設定は緑のシェーダーボールと同じでMetalnessとBase Colorを変更し金属(クロームのようなもの)に設定したものです。

どちらもSpecularの具合が変わっていくのがわかるかと思います。

Bump,Normalとの使い分け

表面のザラザラ感と言われるとBump,Normalと何が違うの?って思う方もいるかと思います。

使い分けの例を見てみましょう。

上の画像は引っ掻き傷をそれぞれNormalとRoughnessで付けてみたものです。

一枚目がNormal、二枚目がRoughnessです。

傷の深さが違うのがわかると思います。

使い分けは例えば指先でそれに触った時に凸凹を感じるならBumpかNormal、感じないけど周りと質感が違う場所はRoughnessといった感じでするといいと思います。

Roughnessの設定を楽しもう!

PBR(物理ベースのレンダリング)において一番アーティストの自由度があるのがRoughnessと言われています。

腕の見せ所ですね!

Roughnessマップで鏡面反射をしっかりコントロールして質感設定を楽しみましょう!!

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

中級編ではSpecularのコントロールをなぜRoughnessでするべきなのか、Roughnessが実際どのようにモデルの表面に作用してるのか解説できればと思っています。

おまけ:Glossinessについて

SpecularをRoughnessではなくGlossinessでコントロールするマテリアルもあります。

Glossinessとは表面のツルツル具合を表すパラメーターです。

なので、Roughnessを反転(invert)した数値で同じような結果を得られます。

Substnace PainterではRoughnessチャンネルで作業してもExportの設定をしてあげることでGlossinessに自動変換してくれます。

最近あまり聞きませんが、Glossinessと出会ってもビビらずに対応していきましょう!






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にたくさん触れて慣れていきましょう!

また次回!

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は紹介すべき項目があります。

乞うご期待!