ポイントライトソフトシャドウ


7

全方向性(ポイント)ライトにソフトシャドウを実装する方法。典型的なシャドウマッピングテクニックを使用します。深度はテクスチャキューブにレンダリングされ、追加は非常に簡単です。ライトからフラグメントのワールド位置までのベクトルを使用するだけです。それは完全に動作します。ソフトシャドウが必要になるまで。私たちのエンジンでは、スポットライトにPCSS技術を使用しています。しかし、ポイントライトの場合は問題が発生します。

3Dでサンプリングする方法は?

方向とアップベクター(0,1,0)から正規直交基底を作成する手法を開発しました。次に、サンプリングベクトル(この(1.0、i / depthMapSize、j / depthMapSize)のようなもの)にこの基準を乗算します。ただし、これは(もちろん:))(0,1,0)と(0、- 1,0)。

私はこれについてどんな助けにも感謝します。


これはまだ解決されていないので、この質問を開いておきたいと思います。多分いつか私はこれを理解しなければならないので、私の解決策を投稿します。しかし、それでも私はどんなアイデアでも本当に喜んでいます
Notabene

あなたの質問は私には本当にはっきりしていません。キューブシャドウマップを使用してポイントライトを実装したようです。この手法を使用したソフトシャドウは、指向性ライトまたはスポットライトにシャドウを実装する場合と同じです。以前にスポットライトまたはディレクショナルライトでソフトシャドウを実装したことがありますか?原則は同じです。
Olhovsky

@olhovsky:確かに典型的なPCSSを実装しました。シャドウキューブマップの問題は、3Dベクトルを使用してサンプリングされ、スポットライトシャドウマップが2Dでサンプリングされることです...問題は、同様の方法を維持しながら3Dでサンプリングする方法です。 2DのPCSS。私の正規直交サンプリング基準はアーティファクトを生成しますが、それが機能することが証明されました(しかし、より良い解決策があると私は信じています)。
Notabene

注意:PCFフィルタリングはシャドウエッジを柔らかくするだけであり、ライトスペースでシャドウマップの解像度を有効に活用するのに役立ちません。そのためには、PSSM / CSMのようなテクニックも使用する必要があります。議論を続けることができる詳細な回答を追加しました。
Olhovsky

3Dベクトルでキューブをサンプリングすることに応じて:キューブの2D側面に好きなシャドウマップテクニックを適用し、6つの側面すべてをサンプリングして、それらを適切にブレンドします。PSSMは、そのように表示したい場合は、多くのキューブを提供すると考えることもできます。
Olhovsky

回答:


2

現在の手法を単純にハックするのと同様に、ビューベクトルが1つと平行になる傾向があるかどうかに基づいて、2つのアップベクトルから選択できます。

それは単にabs、比較、およびシェーダー用語での選択なので、それほどオーバーヘッドはありません-特にサンプリングとブレンディングを考えると...


ご回答ありがとうございます。私はあなたが以前に提案したことを試しました、そしてあなたは正しいこれは助けですが、いくつかの別の問題を引き起こします。私のテクニックは行き止まりで、新しいものを見つけたいと思います
Notabene

0

キューブマップを使用して、ポイントライトの影を表現しています。

この場合、6つのスポットライトを結合するのとほぼ同じです。

6つのシャドウマップのそれぞれでPCSSブロッカー検索を実行して、各シャドウマップの周縁値を見つける必要があります(単一のスポットライトに対して行われるのと同じ方法で)。

次に、すでに実装しているシャドウマッピングステップですでに行っているように、各半影の値をブレンドします。

受信オブジェクトは最大3つのシャドウマップ内のオブジェクトによってブロックできるため、これは最適化できます。つまり、実際に必要なPCSSブロッカー検索は3つだけです。ただし、より単純なバージョンを最初に機能させます。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.