3

レイトレーサーのシャドウレイに問題があります。

次の2枚の写真をご覧ください

3D sMax:

代替テキストhttp://neo.cycovery.com/shadow_problem.gif

私のレイトレーサー:

代替テキストhttp://neo.cycovery.com/shadow_problem2.jpg

シーンは非常に明るい光で照らされ、後ろから輝いています。非常に明るいので、シェーディングにグラデーションはなく、白または暗い(露出オーバーのため)だけです。

両方の画像は3DStudioMaxを使用してレンダリングされ、両方ともまったく同じジオメトリを使用します。1つのケースでは、法線が三角形全体に補間されます。

次に、表面の赤い点について考えます。滑らかでないバージョンの場合、それは暗い領域にあります。これは、光源が三角形とは反対を向いているため、この三角形からは光源が見えないことを意味します。ただし、平滑化されたバージョンでは、補間された法線がそのポイントで光が見えることを示唆しているため、明るい領域にあります(三角形の実際のジオメトリは光源とは反対を向いていますが)。

私の問題は、レイトレーシングされたシャドウが入ってくるときです。シャドウレイが赤い点からシーンに照射され、光源が見えるかどうかをテストする場合(シャドウイングを決定するため)、シャドウレイは交差点を返します。法線が補間されるかどうか(交差はジオメトリにのみ依存するため)。したがって、ピクセルは暗くシェーディングされます。

3dsamxはケースを正しく処理しています-レンダリングされた画像はレイトレースシャドウをオンにして生成されました。ただし、レイトレーシングされたシャドウをオンにすると、自分のレイトレーサーでこの問題が発生します(レイトレーシングされたシャドウがシャドウにあるポイントを決定するため、レイトレーサーでは、どちらの場合もポイントが暗くなります)。解決方法がわかりません。それ。

誰かがこの問題とその対処方法を知っていることを願っています。

ありがとう!

4

5 に答える 5

3

「正しい」解決策は、三角形をテッセレートするか、三角形が属する面の方程式を解くことです。テッセレーションだけ見ました。テッセレーションは制御可能な精度などを提供します...
それ以外の場合は、ポイントで法線をテストする必要があります(「3DStudio」が行うと私は信じています)。法線がライトに面していない場合は、ポイントを照明なしとして設定します。「セルフシェーディング」とは何の関係もありません。この問題は、テッセレーションだけで簡単に解決できます。幸運を!

于 2009-12-15T16:19:55.667 に答える
0

あなたの問題を正しく理解したかどうかはわかりません。どのバージョン/結果がどの方法で取得され、どの結果が正しいと思われるかを取得するのは難しいです。

特別な場合として、シャドウレイとレッドポイントが存在する三角形との交差を脅かす必要がある場合はそうではありません;-)。他の三角形のようにジオメトリの交差は行いませんが、補間された法線とシャドウレイの間の方向チェックのみを行います。

または、より一般的な意味で、シャドウレイは三角形、任意の三角形で停止すると言います。これは、a)それらが交差し、b)交差点での三角形の補間法線がシャドウレイと反対の方向を持っている場合です。

于 2009-12-09T21:41:15.020 に答える
0

方法: ポイントで補間された法線がライトの方を向いている場合、サーフェスはライトの方を向いている可能性があります。向こうを向いていると、あなたは影の中にいます。

最初のケースでは、影の原因となる 2 つのものは他のオブジェクトであり、凹型オブジェクトの場合は自分自身です。簡単な他のオブジェクトで。

あなた自身の場合、光源に光線を投じるとき、あなたが真に「凸状の内側の点」である場合、オブジェクトに入ってから離れるときに2回自分自身にぶつかり、影になります。

自分自身に 1 回当たった場合、あなたは光が当たっている場所の端にいるはずですが、その時点で (滑らかな法線を介して) 光に面していることがわかります。

于 2009-12-10T03:08:45.447 に答える
0

シャドウ レイを発射するときに、交点を光源の方向に少しずらすのは正常です。

つまり、shadowRay.dir = shadowRay.dir * 0.0001

これにより、プライマリ/反射/屈折レイと同じプリミティブと交差するシャドウ レイが回避されます。

おそらくあなたの問題は、あなたがこれをしなかったからですか?

于 2010-08-13T14:25:38.820 に答える
0

マット、あなたの問題は、接線に非常に近いため、影の光線が元の三角形に当たることだと思います(光と影の遷移の境界で発生することに注意してください)。この問題を解決するには 2 つの方法があります。1 つの方法は、光線の原点からの距離をテストする「バイアス」を使用することですが、より良い解決策は、元の三角形への参照を光線と共に保存することだと思います。この三角形に対してテストを行う場合は、単純に無視してください。

BVH のような空間インデックスを使用している場合は、交差テストを行う前に、三角形を含む「ボックス」から出てみることができますが、これは前述のアプローチほど単純ではなく、より注意してアプローチする必要があります。 .

于 2009-12-21T12:00:11.920 に答える