OpenGL®シャドウとは何ですか?
Open GraphicsLibrary®(OpenGL®)シャドウは、同様の照明条件下で実際に影がどのように投影されるかを3次元(3D)OpenGL®シーンで視覚的に近似したものです。 シャドウはOpenGL®に実装する複雑な視覚機能です。これは主に、シーンでのシャドウの投影に対する生来のサポートがないためです。 代わりに、さまざまな使用可能なバッファー、シェーダー、場合によっては特定のグラフィックスの特別な機能にアクセスできる拡張機能などのさまざまなツールを使用して、シーン内のオブジェクトとジオメトリからシャドウを作成するために使用できるさまざまな手法がありますカード。 ほとんどの場合、OpenGL®シャドウレンダリングの品質、精度、速度は、コンピューターまたはデバイスに存在するグラフィックスハードウェアの処理能力とメモリに直接関係しています。 OpenGL®シャドウを実装するより一般的な方法には、シャドウボリューム、シャドウマッピング、レイトレーシングなどがあります。
OpenGL®シャドウをサポートするアプリケーションを作成するには、数学的な知識とOpenGL®の動作方法に関する深い理解が必要です。 OpenGL®は、動的でリアルタイムにレンダリングされる3Dシーンの作成に広く使用されているため、シャドウの作成に使用されるアルゴリズムは、速度を最適化するだけでなく、リソースの消費と中断を慎重に測定する必要がありますレンダリングに使用されるグラフィックパイプラインで発生する可能性があります。 これらの理由から、レイトレーシングと呼ばれる最も基本的な影の作成方法は、完全な3Dシーンには非常に時間がかかるため、実用的ではありません。
レイトレーシングは基本的に、カメラのビュープレーンまたは位置からシーンを介してオブジェクトの表面までの想像上の線、またはレイに従い、1つまたは複数の光源の位置およびその他の要因に基づいて表面の色を計算します。 3Dシーンを2次元(2D)表面に描画して表示できるラスタライズプロセスでは、描画されるすべてのピクセル、特にテクスチャなどでレイトレーシングのプロセスを実行する必要があります。表面特性、同じピクセルを数回評価する必要があるかもしれません。 これは、リアルタイムのレイトレーシングを意味しますが、シャドウを正確にレンダリングしますが、通常は実用的ではありません。
OpenGL®シャドウの作成に使用できる別の方法は、シャドウマッピングと呼ばれます。 この方法では、深度バッファまたはステンシルバッファを使用して、光源からシーン内のさまざまなオブジェクトの表面までの一連の距離として、光源の角度からシーンをレンダリングします。 次に、正しい表示角度から2回目にシーンがレンダリングされ、各ピクセルがバッファー内の特定の距離範囲内にあるかどうかがチェックされ、ピクセルが照らされているか影が付けられているかが示されます。 シャドウマッピングの使用はメモリ集約型であり、複数の光源があるシーンでは、複数の角度から複数のマップを作成する必要があります。
シャドウボリュームは、他の方法よりも正確なOpenGL®シャドウを作成する方法ですが、独自の問題があります。 シャドウボリュームは、本質的に、光源から離れたオブジェクトの照らされた表面から広がるシーン内の不可視のジオメトリです。 このボリュームを他のオブジェクトと照合して、ボリュームの発生元の表面の影に落ちているかどうかを確認できます。 この手順は非常に複雑になる可能性があり、速度を最適化すると最終的に視覚的なアーティファクトが作成されます。