Maya の Menta ray 上でボリュームレンダリングをするテストをしているのですが、これがなかなか一筋縄にいかなくて苦労しています。
・できたこと
- parti_volume シェーダを使ってボリュームライト的な表現をする→できたけど、目的とは違う
- mib_rey_marcher を使ってボリューム的な表現をする→こちらが目的に近い
・できてないこと
- ray_marcher を使ったとき、ボリュームの向こうにあるジオメトリがレンダリングされない(シェーダが起動しない?)
- セルフシャドウ
ray_marcher の資料が意外となくて、ほとんど手探り状態で進めています。英語でも全然使用例が見つからないんですよね。。。
とにかく、今できていない二点は何とか解決したいものです。はてさて、どうやってやればいいのやら。。。
MR はあまり知らないのですが、MR がまあよくあるレンダラだとして動いていると仮定すると…
– ray_marcher: 入り口点と出口点の間をレイ・マーチングするので、そもそも出口点より向こうにレイは飛ばない.
– セルフシャドウ: 各レイマーチング点から光源にレイを飛ばすか、ディープシャドウマップをサンプルするか
ではどうでしょうか.
とりあえず手元に Programming MentalRay はあるので、必要であればこちらでもある程度調べることはできます.
こんにちは。
-ray_marcher
Programming Mentalray の Chapter3.3 にある図を参考にすると、”11.球体オブジェクトのボリュームシェーダのところで ray_marcher が呼び出されるだけで、その先にあるオブジェクトのシェーディングに関しては関係ないものだと思っていたのですが。。。
実は、ものすごい勘違いしていますか!?(汗
-セルフシャドウ
結局自分でシェーダを書かないといけないっていうことですよね。そうなんだろうなーとは思っていましたが。トホホー。
ありがとうございます。私ももうちょっと調べてみます。
– ray_marcher
どうもこれは Maya 用に作られたシェーダプリセットみたいですね. なのでこのプリセットシェーダが、屈折(or 反射)レイをさらにトレースする、という機能を削いでいるのかも.
(たとえば Maya SW レンダラと同等の動作に合わせるためにそうしているとか)
– セルフシャドウ
これはやはり mib_ray_marcher の shader パラメータで自作のシェーダを書かないといけないようです.
結論:
んー、レイマーチング部分も自前でシェーダを書くですかね.
いろいろ調べていたら、Maya の SDK に mib_ray_marcher のソースがあったので、それを元に自分で作るのが吉か、という、syoyo さんと同じ結論に逹しました(笑
あとは、ray_marcher を複数駆使してフェノメナを組むことも考えましたが多分速度的にもシェーダを書いがほうが断然有利になりそうです。
あと、lucille で動かすことを考えると、自分で作っておいたほうがいいですしね 🙂
おー、確かにありました.
そんなに複雑ではないので、やはりこれをベースに自作がよさそうですね.
ですね。簡単なアルゴリズムだっていうのはわかってましたけど、実際にコードを見ると拍子拔けするぐらいそのまんまで笑っちゃいました(笑
ray_marcher を使ってボリュームのレンダリングはできるようになったので、自作シェーダでシャドウの表現をするのが次の課題ですかね。。。
とりあえずは ray_marcher のポイント毎にライトに向けてレイを飛ばす方法から始めて、それだと多分遅いのでディープシャドウマップとかそれ関係のテクニックを使うのかなー?と適当に妄想しています。