Studio Spica Technical Report Vol.1
CG・SS加工に関して技報を執筆しています。
Copyright (C) SQUARE ENIX CO., LTD. All Rights Reserved.
深度画像
普通の写真画像では、視界の輝度(もしくは色彩情報)が平面にマッピングされています。 これに対して、深度画像では、シーンの奥行き情報が平面にマッピングされます。 深度画像は、Depth Map と呼ばれることもあります。
深度(奥行き)
ビューポイント(カメラ)からオブジェクト(被写体)までの距離を 深度といいます。0~255 の画素値にスケーリングしてグレースケールに画像化するのが一般的です。手前(近い方)を黒にするか白にするかで画像は階調反転しますが、本質的な違いはありません。
カメラに 被写界深度 : Depth of field (DOF) という用語があります。写真でピントが合っているように見える深度の範囲のことをいいます。被写界深度の「深い」か「浅い」かは、ピントの合っている深度範囲が「広い」か「狭い」かを表します。
深度画像においては光学系レンズの焦点に該当するような概念がありません(精度や解像度という概念はあります)。写真のピントとは無関係です。シーンに見える被写体の全てに深度があり、距離ゼロから無限遠方までのどこかの値を取ります。深度の「深い」か「浅い」かは、被写体までの距離が「遠い」か「近い」かを表します。
従来のカメラにおける言葉使いと紛らわしいかも知れません。被写界深度は、「合焦深度帯域」を意味していることになります。また、合焦している深度帯域の「広さ」と「深さ」は異なるものです。浅い深度で広い範囲が合焦したり、深い深度で狭い範囲が合焦したりすることもありえます。
深度画像の撮影
当然ながら、通常の光学カメラで深度情報を得ることはできません。特殊な装置系や画像処理を必要とし、次のような方法が開発されています。 ハードウェア的にはステレオカメラが簡便であり、このタイプの普及が先行するものと考えられます。
レーザーや超音波で距離を測る : 3Dスキャナ
パルス光の進んだ時間から距離を算出する : TOFカメラ
多眼撮影から視差を利用して距離を算出する : ステレオ カメラ
問題点
技術的な課題も多く、高解像度の深度画像を撮ることは容易ではありません。計測には処理時間を要するため、動きのある対象物(距離が変化すること)への対応が困難です。反射光を利用する方法では、被写体の表面の色や反射率などによって距離が測れないことがあります。被写体が遠方になると、原理的に深度測定ができなくなったり、精度が著しく低下したりします。ステレオカメラなどでは、視野の全域をサポートできず、深度情報は写真の一部分に限定されてしまいます。
将来性
新世代のスマートフォンでは 深度センサー や デプスカメラ の搭載も始まっています。将来的には、デジタル写真に深度画像が付随するのが一般化してくることでしょう。
ハードウエアの追加にはコスト的な問題を伴います。近年では、AIを用いて深度を推定する(厳密には正しく距離を測っていないけれど前後関係などをおおよそ決める)処理が多数開発されています。
深度情報を活用することで、写真に様々な効果を付加できるようになります。まずは、被写界深度(合焦深度帯域)の自由な制御が可能になり、ピンボケ表現などの映像加工の方法が拡張されることでしょう。さらに、写真にあとから逆光照明を加えたり、コラージュのように背景の差し替えを行うなど、様々な応用的な映像表現が生まれてくるものと期待されています。
ゲーム世界では
3DCGの世界では、シーンに存在する全てのオブジェクトに位置情報が備わっています。透明でないオブジェクトであれば、前後の位置関係から、前側が見えて後ろ側が隠れるという状況になります。
このあたりまえな状況(前側にあるものが後側を遮蔽すること)を オクルージョン といいます。オクルージョン判定を行なう古典的なアルゴリズムにZバッファ法 と呼ばれるものがあります。少ない計算コストで処理できるため、リアルタイムグラフィックスの用途では効果的な技術です。今日のグラフィックボード(GPU) の多くに採用されています。
3DCGで描かれるゲーム世界では、距離情報を全シーンで常に計算しています。正確に言えば、すべての被写体における深度を計算してからシーン映像が生成されています。したがって、特殊な装置や画像処理を用いることなく、深度画像はシーンにおける既知の情報として存在しています。リアルにはまだ実現できていない次のような性質を持った超高精度の深度画像がゲーム世界にはあります。
通常の写真と同じ高解像度で全画素に深度と輝度の情報がある。
視界全域で無限遠方までをカバーして、距離による精度低下がない。
動きのある被写体であっても精度は落ちない。
余談ではありますが、AIによる深度推定の学習データとしても、ゲーム世界の観測例は大変に魅力的です。深度推定が重要課題となる現場では検討に値するでしょう。
GShade での深度画像応用例
Gshade には、深度画像を利用したシェーダーがいくつか存在しています。筆者がよく利用するものを紹介します
DisplayDepth.fx
3DCGシーンの深度画像を撮ることができます。Zバッファをスケーリングした結果と推測されます。オブジェクトの色彩、照明や昼夜による明るさの違い、天候などの影響は受けません。 カメラ位置(=距離ゼロ)が黒、無限遠が白のグレースケール画像が撮影されます。 空などは背景として絵に描かれたものであり、距離は最大値をとるようです。 雲、霧、炎、雨などもオブジェクトとしての距離情報がなく深度画像には現れません。 これを深度情報のRAWデータとして持っておくと、様々な加工に活用できて便利です。 筆者は、SS撮影する際、同じアングルでこのフィルター単独での撮影も行っておくようにしています。
Chromekey.fx
背景を塗りつぶしてクロマキー画像を作ります。指定した深度より遠いものを塗りつぶす処理です。これによりシルエット画像やオブジェクトを切り出したクリッピング画像を得ることができます。
キャラクターの切り抜きなどをしたい場合はロケーションを工夫するとよいでしょう。背後に段差と距離があるような場所に立つと分離がしやすくなります。キャラクターと同距離(もしくは手前)にあるものは分離されずにクリッピングされてしまいます。
RetroFog.fx
指定した深度範囲に強度を減衰させてグラデーションの色付けを行います。霧のような表現を作り出すことから、fog の名が付けられています。
ノーマルの写真にオーバーレイして映像を作り出します。複数を同時に適用することもできて、深度範囲を変えたフィルターでシーンを塗り分けることも可能です。合成の演算については加算のみで、他は選択できないようです。グラデーションの始まる深度や減衰曲線なども制御できて、多彩な表現が楽しめます。
新しい映像表現へ向けて
実際のカメラ撮影で深度画像が自由に利用できるようになるのは、もう少し先のこととなるでしょう。さらに、本格的な映像表現に耐える品質の深度画像を実現するには、まだ多くの技術的課題が残されています。
しかし、ゲーム世界でなら、リアルの技術的課題を乗り越えて、まだ見ぬ未来で遊ぶことができます。そこでは、時代を先取りした高品質な映像で、新しい表現を模索することが可能なのです。
このような環境は、工学的・美術的なCGの素晴らしい教材でもあります。仮想世界では、未来のテクノロジーを用いたアイデアの萌芽が始まっています。これもまた、このゲームの素晴らしい魅力の一つであると言えるでしょう。
深度画像を利用したSS加工をギャラリーで紹介しています。
よろしければ、あわせてご覧ください。
この記事が気に入ったらサポートをしてみませんか?