モーションブラーのオブジェクト空間へのレイ変換


12

私のレイトレーサーは多種多様なオブジェクトをサポートしています。それらを交差させるには、光線をオブジェクト空間に変換する標準的な手法を使用します。モーションブラーを追加するまで、これは素晴らしく機能します。

モーションブラーは、1つではなく一連の変換として説明します(説明を簡単にするために、2つだけとしましょう)。私のアプローチは、両方のキーフレームでレイの逆変換を行い、位置/方向を変更することです。

これは翻訳ではうまくいくように見えますが、回転では壊れます。たとえば、30度と90度回転する2つの三角形があります。

回転1
(4つのサンプル、MN再構成、赤いサンプルは2つのキーフレームの近くから来ました)

コーナーでは、重複したサンプルが2つの頂点間の直線上にあると予想されます。代わりに、外側に膨らみます。これは間違っています。より興味深い変換を持つより興味深いシーンでは、さまざまな障害モードが発生します。たとえば、45回転するプロペラがあります。

回転2
(100サンプル、可視化された法線)

いくつかの問題は、BVHの破損によるものです(オブジェクトの極値がキーフレームにあると想定しています)が、ブルートフォースレンダリングでさえ正しくありません。

フォワードトランスフォーム(レイではなくオブジェクトを変換する)のみを行うことでこれをすべて修正できますが、これは可能な場合にのみ機能します(実際には三角形のみ)。


レイトレーサーに、オブジェクトではなくレイを変換することで、変換(特に回転)の線形近似を作成させるにはどうすればよいですか?

回答:


7

キーフレーム間でレイの位置/方向をLerpingすることは、キーフレーム間で逆行列をLerpingし、Lerped行列で変換することと同等である必要があります。問題は、キーフレームの回転が異なる場合、一般的に、ずれたマトリックスは、せん断、不均一なスケールなどを伴う「奇妙な」何かになります。

そのような場合に対して具体的にテストして強化しない限り、そのような歪んだ座標系で交差点とシェーディングルーチンの一部が適切に機能しなくても驚かないでしょう。(たとえば、2つの単位ベクトルの内積を取得しても、せん断座標系では正規直交座標系と同じ答えは得られません。)

これは推測にすぎませんが、平行移動、回転、スケール(該当する場合)を個別に(回転部分にクォータニオンを使用して)組み合わせて再結合する補間方法を選択すると、より適切に機能する可能性があります。


前方に変換されたオブジェクトを逆方向に変換することは、後方に変換された光線を逆方向に変換することと同じですか たとえば、lerpの後に光線を再正規化できます(それに応じてヒット距離をスケーリングします)。これは結果を変えません。
imallett

@imallettレイのLerpingは、逆行列のLerpingと同等である必要がありますが、必ずしも順行列のLerpingやオブジェクトのLerpingとは限りません(反転は線形演算ではないため)。そして、lerpが物事を完全に修正した後に光線を繰り込むとは思わない-あなたはまだあなたの交差ルーチンなどで数学を台無しにすることができるせん断された不均一にスケーリングされた座標系にいることができます。
ネイサンリード

[編集を参照してください。より良い画像]少なくとも、くりこみは交差点の問題を排除すべきだと思いますが、それは私が考えたことです。レイをラップすることは、オブジェクトをラップすることではありません。あなたの答えでは、TRSをlerping [inverse?]してから再結合することを提案しました。これはプロダクションレンダラーが行う方法ですか?
imallett

3

AFAICS、かなり非線形な補間の単一の線形近似ではそれほど遠くなるとは思いませんが、おそらくこの論文/ラスタライズのモーションブラーに関するGribelらによるプレゼンテーションが役立つかもしれません。


私はそれを線形近似に分解しますが、これは非常に典型的なものです。このような複数のステップを使用して、より複雑な変換を処理できます。
イマレット
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.