- 2007/12/15 21:15
- Maya
Mayaで影を別パスで取りたい、と思って、いろいろ試しました。
何をいまさら、と言わないでください。
今まではuseBackgroundで分けていたのですが、
そういえばRenderPassなんて機能もあったな、と思って、テスト。
まずRenderPass。
結果、OUT。
こりゃ評判悪い訳だ。
なんかよくわかんないアーティファクトだらけ。
こんなんになる訳ない。そんなセッティングしてないもん。
なんとも気味の悪い画像が出力されたので、早々に切り捨てて次。
そしていつものuseBackground。
こいつもOUT。ぜんっぜんダメ。
castShadowはキレイにとれてるけど、selfShadowがおかしい。
明らかに、ここは影ですよ、ってところが、影にならない。
何で!?今まで普通にuseBackgroundで取れてたのに!と思って考えたら、
selfShadowってちゃんと分けたことなかったかも。。
つーか今年一年、9月までほとんどMayaでまともに仕事してなかったので、
どうやってたかなんて詳しい話はほとんど忘れてます。
Hahaha!
しかしuseBackgroundでなぜ問題が起きたかがわかんないので、
モデルに原因あるんじゃねーかなど、さまざま原因を考えて、いろいろやってみたのですが、
どうにも直らないので、これはuseBackgroundの仕様、と考えました。
そんで、困ったなぁ、と、諸先輩にご相談。
ご助言のおかげでなんとか解決。ありがたや。
で、どうしたか。
すごく簡単です。
白Lambertに、Color赤でShadowColor緑のライトを使います。
Lambertは1.0, 1.0, 1.0の白、diffuseは1.0に、
LightはColorに1.0, 0, 0、ShadowColorに0, 1.0, 0を設定します。
こうすると、RプレーンはDiffuseパス、GプレーンはShadowパスとして取得できます。
でも目的はShadowパスなので、Rはとりあえず捨ててもOKです。
出力された画像は、なかなか目の痛い感じのものになってしまいますが、
目的はしっかり果たせるので、気にせず。
つーか、パス分けなんてレンダラがやった方が間違いなく効率いいんだから、
その辺ちゃんと考えてレンダラ設計してほしかったです<某社様
その辺は次期製品に期待します。
ただ、決してMaxになれ、ということではないのでお間違えのなきよう、、、、
SelfShadowを取る時って、みなさんどうなさってるんですかねー。
もし他にもっと良い方法ご存知だったら是非教えてください。
—————————————————————-( ここから追記分 )
おーーーーーーーーーーーーーーーーー
しまつた。
おれ、やつちまつた。
影取るためにもっと簡単な方法が見つかりました。
lightのColorを黒、shadowColorを白にすると、
Shadow部分だけが白く表示されます。
shadowColorを赤にすると、Rプレーンのみ使用されます。
なるほど!!!
普段影色って黒で設定しているので、光が当たっていない=黒だと思っていましたが、
レンダリングの手順を考えると、影も塗っているだけなんですよね。
すげー盲点でした。
チャベス先生ナイスアドバイスでございます。
なるほどなー。
これは楽だしいいなぁ。
————————————————————–( ここから追々記分 )
どうやら影は塗っているわけではなくて、ShadowColorを元にShadingしている模様です。
こんな感じ。
左側がLightColorに白、ShadowColorに黒を入れてレンダリングしたもの、
右側がLightColorに黒、ShadowColorに白を入れてレンダリングしたものです。
つまり、lightColorを黒、shadowColorを白にして、マテリアルを変えずにレンダリングすると、
影になった部分は、白いライトが当たったときのようにレンダリングされる、ということ、で良いんでしょうか。
なんか、、新しい発見。。
まさかこんなところまで突っ込んでやることになろうとは思いもよらず。。。
思いがけず、なかなか良い収穫。
GJ。
なんだかんだありましたが、
白lambertにlightColor黒、shadowColor白(もしくはRGBのどれか)、ってのが使いやすそうな感じってことでとりあえずOK?
- Newer: [ 雑記 ] 週末
- Older: [ CG ] mental images が NVIDIA に買収されたっぽい。
Comments:9
- hajime 2008/01/23
賢すぎ!
- tai 2008/01/23
>hajimeさん
うおっ、今ごろこんな場所にコメントがあるとは意外なww
意外な計算結果になって、CGの計算過程の一部を垣間見ることが出来た!と喜んでます!- tsqp 2009/12/25
願わくば、ボックスの黒い部分も取りたいです。
ボックスの黒い部分も、一応光のあたっていない「影」
の領域になるので、この部分も取れたらなあといつも考えているんですが、
実際は、シェーディングの暗い部分の領域なんですよね。
mentalrayのmip_matteshadow_mtlというシェーダーを使えば撮れるんですが、シェーダーを変えずに取れないものかと
日々悩んでおります。- tsqp 2009/12/25
ごめんなさい、ウソつきました。
mip_matteshadow_mtlでも取れませんでした。orz
うーん、前やったときは取れたと思ったんですけどね。
すみません、忘れてください。- tai 2009/12/25
>tsqpさん
コメントありがとうございます。> 願わくば、ボックスの黒い部分も取りたいです。
ですね。わかります。
でもこれはlambertとかで代用できるはずなので、それでいいかなーと思ってスルーしてました。
取り立てて必要になったこともないですし<白lambertを反転とかで使用してます。
何かのレンダラでは取れた気もしますけど、V-Ray?mip系のシェーダは使用したこと無いのでチャレンジしてみます。情報ありがとうございますっっ!
- tsqp 2009/12/25
あ、わかりました。
p_shadowというカスタムシェーダでした。
mip系ではなかったです。
リンク貼っておきます。http://www.puppet.tfdv.com/download/shaders_p.shtml
これを使えば、全部取れます。
これとmib_shadow_transparencyやmib_opacityなどと共に使用すれば、アルファ抜きにしてる部分も抜きの状態で取れますので、お試しください。- tai 2010/01/01
>tsqpさん
おー、ロシア人シェーダライター(?)puppetさん(?)のp_シェーダでしたか。
ソースコードも公開されているみたいですし(太っ腹!)、今度ちょっと試してみたいとおもいます:)情報どもです!!
- nochiu 2010/11/24
同じ問題で、ココを見に来ました。
ただ、いろいろやった結果、落ちた影だけでしたら、mentalrayでUseBackgroundシェーダーで抽出できました。ただし、カラーチェンネルのみに書き出されます(アルファチェンネルは記録されません)
方法としては、レンダーレイヤーのレンダーパスオプションのタイプをMattにするだけです。
複雑なシーンでは実験してないので、何とも言えませんが、上記シェーダーとレンダーレイヤーを使えば実現可能なので、シーンの再構築しなくてよいぶんお気楽だと思います。
参考になれば。- tai 2010/12/01
>noichuさん
コメントありがとうございます。
落ちた影というのは他オブジェクトへの影のことでしょうか。
そういうことであればたしかにおっしゃるとおりの方法で取れるんですが、今はself shadowでもいけるんでしょうかね?
これを書いた当時僕が使っていたバージョンでは、お教えいただいた方法ではできなかったと記憶しています。
今はmental rayにも少し手が入っている可能性もありますし、状況変わっているのかもしれませんね:)
Trackbacks:0
- Trackback URL for this entry
- http://blog.taikomatsu.com/2007/12/15/maya-%e5%bd%b1%e3%82%92%e5%88%a5pass%e3%81%a7-%e8%bf%bd%e3%80%85%e8%a8%98/trackback/
- Listed below are links to weblogs that reference
- [ Maya ] 影を別Passで ( 追々記 ) from memlog