[Maya][mental ray] BA Shader使用に関してのメモ

最近書くことが、というか書けることがあまりなくてブログの更新が停滞しちゃってます。
本来は停滞というか、まぁ、メモなんで、、、気ままにやるだけなんですが、、、

そしたら昨日、先日CGWデビューした某スタジオの某Houdini使いに「おめーのブログは最近更新が無いからウィークリーに降格だ!」といわれてしまいました。
なので中途半端なのですが1個温めてたネタをUPします。

あ、それとブログのテーマを変更しました。
若干見やすい?見づらい?
まぁせっかく変えたしこれでしばらく行きます。


みなさまBA Shaderってご存知でしょうか。
ご存じの方多いと思うのですが、ユーザーとなるとまた少ないと思うのでちょろっと概要だけ。

BA Shaderは、ドイツのBinary Alchemy社にて開発、販売されているmental ray用のシェーダです。無料で配布されているユーティリティシェーダと、有償のボリュメトリックシェーダがあります。
僕が普段使っているのは有償の方(というか有償のやつを使うには無料版もインストールする必要があるので、両方使っているが正しい)で、主にボリュメトリックレンダリングをする際に使用しています。要はパーティクル煙ってことです。

BA ShaderはXSIには7.0以降無償でバンドルされているので、MayaユーザよりもXSIユーザの方が経験値高そうです。
僕もつい最近触り始めて、調べつつ使いつつな感じなので、多少間違った風に覚えているかもしれないのですが、作業中にメモった内容を公開します。
温めてたと言った通り、もうしばらく検証して情報の正確さを上げてから出すかと思ってもいたのですが、ある程度まとまってきたし、ここらで一回そろそろ公開してみるかとも思っていたので、公開してみます。間違ってたらごめんなさい、というか指摘してください・・・!!

 
BAShaderをMayaで使用した際のメモ書きまとめ

  • 透明lambertをsurface shaderに用いない
  • フリッカが消えない

  • BAShaderから参照できるPPAttrは決まっている。また、rampで制御したPPAttrはcacheされないためBAShaderに渡らない。
  • BAShaderで使用したいPPAttrで、rampで制御したいものは一旦仮Attrにrampを突っ込んで、Expressionで明示的に設定してやる必要がある。

  • BAShaderのcell sizeの最大値は50
  • ものすごく大きいスケールの場合は、使い方を考える必要があるかもしれない。

  • キャッシュ後のスケールには対応していない
  • たとえば小さく作ってキャッシュ作成して、boxにアサイン。それを最終的にスケールかけて計算!とかは出来ない。2倍ぐらいなら出来たが3倍では怪しかった。というか壊れるということはそもそも対応していないということなので、結果も同じにはならない可能性が高い。なので基本的には使わないことが望ましいのかも。

  • 複数個の一斉レンダリングは危険
  • 大丈夫な場合もあるが、重なりが発生したときなどはまともにレンダリングされない。個別にレンダリングするのが安全だと思われる。

  • フリッカが生じたらcell sizeを小さくすることで回避可能
  • エイリアスと一緒で、高周波な部分に対して十分なサンプリングが行われていないのが問題な様子。なのでcell sizeを小さくしてsampleを細かくしてやれば消える模様。
    ただし計算時間は増大する。可能な限り大きな値を入れたほうが計算は速い。

  • LUTのCell InterpolationのFull light raytraceは多分真面目に全ピクセルレイトレするタイプの計算方法だと思う
  • MayaFluidShapeをアサインした場合と同等か、それ以上に重い感じ。
    結果も大きく変わってくる。ディテールがすごくはっきり出るというか、リッチな感じ。

  • Cell InterpolationをFull light raytraceにしたらLUT関係ないかも?と思ってテスト。cell sizeを大きくしたらエッジが甘く、レンダリングが速くなった。なので解像度は関係あるっぽい予感。
  • アニメーションは未テストなのでこれでアーティファクトが消えるかどうかは若干疑わしい気もする。
     →テストした。cell size 35のLinearをcell size 50のfull light raytraceにしたところ、完全にフリッカ的なアーティファクトが消えたわけではないが、Linear補間した際に出たと思われる縦線みたいなやつはなくなった。

  • レンダリングは、もやっとした薄いものほど重く、濃密なものほど軽い。しかし濃密過ぎるとLUTの補間のラインやらフリッカやらのアーティファクトがとても目立つ。なのでサンプリングあげたりとかあれこれやると結果重くなる。
  • ライトの数はダイレクトにレンダリングに響く。こちらもなるべく最小限に。
  •  directional4個、point5個のシーンで、pointを全部外したら5分→2分になった。

  • cell sizeはグローバル単位に等しい模様
  • なのでカメラ寄り引きでLUTの値調整する必要あり。

  • 今回はシーンユニットがcm(デフォルト)だったけど、これがmになったらどうなるか、とかはテストしてみないとわからない。
  • cell sizeが小さく、ボクセル(というかLUT?)がシーン内に大量に作成される設定になっている際、ボクセルが上手く生成されずにレンダリングが途中で終了するような場合がある。デッカいボクセルが数個見えてなんか妙なレンダリング結果になるというか。こういう場合はmax memory to prevent crashを8000とかデカい数にすると回避できたりする。
  • LUTを作る際にメモリをたくさん食うようで(タスクマネージャ見てると急激にメモリが増える)、そこで最大メモリが小さいとダメということらしい。

  • BAShaderのレンダリングに使用するオブジェクト(boxとか)のトランスフォームはパーティクルと一緒の必要がある。

 
と、こんな感じです。
BA Shaderの使用に関してのざっくりの流れを解説すると、

  1. パーティクルアニメーションを作成、キャッシュを取る
  2. boxなど適当なオブジェクトを作り、トランスフォームにmrのジオメトリシェーダ(BA_PTLoader、だったかそういう名前のやつ。)
  3. そのboxのサーフェスシェーダに、surface shaderを透明&アルファなしにしてアサインする
  4. BA_Volumeみたいなボリュームシェーダ(名前詳しくは覚えてない)をそのオブジェクトのvolume shaderとしてアサインする。(SGに直接Ctrl + ドラッグすると接続されます。)
  5. アトリビュートを諸々調整
  6. レンダラをmental rayにして、Auto VolumeをONにする
  7. レンダリング

という感じです。

BA Shaderは、LUT(Lookup Table)という仕組みを持っていて、これは要はボクセルみたいなものです。LUTの補間を行わないとボクセルがそのまま見えます。
BA ShaderはFluidShapeをパーティクルにアサインして影落としてレンダリングとかするよりも、何倍も速いです。それはこのLUTを使用して、必要な計算量を少なくしているからだと思われます。
ただし、それは解像度を下げた画像のようなもので、ディテールは消え、場合によっては形が変わります。なので作者も正しいLUTサイズでレンダリングするように言っています。

しかしこのLUT、まぁ曲者で。とにかく厄介で。
僕が今作っている煙のルックは、ものすごく重厚な固い煙です。例えばAfterBurnやHyperVoxelみたいな感じ、とかいえばわかりやすいとおもうんですけどもw
で、そういうものだと補間した際にボクセルの形がわりとくっきり残ったり、解像度不足によるフリッカが発生したりしがちな様なのです。
で、それに対処するには、パラメータをセットして、連番でレンダリングして、結果を確認した上でさらにLUTの値、主にcell sizeをいじる、と言った作業が必要です。
今回僕が一番悩まされているのはフリッカの問題で、ざっくり言うとcell sizeを下げたり、補間方法をFull light raytraceにしてやると直ったりします。これはつまり、サンプリングポイントの増加とイコールなので、計算時間は増大します。すると結果的にFluid shapeを使ってレンダリングしたのと同じじゃん!みたいなことになってきます。

が、それでもやはりBAは速いのです。そして優秀です。例えばテクスチャノードですが、サンプルの画像とパラメータをまとめたドキュメントがそこそこの数があるので、欲しい形に近いところから調整していけて、非常に便利です。パラメータの数もそんなに多くなく、そこまで難しくありません。
あとはキャッシュを使用してレンダリング出来るのも素敵です。上手く使えばカット間での使い回しも可能で、非常に便利です。まぁ、、僕はまだそこまでやれてませんが・・・。

なので個人的にはMayaでmental ray使ってる方々には是非BAをオススメしたいと思ってます。ライセンスもサイトライセンスで€375と非常にお安いのも素敵です。
ただし、そこそこのレンダーサーバがないと、全然速くねーじゃん!!となってしまう気もします。
静止画なら爆速だ、と言えるんですけどねー、、動画になるとどうしてもフリッカに悩まされます。。
時間増大させずにフリッカ消すやり方あるならば是非教えて欲しいです:(

BA Shaderに関しては国内ではまだまだ情報少ないようです。積極的に情報交換して行きましょう(・・)ノシ
 

あと、私事ですが、今月号のCGWでMaya2011レビューを書かせて頂きました。
苦手な部分もありつつで、若干の偏りは見られるかもしれませんが、頑張って書いたので是非お読みいただけると嬉しいです:D

「[Maya][mental ray] BA Shader使用に関してのメモ」への4件のフィードバック

  1. あうあう、もうすでにBAShaderを軽く忘れかけてたりする。
    俺もメモ残しておかないとやばいな・・・。
    さて、そんな中で1つ。
    cell sizeはAttrEditorからだと50が限界値ですが、
    rampとかのテクスチャーを介せば好きな数字が入れられますよ。
    それで、200とか400とかの数字ぶっこんで制御してました。
    参考になれば。

  2. >タイチさん
    どもです(・・)ノシ
    って毎日会ってますがw

    >cell sizeはAttrEditorからだと50が限界値ですが、~
    おーーーーーーーーーナイスアイディア!
    要は何かしらの値であればrampでなくてもいいんですかね。
    うーん、なるほど、であれば裏cell sizeパラメータを用意して、、!!
    さらに好き勝手やれますな。素敵すぐる。
    今BAには悩まされまくりですが結果も非常に良いのでもうちょい頑張ります。多少吐きそうです。ォェッッ

  3. 根にもってたのねwすみませ~んw

    BAShader使うことは無いんですが、勉強になります。
    うちのmaya部隊に教えます!
    houdiniのボリューム、、早いのか、、
    昔の5x5はもう開発しないんですかね。なんかmaya用も作ってたと思ったのに。

  4. >akimoto君
    言われたからには一応書いといたほうが良いかなーと思ってww

    BAShader優秀でございます。良いよ!ライセンスも安いしオススメです。
    まぁ設定上げるとどんどん重くなってくしメモリも食うからケースバイケースなんだけども。
    Houdiniのボリューム、ちゃんと使ったことは無いけどもためしに何か簡単なのレンダリングしたら激速だったような・・・?

    5×5はMaya+RenderManのLinux版開発してたね。
    でも今彼らはDDのStormの開発やってるみたいだし、進展はなさそうですね。残念です:(

コメントを残す

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