読者です 読者をやめる 読者になる 読者になる

AIプログラムとかUnityゲーム開発について

探索や学習などを活用したAI系ゲームを作りたいと思います。

3Dtextがオブジェクト貫通しないようにする

3DTextだと、壁の向こう側にあっても必ず画面に表示されてしまう。
以下の記事を見るとshaderを書き換えれば仕様を変えられる模様


haraken.hatenablog.com

上記記事を参考に、Unity公式からビルトインShaderをダウンロードして、font.shaderを書き換えた。


Cull Backだと、裏側から見たときに文字が表示されないので、Cull Offのままで、ZTestとZWriteだけ修正した。

Cull Off
ZTest LEqual
ZWrite On


f:id:yasu9780:20170315195507p:plain

キャラの名前が以前は背後から見ても体を貫通して表示されていたのが、体のオブジェクトで遮られるようになった。


ちなみに体を表示するシェーダーは、Cull Backだと、内側から描画されない。例えば、髪の毛の内側とか、スカートの内側が非表示になる。
厳密には2PASSにして、Cull Front→Cull Back と表面、裏面を描画するのだろうけど、それだとDrawCallが2倍になってしまうみたい。
なので、Cull Offで現状ちゃんと表示されている。これならDrawCallは増えないみたい?(このへんの仕様はよく解らない)
厳密にいうと、CullOffだと、裏面が表面に被って表示される場合が出てくるはずだけど、現状特に問題は無いように見えます。

Cull Offでも、上記画像の左側でスカート内部がちゃんと描画されている。

広告を非表示にする