セカイのテッペンにUIを描いてみる

ラズパイ止めました

費用対効果がないってことで開発テーマそのものが破棄されました。無念。

というわけで、ゲーム制作に戻ります。

しぐれういを描くわけではない

VRHMDみたいなUI描きてぇナァ」というわけで、実はGW中に着手しており、基本部分は実機動作確認できていたのだけれど、オブジェクトの至近に移動した場合、UIオブジェクトが対象のオブジェクトに埋まってしまう状態で放置していたので、これを解決しようと思う。

尚、わりと本番に近い作成内容なので、画像、ソースは一切なし。
まぁ、大した制作内容ではないんだが、一応ね。

ちなみに今回はシェーダーを理解してる人風に記述しているので、「シェーダー?何それ?」という人は、まずシェーダーについて勉強していただきたい。

docs.unity3d.com

まぁ、筆者も対して理解しとらんケドな。

対策前はどうだったのか?

HMDということで背景透過でフォント他諸々を描画するから、アンチエイリアスは必要だろうということで、アルファブレンディングできるシェーダー記述を調べてみた。

www.wwwmaplesyrup-cs6.work

尚、参考にしたのはこれとは違うかもしれないが、要点は

Tags { "RenderType"="Transparent" "Queue"="Transparent" }

と、

Blend SrcAlpha OneMinusSrcAlpha

である。

アルファブレンディングに直接関連するのは後者だが、例えば戦闘機のキャノピーを描いたとして、キャノピーと、キャノピーを透過した先のオブジェクトをアルファブレンドして描く必要があるが、キャノピーが先に書かれるとZテストで透過した先のオブジェクトの描画が弾かれるため、キャノピーが視線上の最前面にある場合はキャノピーしか書かれず、キャノピーの向こう側に異世界へのポータルが出現することとなる。

これを回避するための前者記述である。

docs.unity3d.com

ついでにBlendはこちら。

docs.unity3d.com

しかしこれだけでは、複数UIが重なった場合、やはりZテストの問題が解決できない。

ならば「Zバッファに書き込まなきゃZテストしないからいいじゃね?」ということで、

ZWrite Off

を記述。

docs.unity3d.com

これで万事解決ヤッター!と思いきや、透過しない近接オブジェクトにUIが埋もれた...というのが、事の顛末である。

で、どうしたのか

素直に他力本願。

qiita.com

「Zテストさせない」←まちがい
「Zテストに必ず成功する」←せいかい

ZWrite Off

を削除して

ZTest Always

で無事解決。というか、マニュアルよく読めと。