月: 2009年7月

CG, Maya, Mental ray

Volume rendering with Mental ray on Maya(2)

完全にプライベートタイムを使って調べているのでなかなか捗らない(という言い訳をして数週間放置w)ですが、Twitter やコメント欄でいろいろな方に助けて頂きながら少しづつわかったことがあるのでまとめてみます。

・シェーダの割り当て
ボリュームシェーダを使用する際にも、サーフェースシェーダは指定する必要があります。ここでは、”何もしない” シェーダ、transmat を割り当てます。

・parti シェーダについて
Maya には parti シェーダのソースが付属しています(devkit/mentalray/shaders/physics/partishade.cpp)。
このソースの Description を読むとわかるのですが、parti シェーダは GI の使用が前提になっています。この時点で用がないなと見切りますwww

・raymarcherシェーダについて
parti シェーダ同様、ray marcher のソースも付属しています(devkit/mentalray/shaders/base/baseraymarch.cpp)。
コードを眺めてみると、拍子拔けするぐらい単純な構造になっていることがわかります。

ザックリと説明すると

  1. mib_ray_marcher() から raymarch() 関数を呼ぶ。これが ray marcher の本体
  2. 二点の mi_call_shader_x() で得られた値を比較する
  3. 最大分割数未満かつ、値の差が閾値以上なら recurse() 関数を呼ぶ
  4. 2と3を繰り返す
  5. 得られた結果を加算する(ここまでが raymarch())
  6. 最後に値を正規化してやる

これだけです。教科書に出てくる ray marcher そのものです。そして、このコードを読むと幾つか発見もあります。

  1. 最後に正規化してしまっているので、計算結果がそのまま得られない
  2. 結局単なる ray marcher なので、mi_call_shader_x() で呼ぶシェーダ次第
  3. シェーダの計算結果をそのまま足してしまっているので、多分綺麗な結果が得られない

1,2 に関してはコードを読んだそのままです。1 は正規化しないようにすれば解決できます(多分。mental ray のシェーダが、正規化した値しか返せない仕様だったりすると困ります)。2 は、コードを読めば一発でわかりますが、日本語読解力の弱いわたしにはドキュメントを読んだだけじゃわかりません(ぇ。
3 は、ライトを考慮したシェーダネットワークを組もうとすると問題になるのかなと思います。ライトの場合、ray marching した結果の color と alpha を使って光源の値を”削る”(マスクする)必要があると思うので、これ用の仕組みを別途作ってやる必要があります。まあ、サンプリングポイント毎に馬鹿正直に計算していたら重いと思うので Deep Shadow Map のようなものを使って計算するのが無難なのでしょう。

・結論
いろいろ書きましたが、結局 raymarcher はレイ・マーチングを正直に実装しただけのシェーダだったということです。
これだけで何かできるというわけではなく、シェーダネットワークを組むための部品の一つとして使うために存在するものなので、これを元に Phenomena を作るか自分でシェーダを書くのが正しいアプローチなんだろうなーと、至って普通な結論に逹しています。

CG, Maya, Mental ray

Volume rendering with Mental ray on Maya

Maya の Menta ray 上でボリュームレンダリングをするテストをしているのですが、これがなかなか一筋縄にいかなくて苦労しています。

・できたこと

  • parti_volume シェーダを使ってボリュームライト的な表現をする→できたけど、目的とは違う
  • mib_rey_marcher を使ってボリューム的な表現をする→こちらが目的に近い

・できてないこと

  • ray_marcher を使ったとき、ボリュームの向こうにあるジオメトリがレンダリングされない(シェーダが起動しない?)
  • セルフシャドウ

ray_marcher の資料が意外となくて、ほとんど手探り状態で進めています。英語でも全然使用例が見つからないんですよね。。。

とにかく、今できていない二点は何とか解決したいものです。はてさて、どうやってやればいいのやら。。。

CG, 雑記

ガンダム@お台場


gundum_hdri_480×640.jpg
見てきました。圧倒。

写真には写ってないですが、一日中ガンダムファンが押し掛けているみたいで、みんな大興奮で写真を撮っていました(私も含む)。

ちなみにこの写真、露出を変えたものを3回撮って、HDRI 化してみました。でも、思ったほど変化がなかったです。コンパクトデジカメだと撮影時の情報がゴッソリ落ちてしまうので、難しいのかも?

そもそも、自宅環境で HDRI をまともに扱えるツールが無い時点でどうなのかと(笑

CG, 雑記

Tokyo GAF Party

昨日は Tokyo GAF Party に参加してきました。
Bernie さんの主催するパーティーは相変らず濃い!!そして面白い!!

知ってる人も知らない人も、知り合いづてに話をすることができたり、思わないところで繋がったりしてエキサイティングなイベントでした。

普段、仕事ばっかりして会社に引き籠ってると単調になってしまうので、時々こういうイベントに参加するととてもいい刺激になります。

それにしても、O 社はやっぱり面白そうだなぁ。。。