MayaのToonライン周りメモ(訂正版)

Toonラインの話です。
さっき大きく間違ったこと書いてたので訂正しました。申し訳ありませんでした。

 
しばらくMayaToon使ってたんですが、アンチの品質悪すぎ、、、
斜めガッタガタだし真っ直ぐでもよれる。
他のソフト使ったことある人ならこんなの許さんだろうなぁ、、、
とりあえず今回は3倍レゾ出しでなんとか乗り切りたい、、、
もしくはAEでsmoothかけるか・・・?
まぁそれはそれで。

今後はこんなので悩むの嫌なので、mrのContourに切り替えようと思って調べたることにしました。
それのメモ。


mental rayには輪郭線をレンダリングするための機構が備わっています。
それらはいくつかの種類のcontourシェーダから成り立っています。

まずcontour store shader
これは輪郭線を検出する際に必要な情報を突っ込んでおくためのシェーダです。
contour store shaderはマテリアルにレイが交差した際に1度だけ呼ばれます。

次がcontour contrast shader
これは実際に輪郭線を出す場所を決めるものです。

It compares the two sets of information for a pair of points, and decides whether there should be a contour between the points.

って書いてあるんですが、
つまりは2点の情報を比較してどこに輪郭線を出すべきか決める、という訳でOKですかね?

3つ目がcontour shader
これは輪郭線の太さであるとか色であるとか、そういうものを決めるためのシェーダです。

最後にcontour output shader
これはデフォルトではcontour_composite, contour_only, contour_psと3種類あります。
どういう形式(ファイル形式ということではなく)で出力するか、ということを決めるカメラシェーダのようです。

contour shaderはマテリアル(というかSG)に、contour output shaderはカメラに挿します。

じゃあ残りの2つはというと、miContourPresetノードに挿すようです。
完全に間違いでした。miDefaultOptionsでお願いします。
miContourPresetノードってのも実際あるんですが、これは何の為のノードなのかイマイチ分かりません。

少し前の記事になりますが、ボーンデジタルさんのページに記述がありました。
厳密なノード名とかはMayaのバージョンの都合上変わっているようです。
現在はRenderGlobalsのウィンドウからアサイン出来るようです。

 
で、これってRenderGlobalタブのと何が違うの?という話なんですが。
これを使うとRenderGlobalタブでContourをONにしなくても使えるようです。

あとcontourとかcontrastとかをコネクトすると、
デフォルトのRenderGlobalsの設定項目が使えなくなるようです。
つまりRenderGlobalsで設定する項目は、
レンダリング時にcontour storeとcontour contrastの情報として解釈されているようです。
デフォルトのcontourの専用インターフェイスがRenderGlobalについてるってイメージですか。

ただ設定出来る項目がhypershadeに現れるシェーダたちと
RenderGlobalのデフォルトのとで随分違うので、
storeもcontrastも使用せずにRenderGlobalだけで設定して
simple contourシェーダをアサインしてmiファイルに出してみたところ、
maya_contourstoremaya_contourcontrastという、mental imagesではなくAutodeskから提供されているであろうシェーダに置き換わっていました
contour outputもmaya_contouroutputに。
な、なんということ・・・!!

しかも現状でdifferent materialとか選べるのはMayaのやつだけなので、
開発しないならRenderGlobalで設定するのが一番楽で手っ取り早い、ってことかもしれません。

てことで、RenderGlobalsにstoreなりcontrastなりぶっ挿すのは、
contourシェーダを自作した思った場合ぐらいでしょうか。

というわけで、
普通にデフォルトのシェーダ使う場合はどっち使っても変わりないと思うので、好きな方をどうぞ、という感じでしょうか。

これは嘘です。大変申し訳ないっす。。

さて、気を取り直して。
contourシェーダはmental imagesからソースコードが提供されています。
これを元に自分でシェーダを書くことも可能、のはず!!

 
ということで軽くソース見てみました。
僕の環境(winXP 64bit)では
C:\Program Files\Autodesk\Maya2008\devkit\mentalray\shaders\contour
にありました。

で、なんですが、、、

ちょっと、、、、

 
ソースがクソ簡単。。。
そうか、、だからAutodeskが自作シェーダを、、、

mibシェーダはあくまでもサンプルってことですかね。
サンプルコードとしては見やすくて大変結構だと思います:)
 
まぁ全部見てないんでアレかもしれないんですが:P

おそらく自作Toonラインを作る際重要なシェーダはcontour contrastだと思います。
こいつでどうやって線の有無を判断してやるか。これです。
あとMayaはstoreシェーダも作ってるようなので、場合によってはこちらもでしょうか。
って場合によったら全部ですね全部。全部書きましょう(ぇ

ところでcontrastシェーダの戻り値、、miBoolean、、、
ホントに出るか出ないかだけ決めるシェーダなのね、これ。なのね。。

いつかいいアイディアが浮かんだら挑戦してみたいですなぁ<自作Toon

 
ということでした。
諸々サーセン

まぁmrのcontour周り見れたので良かった良かった!必殺開き直りの巻。
 
mental rayはcontourの機構を備えてくれてるので
おそらくToonラインの開発的には一番手軽な環境なんじゃないかと思います。

 
以上、間違いは諸々修正したはずですが、
それでも尚間違ってたらご指摘ください(・・)ノシ

「MayaのToonライン周りメモ(訂正版)」への10件のフィードバック

  1. レンダリング時間がクソ速い上にキレイなので、contour使うことにしました。
    MayaToon3分のが10秒とかだもんなぁ、、勝負にならんというか、、、
    シーン作り直す手間考えても圧倒的に早い。まぁそんなにたいした手間じゃないからやるんですけども。

  2. MayaToonってそんな遅いのか
    ほとんどcontourしか使った事無かったから知らんかった

  3. >rvaくん
    どこにラインが出るか計算するのがレンダリング時にピクセル単位で、じゃないから負荷がすごいかかるんだと思う。
    いちいちオブジェクトみたいなもの配置してるんだと考えればまぁそうなんだろうなとは思うけどさ、、、その頑張りも虚しく普通のラインだしたいケースなんかでは使えない。。残念ながら。。

    アートアニメっぽいような線がウニョウニョするようなものとかなら結構効果的に使えそうな気もする。シビアじゃないラインというか。雰囲気重視のというか。

    とりあえずアニメっぽいのならcontourでOKってことには変わりないかなと。

  4. contour、斜めの線には弱いなー。

    多分隣のピクセル(サンプリングポイント?)との差分をみるから斜めっていうのはアルゴリズム的に弱いんだろうなと思う。
    maxプラグインのpencil+あたりはEPS形式とかでもダセルみたいなので、おそらく線を一回計算している予感。

    mental rayのcontourがラスタでpencil+はベクタとも言えそうな。
    まぁ内部のことは詳しくはわからんけども。

  5. Maya Toon のアンチですが
    Render Setting > Maya Softwareの
    Oversample と Oversample post filter
    のチェックを入れた状態でも、きたないですか?

    いずれにしろ、contourより遅いことには変わりはないですが、、、
    mayaToonは設定するモデルの細かさにも、設定自体にもかなり影響受けるので、大変ですよね。
    paintEffectブラシを割り当てられるので、おーーっていう表現も可能ではあるんでしょうけど、3Dでぐるぐる回すと
    線の描画のしなおしでガクガクなって、使えないしw

  6. >r_itohさん
    あーーーーーOversamplingってここにあったんですか!!
    あるのは知ってたんですが見つけられず、、、感謝です!

    が、MayaToonの問題はOversampling云々以前の問題だったりする気がします。
    今回のケースだと斜めに素直に出て欲しい線が、微妙に傾斜の異なる分断された線の連続になったりとか。

    今回が特殊なケースなのかもしれませんが。。
    と言ってもそんな変なもの作ってるつもりはないんですけどね、、、

    線を検出するってのはいいアイディアだと思うのですが、もうちょっと精度良くと言うか、、頑張って欲しいところです。。

  7. ちわ。
    細かい事ですが、Render Settings の Paint Effects Rendering Options の下ですね。

    分断された線の連続になったりっていうのはあんまり聞いた事無いかも・・・
    もし良ければ絵か簡単な再現データ送ってもらえれば検証して文句言っておきますよー

  8. >ogawaさん
    遅くなりまして:P

    Oversamplingの場所は見つけました!
    ただOversamplingで消えるレベルのものではなさそうなんですよねー。
    たまたまなのかもしれませんが、ぶつぶつ分断されてしまってたのは、、
    もしかしたらocclusion surface?とかを設定してなかったかも、と思いました。
    とりあえず最終的に問題ないクオリティまで詰めると速度の問題でmr優勢!となりました。
    paint effect使うってのは面白いアイディアだと思うんですけどもねー:(

  9. うーん、気になるー。occlusion surface?
    まぁ、明後日来る予定のMをやってたYさん(さっぱり誰だかわかんないねw)なんかは
    さっさと見切りつけてVectorRender使ってたしなぁ。

    PaintEffectポリゴン化していじったりRayTraceしてみたり、色々面白いんだけどね。

  10. >ogawaさん
    mental rayで万事解決です(ぇー
    あれこれいじるには面白いんですけどね。仕事で使うには、というかpencil+と比べちゃうとちょっと・・・みたいな。

コメントを残す

メールアドレスが公開されることはありません。