カメラのピンボケ対応(Depth Write)
MeshHologramにはいくつかのレンダリングモードがあり、その内の一つTransparent
はデフォルトとして使用されています。
透過を活用しているため、ブレンド具合が非常にきれいです。
しかし、そんなTransparent
には弱点があります。それは深度情報が書き込まれないことです。
深度情報がないと何が困るの?
ポストプロセスで挙げるなら、Depth of Field。VRChatで言うならカメラのピンボケ。
これらの効果が受けられません!
深度情報というのは奥行きの情報です。カメラの視点からどれほどの距離があるのか、その情報を基にカリングを行ったり、ピンボケの演出を加えたりします。
Unityの仕様上、RenderQueue
がTransparent
のマテリアルは深度情報には書き込んでくれないのです。
せっかく見栄えのいいマテリアルをピンボケに適応できないのはもったいないと考えました。
そこでいくつかの解決案を提案します。
しかし、完璧な対応策はないこととご留意ください…。
Cutout
レンダリングモードをCutout
にします。
手っ取り早く対応するならこの方法が最も楽です。
しかしCutout
による透過部分のクリップにより、Transparent
のようなきれいな透過はできません。
いくつかの演出にも影響が出ると考えられます。
Transparent
& DepthOnly
Transparent
はそのままに、完全に複製したオブジェクトのレンダリングモードをDepthOnly
として加える方式です。DepthOnly
は名前の通り、深度情報のみを加えます。
それぞれ、別のオブジェクトとして取り扱うことで、深度情報を加えつつTransparent
なマテリアルの描写も同時に行います。
Transparent
の綺麗な描写は間違いないのですが、以下の問題点が残っています。
- 負荷の懸念点
純粋にマテリアルが二種、オブジェクトが二種と負荷の影響が大きいです。
マテリアルのアニメーション等で操作したい場合も、両方とも同様の変更をしないと適切な深度情報になりません。