【问题标题】:Integrating multiple raymarching samples整合多个光线追踪样本
【发布时间】:2014-05-26 16:54:43
【问题描述】:

假设我正在使用 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 上查找它?

【问题讨论】:

  • ...在网络上花费了相当长的时间进行研究之后,当我发现一篇看起来很有希望的关于该主题的文章时,我感到非常兴奋。原来是这个问题。呸。

标签: algorithm graphics rendering raytracing raymarching


【解决方案1】:

这是比尔-兰伯特定律,它通过参与的同质媒体来控制灭绝。难怪我找不到任何有效的关键字。

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-04-30
    • 1970-01-01
    • 2015-11-11
    • 2014-12-28
    • 2017-07-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多