PKM および ETC フォーマット: 完全ガイド
PKM は ETC 圧縮テクスチャ用のシンプルなコンテナ形式で、Android および OpenGL ES プラットフォームで広く使用されています。この記事では、PKM 形式の構造、ETC/ETC2 圧縮バージョン、およびそれらを効果的に使用する方法を理解するための完全なガイドを提供します。
PKMフォーマットとは何ですか?
PKM (「PoKeMon」の略、エリクソンによって命名) は、ETC 圧縮されたテクスチャ データを保存するために特別に設計されたシンプルなコンテナ形式です。 KTX や DDS などの複雑な形式とは異なり、PKM は 16 バイトのヘッダーとそれに続く圧縮画像データのみを備えた最小限の構造を持っています。
この形式は、ETC 圧縮テクスチャをモバイル デバイスに保存およびロードするための軽量な方法を提供するために作成されました。そのシンプルさにより、圧縮されたテクスチャ データ自体を超えるオーバーヘッドが事実上なく、実装と解析が容易になります。
PKM ファイル構造
- 16 バイトのヘッダー: マジック ナンバー (PKM)、バージョン、フォーマット、寸法
- 圧縮テクスチャ データ: Raw ETC/ETC2 ブロック
ETC圧縮バージョン
ETC 圧縮には 2 つのメジャー バージョンがあり、それぞれに異なる機能があります。
ETC1 (エリクソン テクスチャ圧縮 1)
オリジナルの ETC 標準で、4:1 固定圧縮率の RGB カラー チャネルのみをサポートします。 OpenGL ES 2.0 以降、Android デバイスで広くサポートされています。
サポート: すべての OpenGL ES 2.0+ デバイス
圧縮率: 4:1 固定 (ピクセルあたり 4 ビット)
ETC2 (エリクソン テクスチャ圧縮 2)
ETC1 の後継バージョンが改良され、複数の形式オプションを備えた RGBA サポートが追加されました。下位互換性を維持しながら、より優れた品質とアルファ チャネルのサポートを提供します。
サポート: OpenGL ES 3.0+、Vulkan
圧縮率: フォーマットに応じて 4:1 ~ 8:1
PKM 形式のバリアント
PKM には、さまざまな ETC 形式タイプを含めることができます。
ETC1 RGB
オリジナルフォーマット、RGBのみ、アルファチャンネルなし
ETC2 RGB
ETC1 よりも高品質な RGB 圧縮の改善
ETC2 RGBA
8:1 圧縮 (ピクセルあたり 8 ビット) による完全な RGBA サポート
ETC2 RGB + パンチスルーアルファ
1 ビット アルファ付きの RGB、4:1 圧縮を維持
PKM/ETCの利点
ユニバーサル Android サポート
ETC1 はすべての Android デバイスでサポートされることが保証されており、Android 開発にとって最も移植性の高い圧縮形式となっています。
固定圧縮率
一貫した 4:1 または 8:1 の圧縮率による予測可能なメモリ使用量により、メモリ バジェットの計算が簡素化されます。
優れた品質とサイズの比率
ETC2 は、ほとんどのテクスチャ タイプに対して、DXT/BCn などのデスクトップ フォーマットに匹敵する優れたビジュアル品質を提供します。
ハードウェアデコード
レンダリング中に CPU オーバーヘッドなしで直接 GPU 圧縮を解除し、効率的なテクスチャ サンプリングを可能にします。
制限事項と考慮事項
ETC1 の品質制限
ETC1 は、高周波のディテールや滑らかなグラデーションを持つテクスチャ上に目に見えるアーティファクトを表示できます。品質を向上させるために ETC2 の使用を検討してください。
ETC1 にはアルファがありません
ETC1 はアルファ チャネルをサポートしていません。 OpenGL ES 2.0 デバイスをターゲットとする場合は、ETC2 RGBA を使用するか、アルファを個別に保存する必要があります。
限られた高度な機能
PKM はミップマップ、キューブマップ、またはテクスチャ配列をサポートしません。これらの高度な機能には、KTX または KTX2 フォーマットを使用してください。
PKM形式の使用方法
プロジェクトで PKM ファイルを使用するのは簡単です。
PKM へのエンコード
- PNG/JPG 画像をアップロードします (2 のべき乗または 4 の倍数の寸法である必要があります)
- ニーズに応じて ETC1 RGB または ETC2 RGB/RGBA からお選びください
- 生成された .pkm ファイルをダウンロードしてプロジェクトに統合します
PKM ファイルのデコード
- .pkm ファイルをアップロードして内容を確認します
- 解凍されたテクスチャをプレビューして品質を確認する
- テクスチャを編集または検査する必要がある場合は、PNG にエクスポートします
ベストプラクティス
- すべての Android デバイス間で互換性を最大限に高めるために ETC1 RGB を使用します (OpenGL ES 2.0+)
- アルファ チャネルを必要とする最新のデバイス (OpenGL ES 3.0 以降) をターゲットとする場合は、ETC2 RGBA を優先します。
- 最高の品質を得るには、テクスチャの寸法が 4 の倍数 (ETC1) または 2 の累乗であることを確認してください
- 古いデバイスでアルファを必要とするテクスチャの場合は、別のグレースケール テクスチャの使用を検討してください。
- 実際のターゲット デバイスで圧縮テクスチャをテストします - 品質の認識はコンテンツ タイプによって異なります
結論
ETC/ETC2 圧縮を備えた PKM は、Android およびモバイル OpenGL ES 開発の標準的な選択肢です。ユニバーサルなサポート、予測可能なパフォーマンス、優れた品質により、モバイル テクスチャ圧縮の優れたデフォルトとなっています。
オンライン PKM エンコーダおよびデコーダ ツールを使用すると、コマンドライン ツールや SDK をインストールしなくても、ETC 圧縮テクスチャを簡単に操作できます。新しいテクスチャを作成する場合でも、既存のテクスチャを検査する場合でも、これらのツールはモバイル グラフィックス パイプラインの最適化に役立ちます。
詳細な資料と参考資料
ETC および PKM 形式の詳細については、こちらをご覧ください。
- ETC テクスチャ圧縮 (Khronos) - 公式の OpenGL ES 仕様および ETC フォーマットのドキュメント
- エリクソン テクスチャ圧縮 (Wikipedia) - ETC圧縮アルゴリズムの歴史と技術詳細
- Android グラフィックス: テクスチャ圧縮 - テクスチャ圧縮形式に関する Android 公式ガイド
- PKM ファイル形式の仕様 - PKM コンテナ形式の技術仕様