OpenGL ES 2.0 フラグメント シェーダーでミップマップされたテクスチャの詳細レベルを理解しようとしています。
この回答によると、bias
パラメーターを使用texture2D
してフラグメントシェーダーの特定の詳細レベルにアクセスすることはできません。この投稿によると、詳細レベルは代わりに、隣接するフラグメントの並列実行から自動的に計算されます。それが物事の仕組みだと信じなければなりません。
私が理解できないのは、その理由です。特定のレベルの詳細にアクセスできないのはなぜですか?実際には非常に簡単なはずなのに、アクセスできないのはなぜですか? なぜ代わりに複雑な固定機能に頼らなければならないのでしょうか?
私には、これは非常に直感に反するように思えます。結局のところ、OpenGL 関連のものはすべて、固定機能から離れて進化しています。また、OpenGL ES は、OpenGL よりも幅広いハードウェアをカバーすることを目的としているため、多くの単純なバージョンのみをサポートしています。したがって、仕様の開発者が LOD パラメーターを必須 (おそらくデフォルトはゼロ) であると判断し、シェーダー プログラマーが適切と考える方法で適切な LOD を計算する必要があることを完全に理解できます。その計算を自動的に行う関数を追加することは、デスクトップの OpenGL で期待していたことのように思えます。
特定のレベルへの直接アクセスを提供しないことは、どう見ても私にはまったく意味がありません。特に、そのbias
パラメーターは実際に詳細レベルを微調整できることを示しているため、これは明らかに、並列処理される一連のフラグメントの単一レベルのメモリからデータをフェッチすることではありません。他に理由が思いつきません。
もちろん、なぜ質問が意見を引き寄せる傾向があるのか. ただし、Stack Overflow では意見に基づく回答は受け付けていないため、意見はコメントとしてのみ投稿してください。一方、回答は、明確な知識を持っている人の発言など、検証可能な事実に基づいている必要があります。この事実について開発者が話し合った記録があれば、それで完璧です。内部の誰かがこの問題について議論しているブログ投稿があれば、それは非常に良いことです。
スタック オーバーフローの質問は実際のプログラミングの問題に対処する必要があるため、理由を尋ねるのは悪い質問であると主張する人もいるかもしれません。答えを得ても、その明示的な lod アクセスが突然現れるわけではないので、差し迫った問題の解決には役立ちません。しかし、ここでの理由は、これまで把握していなかった OpenGL ES の動作に関する重要な側面にあるのではないかと思います。その場合、この 1 つの決定の背後にある動機を理解することは、私や他の人が OpenGL ES 全体をよりよく理解し、パフォーマンス、正確性、移植性などの点でプログラムでより有効に利用するのに役立ちます。 . したがって、私はこの質問を「何が欠けているのか?」と述べたかもしれませんが、これは現時点で私にとって非常に現実的なプログラミングの問題のように感じます。