ディファード ライティング レンダラーでアンチエイリアシングを実装する方法を検討しています。つまり、ジオメトリ パス、ライティング アキュムレーション パス、シェーディング用の 2 番目のジオメトリ パスの 3 つのパスです。
通常のマルチサンプリング (MSAA) では、目標はポリゴン エッジのピクセルのみをマルチサンプリングすることです。そして、三角形ごとに、フラグメントシェーダーの結果をそれがカバーするサブピクセルにのみ書き込みます。しかしもちろん、ディファード ライティングではこれが少し問題になることは既知の問題です。
目標は、基本的にスーパーサンプリングになるため、2 番目と 3 番目のパスですべてのサブピクセルを評価しないようにすることです。それを達成するための別の(より良い/可能性のある)方法を誰かが知っているなら、私はそれを聞きたいです. しかし、ここに私の考えがあります:
最初のパスでフラグメントシェーダーを作成できる場合は、三角形がカバーする最初のサブピクセルにのみ書き込みます。これにより、ライティング パスで書き込まれていないテクセルを無視できます。そして最後に、2 番目のジオメトリ パスで、三角形が一致する最初のサブピクセルのみを何らかの方法で読み取ります。これは、最初に書き込んでからライティングを行ったサブピクセルです (そして、カバーされたすべてのテクセルに通常どおりに書き込むので、結果は解決できます)。このようにして、「一意の」テクセルのみが 2 番目と 3 番目のパスで評価されます。
glslでこれを行う方法を誰かが言うことができますか(またはそれが不可能であることを確認してください)? これが理論的に不可能な理由はわかりませんが、gsl でそれを行う方法もわかりません。