6

まず、この大まかな質問を申し訳ありませんが、あまり詳細を紹介したくないので、記事ライブラリヒントなどの関連リソースをお願いします。

私のプログラムでは、光線と三角形の交点(数百万の光線と三角形があります)を集中的に計算する必要があります。私の目標は、可能な限り高速にすることです。

私がしたことは:

  1. 私が知っている最速のレイトライアングルアルゴリズムを使用してください。

  2. Octreeを使用します(Game Programming Gem 1、4.10。4.11から)

  3. octreeアルゴリズムで使用される効率的で堅牢なレイボックス交差アルゴリズムを使用します

これらの優れたアルゴリズムを適用する前よりも高速ですが、高速になる可能性があると思います。高速化できる可能性のある場所に光を当ててください。

ありがとう。

4

5 に答える 5

3

これらの質問をする場所はompf2.comです。リアルタイム(非リアルタイムでもありますが)レイトレーシングに関するトピックを含むフォーラム

于 2010-01-06T11:37:18.577 に答える
2

OMPFフォーラムはこの質問に適した場所ですが、私は今日ここにいるので...

OctTreeトラバーサルにレイ/ボックス交差を使用しないでください。ツリーのルートノードに使用できますが、それだけです。ルートボックスの入口と出口までの距離がわかれば、x、y、zの分割平面(ボックスを細分割する平面)までの距離を計算できます。前面と背面までの距離がそれぞれfとbの場合、f、b、x、y、zの距離を分析することで、ボックスのどの子ノードがヒットしたかを判断できます。また、子ノードをトラバースしてそれらの多くを完全に拒否する順序を決定することもできます。

光線は1つの八分儀で始まり、3つの分割平面のいずれかを横切るときにのみ八分儀を変更するため、最大4つの子がヒットする可能性があります。

また、再帰的になるため、子ノードの入口と出口の距離が必要になります。これらの距離は、すでに計算したセット(f、b、x、y、z)から選択されます。

私はこれを非常に長い間最適化してきましたが、多くのレベルの深さの樹木については、まだ1桁のパフォーマンスが残っていると言っても過言ではありません。私はあなたが今いるところから始めました。

于 2010-01-07T19:04:41.997 に答える
1

実行できる最適化はいくつかありますが、それらはすべて、問題の正確なドメインによって異なります。一般的なアルゴリズムに関する限り、あなたは正しい方向に進んでいます。ドメインに応じて、次のことができます。

  1. ポータルシステムを導入する
  2. 計算をGPUに移動し、並列計算を利用します
  3. 最近のレイトレーシングで非常に人気のあるトレンドは、バウンディングボリューム階層です。
于 2010-01-06T11:38:58.173 に答える
1

高速交差アルゴリズムと組み合わせた空間ソートを使用して、すでに良いスタートを切っています。一度に1つの光線をトレースする場合、(静的シーンの)最適な構造の1つは、SurfaceAreaHeuristicを使用して構築されたKdツリーです。

ただし、真に高速のレイトレーシングを行うには、次の利点を活用する必要があります。

  • 光線のコヒーレントパケット
  • フルスタ
  • SIMD

「コヒーレントグリッドトラバーサルを使用したレイトレーシングアニメーションシーン」から始めることをお勧めします。これは、そのような最新のアプローチのわかりやすい例を示しています。また、参照に従って、これらのアイデアがKdツリーとBVHにどのように適用されるかを確認することもできます。

同じページで、「レイトレーシングアニメーションシーンの最先端」もチェックしてください。

もう1つの優れたリソースのセットは、長年にわたるすべてのSIGGRAPH出版物です。これは非常に競争の激しい会議であるため、これらの論文は一流になる傾向があります。

最後に、既存のコードを使用する場合は、OpenRTのプロジェクトページを確認してください。

于 2010-07-17T06:41:32.540 に答える
0

私が見た便利なリソースは、グラフィックツールのジャーナルです。シーンによっては、八分木よりも別のBVHの方が適切な場合があります。

また、プロファイラーでパフォーマンスを確認していない場合は、確認する必要があります。SharkはOSXで優れており、WindowsでVerySleepyを使用すると良い結果が得られました。

于 2010-01-08T17:33:08.287 に答える