请帮我解决这个关于体积射线投射算法的问题:
在维基百科文章(链接)中,它说“对于每个采样点,计算照明值的梯度。这些表示体积内局部表面的方向。 ”
我的问题是:为什么是照明值的渐变?为什么不透明度值?当然,从“有东西”到“没有东西”的转变更准确地描述为不透明度的变化。
例如,考虑两个体素:[1][2]
. 1 为明亮透明,2 为暗且不透明。在我看来,这对应于面向左侧的表面。我错过了什么吗?
请帮我解决这个关于体积射线投射算法的问题:
在维基百科文章(链接)中,它说“对于每个采样点,计算照明值的梯度。这些表示体积内局部表面的方向。 ”
我的问题是:为什么是照明值的渐变?为什么不透明度值?当然,从“有东西”到“没有东西”的转变更准确地描述为不透明度的变化。
例如,考虑两个体素:[1][2]
. 1 为明亮透明,2 为暗且不透明。在我看来,这对应于面向左侧的表面。我错过了什么吗?
梯度向量指向最大增加的方向。在这种情况下,这意味着它指向照明增加最快的方向,因此在您的[1][2]
示例中,梯度2
确实在左侧。
相反,如果你采用不透明度的梯度,你会得到一个指向不透明度增加方向的向量,即“向内”。你可以否定它来得到一个指向外面的向量,但仍然存在 opacity 是local的问题。它只告诉你周围环境中物体的结构。当您对某物进行着色时,您想知道的是当您从点到点移动时,表面的光照度如何。知道恒定照明的表面可以推断出这一点,但是从恒定不透明度的表面,您只能推断如果表面和光源之间没有任何东西,它的照明程度。
梯度是等值面的法线向量,您可以将体积对象视为等值面的堆栈(其中很多;o),每个等值面在其表面上具有相同的标量场值;传递函数设置不透明度/红色/绿色/蓝色和标量值的对应关系,因此每个等值面都有指定的透明度和颜色。这种表示方式使理解体积梯度在体积渲染中的作用变得简单......
在经典的光线追踪中,您可以计算从您的眼睛穿过您面前屏幕上的一个像素并进入世界的光线,看看它击中了什么。一旦确定了交点,就需要确定该点的照明特性。光照特性取决于表面法线。当您考虑它时,表面法线是一种属性,不仅由交点本身决定,而且由周围表面决定。
同样的原理也适用于光线投射。一旦确定光线确实击中了某些体素,您需要分析周围的体素以有效计算可用于照明计算的“表面法线”。