日々適当

hibitekitou

Softimageでのワイヤーフレームレンダリング

xsi |2014-02-08


SIでワイヤーフレームのレンダリングを行おうとする時、ちょっと困った気分になると思います。ビューポーとキャプチャをしてみたり、リアルタイムレンダラーでやってみたり。けれども、mentalrayには該当する項目はありません。お金をかけれるなら、Arnoldを入れちゃうといいでしょう。そのものずばりなシェーダがあるようですから。

で、mentalrayには無いと描きましたけど、SDKのサンプルとしてシェーダが納められてはいるようです。SDKの中のワークグループを指定するとそれをシェーダとして選ぶことが出来ますが、正常に動きません。コードのサンプルも入っているんで、コンパイルすることの出来る環境を持っているなら、動作するシェーダを作成可能かもしれませんね。でも、その環境を持っていないので、それは諦めます。

すると、Toonを利用する事になります。このやり方、Twitterで@JunkiTheJunkieさんに教えてもらって、ほぅ、となりました。感謝です。
やり方は簡単で、Toon_HostのSeams→Unblendのgroupにポリゴンごとに違う値を入れてやる、という物です。違う値を入れるに当たって、テクスチャを利用する(そのために適切なUVを設定しておく)方法を教えてもらいました。指定した所にインクラインを引くための機能を利用しているわけですね。

ただ、テクスチャを用意したりUVを設定してやるのは面倒だなぁと思いまして…(^^;。 (UVについてはスクリプトを走らせるのかな)
ワイヤーフレームとしてだす場合には、全てのポリゴンが違う整数値になるようにしてやればいいわけですから、ICEのアトリビュートで指定できないかと考えました。

非常に簡単にできましたよ。

とりあえず、普通にインクラインが出るような設定をしておきます。CameraにはTook_Ink_Lensシェーダを適用しておくし、オブジェクトにのマテリアルにはToon_Hostシェーダを設定しておきます。



その上で、ワイヤーフレームを出力したいオブジェクトに以下のICE Treeを構築します。NodeToPolygonで得られるノードごとのポリゴンインデックスをカスタムアトリビュートとして記録しているだけですね。ただし、単なるインデックスではなく、ちょっと数字を足して大きめの値で記録しています。



ちなみに、記録したカスタムアトリビュートの名前はPolyIDとしています。
んで、その値をマテリアルに設定したToon_Hostのunblend_groupにぶち込んでやります。unblend_groupに0を入れるとこの機能は働かないそうなので、0を入れないようにICE Treeで大きめの値を足しました。



これだけ。難点はオブジェクト全てにこの設定をせねばならないと言うことですけど、そこはまぁ、うまくやってくださいw

なお、ここではNodeToPolygonを使いましたけど、PolygonIndexでもいけそうな感じです。Nodeを使ったのは、UVも操作しようと考えたからで、既存のUVを操作して、ポリゴンごとに違う色をというような効果を狙った物を作成可能です。



ICE Treeをこんな風に設定します。既存のTexture Projectionにたいして値をいじっている形になります。その結果、UVはポリゴンごとにグリッド状に並びました。



で、テクスチャの色を流し込みます。SIデフォルトのテクスチャを差し込んでます。



ということで、レンダリングするとこんな感じ。



まぁそんなわけで、ワイヤーフレームだしが必要な時にこのやり方を今後考慮してみようと思います。
コメント ( 0 )|Trackback ( )
 
コメント
 
コメントはありません。
コメントを投稿する
ブログ作成者から承認されるまでコメントは反映されません
 
名前
タイトル
URL
コメント
コメント利用規約に同意の上コメント投稿を行ってください。

数字4桁を入力し、投稿ボタンを押してください。