opengl:textures
差分
このページの2つのバージョン間の差分を表示します。
両方とも前のリビジョン前のリビジョン次のリビジョン | 前のリビジョン | ||
opengl:textures [2014/04/14 19:20] – [GPU Native Formats] oga | opengl:textures [2015/05/27 00:15] (現在) – [GPU Compressed Texture Formats] oga | ||
---|---|---|---|
行 39: | 行 39: | ||
DirectX と OpenGL の対応、FourCC | DirectX と OpenGL の対応、FourCC | ||
- | ^ Format | + | ^ Format |
- | | S3TC/ | + | | S3TC/ |
- | | S3TC/ | + | | S3TC/ |
- | | S3TC/ | + | | S3TC/ |
- | | S3TC/ | + | | S3TC/ |
- | | S3TC/ | + | | S3TC/ |
- | | S3TC/ | + | | S3TC/ |
- | | S3TC/ | + | | S3TC/ |
- | | S3TC/ | + | | S3TC/ |
- | | ATITC-RGB | + | | ATITC-RGB |
- | | ATTIC-EA | + | | ATTIC-EA |
- | | ATTIC-IA | + | | ATTIC-IA |
- | | ETC1 | 'ETC ' | + | | ETC1 | 'ETC '/' |
- | | ETC2 | + | | ETC2 |
- | | ETC2-SRGB | + | | ETC2-SRGB |
- | | ETC2 A1bit | + | | ETC2 A1bit |
- | | ETC2-SRGB A1bit | | 4bpp | SRGB | 1bit | 4 mode | 4x4 | 2 | 1 | | 9277 GL_COMPRESSED_SRGB8_PUNCHTHROUGH_ALPHA1_ETC2 | + | | ETC2-SRGB A1bit | | 4bpp | SRGB | 1bit | 4 mode | 4x4 | 2 | 1 | |
- | | ETC2 + EAC | + | | ETC2 + EAC |
- | | ETC2-SRGB + EAC | | 8bpp | SRGB | A | 5 mode | 4x4 | 2 | 2 | | 9279 GL_COMPRESSED_SRGB8_ALPHA8_ETC2_EAC | + | | ETC2-SRGB + EAC | | 8bpp | SRGB | A | 5 mode | 4x4 | 2 | 2 | |
- | | EAC R11 UNSIGNED | + | | EAC R11 UNSIGNED |
- | | EAC R11 SIGNED | + | | EAC R11 SIGNED |
- | | EAC RG11 UNSIGNED | + | | EAC RG11 UNSIGNED |
- | | EAC RG11 SIGNED | + | | EAC RG11 SIGNED |
- | | RGTC/ | + | | RGTC/ |
- | | RGTC/ | + | | RGTC/ |
- | | RGTC/ | + | | RGTC/ |
- | | RGTC/ | + | | RGTC/ |
- | | LATC L UNSIGNED | + | | LATC L UNSIGNED |
- | | LATC L SIGNED | + | | LATC L SIGNED |
- | | LATC LA UNSIGNED | + | | LATC LA UNSIGNED |
- | | LATC LA SIGNED | + | | LATC LA SIGNED |
- | | PVRTC RGBA 4bpp | | 4bpp | RGB | A | 4443/ | + | | PVRTC RGBA 4bpp | ' |
- | | PVRTC RGB 4bpp | | 4bpp | RGB | - | 555/ | + | | PVRTC RGB 4bpp | ' |
- | | PVRTC RGBA 2bpp | | 2bpp | RGB | A | 4443/ | + | | PVRTC RGBA 2bpp | ' |
- | | PVRTC RGB 2bpp | | 2bpp | RGB | - | 555/ | + | | PVRTC RGB 2bpp | ' |
- | | PVRTC2 RGBx 4bpp | + | | PVRTC SRGB 4bpp |
- | | PVRTC2 RGBx 2bpp | + | | PVRTC SRGB 2bpp |
- | | BPTC/ | + | | PVRTC2 RGBx 4bpp |
- | | BPTC/ | + | | PVRTC2 RGBx 2bpp |
- | | BPTC/ | + | | PVRTC2 SRGB 4bpp |
- | | BPTC/ | + | | PVRTC2 SRGB 2bpp |
- | | ASTC LDR 4x4 RGBA | | 8bpp | RGB | (A) | | 4x4 |1-4 |1-2 | | 93B0 GL_COMPRESSED_RGBA_ASTC_4x4_KHR | + | | BPTC/ |
- | | ASTC LDR 4x4 SRGB | | 8bpp | SRGB | (A) | | 4x4 |1-4 |1-2 | | 93D0 GL_COMPRESSED_SRGB_ALPHA8_ASTC_4x4_KHR | + | | BPTC/ |
- | | ASTC LDR 5x4 RGBA | | 6.4bpp | + | | BPTC/ |
- | | ASTC LDR 5x4 SRGB | | 6.4bpp | + | | BPTC/ |
- | | ASTC LDR 5x5 RGBA | | 5.1bpp | + | | ASTC LDR 4x4 RGBA | | 8bpp | RGB | (A) | | 4x4 |1-4 |1-2 | 134 DXGI_FORMAT_ASTC_4X4_UNORM |
- | | ASTC LDR 5x5 SRGB | | 5.1bpp | + | | ASTC LDR 4x4 SRGB | | 8bpp | SRGB | (A) | | 4x4 |1-4 |1-2 | 135 DXGI_FORMAT_ASTC_4X4_UNORM_SRGB |
- | | ASTC LDR 6x5 RGBA | | 4.3bpp | + | | ASTC LDR 5x4 RGBA | | 6.4bpp |
- | | ASTC LDR 6x5 SRGB | | 4.3bpp | + | | ASTC LDR 5x4 SRGB | | 6.4bpp |
- | | ASTC LDR 6x6 RGBA | | 3.6bpp | + | | ASTC LDR 5x5 RGBA | | 5.1bpp |
- | | ASTC LDR 6x6 SRGB | | 3.6bpp | + | | ASTC LDR 5x5 SRGB | | 5.1bpp |
- | | ASTC LDR 8x5 RGBA | | 3.2bpp | + | | ASTC LDR 6x5 RGBA | | 4.3bpp |
- | | ASTC LDR 8x5 SRGB | | 3.2bpp | + | | ASTC LDR 6x5 SRGB | | 4.3bpp |
- | | ASTC LDR 8x6 RGBA | | 2.7bpp | + | | ASTC LDR 6x6 RGBA | | 3.6bpp |
- | | ASTC LDR 8x6 SRGB | | 2.7bpp | + | | ASTC LDR 6x6 SRGB | | 3.6bpp |
- | | ASTC LDR 8x8 RGBA | | 2.0bpp | + | | ASTC LDR 8x5 RGBA | | 3.2bpp |
- | | ASTC LDR 8x8 SRGB | | 2.0bpp | + | | ASTC LDR 8x5 SRGB | | 3.2bpp |
- | | ASTC LDR 10x5 RGBA | + | | ASTC LDR 8x6 RGBA | | 2.7bpp |
- | | ASTC LDR 10x5 SRGB | + | | ASTC LDR 8x6 SRGB | | 2.7bpp |
- | | ASTC LDR 10x6 RGBA | + | | ASTC LDR 8x8 RGBA | | 2.0bpp |
- | | ASTC LDR 10x6 SRGB | + | | ASTC LDR 8x8 SRGB | | 2.0bpp |
- | | ASTC LDR 10x8 RGBA | + | | ASTC LDR 10x5 RGBA |
- | | ASTC LDR 10x8 SRGB | + | | ASTC LDR 10x5 SRGB |
- | | ASTC LDR 10x10 RGBA | | 1.3bpp | + | | ASTC LDR 10x6 RGBA |
- | | ASTC LDR 10x10 SRGB | | 1.3bpp | + | | ASTC LDR 10x6 SRGB |
- | | ASTC LDR 12x10 RGBA | | 1.1bpp | + | | ASTC LDR 10x8 RGBA |
- | | ASTC LDR 12x10 SRGB | | 1.1bpp | + | | ASTC LDR 10x8 SRGB |
- | | ASTC LDR 12x12 RGBA | | 0.9bpp | + | | ASTC LDR 10x10 RGBA | | 1.3bpp |
- | | ASTC_LDR 12x12 SRGB | | 0.9bpp | + | | ASTC LDR 10x10 SRGB | | 1.3bpp |
+ | | ASTC LDR 12x10 RGBA | | 1.1bpp | ||
+ | | ASTC LDR 12x10 SRGB | | 1.1bpp | ||
+ | | ASTC LDR 12x12 RGBA | | 0.9bpp | ||
+ | | ASTC_LDR 12x12 SRGB | | 0.9bpp | ||
* Pt = Partition | * Pt = Partition | ||
* DI = Dual Plane | * DI = Dual Plane | ||
+ | |||
+ | * FourCC : 'ATC ', ' | ||
+ | * FourCC についてはこちら [[: | ||
+ | |||
===== フォーマット対応表 ===== | ===== フォーマット対応表 ===== | ||
行 122: | 行 130: | ||
| RGBA (EA) | DXT3 | 8bpp | BC2 | 8bpp | ATC-EA | | RGBA (EA) | DXT3 | 8bpp | BC2 | 8bpp | ATC-EA | ||
| RGBA (IA) | DXT5 | 8bpp | BC3 | 8bpp | ATC-IA | | RGBA (IA) | DXT5 | 8bpp | BC3 | 8bpp | ATC-IA | ||
- | | R | | | BC4 | 4bpp | 3DC-X | 4bpp | | + | | R | | | BC4 | 4bpp | 3DC-X | 4bpp | |
- | | RG | + | | RG |
| HDR RGB | | | BC6H | 8bpp | | | HDR RGB | | | BC6H | 8bpp | | ||
| New RGBA | | New RGBA | ||
行 132: | 行 140: | ||
OpenGL ES 2.0 GPU では今のところ完全に共通で使える圧縮テクスチャフォーマットがありません。 | OpenGL ES 2.0 GPU では今のところ完全に共通で使える圧縮テクスチャフォーマットがありません。 | ||
各メーカーバラバラの対応となっています。 | 各メーカーバラバラの対応となっています。 | ||
+ | |||
+ | OpenGL ES 3.0 以降は iOS/Android 共に ETC2/EAC が共通で使える圧縮フォーマットになっています。 | ||
+ | |||
+ | |||
+ | ^ GPU ^ OS ^ API ^ DXT, | ||
+ | ^ ::: ^ ::: ^ ::: ^ DXT1,BC1 ^ DXT3/ | ||
+ | | PowerVR SGX535 iOS | iOS 4.2 | OpenGL ES 2.0 | - | - | - | - | - | ◎ | - | - | - | | | ||
+ | | PowerVR G6430 iOS | iOS 7.0 | OpenGL ES 2.0 | - | - | - | - | - | ◎ | - | - | - | | | ||
+ | | PowerVR G6430 iOS | iOS 7.0 | OpenGL ES 3.0 | - | - | - | - | - | ◎ | - | ◎ | ◎ | ||
+ | | PowerVR SGX540 Android | ||
+ | | Adreno 200 / AMD Z430 | Android 2.2 | OpenGL ES 2.0 | - | - | ◎ | - | - | - | ◎ | ◎ | - | | | ||
+ | | Adreno 220 | Android 2.3 | OpenGL ES 2.0 | - | - | ◎ | - | - | - | ◎ | ◎ | - | | | ||
+ | | Adreno 320 | Android 4.3 | OpenGL ES 3.0 | - | - | ◎ | - | - | - | ◎ | ◎ | ◎ | ||
+ | | ULP GeForce(8) Tegra 250 | Android 2.2 | OpenGL ES 2.0 | ◎ | ◎ | - | ◎ | - | - | - | ◎ | - | | | ||
+ | | ULP GeForce(72) Tegra 4 | Android 4.2 | OpenGL ES 2.0 | ◎ | ◎ | - | ◎ | - | - | - | ◎ | - | | | ||
+ | | ZMS-08 HD | Android 2.1 | OpenGL ES 2.0 | ◎ | ◎ | - | - | - | - | - | ◎ | - | | | ||
+ | | Mali-400MP | ||
+ | | Mali-T604 | ||
+ | | Mali-T604 | ||
+ | | Vivante GC4000 (K3V2) | ||
+ | | FIMG-3DSE | ||
+ | ^ GPU ^ OS ^ API ^ DXT, | ||
+ | ^ ::: ^ ::: ^ ::: ^ DXT1,BC1 ^ DXT3/ | ||
+ | | GeForce GT 240 | Windows 7 | OpenGL | ||
+ | | RADEON HD 5850 | Windows 7 | OpenGL 4.1 | ◎ | ◎ | ◎ | ◎ | ◎ | - | - | - | ||
+ | | GeForce GT 330M | Windows 7 | OpenGL 3.1 | ◎ | ◎ | ◎ | ◎ | - | - | - | - | ||
+ | | GeForce GTX 460 | Windows 7 | OpenGL 4.1 | ◎ | ◎ | ◎ | ◎ | ◎ | - | - | - | ||
+ | | GeForce GTX 650 | Windows 7 | OpenGL 4.4 | ◎ | ◎ | ◎ | ◎ | ◎ | - | - | ◎ | ◎ | ||
+ | | GMA HD | Windows 7 | OpenGL 2.1 | ◎ | ◎ | - | - | - | - | - | - | ||
+ | |||
- | ^ GPU ^ OS ^ API ^ DXT, | ||
- | ^ ::: ^ ::: ^ ::: ^ DXT1,BC1 ^ DXT3/ | ||
- | | PowerVR SGX535 iOS | iOS 4.2 | OpenGL ES 2.0 | × | × | × | × | × | ◎ | × | × | ✕ | | ||
- | | PowerVR G6430 iOS | iOS 7.0 | OpenGL ES 2.0 | ✕ | ✕ | ✕ | ✕ | ✕ | ◎ | ✕ | ✕ | ✕ | | ||
- | | PowerVR G6430 iOS | iOS 7.0 | OpenGL ES 3.0 | ✕ | ✕ | ✕ | ✕ | ✕ | ◎ | ✕ | ◎ | ◎ | | ||
- | | PowerVR SGX540 Android | ||
- | | Adreno 200 / AMD Z430 | Android 2.2 | OpenGL ES 2.0 | × | × | ◎ | × | × | × | ◎ | ◎ | ✕ | | ||
- | | Adreno 220 | Android 2.3 | OpenGL ES 2.0 | × | × | ◎ | × | × | × | ◎ | ◎ | ✕ | | ||
- | | Adreno 320 | Android 4.3 | OpenGL ES 3.0 | × | × | ◎ | × | × | × | ◎ | ◎ | ◎ | | ||
- | | ULP GeForce(8) Tegra 250 | Android 2.2 | OpenGL ES 2.0 | ◎ | ◎ | × | ◎ | × | × | × | ◎ | ✕ | | ||
- | | ULP GeForce(72) Tegra 4 | Android 4.2 | OpenGL ES 2.0 | ◎ | ◎ | × | ◎ | × | × | × | ◎ | ✕ | | ||
- | | ZMS-08 HD | Android 2.1 | OpenGL ES 2.0 | ◎ | ◎ | × | × | × | × | × | ◎ | ✕ | | ||
- | | Mali-400MP | ||
- | | Mali-T604 | ||
- | | Mali-T604 | ||
- | | Vivante GC4000 (K3V2) | ||
- | | FIMG-3DSE | ||
- | ^ GPU ^ OS ^ API ^ DXT, | ||
- | ^ ::: ^ ::: ^ ::: ^ DXT1,BC1 ^ DXT3/ | ||
- | | GeForce GT 240 | Windows 7 | OpenGL | ||
- | | RADEON HD 5850 | Windows 7 | OpenGL 4.1 | ◎ | ◎ | ◎ | ◎ | ◎ | × | × | × | | | ||
- | | GeForce GT 330M | Windows 7 | OpenGL 3.1 | ◎ | ◎ | ◎ | ◎ | × | × | × | × | | | ||
- | | GeForce GTX 460 | Windows 7 | OpenGL 4.1 | ◎ | ◎ | ◎ | ◎ | ◎ | × | × | × | | | ||
- | | GeForce GTX 650 | Windows 7 | OpenGL 4.4 | ◎ | ◎ | ◎ | ◎ | ◎ | ✕ | ✕ | ◎ | ◎ | | ||
- | | GMA HD | Windows 7 | OpenGL 2.1 | ◎ | ◎ | × | × | × | × | × | × | | | ||
行 166: | 行 179: | ||
- iOS では PVRTC が共通フォーマットになります。 | - iOS では PVRTC が共通フォーマットになります。 | ||
- ETC2 は ETC1 の上位互換性を保っているので、ETC2 対応 GPU は ETC1 も使用できます。 | - ETC2 は ETC1 の上位互換性を保っているので、ETC2 対応 GPU は ETC1 も使用できます。 | ||
- | + | - OpenGL ES 3.0 以上では iOS/Android どちらでも ETC2/EAC を利用することができます。 | |
- | + | ||
- | + | ||
GPU 毎の用途別圧縮フォーマット | GPU 毎の用途別圧縮フォーマット | ||
- | ^ GPU ^ RGB ^ RGB+ A1bit ^ RGB+A(E) | + | ^ GPU |
- | | PVR SGX | PVRTC 2/ | + | ^ PowerVR |
- | | Adreno | + | ^ PowerVR Series 6 (Rogue) |
- | | Tegra | + | ^ Adreno |
+ | ^ Adreno OpenGL ES 3.0 | ||
+ | ^ ULP GeForce Tegra2/ | ||
+ | ^ Mali-400MP | ||
+ | ^ Mali-T604 | ||
+ | ^ Vivante GC4000 K3V2 | DXT1 | DXT1 | DXT3 | ||
行 197: | 行 212: | ||
+ | |||
+ | ===== 解説記事 ===== | ||
+ | |||
+ | * [[opengl: | ||
行 257: | 行 276: | ||
==== endpoint ==== | ==== endpoint ==== | ||
+ | |||
+ | ブロック単位で格納される代表色です。 | ||
+ | 他の色は、この endpoint を元に生成が行われます。 | ||
+ | |||
+ | DXT など多くのフォーマットは 2色の endpoint を持ちます。 | ||
+ | Partition 分割をサポートしているフォーマットでは、endpoint セットの数が多くなります。 | ||
+ | |||
+ | また特殊な例として、ETC2 では制限付きで 3色の endpoint 補間モードを持っています。 | ||
+ | その代わりこの mode には index がありません。 | ||
+ | |||
+ | endpoint は 565, 444, 443 などの限られた bit 数で色を保持しなければなりませんが、 | ||
+ | 展開時は 888 と同等の精度で補間が行われます。 | ||
+ | ただし、初期の GPU では 888 より精度が低いものも存在していました。 | ||
+ | |||
+ | DXT1 は endpoint の色の並び順で mode 切り替えがあります。 | ||
+ | 1bit alpha を含んだ 3色モードと alpha 無しの 4色モードが切り替わります。 | ||
+ | |||
行 286: | 行 322: | ||
ブロック圧縮テクスチャでは、GPU が必要とする対象の画素情報 64bit だけで必要な色を求めることができます。 | ブロック圧縮テクスチャでは、GPU が必要とする対象の画素情報 64bit だけで必要な色を求めることができます。 | ||
64bit だけで周囲 4x4 エリアのキャッシュにもなりますし、 | 64bit だけで周囲 4x4 エリアのキャッシュにもなりますし、 | ||
- | テクスチャユニットは周囲 | + | テクスチャユニットはフィルタリングのため |
ブロックが独立しているため画像全体で使用出来る色数が制限されません。 | ブロックが独立しているため画像全体で使用出来る色数が制限されません。 | ||
- | 複数の画像を 1枚のテクスチャにシート化しても、ブロックが異なれば全く影響を受けないことになります。(ただし mipmap 時は要注意) | + | 複数の画像を 1枚のテクスチャにシート化 |
圧縮率も 4bpp でほぼ 16色パレット相当の容量で済みますし、テーブルの分だけ小さくなります。 | 圧縮率も 4bpp でほぼ 16色パレット相当の容量で済みますし、テーブルの分だけ小さくなります。 | ||
このように GPU にとって大変都合が良かったのです。 | このように GPU にとって大変都合が良かったのです。 | ||
行 296: | 行 332: | ||
パレットテクスチャは GPU からみてさまざまな面で不利だったので、 | パレットテクスチャは GPU からみてさまざまな面で不利だったので、 | ||
ブロック圧縮テクスチャが広まってからはほぼレガシー扱いとなっています。 | ブロック圧縮テクスチャが広まってからはほぼレガシー扱いとなっています。 | ||
- | 徐々に扱いが小さくなり、現在の GPU はパレット形式をネイティブでサポートしていません。 | + | 徐々に扱いが小さくなり、現在の GPU は一部を除いてパレット形式をネイティブでサポートしていません。 |
そのため古いゲームで多用されたパレットによる色変えやカラーアニメーションは、今の GPU では決して低コストではなくなりました。 | そのため古いゲームで多用されたパレットによる色変えやカラーアニメーションは、今の GPU では決して低コストではなくなりました。 | ||
行 305: | 行 341: | ||
なお S3TC よりも前に、Dreamcast で使われた PowerVR2 では VQ 圧縮テクスチャが登場しています。 | なお S3TC よりも前に、Dreamcast で使われた PowerVR2 では VQ 圧縮テクスチャが登場しています。 | ||
パレットと同じように狭いエリアで図形データを辞書として持ち、index 参照を行います。 | パレットと同じように狭いエリアで図形データを辞書として持ち、index 参照を行います。 | ||
- | パレットとブロック圧縮の中間の構造でした。 | + | パレットとブロック圧縮の中間の構造となっています。 |
opengl/textures.1397470835.txt.gz · 最終更新: 2014/04/14 19:20 by oga