« ハリー・ポッターとアズカバンの囚人 | メイン | MGS3日記(5) »

2004年12月25日

後処理DOFいろいろ [ CINEMA 4D R9 ]

 後処理のDOFについてイロイロやってみた。

 本題に入る前に、フリーウェアの被写界深度ソフト(Windows用)があるので紹介しておく。

 TB's Defocus Filter

 Photoshopプラグインではなくスタンドアロンなので、Photoshopがなくても使える。得られる結果もPhotoshopCSのレンズぼかしと大差ないので(サンプル後述)、本記事でPhotoshopCSを使ってる処理はTB's Defocus Filterで代替できる。レンズぼかしのためだけにCSにアップできるかボケという人におすすめ。

 あと、OSX用の被写界深度ソフトもあるんだけど、UNIX覚えて出直して来やがれみたいな仕様なので、僕は前チャレンジしたけど結局使えなかった。これも一応紹介しておく。

 Blan'Fo Straight

 で、被写界深度フィルタといえばIris Filter、今はフリー版もあるみたいだけど、色々いわくのあるソフトなんで(詳しくはググってくれ)僕は使わないと思う。

★デプスと元画像

 CINEMA4Dの特殊効果のDOFを使った場合、カメラから出力されるデプスは「焦点が黒/前後のボケが白の双方向のグラデーション」となるのだが、PhotoshopCSのレンズぼかしは「シーンの手前>奥への一方向のグラデーション」を使うことを前提にしているので、今回のデプスはそっちに合わせて出している。

 上段がデプスチャンネル、下段がDOFをかけていない画像(レベル補正だけしてある)。

041225_dof_1a.jpg

★TB's Defocus Filter vs PhotoshopCS

 前述のTB's Defocus FilterとPhotoshopCSのレンズぼかしの比較。どちらも深度情報として上記のCINEMA4Dのカメラから出したデプスを使っている。

041225_dof_1b.jpg

 比較してみるとぼけ足はPhotoshopのほうが奇麗だが、なにしろTB's Defocus Filterのほうはタダなので、コストパフォーマンスからすると無限大だ。

★深度情報にフォグを使う〜屈折がある場合

 前記事「True DOF つづき」の銃次狼さんのコメントにあった、デプスのかわりにフォグを使って深度情報を得るという方法を試してみた。デプスはオブジェクトの距離しかみないが、フォグは反射や透過(屈折)も反映されるというわけ。

 問題なのは、反射・屈折の入り乱れたシーンの場合、画面の同じ場所に「直接像」「反射像」「屈折像」が重なっていること。後処理の被写界深度の場合は(当然だけど)同じ場所で「直接像はぼかさずに反射像だけぼかす」というようなことはできない。つまり、深度情報に使う画像を作る際に、その場所のぼけを何を基準にして決めるか、「直接像」「反射像」「屈折像」のどれを重視するのかを判断しておかなくてはならないことになる。

 まずこれは、元のマテリアルをほぼそのまま残してフォグをかけたもの。
 ガラス越しの像が屈折している(しかもフレネル効果アリの)ためと、背景が無限遠=フォグの濃度が最大となってしまうため、ガラスの屈折像の明度差が大きく、ボケがガタガタになっている。

041225_dof_1c.jpg

 そこで、屈折像の深度は捨てることにして、床面の反射像を重視した設定に変えた。
 ガラスのマテリアルを不透明にし、床面は均一の反射を設定。深度情報は直接像では通常のデプスと変わらないが、ガラス器の鏡像が正確になる。ただし、床面がすべて無限遠ということになってしまうので、床の市松模様もかなりボケている。もし床が無地の鏡面であれば問題ない。

041225_dof_1d.jpg

 パッと見で違和感があるのを問題にするなら、オブジェクトの輪郭のボケ具合がガタガタになるのがいちばんまずい。この例のガラス器やビー玉のような屈折像を多く含んでいる場合は、深度情報に屈折を反映させないほうがよさそうだ。

★深度情報にフォグを使う〜屈折がない場合

 次はもっと単純なシーンで。
 反射と透過はあるけど、ガラスが平面なので屈折はごくわずかしか起きていない。下の画像、上段がDOFなし、下段がエクスプレッション+シーンモーションブラーの「True DOF」によるもの。

041225_dof_2a.jpg

 通常のデプスとPhotoshopCSのレンズぼかしを使うと、下の画像のようになる。ガラス越しに見える部分のボケ具合が明らかに間違っている。

041225_dof_2b.jpg

 で、こっちがフォグによる深度情報を使ったほう。ガラスの向こうのボケ具合はわりと正確になった(ガラスが完全に透明でなかったので、わずかに差がある)。ガラスの輪郭が多少乱れているが、先のガラス器とビー玉のやつに比べればかなり良い出来だ。

041225_dof_2c.jpg

★まとめ

 今回のテストには含まれていないが、マテリアルのアルファを使った場合にも、アルファがデプスには反映されないため、深度情報に間違いが生じる。こういうときもフォグで深度情報を得るのが有効だ。まとめると、以下のようになる。

 フォグの深度情報が有効なケース
 ・屈折しない板ガラスがある
 ・無地の鏡がある
 ・アルファで抜いたオブジェクトがある

 要注意なケース
 ・反射や屈折が複雑
 ・反射面や透過面にテクスチャがある

 なお、オブジェクトバッファやマルチパスを使って要素を切り分けてからDOFをかけて合成するという方法も試してみたが、合成するマスクの輪郭で問題が生じやすく、辻褄合わせが非常に困難だった。通常のデプスかフォグによる深度情報でうまくいかない場合は、後処理でジタバタせずに素直に「TrueDOF」をやったほうが早そうだ。レンダリングだけなら人間が手を動かす必要もないし。

投稿者 ヒロツ : 2004年12月25日 06:04

トラックバック

このエントリーのトラックバックURL:
http://kowloo.net/hirotsu/mt/mt-tb.cgi/74

コメント

こんばんは。フォグの検証ありがとうございます。

フォグを使いたいと思った理由は、人物の髪の毛を含めた絵でボカシを使いたかったからだったのですが、
同時に、フォグデプスの決定的な不具合を予想しつつ、思考停止に陥ってました。

>問題なのは、反射・屈折の入り乱れたシーンの場合、画面の同じ場所に「直接像」「反射像」「屈折像」が重なっていること。

まさにこういう事だったんですね。納得。

今回の記事を読んで、フォグデプス画像を数種類用意して、マルチパスで反射と透過を分けて処理などと言う事も考えましたが、
後半の記事を読む限り、難しそうですね。手間も半端ではありませんし。

ぼかしフィルターについては、以前検索して
backxfore.mine.nu/memo/defocus/index.html
ここを発見したのですが、これもwin専用でした。
winの使える環境なら、選択肢は色々ありそうです。

投稿者 銃次狼 : 2004年12月25日 22:29

さすがにまとめるのがうまいですね。
ぼくも検証結果をまとめようとしてみましたが、
自分でも整理がつかない意味不明な文章になってしまいました(笑)
思ったより使える機会が多そうなので、助かります。

> 銃次狼さん
僕も制作日誌、読ませていただいてます。
リンクのボカシフィルターですが、ヒロツさんの貼ったOSX版の物とリンク先は同じなようです。
もし、win版を他にご存知でしたら教えてください。

投稿者 kuro : 2004年12月26日 17:17

> kuroさん

ありがとうございます。

今リンク先確かめたんですけど、同じフィルターみたいですね。うっかりしてました、、
僕も以前から何度かボカシフィルターの検索はやっていたのですが、今の所、他に見つけられてません。
MacOS9用に関しては、多分全滅っぽいですし。

投稿者 銃次狼 : 2004年12月26日 20:04

人物の髪の毛の場合はアルファを高解像度にして
なるべく「半透明」なピクセルが少なくなるようにすれば
フォグデプスでうまくいきそうな気がします。

デプスにしろオブジェクトバッファにしろ
もうちょっと気の利いた仕様にできそうな気がするんですが……。>C4D

投稿者 ヒロツ : 2004年12月26日 23:50

コメントしてください




保存しますか?


※URLが多数含まれているとコメントスパムとみなされることがあります
※投稿後すぐにコメントが反映されない場合はリロードしてみてください