デプスマップを出力する方法

LightWave のデプスマップ (Depth Map) を出力する方法がややこしいのでまとめる。
(LW9.6もLW11も大体同じ)

ノーマライズするかしないか

まず、どこからどこまでの距離をマップに含めるか決める。
画面内のオブジェクトの手前から奥までを自動的に含めることをノーマライズと言う(らしい)。
レンダーバッファでそのまま出力するとノーマライズされる。

静止画の場合はノーマライズすればいいが、アニメーションの場合、画面内のオブジェクトが入れ替わる度にデプスの距離が変わってしまうのは都合が悪い。その場合は距離を指定する。
距離指定はレンダーオプションの「Zバッファー最小最大」で行う。

デプスバッファアンチを使う

デフォルトではデプスにアンチエイリアスがかからない。
以前書いたようにデプスバッファアンチを使えばアンチがかかるが、利点と欠点がある。

・背景が映る場合、オブジェクトの背後に、デプスに含まれる距離にカメラに垂直に板ポリを置かないといけない。

ノーマライズすれば、板ポリの距離までのデプスを自動的に作ってくれるので楽ではある。

・しかしノーマライズするとデプスの開始位置(手前の距離)は指定できない。手前にオブジェクトが横切るようなアニメーションだと距離が変わってしまうので、「Zバッファー最小最大」を指定する必要がある。

アンチは諦める

デプスバッファアンチが使えない場合、アンチは諦めるという手もある。
アンチなしで2倍の解像度でレンダリングして半分に縮小する。

透明マップ問題

そもそもの問題として、デプスバッファは透明マップが抜けない。
透明マップを抜きたい場合は以下を検討する。

フォグを使う

フォグのタイプを「リアリスティック」にすると、フォグで透明マップが抜ける(9.6からの機能)。
サーフェイスを白か黒一色にしてフォグをかければデプスの代わりになる。
この方法だとアンチエイリアスもかかる。

オブジェクトパネルの「マットオブジェクト」にはフォグがかかるので、これを使って白か黒にすれば良さそうに思えるが、これを使うと透明マップが無効になるので意味ない。

なのでサーフェイスが白か黒一色のオブジェクトを用意する。

フォグの範囲は、カスタムオブジェクトの Range Finder でカメラからの距離を測るか、OpenGL の「フォグ範囲表示」で見極める。

カメラからの距離を使う

何らかの事情でフォグが使えない場合、サーフェイスのグラディエントで "Distance to Camera" を使ってカメラから遠ざかるほど黒く(白く)する方法もある。

余談

LWのデプスは黒が手前になっているが、3DCG界隈では白が手前なことが多いようだ。
AEやフォトショで使う分にはどちらでもいいんだけど。