- 2007/03/14 20:46
- uncategorized
仕事が一段落して今週は待機しつつお休みなので、
確定申告、部屋の片付け&模様替え、散髪、買い物をしようと思います。
という出だしとは関係なく、hajime先輩のブログを読んでちょっと考えてみた。
このページのエントリーはMayamanとAIRに関して、なんですが、
これを読んだ時にSLCodeNodeというのがMayaのプラグインノードだと勘違いしてしまったのです。
で、途中でMayamanノードだと気付いて落胆するのですが、
そもそもMayaに同様の動作をするノードがあったとしたら、何が嬉しかったのかと考えてみた。
そんなに頻繁にあるわけじゃないんだけど、簡単な機能の拡張とかが簡単に行えること。
これに関してはほとんど無いと思うんだけど、独自アルゴリズムによる各シェーダの開発。
そこまでのレベルになると基本的にはPlugin書いちゃうもんね、って話。
ということであまり得するもんでもないなぁと気づいたんだけど、
Mayaのプラグインノードとして開発するとすればどういう方法があるのか考えてみた。
せっかく思いついたんだしね。
ソースをノード内に書く。
それをコンパイルして、結果を出力。
Mayaでシェーダを書く際は、computeから結果を返す必要がある。
つまりsl内のCiとOiはresultとして返すMColorに対応している必要がある。
MColorのRGBがCiで、OiはAになっていれば良いはず。
シェーダ本体の計算は、何かしらの方法でやらないといけない。
ここでは、とにかく数値を求める必要がある。RGBAが出れば、それでOK。
どうやって数値を求めるか。
MayaだとDSO( mll )になっていないとネイティブでは読めない。
だからバカ正直に考えるなら、slをC++のバイナリコードに変換するコンパイラが必要。
えぇぇぇぇぇぇダメぽ。
それはダメぽ。一気に敷居が高くなっちゃた感じ。
じゃあそこで別のスクリプト言語を使用して数値だけ計算させてしまえばいいのだ!と考えたとする。
perl, python, ruby, tcl,,, まぁとにかくなんでもOKとする。
それらのコンパイラが読み込めるようにするためのパーサを作り、
スクリプト側に投げ、データを計算させ、戻り値をGET。
それをresultにしてやる、と。
こうすれば一応slを直接Mayaから実行するためのノードは出来そうな気がする。
で、そういえば思い出したことがあったんだけど、
ほへほへ2さんという方がpyfilterというプラグインで同様のことをやっていたことを思い出した。
おぉぅ、slではないけど既にあるじゃん、的な。
Mayaから提供されるデータ、例えばサーフェスのノーマルとかそういうものに関しては、
グローバル変数として存在しているわけなので、
そのデータもスクリプトに一緒に渡しちゃえばOKだと思われる。
全部ただのアイディアレベルで素人が考えてみた、という感じなので、
いろんなところで不備だとか、実は無理だろ、みたいなこととか書いてるかもしれないんですが、
ご容赦ください、、
うーん、Mayaのシェーダ開発がもうちょっと楽になるようなものがあるといいんだけどなぁ。
とか言っても自分がそんなに頻繁に開発しているわけではないんだけどw
研究課題としては面白いので、もうちょいいろいろ考えてみる。
無きゃ無いでいいんだ、遊びだし。
そういえば何故こんなことを考えたかというと、きっかけがあって、
LW用のこんなプラグインを発見したから、です。
この方、LWにシェーディングネットワークを実装したりとかetcetc..で、すごい人です。
いるねぇ、すごい人。
おれもすごくなりたい。
- Newer: [ c/c++ ]static関数
- Older: [ xsi ] XSIMan
Comments:2
- hajime 2007/03/15
うん、hohehoheさんのが一番近いと思う。
ただ、好きな数だけ好きな型の入力+出力アトリビュートを追加できるとなると、正直きついんでないかなぁ。- tai 2007/03/15
>hajimeさん
>hohehoheさんのが~
ですよね。Mayaで独自シェーダを独自フォーマットで、というのは相当やりづらそうでしかないですし、、
そもそも意味があるのかというところですw
>好きな数だけ好きな型の入力+出力~
これはまぁ、あれです、
出力はoutputColorのみで、入力は無しです(笑
っていう風にしかなりませんよね、たぶん。
もしくは決め打ちで何個か汎用アトリビュートを型別に作っておくとか。うーん、ビミョww