問題
どうも「テクスチャのフォーマットがRGBA16」の「透過色を持つ画像」を使用している場合、テクスチャの色に少し透明が追加され、後ろにあるテクスチャの描画結果が薄く前面に表示されてしまうバグがあるみたいです。
Unity Issue Tracker - Using DirectX11 textures become transparent
お分かり頂けただろうか…?
確かに足がうっすらと透けており、既に彼女がこの世の者でない事が分かります。
この現象については、unity 2DでのPNGやTIFFファイルの透過バグ: ドット絵とアイデアとで詳しく説明しています。
対策
これを回避するには、UnityのエディタのDX11モードを停止させる必要があります。要するにエディタがDX11モードで描画しようとして上手く動作していない問題でした。*1
DX11モードを停止させるには、以下の手順を行います。
- メニューバー>Edit>ProjectSettings>Playerを選択
- PlatformはStandaloneを選択
- Other SettingsのUse Direct11のチェックを外す
-
Unityエディタ再起動(したほうが良い)
DX11モードはDX11 on **** GPUみたいな形で表現されます。Use Direct3D 11を外すと下のように表記が消えます。
画像は左がRGBA16(透けてる)、右がRGBA32(透けてない)です。
事前の減色処理かけてないので色の境目が見えるのはアレとして、とにかく裏に透けなくなっています。
DirectX 11を使用
DirectX 11を使用していない
余談
なお「今まではなってなかったけどバージョン上げたら発生し始めた」理由は、Unity 4.5からDX11モードが標準でONになった為と思われます。
DX11モードを標準でOFFにしたい場合は、以下の様な手順で強制DX9モード起動が設定出来ます。
- Unity.exeのショートカットを作る
- ショートカットのプロパティを開く(右クリック>プロパティ)
- ショートカットに「Unity.exe -force-d3d9」と記述
これで起動時に-force-d3d9が実行されDX9モードで起動します。
その他のコマンドは以下のリンクから確認出来ます。DX10モードとか。
Unity - Manual: Command line arguments
参考
unity 2DでのPNGやTIFFファイルの透過バグ: ドット絵とアイデアと
Unity Issue Tracker - Using DirectX11 textures become transparent
16-bit compression makes textures transparent? - Unity Answers
Unity - Manual: Command line arguments
Unityやるには必須!RGBA画像減色の基礎をまじめに書いてみた | KAYAC DESIGNER'S BLOG - デザインやマークアップの話