让我们说我使用光线追踪来渲染场函数。 (这是在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上查找?
答案 0 :(得分:0)
There's a good writeup here,它告诉我几乎所有我需要知道的事情,尽管它确实掩盖了阶段函数的计算。但至少现在我知道该怎么读。