« チェインアップベクタさんの殺し方。 | トップページ | 検索ワードに勝手レス。 3。 »

2013年8月20日 (火)

全体AO。

何年も前から同じこと何回もやってんのに、久しぶりにやろうとするとやり方を忘れているといういつものパターンでしてね。 だからメモります。 また忘れたらここでカンニングする。


全てのマテリアルにアンビエントオクルージョンを入れたくなることって、あるじゃないですか。 でも全部のマテリアルでレンダツリーいじるのは面倒ですよね。 スクリプト書いて一気に処理でもいいですけど、レンダツリーの構成がマテリアルによって全然違ったりして、一定の法則で AO シェーダを挟み込むようなスクリプトが書きづらいことも多いです。


なので 個々のマテリアルの方はいじらずに、レンズシェーダを使って全体にイッキに AO してしまおう というアレです。


たぶん6年も7年も前から、XSI Base みたいなところでよくこの質問が出ていたと思うんですよね。 「シーンの中のブツすべてに、AO 効果があるレンダがしたいのだが、簡単にできるかしら?」 という。  それを見てやり方を覚えたのですが、昨日久しぶりにやろうとしたらやり方忘れていて焦ったので、書いておきます。



Globalao


画像の通りなんですがね。 こんなやり方でいいでしょうかね? 他にもっといいやり方ありますかね?

色んなブツが、色んなマテリアルを持っています。色も違うし、シェーダの種類も違う。Phong だったり Lambert だったり Arch Mat だったり。

でもレンダされた絵には、マテリアルに関係なく全てのブツに AO 効果が入っています。 これをやりたかったんです。  青いキューブなんか、コンスタントシェーダなんですが、AO 効果が載せられているため、コンスタントシェーダであるにも関わらずキューブの形状が認識できます。




考え方としては、レンズシェーダを使って全体に効果を及ぼしてしまえというものです。

と言うのは、レンズシェーダは基本的に、そのレンズから見えるもの全てに対して何かをしようとするので、これを利用して特定の効果を全体に乗せるわけです。 この場合は AOシェーダの効果を乗算(Multiply)で乗っけています。 それぞれがどういうマテリアルを持っているかとかは関係ありません。 レンズシェーダは、とにかくそこに見えるもの全てに対して何かをするわけですから。 レンズシェーダも色々ありますが、基本的には何でもいいです。 見えるもの全部に対して効く、という特性はどのレンズシェーダでも同じですから。

ただし、そのレンズシェーダが持つ効果自体はオフにしてやらないといけません。 上の画像では、たまたま Lens_Background_Color という、背景色を黒以外にすることができるレンズシェーダを使っていますが、別に黒以外の背景色が欲しいわけではありません。専らレンズシェーダの持つ 「そこに見えるもの全てに対して何かする」 という特性を利用したいだけであって、レンズシェーダの持つ効果(この場合は背景色設定)は不要なわけです。 だから、enable のチェックボックスをオフにして、背景色を設定する効果はオフにしてやっているわけです。





一応手順を書いておくと、

まずカメラ、あるいは Pass に対してレンズシェーダを与えます。 上の画像の場合は Pass に与えています。

レンズシェーダの種類は何でもいいはずですが、レンズシェーダの効果をオフにできるスイッチがあるものを選ばねばなりません。上の Lens_Background_Color ってのはそれができるので、良いんじゃないですかね。 あと、Toon_Ink_Lens なんかでもいいと思います。 Toon_Ink_Lens には Bypass というスイッチがあるので、これをオンにしておくと効果をバイパスする、つまり Ink のラインを描く効果はオフになりますから。

そしてレンズシェーダの結果に対して、レンダツリーで何らかのシェーダなどを間に挟みこんで、欲しい効果を作り出します。 上の場合は AO シェーダを Mix 2 Colors の乗算モードで合成しています。  以上。



このレンズシェーダの 「見えるもの全てに」 の特性を使って、AO に限らず色々面白いことができそうな気がしますよね。 やったことないけど。





あ、本題から外れますが念のために言っておくと、上の例では AO を乗算モードで合成していますが、AO ってものは全体に乗算で合成するのが正しい使い方だ、とかそういうわけでは全然ありませんので、そこは誤解なきようご注意下さい。 

AO はアンビエントオクルージョンなんだから、基本的にはアンビエント部分(直接光が当たっていない部分)に対して合成してやるべきものとしてコンポジットのセオリーがあると思うんですが、実は俺はよく分かってません。 メンタル霊のスタッフだった、誰だっけ、あの人、ZAP さんだっけ、その人のブログで正しいとされる合成方法が記述されていたので、ちゃんとやる時はそれを調べて真似しましょう。 っていうか最近専業コンポジターが多くなったので、その人たちに聞けばすぐ分かる・・・のかな?

まあ、AO の効果をどう使うかはそのアーティストの勝手なので何でもいいんですけど、ただし、一時期、「AO ってものは全体に乗算合成するのが正しい(AOの使い方としてもともと想定されている)使い方だ」 と思い込んでいる人が多かったように見えたので、そういう使い方をしてもあなたの勝手だし俺もそういう使い方よくしてきたけど、本来の AO の使い方(合成方法)として正しいわけではないですよ、ということを念のため書いているだけです。







ちなみに俺の場合、実際の本番素材作りにおいて AO Pass が必要なとき、あるいはビューティPass などに AO 効果を乗せたいときに、このようにレンズシェーダを使ったことはあんまりなかったですね。 というのは、この方法だと AO シェーダの設定はひとつだけになってしまいますからね。 オブジェクトによって AO の設定を変えたくなることもあるので、結局は各自のマテリアルに対してひとつひとつ手作業することの方が多い気がします。


じゃあなんでこの方法をメモするのかというと、簡単お手軽に全体にババっと AO を乗せたいこともよくあるからですよ。

よくあるのはモデリングのチェック画像を作るときなどですね。 AO があるとブツの形状が認識しやすくなるので、モデリングのチェックには便利です。 でも全体が白黒の AO だとかえって見づらくて形状がよくわからない。 だからモデリング時には各オブジェクトに色分けして見やすくする程度の適当なマテリアルをサッと与えておいて、チェック画像をレンダするときにレンズシェーダを使って丸ごと AO を加えてやるという。 

俺の場合こんな風に、本番用じゃなくて仮のレンダ用にこの方法を使うことが多いですかね。





とかなんとか。

.

|

« チェインアップベクタさんの殺し方。 | トップページ | 検索ワードに勝手レス。 3。 »

コメント

コメントを書く



(ウェブ上には掲載しません)




トラックバック


この記事へのトラックバック一覧です: 全体AO。:

« チェインアップベクタさんの殺し方。 | トップページ | 検索ワードに勝手レス。 3。 »