次の方法で共有


BC テクスチャ圧縮バリアント

B8G8R8X8、B8G8R8A8、または R8G8B8A8 のバリエーションであるピクセル形式を持つテクスチャで、ブロック圧縮を有効にします。

解釈

BC1、BC2、BC3 などのブロックベースの圧縮形式は、圧縮されていないイメージ形式に比べて占有するメモリが著しく少ないため、メモリ帯域幅の使用がかなり少なくなります。 1 ピクセルあたり 32 ビットを使用する非圧縮形式と比べると、BC1 (以前の DXT1) は 8 倍の圧縮率、BC3 (以前の DXT5) は 4 倍の圧縮率を実現します。 BC1 と BC3 の違いは、BC1 はアルファ チャネルをサポートしていないのに対して、BC3 はブロック圧縮のアルファ チャネルをサポートしていることです。 高い圧縮率を実現していますが、一般的なテクスチャについてはイメージの品質低下はごくわずかです。 ただし、特定の種類のテクスチャ (小さい領域に多数のカラー バリエーションを持つテクスチャなど) のブロック圧縮では、許容できない結果になることがあります。

対象のテクスチャがブロックベースの圧縮に適していて、完全な色の忠実性が必要ない場合は、ブロック圧縮形式を使用してメモリの使用量を減らし、帯域幅の使用を減らすことを検討します。

解説

ソース テクスチャを作成する ID3DDevice::CreateTexture2D への呼び出しのたびに、ブロックベースの圧縮形式を使用してテクスチャを圧縮します。 具体的には、以下の場合にテクスチャが圧縮されます。

  • pDesc で渡されるD3D11_TEXTURE2D_DESC オブジェクトが、不変のシェーダー リソースを記述する場合、つまり

    • BindFlags メンバーは D3D11_BIND_SHADER_RESOURCE フラグを設定するだけです。

    • Usage メンバーは、D3D11_USAGE_DEFAULT または D3D11_USAGE_IMMUTABLE に設定されます。

    • CPUAccessFlags メンバーは 0 に設定されます(CPU アクセスなし)。

    • SamplerDesc メンバーは自身の Count メンバーを 1 に設定します (Multi-Sample Anti-Aliasing (MSAA) なし)。

  • CreateTexture2D への呼び出しに対して初期データが提供される場合。

サポートされているソース形式と、ブロック圧縮形式は以下のとおりです。

元の形式 (from)

圧縮先の形式 (to)

DXGI_FORMAT_B8G8R8X8_UNORM

BC1 (以前の DXT1)

DXGI_FORMAT_B8G8R8X8_UNORM_SRGB

BC1

DXGI_FORMAT_B8G8R8X8_TYPELESS

BC1

DXGI_FORMAT_B8G8R8A8_UNORM

BC3 (以前の DXT5)

DXGI_FORMAT_B8G8R8A8_UNORM_SRGB

BC3

DXGI_FORMAT_B8G8R8A8_TYPELESS

BC3

DXGI_FORMAT_R8G8B8A8_UNORM

BC3

DXGI_FORMAT_R8G8B8A8_UNORM_SRGB

BC3

DXGI_FORMAT_R8G8B8A8_TYPELESS

BC3

使用しているテクスチャに、上記に記載されていない形式が含まれている場合、そのテクスチャは修正できません。

制約と制限

B8G8R8A8 または R8G8B8A8 イメージ形式のバリエーションで作成されたテクスチャは、実際にはアルファ チャネルを使用しないことがありますが、バリアントでアルファ チャネルが使用されているかどうかを知る方法はありません。 アルファ チャネルが使用されている場合に正確さを保持するために、バリアントは常にこれらの形式を、効率的には多少劣る BC3 形式にエンコードします。 バリアントでより効率のよい BC1 形式を使用できるようにアルファ チャネルを使用していない場合に、B8G8R8X8 のイメージ形式のバリエーションを使用すると、グラフィックス フレーム分析が、このバリアントでのアプリケーションの潜在的なレンダリング パフォーマンスを理解しやすいようにすることができます。

このバリアントは、CreateTexture2D への呼び出しを行う前に、実行時にテクスチャをブロック圧縮します。 実行コードについては、このアプローチは推奨されません。圧縮されていないテクスチャはより多くのディスク容量を使用し、ブロックベースの圧縮では大量のコンピューティング リソースをエンコードする必要があり、追加のステップによってアプリケーションのロード時間が非常に長くなることがあるためです。 代わりに、イメージ エディタ、またはビルド パイプラインの一部であるイメージ プロセッサを使用して、テクスチャをオフラインで圧縮することを推奨しています。 これらのアプローチではディスク容量の要件が減り、アプリケーションのランタイム オーバーヘッドが排除され、処理時間に余裕があるため、最適なイメージ品質を保持することができます。

参照

関連項目

ハーフ/クォーター テクスチャ ディメンション バリアント