2023年12月24日日曜日

[Arnold][Maya]アセットルックデブの際のオススメのレンダー設定

今回はMayaのArnoldでアセットのルックデブをする際のオススメレンダー設定を紹介します。

企業さんで作業するときは大抵プロジェクト用のテンプレートを準備いただいてますが、個人作業や自主制作だとそういうものがないので学生さんなどの参考になればと思います。

最後にスクリプトも準備してますのでそちら叩いてもらうと一発で設定できます。


使用ソフトウェアのバージョン

Maya 2022.5

Arnold MtoA5.3.3.1


Commonタブの設定


File name prefix

ぼくはよく<Scene>/<Scene>を入れています。これをいれることでレンダーした際にシーン名のサブフォルダーが作られてその中にシーン名の連番ファイルが作られます。

Merge AOVs

チェックを入れます。これを入れることでexr一枚に複数のAOVを入れることができます。

Nukeでコンプするならこれがいいと思います。

tif,jpgなどで出すときは必要ないです。

File/Animation ext

name.#.extにしています。

こうすることでシーン名.フレーム番号.拡張子になります。

例)untitled.1001.exr

Frame Range

Startを1001、Endを1010にしています。ここは自由でいいと思います。

アセットルックデブの際はほとんと必要ないですが、1スタートだと前のフレームが必要なときマイナスになってしまうので101だったり1001だったりなことが多いです。

Image Size

WidthとHeightを1080にしています。

このサイズも自由です。キャラアセットの確認の際は16:9よりスクエアのほうが使うことが多いです。でもシルエット次第なところはあります。

1080にしてるのはNukeのNC(無料版)が1080まで対応してるからです。

Device aspect ratioは自動でかわらなければ1に変更します。


Arnold Rendererタブの設定

SamplingとAdaptiveSampling

Samplingは画像の通りです。Adaptiveを使うため低めに設定しています。

実際アセットによって必要な数値が違うので最初これくらいでスタートして調整していく形になります。

Ray Depth

DiffuseとSpecularの数値を上げています。

こちらの項目はまた詳しくは別記事に記載しますが、1だと低すぎると思います。

Auto-convert Textures to TX

オフにしています。

業務だとサーバーに投げるときにこれがオンだと不具合が生じます。

オートだと狙っていないタイミングで更新されてしまうこともあるので基本はTx Mangerを使って手動更新が無難です。

Tx更新の際は既存のキャッシュを削除してから作成する必要があります。

Txコンバートに関しては別記事で詳しく記載する予定です。


Systemタブの設定

Autodetect Threads

チェックを外し、-2入れています。

CPUのコア数のうち2コア分はレンダリングに使わないという設定になります。

CPU使用率100%にならないのでIPR回しながらシェーダーのパラメーター等いじっていても落ちにくく作業しやすいです。

マシンスペックによって-2のところは適した数値は違うと思います。探ってみてください。


AOVに関して

アセット毎に必要な要素を確認できるようにします。

これはまた複雑なので別記事で解説します。


今回紹介したレンダー設定のスクリプト

script Editerのmelタブで以下コピーして打ち込むと設定完了です。

rendererをArnoldにしておく必要はあります。

[Arnold][チュートリアル]サブスタンスペインターで作成したテクスチャをアーノルドでレンダリングする。

この記事ではサブスタンスペインターで作成したテクスチャをArnoldでレンダリングして再現みようと思います。

これくらい結果が近くなります!


使用するソフトとバージョン

この記事でのソフトのバージョン、環境は以下です。

Maya 2022.5

Arnold MtoA 5.3.4.1

Substance Painter 8.2.0

ColorSpaceはAcesCGでレンダリングします。


今回の題材

今回の題材はこちら!


上の画像はmayaのアーノルドでレンダリングしたものです。

金属に黄色い塗装がされて汚れているマテリアルです。

某黄色い車に変形するロボットを参考にテクスチャを作成しました。


サブスタンスのPBRShaderとArnoldのAi Standard Surfaceシェーダーは大きくは考え方が変わらないものになっています。

少ない項目をしっかり抑えることで簡単に再現できるようになっています。

それではやってみましょう。


Substance Painterのビューポート設定

Substance PainterでAcesのルックにする設定はこちらです。

Tone MappingのFunctionをACESに変更します。

Substance PainterからTextureをエクスポート

まずSubstance PainterからTextureをエクスポートします。

テクスチャの書き出し設定はデフォルトのArnold UDIM Legacy(Ai Standard)で描き出します。


書き出すテクスチャはBaseColor,Roughness,Metalness,Normalの4種類です。


Mayaの設定

次にMayaの設定をしていきましょう!

まずはColorManagementの設定をします。

この項目はmayaのバージョン、Arnoldのバージョンで結構表記が変わります。

Ai Standard Surfaceの設定

Ai Standard Surfaceを作成します。

テクスチャをインポートしてテクスチャノードを設定していきます。

UV Tiling Modeは今回はOffです。UDIMを使う場合UDIM(Mari)にします。
Color SpaceはBaseColorはsRGB、Roughness、Metalness、NormalはRawにします。

Ignore Color Space File Rulesにはチェックを入れておきます。


シェーダーのこの図のパラメーターにテクスチャを刺していきます。

シェーダーのパラメーターはいじりません。

BaseColorにBaseColorテクスチャ

MetalnessにMetalnessテクスチャ

Specular RoughnessにRoughnessテクスチャ

NomalCameraにAiNormalMapノードを刺してそのinputにNormalテクスチャ

を刺します。

レンダリングの設定

Ai Dome Lightを作成し、Substance PainterのHDRIを刺します。

SubstancePainterのHDRIの場所の確認はEnvironmentのタブで場所を確認したいHDRIの場所にカーソルを合わせ右クリック→Show in →Show in Explorerを押すとexplorerが開きます。


こちらからmayaに読み込みます。

このHDRIのColorspaceはscene-linear Rec 709/sRGBに設定します。

アーノルドのレンダリング設定は記事の最後に記載します。

レンダリングした結果がこちら


Substanceとの比較画像をもう一度

とくにシェーダーのパラメーターをいじらずにたったこれだけで再現可能です。

GI(Ray Depth)の設定が違ったりするので完全一致とはいきませんが細かい設定をせずにこれだけ再現できれば十分じゃないかと思います。

レンダーリングのサンプル設定はこちら↓

ライトのサンプルは2にしてます。


2023年12月22日金曜日

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

ArnoldのAi Standard SurfaceのMetalnessのパラメーターに関してまとめてみました。今回は初級編ということで挙動の説明になります。
シェーダーの挙動を把握して使いこなすことでよりよい質感のアセットになると思います。

Ai Standard SurfaceのMetalnessとは?


金属か非金属を定義するパラメーターです。
だと非金属
だと金属
になります。
Metalness 0

Metalness 1

どういう挙動をするの?

Metalnessを1にすると起きること
・BaseのColorがDiffuseではなくSpecularで出るようになります。書き出されるAOVもDiffuseがなくなりSpecularのみになります。

Metalness0の画像
DiffuseとSpecularが出ているのがわかります。

Metalness1の画像
Diffuseが無くなり、SpecularにシェーダーのBasecolorに入れていた赤色が反映されています。


・IORの入力がキャンセルされ金属の鏡面反射を再現するのに必要な数値に内部的に処理されていると考えられます。
IOR入力だと0または100のような大きな数値で同じような見た目になります。

Metalness1のレンダー画像とシェーダーパラメーター


IORを0、BaseのWreightを0にしてSpecularだけ出るようにしているレンダー画像とシェーダーパラメーター

上記二枚は微妙にレンダー結果は違いますがほとんど同じ状態の見た目と言えると思います。
とりあえずこの2点をおさえておきましょう。

Metalnessを扱う際の注意点

メタルネスの数値は基本的に0か1か、つまり金属か金属じゃないかを定義するために使います。
たとえば非金属に0.5とか小数点の数値を入れてスペキュラーの調整をするというのはPBR(物理的なレンダリング)的にはNGです。


画像はMetalnessの数値が左から0、0.5、1の画像です。
左はプラスチックのようで、右は金のようだが、真ん中のものはなんとも言えない質感です。

小数点を入力したときの問題点は、
① BaseのColorの色が多少Specular Colorに反映されてしまうこと
② 小数点の時にIORの数値が何として扱われてるのかが不明なこと

①は一部特殊な例をのぞいて多くの非金属のSpecular Colorは白(RGBすべて1の数値)が望ましいからです。

②はIORの数値は素材ごとに計測値があり、素材を再現するのに不明な数値を扱うのは物理的に正しくなく、環境によって望まない見え方をしてしまう可能性があるから問題になります。

小数点を入れるイレギュラーなものとして、サテン、ベルベットなどの光沢のある生地を簡易的に表現することに使われることがあります。こういう場合はプロジェクトの仕様的に問題なければ選択肢の一つに入れてもいいかもしれません。
↓このマテリアルはサテン生地ですが、Metalnessが少し入っています。

じゃあテクスチャを描くときに絶対0、1の二値化しないといけないのかというとそういうわけではありません。
うすいほこりが乗ってるときなどはその部分は0.3とかの数値になるかもしれません。
金属の上に何か乗っているというレイヤー的な考え方だと小数点を使ってマテリアルを混ぜることはありえると思います。
↑金属のマテリアルの上に埃のマテリアルを薄く要所要所で乗せた例

他レンダラーを使う際の注意事項

レンダラーによってシェーダーのMetalnessパラメーターの使い方は若干異なることがあります。例えばVray MtlとAi Standad Surfaceでは同じMetalnessでも金属を再現するために必要な他のアトリビュートの使い方が違います。
細かい仕様は各レンダラーのシェーダーページを参考にしてください。

まとめ

これにて初級編は終了です。
Metalnessは簡単に金属質感を再現できるとても便利なパラメーターです。
便利な故にいろいろ都合よく使われがちですが、しっかり仕様を把握して必要な表現に使えるといいと思います。
次は実践編?を更新予定です。