マルチサンプリングがどのように機能するかを理解することに非常に興味があります。私はそれを有効にする方法や使用する方法について多くの文献を見つけましたが、アンチエイリアスレンダリングを実現するためにそれが実際に何をするかについての情報はほとんどありません。私が見つけたのは、多くの場所で、私をさらに混乱させるだけの矛盾する情報です。
マルチサンプリングを有効にして使用する方法(実際にはすでに使用しています)、マルチサンプリングされたレンダーバッファ/テクスチャに実際にどのような種類のデータが入るのか、そしてこのデータがレンダリングパイプラインでどのように使用されるのかを知っていることに注意してください。
スーパーサンプリングがどのように機能するかはよく理解できますが、マルチサンプリングにはまだ理解したいいくつかのあいまいな領域があります。
仕様の内容は次のとおりです:(OpenGL 4.2)
色、深度、ステンシル値などのピクセルサンプル値は、このバッファー(マルチサンプルバッファー)に保存されます。サンプルには、フラグメントの色ごとに個別の色の値が含まれています。
..。
マルチサンプルレンダリング中に、ピクセルフラグメントの内容が2つの方法で変更されます。まず、各フラグメントには、SAMPLESビットのカバレッジ値が含まれています。
..。
次に、各フラグメントには、単一サンプルレンダリングモードで維持される単一の深度値と関連データのセットではなく、SAMPLES深度値と関連データのセットが含まれます。
したがって、各サンプルには、異なる色、カバレッジビット、および深さが含まれています。通常のスーパーサンプリングとの違いは何ですか?私には「加重」スーパーサンプリングのように見えます。各最終ピクセル値は、単純な平均ではなく、サンプルのカバレッジ値によって決定されますが、これについては非常によくわかりません。そして、サンプルレベルでのテクスチャ座標はどうですか?
たとえば、法線をRGBFマルチサンプルテクスチャに保存する場合、ポリゴンのエッジで「アンチエイリアス」(つまり、0に近づく)でそれらを読み戻しますか?
フラグメントシェーダーは、gl_SampleID、glSampleInを使用するか、「サンプル」ストレージ修飾子を持たない限り、フラグメントごとに1回呼び出されます。フラグメントシェーダーをフラグメントごとに1回呼び出して、アンチエイリアスレンダリングを取得するにはどうすればよいですか?