それでは前回に引き続き、『writeToColorBuffer』についてやっていきたいと思います。
今回は、『writeToColorBuffer』のいろんなコネクション例をいくつか見ていきたいと思います。シーンは前回と一緒です。
pass出力
一つ目の例ではmia_material_x_passesからrawやらlevelやらいろいろ+αPass出してみます。
mia_materialからこれだけのPassを書き出してみました。
・AO_pass
・Dif_level
・Dif_raw
・Indirect_Pass
・Ref_level_Poas
・Ref_raw_pass
・Spe_level_pass
・Spe_raw_pass
・OtherColor_Pass
“writeToColorBuffer”がすべて並列な組み方で、よく見かけるタイプだと思います。
ネットワークの端に”writeToColorBuffer”があるので、Evaluation Modeはすべて[Always]です。
この場合”Evaluation Pass Through”に何もつながって無くても、mia_materialから出力した要素がPassに書き出されています。
出力したPassはこんだけ↓。これらを駆使してコンポジットしていくわけですね。
この組み方の場合、”writeToColorBuffer”ノードの数(出力するPassの数)を増やしていけばその分、レンダリング時間が増えます。
以前作ったビビの場合、Beautyのみならレンダリング時間は1分くらいだけど、沢山Pass出したら4分くらいに増えてしまったしw
ですが、シンプルでわかりやすいコネクションであることは間違いありません。
よく使います。
また並列で組んだ場合、どの順番でPass出力されるかは指定することができないので、”WriteOperation”アトリビュートを変更する場合は注意が必要です。(普通は変えませんね)
直列接続
二つ目の例は、”writeToColorBuffer”を直列にどんどん繋げていく方法です。
DaisyChainと呼ぶとか呼ばないとか。
下のは、並列時と同じPassを直列に組み直したものです。
この組み方の利点は、並列時と比べてレンダリングが早い事と、Passへの書き込み順を制御できる事でしょうか。
writeToColorBufferの設定は、Evaluation Modeを”Pass Through Only”に。
EvaluationPassThroughは、前の「writeToColorBuffer」ノードのoutEvaluationPassThroughをコネクトする。これを繰り返して、どんどんwriteToColorBufferを繋げていきます。
Inputのカラーには出力したいものを繋いでおく。
ここではmia_materialからSpecularだのReflectionだのいろいろ繋いでます。
しかし、レンダリングしてみると・・・あれ? 絵が並列の時と違うぞ・・・どういうことだ。
どうやら、
うーん、回避するにはどうすれば・・・。いや、そもそも直列時と並列時どっちの絵が正しいのだ?
混乱に拍車がかかる。”EvaluationPassThrough”に入ってくる情報もレンダリング結果に影響するのだろうか?
ごめんなさい(-人-)
わかりません。わかった時点で更新します。
また、分かる方、ぜひともご教授を! ぜひ、ぜひ!
一つのPassに複数の”writeToColorBuffer”
三つ目は、一つのPassに複数の”writeToColorBuffer”が出力したときの挙動について、書こうと思います。(実際はあまり使わない気もしますが)
一つのPassに重ねて出力する場合は、”writeOperation”アトリビュートに注意します。
ためしに、下のようなコネクトを作ってみました。
writeToColorBufferの設定は、Evaluation Modeが”Pass Through Only”。
Colorにはそれぞれ下のようにTextureを割り当てています。
Passはすべて同じ一つのPassへの出力です。
この場合、writeToColorBufferは①→③の順にPassに書き込みます。
まずはシンプルに、①の”writeOperation”アトリビュートを[Add]に、②と③を[No Operation]に設定した場合、↓のようなPassの結果が得られます。①につながったColorの結果のみが出力されました。②と③にコネクトされたColorは1[No Operation]なので無視されます。
これに②の”writeOperation”アトリビュートを[Add]に変更すると。
②にコネクトされたColorが加算されたのが分かります。
また”writeOperation”アトリビュートを[Multiply]に変更すると乗算になります。
ここで③の”writeOperation”アトリビュートを[Overwrite]に変更すると、この結果が③にコネクトされたColorで上書きされます。
以上、自分でもかなり怪しいなと思うのですが、『writeToColorBuffer』ノードについては以上にしたいと思います
間違い、勘違いありましたら、指摘していただけるとありがたいです。
英語ですが、『writeToColorBuffer』の参考サイトを二つほど。
ちなみに私は英語の理解度は、読むのも聞くのもぼんやりです。
http://mayastation.typepad.com/maya-station/2010/02/writetocolorbuffer.html
http://area.autodesk.com/blogs/cory/maya_2009_custom_frame_buffers_explained
以下は余談。
Mayaで用意されているPassと、それで足りない部分をWriteToColorBufferで補うというのが、作業的にも楽かなと思います。
Tool化してしまうなら別でしょうが。と、いうかすべての要素をWriteToColorBufferで出力しようとすると、作業の手間が増えるのでTool化でもしないとやってられないと思います。ミスも増えますしねw
WriteToColorBufferを使わずに済むならそれがいいのですが、標準のPassだと透明なのがうまく出なかったりとか思うようになってくれないことも多々あるので、WriteToColorBufferを使わずには済ませられないというのが実情かもしれません。
Mayaは2012の英語版を使用しています。
最新のバージョンとは異なる可能性がありますのであしからず。
コメント