opengl:texturefileformat
差分
このページの2つのバージョン間の差分を表示します。
| 両方とも前のリビジョン前のリビジョン次のリビジョン | 前のリビジョン | ||
| opengl:texturefileformat [2015/07/04 02:38] – [Texture File Format] oga | opengl:texturefileformat [2015/07/04 03:11] (現在) – [ASTC] oga | ||
|---|---|---|---|
| 行 2: | 行 2: | ||
| - | ^ file format | + | ^ file format |
| - | ^ ::: ^ ::: ^ ::: ^ ::: ^ ::: ^ ::: ^ ::: ^ ::: ^ 3D ^ ::: | + | ^ ::: ^ ::: ^ ::: ^ ::: ^ ::: ^ ::: ^ ::: |
| - | | DDS (.dds) | + | | DDS (.dds) |
| - | | KTX (.ktx) | + | | KTX (.ktx) |
| - | | PVR (.pvr) | + | | PVR (.pvr) |
| - | | PKM (.pkm) | + | | PKM (.pkm) |
| - | | ASTC (.astc) | | + | | ASTC (.astc) | |
| * (a) = Qualcomm(ATI) のコンバータが FourCC を使って格納。おそらく独自仕様。元は Direct3DM 向け。Array 不可 | * (a) = Qualcomm(ATI) のコンバータが FourCC を使って格納。おそらく独自仕様。元は Direct3DM 向け。Array 不可 | ||
| * (b) = PVRTC 独自仕様。FourCC で格納。Array 不可 | * (b) = PVRTC 独自仕様。FourCC で格納。Array 不可 | ||
| - | * (d) = ASTC の 3D BLOCK 圧縮のみ格納可能。 | + | * (d) = DXGI_FORMAT 表現可能なフォーマットのみ Array を格納可能。DX10 拡張ヘッダ必須。 |
| - | * (e) = DXGI_FORMAT 表現可能なフォーマットのみ Array を格納可能。D3D10 拡張ヘッダ必須。 | + | * (e) = ETC1 のみ格納可能。 |
| + | * (f) = ASTC の 3D BLOCK 圧縮のみ格納可能。 | ||
| 行 22: | 行 24: | ||
| * DXT1 等の圧縮テクスチャの格納 | * DXT1 等の圧縮テクスチャの格納 | ||
| * R, RG, RGB, RGBA 等の、1~4 任意コンポーネントの格納 | * R, RG, RGB, RGBA 等の、1~4 任意コンポーネントの格納 | ||
| - | * SRGB / Linear の区別 | + | * sRGB / Linear の区別 |
| 行 30: | 行 32: | ||
| DirectX7 以前の DirectDrawSurface 構造をそのままファイルに書き込んだもの。 | DirectX7 以前の DirectDrawSurface 構造をそのままファイルに書き込んだもの。 | ||
| Realtime 3D のテクスチャ画像形式としては非常に扱いやすく、対応ツールも多いのでほぼ標準として使われています。 | Realtime 3D のテクスチャ画像形式としては非常に扱いやすく、対応ツールも多いのでほぼ標準として使われています。 | ||
| + | [[: | ||
| * [[: | * [[: | ||
| 行 36: | 行 39: | ||
| * [[: | * [[: | ||
| - | ヘッダサイズは 128byte 固定。D3D10 情報が含まれる場合は 20byte 増えて 148byte 固定。可変長エリアがなく扱いが容易です。 | + | ヘッダサイズは 128byte 固定。DX10 情報が含まれる場合は 20byte 増えて 148byte 固定。可変長エリアがなく扱いが容易です。 |
| littleendian 固定です。 | littleendian 固定です。 | ||
| 行 47: | 行 50: | ||
| * FourCC で容易に新規フォーマット対応ができる | * FourCC で容易に新規フォーマット対応ができる | ||
| * 古くから用いられており非常に多くのツールが対応している | * 古くから用いられており非常に多くのツールが対応している | ||
| - | * ヘッダ長が固定で読み込みが容易 | + | * ヘッダ長が固定で読み込みが容易 |
| 逆に言えばこれらの特徴を満たす画像フォーマットが他に存在しませんでした。 | 逆に言えばこれらの特徴を満たす画像フォーマットが他に存在しませんでした。 | ||
| 行 53: | 行 56: | ||
| 欠点は下記の通り。 | 欠点は下記の通り。 | ||
| - | * D3D10 でフォーマットが拡張されたが古いツールやライブラリで読み込むことができない | + | * Direct3D 10 でフォーマットが拡張されたが古いツールやライブラリで読み込むことができない。逆に新しいツールでは DX10 拡張ヘッダがないと読み込めないものもある。 |
| - | * OpenGL で追加された新しい圧縮テクスチャに対応できない | + | * OpenGL で追加された新しい圧縮テクスチャに対応できない。 |
| * ヘッダ構造がゆるく冗長性を含んでいるため、ツールによってヘッダ情報にゆらぎがある。ツールによっては読み込めないフォーマットあり。 | * ヘッダ構造がゆるく冗長性を含んでいるため、ツールによってヘッダ情報にゆらぎがある。ツールによっては読み込めないフォーマットあり。 | ||
| - | * DXGI_FORMAT で表現できないフォーマットは | + | * DXGI_FORMAT で表現できないフォーマットは |
| 行 85: | 行 88: | ||
| 特徴は、OpenGL / OpenGL ES の定義されたフォーマットシンボル値をそのまま格納することです。 | 特徴は、OpenGL / OpenGL ES の定義されたフォーマットシンボル値をそのまま格納することです。 | ||
| 例えば GL_UNSIGNED_SHORT_5_6_5 や GL_COMPRESSED_RGB_S3TC_DXT1_EXT や GL_COMPRESSED_RGB8_ETC2 など。 | 例えば GL_UNSIGNED_SHORT_5_6_5 や GL_COMPRESSED_RGB_S3TC_DXT1_EXT や GL_COMPRESSED_RGB8_ETC2 など。 | ||
| - | 特に ASTC を用いる場合は現状では KTX 一択です。 | ||
| 今後対応ツールが増えれば、KTX は標準フォーマットとして用いられるようになるかもしれません。 | 今後対応ツールが増えれば、KTX は標準フォーマットとして用いられるようになるかもしれません。 | ||
| 行 95: | 行 97: | ||
| * ヘッダに GL の定義値をそのまま格納するので、テクスチャローダーは OpenGL API に渡すだけで良い | * ヘッダに GL の定義値をそのまま格納するので、テクスチャローダーは OpenGL API に渡すだけで良い | ||
| * あとから OpenGL に追加された新しいフォーマットにも即対応できる。ツールやローダーの修正なしに用いることができる | * あとから OpenGL に追加された新しいフォーマットにも即対応できる。ツールやローダーの修正なしに用いることができる | ||
| - | * DDS が対応していない ETC2/EAC/ASTC を格納できる | + | * DDS が対応していない ETC2/ |
| * 画像毎に byte size が挿入されるためツールが対応しやすい | * 画像毎に byte size が挿入されるためツールが対応しやすい | ||
| 行 105: | 行 107: | ||
| * 画像の前に 32bit の情報 (データサイズ) が必ず挿入されるため、アライメント整合が取りにくい。 | * 画像の前に 32bit の情報 (データサイズ) が必ず挿入されるため、アライメント整合が取りにくい。 | ||
| * 上位互換フォーマットはヘッダのシンボル値をそのまま使ってロードできない場合がある。(ETC2 として ETC1 をロードする場合に問題が発生) | * 上位互換フォーマットはヘッダのシンボル値をそのまま使ってロードできない場合がある。(ETC2 として ETC1 をロードする場合に問題が発生) | ||
| + | * OpenGL 以外のプラットフォームでは扱いづらい。 | ||
| 行 120: | 行 123: | ||
| </ | </ | ||
| + | |||
| + | <code cpp> | ||
| + | enum { | ||
| + | KTX_HEADER_MAGIC0 | ||
| + | KTX_HEADER_MAGIC1 | ||
| + | KTX_HEADER_MAGIC2 | ||
| + | KTX_HEADER_ENDIAN | ||
| + | }; | ||
| + | |||
| + | struct T_KTXHEADER { // 64byte | ||
| + | UI32 Identifier[3]; | ||
| + | UI32 endianness; | ||
| + | UI32 glType; | ||
| + | UI32 glTypeSize; | ||
| + | UI32 glFormat; | ||
| + | UI32 glInternalFormat; | ||
| + | UI32 glBaseInternalFormat; | ||
| + | UI32 pixelWidth; | ||
| + | UI32 pixelHeight; | ||
| + | UI32 pixelDepth; | ||
| + | UI32 numberOfArrayElements; | ||
| + | UI32 numberOfFaces; | ||
| + | UI32 numberOfMipmapLevels; | ||
| + | UI32 bytesOfKeyValueData; | ||
| + | public: | ||
| + | bool IsCompressed() const | ||
| + | { | ||
| + | return | ||
| + | } | ||
| + | }; | ||
| + | </ | ||
| 行 141: | 行 175: | ||
| * PVRTC-2 対応 | * PVRTC-2 対応 | ||
| * データ並びが KTX 順 | * データ並びが KTX 順 | ||
| + | |||
| + | <code cpp> | ||
| + | struct T_PVR3HEADER { // 13x4 = 52 | ||
| + | unsigned int Version; | ||
| + | unsigned int Flags; | ||
| + | unsigned int PixelFormat[2]; | ||
| + | unsigned int ColorSpace; | ||
| + | unsigned int ChannelType; | ||
| + | unsigned int Height; | ||
| + | unsigned int Width; | ||
| + | unsigned int Depth; | ||
| + | unsigned int Surfaces; | ||
| + | unsigned int Faces; | ||
| + | unsigned int MipMapCount; | ||
| + | unsigned int MetaDataSize; | ||
| + | }; | ||
| + | </ | ||
| < | < | ||
| 行 152: | 行 203: | ||
| * PVRTC-2 非対応 | * PVRTC-2 非対応 | ||
| * データ並びが DDS 順 | * データ並びが DDS 順 | ||
| + | |||
| + | |||
| < | < | ||
| ( ( ( width * height ) * mip ) * [cube_face or volume_depth] ) | ( ( ( width * height ) * mip ) * [cube_face or volume_depth] ) | ||
| + | </ | ||
| + | |||
| + | |||
| + | <code cpp> | ||
| + | struct T_PVR2HEADER { | ||
| + | unsigned int hsize; | ||
| + | unsigned int height; | ||
| + | unsigned int width; | ||
| + | unsigned int miplevel; | ||
| + | unsigned int tformat; | ||
| + | unsigned int datasize; | ||
| + | unsigned int bpp; // bpp | ||
| + | unsigned int redmask; | ||
| + | unsigned int greenmask; | ||
| + | unsigned int bluemask; | ||
| + | unsigned int alphamask; | ||
| + | unsigned int magic; | ||
| + | unsigned int depth; | ||
| + | }; | ||
| </ | </ | ||
| 行 178: | 行 250: | ||
| < | < | ||
| - | version 1.0 | + | version 1.0 |
| type: 0=ETC1-RGB, 1=ETC1-RGBA, | type: 0=ETC1-RGB, 1=ETC1-RGBA, | ||
| - | version 2.0 | + | version 2.0 |
| type: 0=ETC1_RGB, 1=ETC2_RGB, 2=ETC2_RGBA_OLD, | type: 0=ETC1_RGB, 1=ETC2_RGB, 2=ETC2_RGBA_OLD, | ||
| </ | </ | ||
| 行 211: | 行 283: | ||
| + | |||
| + | ===== 更新 ===== | ||
| + | |||
| + | * 2015/07/04 : 表を更新、ASTC format 追加、ktx, | ||
opengl/texturefileformat.1435945126.txt.gz · 最終更新: by oga
