[Maya + mental ray] Maya2009のレンダーパスが思ったより良さそうな気がしてきた

タイトル通りなんですが、Maya2009からmental rayでのレンダリングの際にパスを自動で分けてくれる機能がつきました。
2010からはmental rayのバッチライセンスが付属するということで、今後のメインレンダラはmental rayになるだろうという前提の下での調査です。


framebufferやAOVを使ったレンダリングの際には、シェーダの出力インターフェイスが統一していないといけないという問題があります。
(実際にはいけないわけではないですが、一応ここでは便宜上そういう言い方をします。)

mental ray for Mayaの場合、render passを使うと作成したパス名のframebufferが作成され、そこに指定した情報が出力されます。
が、対応していないシェーダを使用すると、情報は書き込まれないようです。
(未確認ですが、多分。)

対応というのは、例えばdiffuseの情報として書き出すアトリビュートはどれなのか、というのをシェーダ側で定義してやる必要があるということです。
どの情報がdiffuse値として出力したい情報なのかわからなければ出力のしようがないのです。

mental ray for Mayaの場合の対応シェーダはヘルプに載っています。
これらのシェーダは、diffuseといえばどれなのか、specularといえばどれなのか、reflectionといえば、refractionといえば、、、という風に、
どのパスにどのデータが対応するのかが全てあらかじめ宣言されています。
つまり、出力のインターフェイスが統一されているのです。(こういう言い方で良いのか自信ないですが:P)
これにより異なったシェーダでも同じパス情報が出せるようになっています。

おそらくデフォルトで用意されているrender passだけ使っても、そこそこ満足出来るようなパス分けは可能でしょう。
でももしそれで8割満足できたとしても、残り2割はイレギュラーなあるわけです。
実際、割合の多少はあれど、ほとんどのケースにおいてイレギュラーは存在します。

たとえばdiffuseは常に白にしたい!というシェーダが欲しいことがあるかもしれません(ないと思いますが一応例として)。
そういう場合はどうするか。

Mayaではこの仕組みに対応したシェーダを作る事ができます。
これはただ単にmental rayシェーダを作成すればよいわけではなく、ADSKShaderSDKというものを使用してシェーダを作成する必要があるようです。
作成方法などに関して、詳しくはこちらをご覧ください
こちらに基づいて作成されたシェーダはMayaのレンダーパスに対応したmental rayシェーダとなるように保障されているようです。

でも毎回これをやる必要があると思ったらかなり厄介な気がします。
見る人が見れば分かるとおり、単純なmental rayのシェーダを作成するよりもはるかに面倒です。
(まぁこれは決まりごとなんで内部の計算に比べたらなんてことはないかもしれませんが:P)

ADSKShaderで作るほど大げさじゃないけど、ここだけどうしてもこの情報が欲しい、
そういう場合はどうするかというと、レンダーパスにCustom ColorやCustom Vectorといった設定が用意されています。
これらは自分で指定した情報を出力するためのものです。
SSSのカラーでもRGBで取ったマスク情報でも何でも、型さえあっていれば突っ込めます。
手順などに関して詳しくはヘルプをどうぞ。

僕達が出したいデータはおそらくほとんどの場合カラーだと思うので、多分上手い事やってやれば
ほとんどのことがこの仕組みを使うことで実現できてしまうのでは!と思われます。
まぁまだ具体的なケースが頭にあるわけではないんですけど:P

という感じで、思っていたほど自由度の低いシステムではなさそうだという印象です。
使い勝手に関してはある程度自前ツールとか作る必要あるかもしれませんが、その程度であればむしろ御の字です。

Maya2010で付属されるレンダーライセンスはmental ray for Mayaのものであって、standaloneのものではありません。
つまり、miファイルをどうこうして、というワークフローはとることができません。
となったらMayaから与えられた方法をうまく使うのが費用対効果の面で最善と考えられる為、とりあえずこれに乗っかってみようかなと思った次第です。
うまく行けばなるべく力をかけずにワークフローやシェーダの開発に注力出来るわけなので!

実際にデータを作るなり、実戦に近い形で試してみて、使用感や問題の洗い出しをしたいと思います。
もしかしたら見えないところに問題があるかもしれませんしね。

というわけで実戦投入すべくあれこれ試してみようと思います。
うまく行くといいんですけどね。

 
ところで、どういう仕組みでレンダーパスが出力されているのか知りたかったので、ためしにmiに情報を吐き出してみました。
miの中を覗いて見たところ、camera宣言の中でframebufferが作成されていました。
Programming mental rayに記述が無かったのでマニュアルを見たところ、3.6以降の拡張らしいです。
さらにカメラには怪しいレンズシェーダがついていて、これはおそらくframebuffer書き込み用だと思われます。

かつてのframebufferの扱いがどうだったのか詳しくありませんが、
3.6で新しく乗せる必要があった機能なわけなので、ちょっと詳しく調べてみようと思います。
ドキュメントが英語なんでサクサク読むことが出来ないんですが、、根気強く、、頑張ります、、、

とりあえず絵作りに直結したワークフローが作れるように、必要とあらばサクッとシェーダがかける様に、という方向で環境整備したいと思います。

 
ホントはただシェーダを書こうと思ってあれこれ調べてただけなのに、大きく逸れてこっちに来るのがmemlogクオリティ。
まぁメモなんで。。そしてある種結果オーライだったし良しとします:P

何か良いアイディアとか間違いとかあれば是非ご指摘くださいませ(・・)ノシ

「[Maya + mental ray] Maya2009のレンダーパスが思ったより良さそうな気がしてきた」への7件のフィードバック

  1. へーー AdskShaderSDKってこうやって使うのか...しらなかった...
    何やっても.miにincludeされちゃって,ウザいなと思ってました.

    framebufferの書き出しにlens shaderは必要ないです.cameraでのbuffer宣言と,対応したシェーダがあれば書き出せるはず.

    実際に画像ファイルにデータを書き込むのはMayaではなくてmentalrayの仕事なので,極端な話,「指定された名前のbufferに入力された色を書き込む」だけのシェーダを書いて,shading networkに繋いでおけば書き出しはできます.

    ただ,これだとMayaのrender passとかGUIとの連携は全く取れないので,Mayaから.miを吐いてそれをtext filterにかけたりとか,そういう事が必要になります.これは柔軟性は「なんでもあり」状態ですが,そこから自前ツールを整備できるような環境でないと辛いかもしれません.

  2. >ますおさん
    パスコンプライアント云々、と書いてあるのでおそらくこういうことなんじゃないかと!
    ADSKShaderSDKみたいなのがincludeされますね、確かに。
    てっきりRenderPass使ったからだとばかり思っていたんですが、、関係ないんですね、、、

    > framebufferの書き出しにlens shaderは必要ないです.
    ナント!そうでしたか。
    framebufferはてっきりOutputシェーダで書き出すもの、と思っていたのですが、Outputがないのでじゃあlensシェーダか、なんて簡単に考えていました:P
    シェーダから直接書いちゃえるんですね。マニュアル熟読してきます。

    > 「指定された名前のbufferに入力された色を書き込む」だけのシェーダを書いて,~
    なるほど。そういうことなんですね。
    miを吐くとなるとMaya2010のバッチライセンスが使えないので、想定している使い方から一気に外れてしまう気がします。
    standaloneとしてもライセンス使用できると良かったんですけど、for Mayaって書いてありましたし、、ぐぞう、、

    パス周りに関しては、なるべく手間をかけないで使えるようにしっかり考える必要がありそうです。

    んー難しい、、、

  3. マルチレンダーパスを使ってみたことがあるんですが
    ビューティーパス=マルチレンダーパスになりません。
    (レンダーパスに分けると、もうビューティーパスを
    正確に合成できません)
    これってどうやって使うんでしょか?

    最初、意味がわからなくって、オートーデスクともめました。
    これっておもちゃ機能なの?

  4. >Iさん
    > ビューティーパス=マルチレンダーパスになりません。
    !!
    ま、マジですか。
    前にMayaSWの古いレンダーパス使ったことはそんな感じになったことがある気もしますが、mental rayの方でもそんな感じなんでしょうか。

    それだと確かに使いづらいですね、、
    まぁ最終的にコンポジットで絵作る前提だから問題ないっちゃ問題ないんですが、必要な情報がロスしているようだと問題アリですね。。

    これは実際にあれこれやって調べてみる必要がありそうです。
    情報ありがとうございます!

    >hohehohe2さん
    それは良かったです:)
    先日はAPIの件でお世話になりました。大変助かりました!

  5. maxのユーザーから見れば、何でそんな苦労をしてまでmayaを使うのか不思議なところです。
    自分はスクリプトとかは書けないのでその辺のことはわかりませんが。

  6. >ひがさん
    何でそんな苦労をしてまで、、んー、、なんででしょうか、、
    会社でみんながそれ使ってるからじゃないでしょうか。
    ここで1人だけMaxやXSIを使えるわけはないので、、、
    まぁエフェクトでここだけ!とかスポット利用ならアリだと思いますが、そうなるとパスがどうだとかこうだとかは必要ないですし。

    逆に僕はMaxのことを知らないのでMaxではどうなのかわかりませんが、スムーズなワークフローの実現のために、あれこれ調べて必要なものは作るという行為はMayaに限ったものでもないと思っているのですが、そうでもないんでしょうか、、、

    だとしたら知らぬ間にMaya脳・・・
    怖っ

コメントを残す

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