PBR(フィジカルベースドレンダリング) 対応でArnoldシェーダーへのコネクションに関して

PBR(フィジカルベースドレンダリング) 対応でArnoldレンダラーを使う

ーPBR(フィジカルベースドレンダリング) 対応でArnoldレンダラーを使ってシェーダーへコネクションすることに関してちょっとメモ程度に記事にしてみようかと、基本アーノルドレンダラー搭載したDCCツールならある程度汎用性がある内容です。ー




PBR(フィジカルベースドレンダリング) 対応でArnold

□テクスチャーのコネクションに関して



いきなり話は変わりますが、SIGGRAPH Asia 2018期間中ですね!自分も4日から色々見て回っていますー。国際展示場の中が迷路みたいに感じてましてが3日目でやっと見取り図がわかりましたよ!



今回はPBRに関してお話しようかと思います。


PBRに関してはもう色々情報がでてるので今さらって感じもしますが、今回はMaya、Arnold 5、Substance Painterを使ってのコネクションに関して書いてみようかと思います。PBRに初見の方は以下を参考にしてください。




PBRに関しては物理的に正しいレンダリングができるっとありますが、主には、
Metalness … 誘電体[Dielectric]いわゆる非金属なのか、導体[Conductive]いわゆる金属なのか
Roughness …ハイライトなどの映り込みの粗さ加減

この辺のテクスチャー作成してPBR対応しているシェーダーにアサインすることで質感に関してはそれほど考えることなくある程度のクオリティを作れちゃいます。最近はSubstance Painterの導入も広まったのでSubstanceでテクスチャー作るのも当たり前になってきました。


Substance Painterでテクスチャーを作る際、質感を設定するとその質感のMetalness、Roughnessを自動で書き出してくれるので、Photoshopを使ってテクスチャー作るのがあほらしくなります。プロジェクトによってはPBR仕様のアセット作成の際にテクスチャー作成用でPhotoshopを使うのは禁止にしていることもあったりするご時世です。(でも画像加工も必要な時があるのでPhotoshop禁止といってもPBRの仕様が解っていれば使っていますが、、、w)


Maya、Arnold 5、Substance Painterを使ってどうシェーダーにコネクションするのかですが、簡単に以下の画像のようにするケースで書いてみようと思います。










テクスチャーコネクション

□サブスタンスペインター使って対応!



Substance Painterでは以下の感じでプリセット使って簡単に質感つけてます。





(ちょっとした小ネタですが、Substance PainterでUDIMを使う際、1UVブロックに対してギリギリの範囲でUVを配置してしまうと、UDIM用にUV配置してるのにSubstance Painter側で判断してくれなくなってしまうことがあります。これに今回つまずきました、、。)








maya側では以下の感じでテクスチャーをコネクションしてます



Substance Painterの書き出しで、Arnold 5用のプリセット使って書き出した後、Base color、Metalness、Roughness、Normal、Displacement(hight)をコネクションする際のベース的なつなげ方です。

注意点としてはMaya側のテクスチャーのColor Spaceの設定をする際、
——————————————————————-
Base colorは   sRGB  (exrのテクスチャーを使う際はRAW)
Metalness、Roughness、、Displacement(hight)は  RAW + alpha is luminanceチェックオン
Normalは RAW

——————————————————————-
に設定が必要です。

以下、公式説明




テクスチャーをまとめる

□ゲーム系のテクスチャーの考えを真似る




メタルネス、ラフネスがグレーのデータなら、1つにまとめていいのではっということを、ふと思いついたので試した結果を記載してみようかと!

ゲーム系などUE4やUnityを使ってPBR仕様のアセットを作る際、テクスチャーの読み込み容量を減らしてゲームの挙動を軽くするためRGBの3チャンネルに別々の要素をいれてテクスチャー枚数を減らす手法をよくゲーム系ではやってたりします。その手法をMayaなどのDCCツール側でも応用効くんじゃないかと思いためしてみました。

ゲーム系のまとめてるやり方としては、Metalness、Roughness、AO(ambientOcclusion)を各1チャンネルとしてRGBにまとめてるやり方が多いですが、今回はMetalness、Roughness、Displacement(hight)をRGBでまとめてみました。


まとめた内容は以下の感じのテクスチャーです。



カラフルですよねー。内訳は以下の内容です。

Metalness …Rチャンネル
Roughness …Gチャンネル
Displacement(hight) …Bチャンネル


テクスチャーは32bit OpenEXRで作成しています。(Displacement用でもありますが、、、。)

Substance Painterの書き出しの際以下のような感じで新規のプリセット作ってあげると書き出しが簡単になります。




テクスチャーまとめた版のmaya側では、以下の感じでテクスチャーをコネクションしてます。







テクスチャーをいつも通りのプリセットで書き出した時と、まとめた時の結果ですが、、、。


※いつも通り



※まとめた時




見た目的には一緒にできるので、今後ゲーム系のアセットに展開したい時はテクスチャーの流用もできる、、、かもしれません(枠組みは必要だと思いますが、、w)

メモリ消費は減ったのですが、レンダリング時間が1秒増えてるのは、、誤差程度に思ってます、、。違うタイムフレームの同じアングルでレンダリングした時は逆に1秒速かったので劇的に遅くなる速くなるの変化では無くメモリ消費が抑えられる対応かなと思ってます(あとゲーム系のアセット展開)



仕事的に映像系とゲーム系のお仕事をやっているため、今後その境は無くなっていくんだろうとは思いますが、やり方が違う部分も多々あり、データをそのまま流用できないケースもあったりします。今後の課題はそういう媒体が違う環境でもルックの共有はできるんじゃないかなっという考えをベースに研究していきたいと思ってます。


まずはGPUをアマゾンサイバーマンデーで買い占めることから始めてみようかと、、、。
今回はここまで!








お仕事のご相談、その他お問い合わせはこちらからお願いします!

—————————————–

e-mail:

yut.rickeytone@gmail.com

—————————————–

コメントを残す

メールアドレスが公開されることはありません。

CAPTCHA


%d人のブロガーが「いいね」をつけました。