2012/07/27

マテリアルをぶっちぶち切ってみる

レンダーレイヤーは便利なものです(【20171120追記】ちょっと前に“レンダーセットアップ”に交代しましたが。コンポ作業を前提にすれば不可欠といってもいいでしょう。
アセットのリファレンス。集団制作に限らず効率的な制作に必須ですね。

そしてマテリアルの外部参照。大量カットを調整するのに一役買ってくれます。

これらのステキ機能たちはしかし、ときとして
というかしょっちゅう、
ユーザーに牙を向きます。

壊れるのです。
特に、立て込んできた制作末期に!
シーンを開いたらマテリアルがブチ切れて、モデルがホネホネロックに!!

まぁ、準備段階の試行錯誤であれこれして
さらに立て込んできた修正変更対応であれこれして
複雑怪奇化したシーン構造に音を上げるのも気持ちはわかります。
分かりますけど困ります。
そこはなんとか堪えていただきたいです。

でも壊れてしまうものは仕方ない

ならばということで、いっそ、
何をどうやったら壊れるのか探ってみようではありませんか。

マテリアルを壊しにいくぜ!!ってことでいろいろやってみました。


 

…が、事態は思わぬ方向に…??



 

今回は以下の様な状態で実験を始めました。ちなみにMaya2012です。

まずマテリアル。
ブリン先生にチェッカーを貼ったものを作成し、.maで保存しました。
これを外部参照用のマテリアルとします。

3つのノードからなるシェーディングネットワーク


そしてテスト用のシーン(A)

さっきのブリン先生をリファレンスし、polySphereを3つ作って下記のようにします


  • リファレンスしてきたブリン
  • このシーンで作ったブリン(内容は同様)
  • そのまんま

このセットを複製し、レンダーレイヤーに入れておきます(振り返るとこの複製は不要な手順だった気がしますけどw(゚Д゚)ノ)


そしてそしてテスト用のシーン(B)
こちらが主戦場となります。
内容は、シーン(A)と同じ構成にした上でさらに、シーン(A)をリファレンス。
これによって構成をまとめますと、

マテリアル=4種
A)このシーンで作ったマテリアル
B)このシーンで、リファレンスしてきたマテリアル
C)リファレンスしてきたシーンで作っていたマテリアル
D)リファレンスしてきたシーンで、リファレンスしていたマテリアル

レンダーレイヤー=4種

a)このシーンのマスターレンダーレイヤー
b)このシーンで作ったレンダーレイヤー
c)リファレンスしてきたシーンのマスターレンダーレイヤー
d)リファレンスしてきたシーンで
作ってたレンダーレイヤー

オブジェクト=12種(!?
01)     そのまま
02)     Aがアサインされたもの
03)     Bがアサインされたもの
04)     1)をレンダーレイヤーにいれたもの
05)     2)をレンダーレイヤーにいれたもの
06)     3)をレンダーレイヤーにいれたもの
07) ~ 12) リファレンスしてきたシーンの、01)~06)に相当するもの

ほんとにこの対象の作り方であっていたのか甚だ疑問であるという声が聞こえます(笑




さて、このような具合で、レンダーレイヤーのリファレンスとか、リファレンスしたマテリアルとか、非常に香ばしいと思います。
実験開始です。

まずマテリアルからテストしていってみます。
それぞれのマテリアルごとに、レンダーレイヤーオーバーライドを掛けてみました。


レンダーレイヤーごとマテリアルをオーバライドするというのは、おもにコンポジットに使うマスク素材が欲しいときによく使うと思います。

結果はこんな感じ↓


マテリアルA

マテリアルB

マテリアルC

マテリアルD


結果、

まじめに見比べた方すいません、有意な差は全く無いです……
普段だったらもっとブチブチ切れるくせに チェッ(・`ε・´○)
ついでに、保存して開いたらこわれてる〜♪なんてのを期待しましたが、
それでも何もおきませんでした。
masterLayerを選択した状態じゃないとだめ、というのも無視してみましたが、
やっぱり壊れてくれませんでした!!

このテスト自体は無意味でしたが、
これだけシンプルな条件だったら再現しないことはわかりました。

***

つぎに、
シェーディンググループにアサインされているマテリアルをオーバーライドで切り替えさせてみます。

さきほどのテストで敵が思ったより強度があったので、
一番不安定そうな レンダーレイヤーd で行ないます。

こんな感じ↓


結論から申しますと、
またしても特に何もおきませんでした。(・Д・)ペッ


***

気を取り直して…
さっきはレンダーレイヤーに対してオーバーライドしましたが、
今度はオブジェクトを選択してオーバーライドしてやります。
12個のオブジェクトすべてを選択しオーバーライドするたびにレンダリング、これをマテリアル数=4つ分確認しました。

めんどくさいので早送り的な画像でお送りします


だめでした。もぉ、ぜんっぜん大丈夫です
異常と言えば、ビューポートにてテクスチャ表示が有効にならないケースがありましたが
それくらいです(爆

レンダーレイヤー切り替えて戻ってきたらオーバーライド切れてるかも〜♪とかも期待してレイヤーエディタを激しくクリックしましたが、不毛でした。


ええいままよ、とばかりダメオシにこの実験用のシーンをさらにリファレンス、3重リファレンス状態にしてみましたが、これがまた大丈夫でして(汗
異常と言えばビューポートにてテクスチャ表示が(ry


=====


どうしてでしょう。日頃の行いが良すぎて天からのご加護をさんさん浴びているのでしょうか。まったく罪作りな善良さです。〔†〕(゚-゚*)

戯言はともかく実戦時の印象とはまったく次元の違う安定感です。
やはりしつらえられた、蒸留された環境での実験ではアレなんでしょうか、複雑さが足りないんでしょうか。

こんなにまともなはずないのに(失礼


もっと簡単に壊れるところがみれる予定だったので逆に周到な準備をしておらず、
この辺でめんどうくさく状況が煩雑になってきました。



と、ここで思いつき。
最初に用意した外部参照用のマテリアルに目を向けてみます。
blinnシェーダを作成してテクスチャを貼って書き出したものでしたが、
これだとシェーディンググループノードが作成されていません。
せっかくなので、
シェーディンググループノードがシェーディングネットワークに込みの状態で、
外部参照マテリアル.maを作り直してみました。



そして改めて実験用シーンを開いてみます。


ばばーん。

どうですこの有様!

バッチリブッチリ切れました


当然です!
……いや、当然なのかな?ほんとに?


今回のこの結果だと、リファレンスしてきたマテリアルの、おおもとのシェーディンググループノードの有無が決め手になっているかのような気配です。
しかし、シェーディンググループノードの作成そのものについてはスタート時点で視野に入れてませんでした。
このあたりに焦点を絞り直して、どのタイミングで決定的に壊れたのか、レンダーレイヤーやリファレンスとの関係は?などについて追加調査が必要です。

つづく……??


【備考:20171120】

Mayaがシーンを読み込む時のコマンド実行順によってマテリアルアサインが再現されない云々というのを小耳に挟んだので、
こういうテストをするときは都度シーンを開き直したりMayaを落としたりして「シーン再構築作業を明示的に行う」のが必要なのかなと思いました。

=====


作業を進めながら、状況とともに頭がこんがらがっていった感じがしますが、
ここにまとめていくうちに、今度は頭がまとまってきた感じがします。
まー検証記事としていかに不備があるか見えてきますね!
(たとえば、レンダーレイヤーをコピーすると?とかも必要だった気がします。
scriptEditorのログももっと見ておくべきでした)

まとめるって大事ですね。

この記事をお読みになった方で「現場ではこんなん常識だぜ」「実験の要領悪いぜ」「ツメが甘いぜこうやるんだぜ」etc... と思われた方は、
ぜひその知識経験をブログなりにまとめて流布していただけたらと思います(笑

ちなみにRenderLayer Overrideネタでは、おなじみDFTALK様にてより高性能な記事が掲載されております。
 前回takkunさんと同内容になったのは偶然と言い切れない部分も大ですが(w
今回は見事に偶然似た話題なので、とても勉強させていただいてます。いつもお世話になります。
…なんだろ、レンダーレイヤー関連を調べるの流行ってるのかな?夏だからかな?(・∀・



■参考リンク

ファイル リファレンス @mayaオンラインヘルプ

レンダーレイヤーエディタ @mayaオンラインヘルプ

役に立たないどうでもいい話-RenderLayer Overrideの話 @Digital Frontier | DF TALK

renderLayer の問題などなど @『豆のCG回顧録』


0 件のコメント:

コメントを投稿