Zバッファだけ更新するシェーダーでオクルージョンの実装


今日の目的

ARでのなんちゃってオクルージョンをやってみる。

シェーダー

Zバッファのみに書き込むシェーダーです。これをマテリアルに当てます。

Shader "Unlit/DepthOnly"
{
    SubShader{
        // Render the mask after regular geometry, but before masked geometry and
        // transparent things.
        Tags {"Queue" = "Background+10" }

        // Don't draw in the RGBA channels; just the depth buffer
        ColorMask 0
        ZWrite On

        // Do nothing specific in the pass:
        Pass {}
    }
}

出典を忘れて申し訳ないのですけど、どこかで紹介されてたものです。

テスト

まずは、テストでEditor上で動かしてみます。

Clear Flagsは、ARを前提として#000000でSolid Colorになっています。周辺の直方体が通常のマテリアル。真ん中の球にZバッファのみ書き込みShaderを当ててあります。うまくいきそうですね。

HoloLensで実装

実際にHoloLensで実装してみました。
我が家にあった、箱ティッシュの箱を採寸して、同じ大きさのCubeを抜いています。
そのまわりに緑の帯を回してみました。
Cubeの位置合わせは、Bluetoothキーボードをつけて、手動で合わせました。

ちなみに、HoloLensのキャプチャや録画だと、目の位置とカメラの位置が違うので、それなりにずれて写ってしまうようで、目で見ているときは結構きれいにオクルージョンしていたのが、キャプチャした画像や録画だと、いまいちということがあり、キャプチャの方でうまく見えるように、動かしたりもしています。
また、若干のずれはやはり発生するので、オクルージョン用のオブジェクトは、一回り大きめに作っておくのがよいのでしょう。

おわり

ぎりぎりになりましたが、今日の分は以上です。