本日は MRTK の小ネタ枠です。
MRTKのStandardシェーダを利用して特定のオブジェクトを常に最前面に描画する方法を記事にします。
サンプルプロジェクトの作成
最前面の描画を試すための、MRTK を取り込んだサンプルプロジェクトを作成します。
MRTKのインポートと基本設定
MRTK のインポートと HoloLens 向けプロジェクトの基本設定を行います。
手順の詳細は以下の記事を参照してください。
bluebirdofoz.hatenablog.com
サンプルシーンの準備
以下の MRTKStandard シェーダを設定した2つの Sphere オブジェクトをシーンに配置しました。
デフォルトではオブジェクトの重なり合った部分は隠れて見えないようになっています。
常に最前面に表示
緑色側のオブジェクトが常に最前面に表示されるようマテリアル設定を変更してみます。
[RenderingMode]を[Custom]に変更し、[DepthTest]を[Always]に変更します。
次に[RenderQueueOverride]の値を[2001]に設定します。
これで緑色側のオブジェクトが常に最前面に表示されるようになります。
緑色側の[RenderQueue]の値は必ず、赤色側の[RenderQueue]の値より大きい必要があります。
デフォルトの[-1]では[RenderQueue]に[2000]の値が設定されているため、今回は緑色側に[2001]の値を設定しました。
DepthTestのAlways
本設定ではデプスのチェック結果が必ず True となります。
これにより本マテリアルの面は深度の重なりに関わらず、必ず描画が行われます。
www.khronos.org
注意事項
本マテリアルの面は深度の重なりにも関わらず、必ず描画が行われます。
これはオブジェクト自身の前後関係にも当てはまるため、予期しない見た目になることがあります。
一例として以下のような凹みのあるオブジェクトを作成しました。
これをシーンに取り込んで作成したマテリアルを適用してみます。
すると以下の通り、凹みの内側の面まで深度の影響を受けずに描画が行われてしまい、見た目が変になってしまいます。
この手法で最前面に表示するオブジェクトを綺麗に表示したい場合は、常に一方から見える面が重ならない形状である必要があります。