集成多个raymarching样本

时间:2014-05-26 16:54:43

标签: algorithm graphics rendering raytracing raymarching

让我们说我使用光线追踪来渲染场函数。 (这是在CPU上,而不是GPU。)我有一个类似于粗略编写的伪代码的算法:

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上查找?

1 个答案:

答案 0 :(得分:0)

啤酒 - 兰伯特法则通过参与的同质媒体来控制灭绝。难怪我无法找到任何有用的关键词。

There's a good writeup here,它告诉我几乎所有我需要知道的事情,尽管它确实掩盖了阶段函数的计算。但至少现在我知道该怎么读。