テラシュールブログ

旧テラシュールウェアブログUnity記事。主にUnityのTipsやAR・VR、ニコニコ動画についてのメモを残します。

Unity 2DやUIで、「テクスチャにRGBA16指定した時に透ける」問題を回避する方法について

問題

どうも「テクスチャのフォーマットがRGBA16」の「透過色を持つ画像」を使用している場合、テクスチャの色に少し透明が追加され、後ろにあるテクスチャの描画結果が薄く前面に表示されてしまうバグがあるみたいです。

Unity Issue Tracker - Using DirectX11 textures become transparent

f:id:tsubaki_t1:20141226231932p:plain

お分かり頂けただろうか…?

確かに足がうっすらと透けており、既に彼女がこの世の者でない事が分かります。

この現象については、unity 2DでのPNGやTIFFファイルの透過バグ: ドット絵とアイデアとで詳しく説明しています。

対策

これを回避するには、UnityのエディタのDX11モードを停止させる必要があります。要するにエディタがDX11モードで描画しようとして上手く動作していない問題でした。*1

 

 DX11モードを停止させるには、以下の手順を行います。

  1. メニューバーEdit>ProjectSettings>Playerを選択
  2. PlatformはStandaloneを選択

    f:id:tsubaki_t1:20141226232628p:plain

  3. Other SettingsUse Direct11のチェックを外す

    f:id:tsubaki_t1:20141226232612p:plain

  4. Unityエディタ再起動(したほうが良い)

DX11モードはDX11 on **** GPUみたいな形で表現されます。Use Direct3D 11を外すと下のように表記が消えます。

画像は左がRGBA16(透けてる)、右がRGBA32(透けてない)です。

事前の減色処理かけてないので色の境目が見えるのはアレとして、とにかく裏に透けなくなっています

DirectX 11を使用

f:id:tsubaki_t1:20141227020200p:plain

f:id:tsubaki_t1:20141227021634p:plain

DirectX 11を使用していない

f:id:tsubaki_t1:20141227020404p:plain

f:id:tsubaki_t1:20141227021642p:plain

余談

なお「今まではなってなかったけどバージョン上げたら発生し始めた」理由は、Unity 4.5からDX11モードが標準でONになった為と思われます。

DX11モードを標準でOFFにしたい場合は、以下の様な手順で強制DX9モード起動が設定出来ます。

  1. Unity.exeのショートカットを作る

    f:id:tsubaki_t1:20141227020453p:plain

  2. ショートカットのプロパティを開く(右クリック>プロパティ)
  3. ショートカットに「Unity.exe -force-d3d9」と記述

    f:id:tsubaki_t1:20141227020058p:plain

これで起動時に-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 - デザインやマークアップの話

*1:DX11モードを停止すれば問題は解決しますが、問題の発生条件はもっと複雑かもしれません。例えば非力なGPUでDX11モードを動かしてる等々