Android実機でのテクスチャフォーマットASTC非対応によるクラッシュと対策は、実機テストやレンダリングパイプライン拡張において頻発する重度なテクニカルバグです。古いAndroidスマートフォンでゲームを実行した際、特定の画面や演出に入った瞬間にアプリが強制終了するバグの解決策の解説。
不具合の具体的な症状
Android端末でアプリのテスト中、特定のボスキャラが出現した瞬間、あるいは特定の高精細な3Dマップに遷移した瞬間に、画面がブラックアウトするか、OSの警告なしでアプリが完全に強制終了(クラッシュ)する。
現実世界での例え:海外の暗号で書かれた超高圧縮の指示書(ASTC)を、その言語を話せない古い支店のスタッフ(旧GPU)に渡した結果、混乱して全員が仕事を放棄して職場放棄(クラッシュ)する事故
非常に画質が良くデータが小さくなる特殊な圧縮コンテナ(ASTC)を使ってテクスチャを届けていますが、古いスマホ(古いGPU)にはその暗号を解くハードウェアの頭脳が備わっていないため、画像を開こうとした瞬間に脳震盪を起こしてアプリが死亡しています。古いスタッフでも絶対に読める標準的なフォーマット(ETC2)を用意するか、自動で翻訳(解凍処理)させる安全対策を施します。
図:Android実機でのテクスチャフォーマットASTC非対応によるクラッシュと対策の不具合発生メカニズムと解決アプローチの概要図
想定される原因と詳細な仕組み
インポートしたテクスチャの圧縮フォーマットを、現代の標準である「ASTC」に強制設定しているが、テストしている古いAndroid端末のGPU(ハードウェア)がASTCデコード(圧縮画像の解凍)に対応しておらず、GPUメモリ展開時に不正なアクセスが発生してクラッシュしているためです。
解決アプローチと最適化手順
Project Settingsの「Texture Compression」設定を開き、ASTC非対応の古い古いAndroid端末向けには「ETC2」や「ETC」をフォールバック(代替圧縮)として自動適用させるか、インポート設定のターゲット別圧縮フォーマットの設定を正しく見直してビルドします。