unityでいってみよう!

unityがチョットワカル位の人のブログ

Texture Qualityに関する実験

はじめに

Quality WindowにあるTexture Qualityですが、マニュアルには下記のように説明されています。

テクスチャを最大解像度で表示するか、何分の一かで表示するかを選択します(解像度が低い場合は処理オーバーヘッドを減少させます)。選択肢は Full Res (フル解像度)Half Res (1/2 解像度)、Quarter Res (1/4 解像度)、Eighth Res (1/8 解像度) です。 

つまりどういう事なのでしょうか。

今回はこれについて調査を行います。

https://docs.unity3d.com/ja/current/uploads/Main/QualitySettings2019-1.png

 

 

実験

全く同じ内容のTextureであるが、Mipmapが有効・無効の2種類をCubeに張り付けて並べてSceneに配置します。

向かって左側がMipmapが有効、右側が無効になっています。

CameraとCubeの距離はMipmap Level1(最大解像度)のものが使用される距離となっています。

これをTexture QualityをFull Res、Half Res、Quater Res、Eight Resに切り替えてアプリをビルドしてその結果を比較します。

 

f:id:kimukats:20200501142450p:plain

Full Res

f:id:kimukats:20200501142702p:plain

Half Res

f:id:kimukats:20200501142737p:plain

Quater Res

f:id:kimukats:20200501142349p:plain

Eight Res

Mipamapが有効になっているTextureのみ解像度が劣化しているのが見て取れます。

マニュアルではテクスチャと記載されているのでアプリ内の全てのテクスチャに影響があるかのような印象を受けますが、実際にはMipmapが有効なテクスチャに対してのみ効果があるようです。

よって機能の説明は下記の方が理にかなっているいるように思えます。

Mipmapが使用するレベルを選択します(解像度が低い場合は処理オーバーヘッドを減少させます)。選択肢はFull Res(Level 1から使用します)、Half Res(Level2から使用します)、Quater Res(Level  3から使用します)、Eight Res(Level 4から使用します)です。

UnityEditor上でTexture Quality毎にInspectorで表示されるTextureのmipmap毎の内容が代わっていることが確認できます。

f:id:kimukats:20200501150800g:plain

 

また、実機(Android Pixel3 XL)で確認した所、Texture Qualityの値によってTextureのサイズが代わっていることからレベルを制御しているだけではなく、使用していないLevelの部分はオミットしていることが判ります。

f:id:kimukats:20200501151224p:plain

Full Res

 

f:id:kimukats:20200501151129p:plain

Quater Res

最後に

実は実験後に判明したのですが、QualitySettings.masterTextureLimitがScriptから指定する場合に使用する同等のAPIなのですが、こちらには下記のように記載されており、今回の検証結果が正しいと判る内容が記載されていました。

(Unityさん・・・、マニュアルの方も修正して下さい)

 

この値を 1 に設定すると、各テクスチャの最初のミップマップを使用し (そのため、すべてのテクスチャサイズは 2 分の 1)、 2 に設定すると、各テクスチャの 2 番目のミップマップを使用します (そのため、すべてのテクスチャサイズは 4 分の 1)。 これを利用して、ローエンドなコンピューターのビデオメモリーの必要条件を減少することができます。 デフォルト値は 0 です。 

 

docs.unity3d.com