近距離・遠距離・端末差で原因を分ける
Unityへ入れたテクスチャがぼやける場合は、元画像、インポート後の解像度、読み込まれたミップ、画面上での参照方法を順に調べます。近くでも粗い、床を斜めから見るとぼやける、実機だけ低解像度になる、といった条件を記録します。この記事はUnity 2022.3 LTSの通常の2Dテクスチャを使った3D表示を基準にしています。
1. 元画像とPlatform Overrideを確認する
Projectで画像を選び、元のピクセル数とTexture ImporterのMax Sizeを確認します。例えば元画像が2048×2048でも、対象プラットフォームのMax Sizeが512なら縮小される条件になります。DefaultとAndroid・iOSなどのOverrideをそれぞれ確認し、変更後はApplyします。
元画像にない細部は、Max Sizeを大きくするだけでは増えません。圧縮によるブロック状の乱れやにじみは、解像度の縮小と分けて確認します。調査用コピーで圧縮を弱める、または無圧縮と比較し、改善とメモリ増加を確認します。すべての画像を一律に最大解像度・無圧縮へ変える方針にはしません。
2. Qualityのミップ制限とStreamingを確認する
Qualityを切り替えたときだけ変わる場合は、Global Texture Mipmap Limitとテクスチャ側の除外・グループ設定を確認します。2022.3のglobalTextureMipmapLimitは、最高解像度のミップを何段階省くかを示します。例えば1は各辺が半分の段階ですが、非ミップマップのテクスチャなどには適用されません。
Mipmap Streamingを有効にした画像だけ徐々に鮮明になる、または低解像度のままなら、Texture StreamingのMemory Budgetと対象Cameraも調べます。予算が小さい場合は低い解像度へ下がることがあります。必要ならdesiredMipmapLevelとloadedMipmapLevelなどを確認し、元画像・Importerの解像度不足と切り分けます。
3. 距離や角度で変わる場合はMipとFilterを調べる
ミップマップは距離や画面上の密度に合わせて低解像度版を使い、ちらつきを抑えるための仕組みです。遠距離のぼやけを見てすべて無効にすると、模様のちらつきやジャギーが増える場合があります。まず同じ位置・角度・解像度で比較します。
Filter ModeのPointは拡大時の画素境界が目立ち、Bilinearは周辺画素を補間し、Trilinearはミップ間の遷移も滑らかにします。これらは失われた細部を復元する設定ではありません。斜めに見た床などで劣化する場合は、Aniso LevelとQuality側の異方性フィルタリング設定も比較します。
Pixel Artで画素境界を残したい場合はPointなどが候補ですが、3Dの床や遠景へ同じ設定を一律に適用しないでください。独自ShaderやShader GraphでSamplerを指定している場合は、その参照設定も確認します。
4. UVと画面全体のぼやけを切り分ける
同じテクスチャを単純な平面のMaterialへ貼り、対象メッシュと比較します。特定の面だけ粗い場合は、UVの伸び、Tiling、1面に割り当てた画像内の領域を確認します。大きな画像でも、ごく一部を引き伸ばせば画面上の密度は下がります。
画像だけでなく輪郭やほかの物体までぼやける場合は、Render Scale、低解像度のRenderTexture、アップスケーリング、被写界深度など画面全体の経路も調べます。UIやSprite Atlasのにじみは、Atlasの圧縮・余白など別の条件も含めて確認します。
修正後の確認
- 同じカメラ位置・表示解像度で変更前後を比較する。
- 近距離、遠距離、斜め、移動中を確認し、鮮明さとちらつきを比較する。
- 対象プラットフォームのビルドで、使用するQualityとStreaming後の状態を確認する。
- テクスチャメモリとフレーム時間を測り、画質と負荷の両方で採用を判断する。
図の8×8から4×4への縮小は、画素の単純平均で細部が弱くなることを示す模式例です。Unityの特定のリサイズアルゴリズムや圧縮結果を再現した画像ではありません。