(私は Apple Metal でこれを行っていますが、質問は OpenGL と DirectX にも当てはまると思います。Metal または OpenGL のコード例は大歓迎です。)
smallTex
サイズが別の texture の倍数である1 つのテクスチャがありbigTex
ます。
たとえば、 にsmallTex
は次元が32x32
あり、 には がありbigTex
ます128x128
。
のすべてのピクセルにの対応するピクセルの平均値が含まれるように、 の内容を にダウンサンプリングする必要がありbigTex
ます。smallTex
smallTex
bigTex
bigTex
最初に、からサンプリングしてレンダリングするフラグメント シェーダーを作成できると考えましたsmallTex
。ただし、この方法では多くの情報が失われます。これは、サンプリングが最大 4 つのピクセルから読み取り、それらの間で補間を行うためです。
私が必要としているのは、ソース内のすべてのピクセルが結果に同じ影響を与える真のダウンサンプリングです。
これはミップマップ (基本的には元のテクスチャのダウンサンプリングされたコピー) を使用して実行できることを読みました。しかし、次にbigTex
、でミップマッピングを有効にする必要があります。これは、で多くのレンダリング (計算) ステップを実行しているため、パフォーマンスに悪影響を及ぼしますbigTex
。これにより、GPU がミップマップを更新するために多くの作業が必要になります。
必要なのは、テクスチャをダウンサンプリングする直接 GPU コマンドです。
それは可能ですか?ヒントはありますか?