0

フィールド関数をレンダリングするためにレイマーチングを使用しているとしましょう。(これは GPU ではなく CPU で行われます。) 私はこの大まかに書かれた疑似コードのようなアルゴリズムを持っています:

pixelColour = arbitrary;
pixelTransmittance = 1.0;
t = 0;
while (t < max_view_distance) {
  point = rayStart + t*rayDirection;
  emission, opacity = sampleFieldAt(point);
  pixelColour, pixelTransmittance =
      integrate(pixelColour, pixelTransmittance, emission, absorption);
  t = t * stepFactor;
}
return pixelColour;

ロジックはすべて非常に単純です...しかし、どのように機能integrate()するのでしょうか?

各サンプルは、サンプルがポイントで取得されたとしても、ポイントではなく、実際には私のフィールド内のボリュームを表します。したがって、最終的なピクセル カラーへの影響は、ボリュームのサイズによって異なります。

これを行う方法がわかりません。私は周りを見回しましたが、それを行う多くのコードを見つけましたが (通常は Shadertoy で)、すべての方法が異なり、理由の説明が見つかりません。これはどのように機能するのでしょうか? さらに重要なのは、Google で検索できる魔法の検索用語を教えてください。

4

1 に答える 1