2010-03-23

Nuke ReflectionMapping

LTEの藤田さんに協力(というか丸っぽ)をしていただき、Reflection MappingをNukeで再現しています。Expressionでこねています。



3dsmax側でレンダリングした画像とほぼ一緒の結果を得れております。
NormalパスとPositionパスを3dsmaxから出したものでもやってるのですが、Positionパスになぜかアンチがかからないのでジャギーが見えます・・・

解説などはまた後日行います。

8 comments:

  1. positionパスはアンチかけてしまうと謎のポジション(サンプリング点でもなく特にシェーディングと関係ないポジション)情報をもったピクセルが生まれてしまうため、アンチがかけられないんだと思います。本当はZ-Depthパスとかもかけちゃだめなはずなんですが。。こういうのってどうやって対処したらいいんでしょうかね、実際、、

    ReplyDelete
  2. なるほど、そういう理由か・・・
    じゃあ、ダブルレゾで対応ってことになりそうですね・・・
    まぁ、PとN自体はレンダリングコストそんなにかからないし。

    ReplyDelete
  3. 完全になおるかどうか分かりませんけど,umpremultしてから計算して,最後にpremultし直してみたらどうでしょうか.少しはましになるかも.

    ReplyDelete
  4. ますおさん!
    コメントありがとうございます。
    一番気になっているのは、18秒付近の注ぎ口と本体との間のジャギーなんです。確かにPPassのその部分はささくれ立ってるんですよね・・・ 難しい・・・

    でも、面白いです。

    シェーダーなるものに俄然興味がわいてきました!

    ReplyDelete
  5. 入力解像度を上げてコンポ、出力表示は縮小してというのがいちばんの解ですが、これだとデータサイズが大きくなるという問題があります(ただ、P と N だけならあまり問題にならないかもしれません).

    あとはカバレッジマスクパスを出して、カバレッジマスクを使ってなんちゃってアンチという手がありますが、これだと注ぎ口と本体との間のジャギーはカバレッジマスクでは消せないという問題があります.

    あとは、ちょっとカスタムプラグイン書かないといけませんが、バイラテラル upsample フィルタを使ってアンチという手もあったりします(主にゲーム方面で使われている手法です).

    ReplyDelete
  6. ああ!syoyoさん! 
    ご本人にコメントいただけるとは!ありがとうございます。
    ガバレッジでアンチって言うのは何度か試したことがあるのですが(もちろん周辺という意味でのエッジ部分で)、一度も満足を得たことが無いです。実際にはどうやって使うのでしょうか?
    また、お会いした時にでも訊いて見たいと思っています。

    プラグインは、そりゃ出来ればこの上なしなのでしょうが、なんかNukeつかってると、あのExpressionでどうにかこねれないかって、それバッカリを考えてしまいますw

    明日よろしくお願いします。

    ReplyDelete
  7. すごく興味深いです。
    NworldとPworldからReflectionVectorを作成しているんでしょうか?
    解説期待しています!

    CoverageはCombustionが対応していましたよね、確か。

    ReplyDelete
  8. ぽにょ さん! コメントありがとうございます。

    全部フジタさんに教わったのですが・・・
    順序としては、カメラ位置とPworldから視線ベクトルを計算して、さらにその視線ベクトルとNworldのベクトルの積を用いて、
    反射ベクトルを計算して、さらに、その反射ベクトルから、反射マッピング用のUVを作成するって具合です。

    この間フジタさんに実際にお会いしてレクチャーしていただいて、かなり理解が進みました。
    また、コレの解説のエントリーも書こうと思っております!

    このケース(本体と注ぎ口)では、ガバレッジでは難しそうって自分的結論に達しております。ダブルレゾ対応かとw

    今、あるケムクジャラの生き物を動かしておりまして、このしくみをそいつの目で用いようと、色々と試し中です。
    日の目を見れるように精進したします!

    ReplyDelete