半透明シェーダーで他人を禿や裸にしてしまう問題をある程度修正する

この記事は約2分で読めます。

既にわたしのアバターを幾度と見た方であれば分かると思いますが、わたしのアバターの翼は半透明となっています。

どういうことかというと、半透明ということは向こう側が透けて見えるということです。

翼のところをよく見ていただくと、向こう側の景色が透けていることが分かると思います。
これはシェーダーによって実現していますが、シェーダーの設定が不適切な場合は思わぬ副作用をもたらします。

副作用

起こり得る副作用としては、以下のようなものがあります。

半透明のオブジェクトの向こう側にあるオブジェクトが消えてしまう場合があります。
一例として頭が消えますが、場合によっては頭髪、服が消えてしまう場合もあります。服が消えてしまった場合、全裸になってしまうこともあって大変まずいです。

同様の問題は、ワールドに設置される水面シェーダーなどでも発生します。

わたしが微妙に間違っていることを書いている気がした

【追記】2022/9/19

ごめんなさい。ZWrite周りの仕様を考慮していない記述だったかもしれません。
ZWriteにも触れている以下のサイトも参考にしてみてください。

また、極端にレンダーキューを高く設定することによる副作用もあるようです。

Unityで半透明化のためにRender Queue(レンダーキュー)やZWriteと戦ってみた|リクルス|note
ここに書いてある内容は下記のサイトやドキュメントを参照しつつ、自分で色々いじり、調査した結果をまとめたものになります。 内容の確実であるという保証は出来ません、その点ご理解ください。 ShaderLab :Culling と Depth T...

次以降のページではレンダーキューのみに触れています。また、レンダーキューを可能な限り高く設定する方法によって解決を図っています。

タイトルとURLをコピーしました