0

OpenGL で構築されたシーンがあります。私のライトが部屋の中央にあるとき、部屋の外側が照らされます。OpenGlに頂点での照明を停止させる簡単な方法はありますか、それとも複雑な計算が必要ですか. これは、この質問をするときの照明を示す、くだらない、簡単なシーンの写真です。

4

2 に答える 2

4

基本的に、部屋の壁に影を落とす必要があります。これは、オブジェクトの外部が照らされないようにする場合に必要なことです。

グラフィックスのシャドウイングは、一般的にかなり難しい問題です。優れたソリューションと高速なソリューションはたくさんありますが、両方ではありません。どちらのソリューションも、2つの間のトレードオフになります。SIGGRAPHには、この問題を解決しようとしているReallySmartPeopleからのあらゆる種類論文が満載です。

速くて汚いものが必要な場合、シャドウマッピングはそれほど難しくはありませんが(少なくとも単純な種類)、不正確です。たとえば、オブジェクトと壁の交差点に沿ってアーティファクトが表示されます。精度を上げるために、ステンシルシャドウは機能しますが、ハードエッジのシャドウがあります。

于 2013-01-27T23:23:21.283 に答える
1

ここでの 1 つの解決策は、おそらく、オブジェクトが壁の外にはみ出さない (またはオブジェクトを内側/外側の部分に分離しない) 方法でジオメトリを作成することです。次に、内部と外部を異なるライトでレンダリングします。

すべてがすべてに影を落としていれば、問題はありません。

ライトが静的な場合は、ライティングを (シャドウと一緒に) 事前に計算 (ベイク) することを検討してください。多くの 3D パッケージでこれを行うことができます。プログラミングの観点からは、これが最も簡単な解決策かもしれません。

すべてのライトの影をリアルタイムでレンダリングするための一般的な解決策があれば、それも問題を解決しますが、それは困難な作業であり、適切なフレームを維持したい場合は、最適な方法ではない可能性もあります。レート。

リアルタイム シャドウ レンダリングについて知りたい場合は、シャドウ マップを参照することをお勧めします。シャドウ マップは、現在、ほとんどのゲームで一般的に使用されているソリューションです。ポイント ライトの場合、キューブ マップの 6 面のシャドウ マップをレンダリングする必要があることに注意してください。実際には、どのライトが実際に影を落とす必要があるかを検討し、何らかのトレードオフを行う必要があります。

于 2016-01-30T18:52:09.377 に答える