0

画面外の複数の光源からハードシャドウを計算できるかどうか、またどのように計算できるかを理解しようとしています。

プリアンブル: シーンは非常に複雑で、最大数百万の三角形、最大 100 の異なる光源、ライト、マテリアルと深度が有効で、最大の精度 (少なくとも 10kx10k ピクセルの地上解像度) です。影は、平面に投影された影に他なりません。つまり、(光源の位置と平面を指定して) 影のマトリックスを事前に乗算することにより、オブジェクト自体をレンダリングしています。複数のオブジェクト、複数の光源がありますが、平面は 1 つだけです。

このため、リアルタイムは不可能です。また、1 バイト (255 の有用な値) しかなく、255 を超える光源がある可能性があるため、増分ステンシル値について考えるのも不可能です。

したがって、私の考えは、オフスクリーンでレンダリングすることでした(テクスチャまたはレンダリングバッファイメージに)。

光源ごとに、シャドウ マトリックスを計算して適用します。次に、最初のオブジェクトを特定のステンシル番号 (つまり 1) でレンダリングします。次に、2 番目のオブジェクトをレンダリングします。ハード シャドウのみに関心があるため、ステンシル番号が 1 の場合にのみレンダリングする必要があり、他のすべてのピクセルをゼロにする必要があります。次に、3 番目のオブジェクトなどです。最後に、2 番目の光源などについてすべてのプロセスを繰り返します。

出来ますか?より良いテクスチャまたはレンダリング バッファ イメージ? ハード シャドウが計算されたら、CPU で取得して分析し、シーンの地面にもレンダリングする必要があります。

理想的には、FBO にアタッチされたステンシル バッファーのみが必要ですが、ここでは次のように述べています。

ステンシルは決してステンシル バッファーを作成しないでください。すべての GPU とすべてのドライバーが、独立したステンシル バッファーをサポートしているわけではありません。ステンシル バッファが必要な場合は、D24S8 とも呼ばれる Depth=24、Stencil=8 バッファを作成する必要があります。このページで GL_EXT_packed_depth_stencil に関する例を検索してください。

これは今日でも有効ですか?

周りを見回すと、各オブジェクト間にフルスクリーンのポリゴンをレンダリングすることで、他のすべてのピクセルをゼロにする方法を見つけましが、もっと効率的な方法があるのでしょうか..?

4

0 に答える 0