0

私は、optix に基づくプロジェクトに取り組んでいます。プログレッシブ フォトン マッピングを使用する必要があるため、サンプルからプログレッシブ フォトン マッピングを使用しようとしていますが、透明マテリアルが実装されていません。私はよくグーグルで検索し、透明素材を含む他のサンプル (Glass、Tutorial、Whitted など) を理解しようとしました。最後に、次のように解決策を得ました。

  1. ヒットポイント(交点)を見つけます(下のh)
  2. その点から別の光線を生成する
  3. 新しく生成された点の色を使用する

従うと、その部分のコードを見つけることもできます。なぜなら、新しく生成されたレイ (上記のパート 3) に対して黒色 (.0f、.0f、0.f) を取得する理由がわかりません。

optix::Ray ray( h, t, rtpass_ray_type, scene_epsilon );
HitPRD refr_prd;
refr_prd.ray_depth = hit_prd.ray_depth+1;
refr_prd.importance = importance;

rtTrace( top_object, ray, refr_prd );

result += (1.0f - reflection) * refraction_color * refr_prd.attenuation;

どんなアイデアでも大歓迎です。関数 rtTrace() を使用した後、refr_prd.attenuationにはいくつかの色が含まれている必要があることに注意してください。手順をよりよく理解できるように、reflection と reflaction_color について説明しました。それらは単に無視できます。

4

1 に答える 1

1

問題を診断する方法はいくつかあります。

  1. 反射光線の影響を除去して、屈折光線の影響を分離します。
  2. ミスプログラムがあることを確認してください。HitPRD::attenuation は、最も近いヒット プログラムとミスしたプログラムのすべてによって書き込まれる必要があります。ミスプログラムが呼び出されていると思われる場合は、ミスカラーを明らかに悪いものに設定します ([1,0,1] が私のお気に入りです)。
  3. rtPrintf を rtContextSetPrintLaunchIndex または setPrintLaunchIndex と組み合わせて使用​​して、積の個々の値を出力し、特定のピクセルからどの項がゼロであるかを確認します。出力を特定の起動インデックスに制限しないと、出力が多すぎます。おそらく、深度も出力したいと思うでしょう。
于 2013-01-23T18:50:56.647 に答える