OpenGL ES 2.0 GLSL 機能を使用して画像を操作しています。私が実現したいのは、フラグメント シェーダー内のテクスチャからサンプルをフェッチするときに、特定の詳細レベル (LOD) を選択することです。どうやら、OpenGL ES 2.0 のフラグメント シェーダーではサポートされていません (ただし、オプションでそれを提供できるtexture2DLod()
拡張機能があります)。GL_EXT_shader_texture_lod
ただし、デフォルトtexture2D()
関数は、3 番目のオプション パラメータ バイアスを提供します。私が理解している限り、このパラメーターは現在の LOD に追加されたオフセットであると想定されています。
私のテストでは、画面サイズのクワッドを描画し、サンプル座標をスケーリングしてテクスチャを拡大しています。縮小フィルターとして GL_LINEAR_MIPMAP_LINEAR を使用して、テクスチャのミップマッピングを有効にしました。ARM Mali-400 GPU でゼロ以外のバイアス パラメーターを使用してサンプリングした場合の結果は、下の画像で確認できます。
一部のピクセルが縮小フィルターを使用し、他のピクセルが拡大フィルターを使用していることを示す ISTM。
これはどのように制御されていますか?また、バイアスを使用する場合に初期 LOD を決定するにはどうすればよいですか? 頂点シェーダーから調整できますか?
関連する質問は次のとおりです。
GLSL サンプラーは、テクスチャの縮小、つまりミップマップ レベルをどのように決定しますか?
更新: 画面を覆うようにテクスチャをサンプリングすると、(拡大されていても) 適切なミップマップ ルックアップを実行しているように見えることに気付きました。ここで、サンプル座標に小さなオフセットを追加すると、上の画像に見られるバンディングが見え始めます (さらに拡大されています)。バイアス パラメータを使用しない場合、バンディングはまったく見られません。