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