64bit 版の Mayaプラグイン開発環境を作るためにやった作業メモ。ほとんど memlog さんからのコピペですwww
カテゴリー: CG
ホッタラケ鑑賞オフ続報
途中経過です。各方面の方から参加表明を頂き、今のところ
映画から参加 : 4
飲み会から参加 : 3
できれば参加 : 2
参加のハズ? : 2
という感じになっています。
チケットですが、確実に参加できる!という方で16日(日)の夕方までにご連絡を頂ければ私がまとめて予約してしまおうかと思っていますもしかしたら、事前予約とかできないかもしれません。ちょっと調べておきます。
参加できるか不安とか、自分で好きな席を取りたい!!という方は各自席を確保してください。
もし、予約してなくて当日席が取れなかったら…えーと、先に飲んでてくださいwwww
場所は渋谷のヒューマントラストシネマです。まだ時間が公表されていないので、調べてわかり次第お知らせします。
飲み会の場所も同時に探さないといけないですが、どこかいいお店をご存知の方がいらっしゃいましたら教えてください(ぇ
あと、お願いですがTwitter上で直接参加表明をされた方などで hchiyama(at)gmail.com までメールを頂けていない方は、見落としている可能性もあるので念のためメールを頂けると助かります。業務連絡をするときにも、一括してお知らせできるので楽ですし 😉
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)。
コードを眺めてみると、拍子拔けするぐらい単純な構造になっていることがわかります。
ザックリと説明すると
- mib_ray_marcher() から raymarch() 関数を呼ぶ。これが ray marcher の本体
- 二点の mi_call_shader_x() で得られた値を比較する
- 最大分割数未満かつ、値の差が閾値以上なら recurse() 関数を呼ぶ
- 2と3を繰り返す
- 得られた結果を加算する(ここまでが raymarch())
- 最後に値を正規化してやる
これだけです。教科書に出てくる ray marcher そのものです。そして、このコードを読むと幾つか発見もあります。
- 最後に正規化してしまっているので、計算結果がそのまま得られない
- 結局単なる ray marcher なので、mi_call_shader_x() で呼ぶシェーダ次第
- シェーダの計算結果をそのまま足してしまっているので、多分綺麗な結果が得られない
1,2 に関してはコードを読んだそのままです。1 は正規化しないようにすれば解決できます(多分。mental ray のシェーダが、正規化した値しか返せない仕様だったりすると困ります)。2 は、コードを読めば一発でわかりますが、日本語読解力の弱いわたしにはドキュメントを読んだだけじゃわかりません(ぇ。
3 は、ライトを考慮したシェーダネットワークを組もうとすると問題になるのかなと思います。ライトの場合、ray marching した結果の color と alpha を使って光源の値を”削る”(マスクする)必要があると思うので、これ用の仕組みを別途作ってやる必要があります。まあ、サンプリングポイント毎に馬鹿正直に計算していたら重いと思うので Deep Shadow Map のようなものを使って計算するのが無難なのでしょう。
・結論
いろいろ書きましたが、結局 raymarcher はレイ・マーチングを正直に実装しただけのシェーダだったということです。
これだけで何かできるというわけではなく、シェーダネットワークを組むための部品の一つとして使うために存在するものなので、これを元に Phenomena を作るか自分でシェーダを書くのが正しいアプローチなんだろうなーと、至って普通な結論に逹しています。
Volume rendering with Mental ray on Maya
Maya の Menta ray 上でボリュームレンダリングをするテストをしているのですが、これがなかなか一筋縄にいかなくて苦労しています。
・できたこと
- parti_volume シェーダを使ってボリュームライト的な表現をする→できたけど、目的とは違う
- mib_rey_marcher を使ってボリューム的な表現をする→こちらが目的に近い
・できてないこと
- ray_marcher を使ったとき、ボリュームの向こうにあるジオメトリがレンダリングされない(シェーダが起動しない?)
- セルフシャドウ
ray_marcher の資料が意外となくて、ほとんど手探り状態で進めています。英語でも全然使用例が見つからないんですよね。。。
とにかく、今できていない二点は何とか解決したいものです。はてさて、どうやってやればいいのやら。。。
ガンダム@お台場
Sour/日々の音色
これはドギモを抜かれた。
Webカメラを使って全然バラバラな人たちのパフォーマンスを使うというのも斬新ですし、何よりその技術を使って作った映像が面白いです。これは必見!
Digital Domain loses termination suit
今は時間がないのでリンクだけで。
‘Button’ vfx company to pay $2 million in damages.
Tokyo GAF Party
昨日は Tokyo GAF Party に参加してきました。
Bernie さんの主催するパーティーは相変らず濃い!!そして面白い!!
知ってる人も知らない人も、知り合いづてに話をすることができたり、思わないところで繋がったりしてエキサイティングなイベントでした。
普段、仕事ばっかりして会社に引き籠ってると単調になってしまうので、時々こういうイベントに参加するととてもいい刺激になります。
それにしても、O 社はやっぱり面白そうだなぁ。。。
lucille : shader
lucille でシェーダのコンパイルのしかたがわからないぃぃ!!と思ってググったら、一人Lucilleソース読書会という記事を発見。
ここの記事によると、シェーダはまだらしい。先走りすぎたか。。。
それにしても、このサイトの人、今まさに REYES アーキテクチャのオレレンダラを作っている最中なんですね。しかもちょうど REYES パイプラインができあがったところみたいです。これは面白い!!
lucille : rockenfield に出力する
rockenfield は、lucille のディスプレイドライバです。単にファイルを表示するだけではなく、TCP/IP を介して直接 lsh からレンダリング結果を得て表示することができます。
標準ではビルドされず(たしか)、tools/rockenfileld の中身を自分で make する必要があります。また、ビルドには fltk-1.1.9 が必要です。
まずは rockenfield を起動しておきます。
>rockenfield
rib の中で、出力先を socket にします。
※lsh の –output オプションは効かない?
Display “” “socket” “rgb”
レンダリングすると、rockenfield 上にレンダリングした画像が表示されます。…がっ、ここでまさかの rockenfield が死亡(涙。再描画に問題があるのか?要調査です。
そういえば、私は fltk-1.1.8 でコンパイルしているので、これが悪さをしているのかも。ちゃんと作りなおしてみますか。。。
syoyo さんからコメント欄で教えて頂きました。どうやらマルチスレッドまわりの不具合のようです。
lsh に –threads=1 というオプションをつけてやればうまく動きます。