2

3D モデルがあるとします。

ここに画像の説明を入力

モデルは、頂点、面 (すべての三角形)、および法線ベクトルの形式で与えられます。モデルには、穴や透明部分がある場合があります。

無限遠に任意に配置された光源の場合、次のことを決定する必要があります。

  • [必須] 他の三角形によって (部分的に) 陰になっている三角形

次に、部分的に陰になっている三角形の場合:

  • [おまけ] 三角形の面積の何割が影になっているのか
  • [ superbonus ] 影の形状を正確に表現する新しいメッシュを考え出す

私の最終的なアプリケーションは、ヘッドレス マシンで実行する必要があります。つまり、GPU がありません。したがって、OpenGL、OpenCL などのすべての標準的なものは、最良の選択ではない可能性があります。

この制限を考慮して、これらのことを決定するための最も効率的なアルゴリズムは何ですか?

4

1 に答える 1

2

単一のメッシュまたは複数のメッシュがありますか?

影が単一の「地面」表面に投影されるか、部屋の壁のようなものに投影されるか、オブジェクトの近くに投影されるかを意味します。この情報によると、解決策は非常に異なります

  1. 平らな地面・壁面用

    通常、このサーフェスに投影されたレンダリングを行う最良の方法です

    影の投影

    カメラの方向は光の法線と反対で、スクリーンは表面へのレンダリングです。通常、サーフェスは光に対して垂直ではないため、プロジェクションを使用して補正する必要があります...ターゲット サーフェスごとに 1 つのレンダー パスが必要なので、シャドウが近くのメッシュに投影される場合には適していません (地面/壁のみ)。

  2. より複雑なシーンの場合

    より高度なアプローチを使用する必要があります。それらにはかなりの数があり、それぞれに長所と短所があります。ボクセル マップを使用しますが、スペースに制限がある場合は、ステンシル/ベクターアプローチの方が適しています。もちろん、これらの手法はすべて非常に高価であり、GPUがなければそれらを実装しようとすることさえありません。

    ボクセル マップは次のようになります。

    シャドウ ボクセル マップ

    セルフ シャドウイングだけが必要な場合、ボクセル マップのサイズはメッシュの周りの境界ボックスのみにすることができます。その場合、メッシュ ボリューム全体を組み込むのではなく、各ピクセルを光の方向に投影するだけで (最初のボクセルを無視します...)、シャドウを回避します。照らされた表面

于 2014-03-13T09:13:01.977 に答える