根据凹凸贴图在纹理上预渲染光线

假设我有每个光源的角度和距离,使用灰度凹凸贴图和N个有色光源,在纹理表面上渲染光的algorithm是什么? (我用软件预渲染)。

根据光源的位置和角度,我有它呈现光的部分。 我的问题是双重的:

  1. 如何决定基于多种不同光源的RGB颜色? 它是简单的本质加法?
  2. 如果角度不是确定强度的充分方法,我该怎么办? 例如,当表面有一个深刻的警告,而较高的高架区阻挡了阴影区域的光线? 你如何处理这样的事情?

在这里输入图像说明

  1. 是的,你只需添加它们。 愚蠢的解释:来自光源1的x光子进入,来自光源2的光子y,所以x + y光子熄灭。 通常情况下,这些过程是相互独立的。

  2. 通过将可见性信息编码为球面谐波,您可以处理类似的事情。 谷歌为“球面谐波砂砾细节”一个很好的解释。 您需要通过光线投射*预先计算凹凸贴图的每个元素的可见性,并将其存储在球面谐波基函数的系数中。 这可能不会太快,但是1使用它来进行体绘制中的实时阴影。

你可以用Bresenhamsalgorithm在2D凹凸贴图中进行这种光线投射:

在这里输入图像说明

从绿色像素开始,沿光源方向沿着红线移动,直到find表示碰撞的值(黄色)。 如果你在图像外面结束,你没有碰撞,你的光源是可见的。

1 Kronander J,Jonsson D,Low J,Ljung P,Ynnerman A,Unger J.用于直接体绘制中的dynamic照明的有效可见性编码。 IEEE Trans。 可见。 COMPUT。 graphics。 [互联网]。 2011年2月3日; 18(3):447-62。 可从: http : //www.computer.org/csdl/trans/tg/2012/03/ttg2012030447-abs.html

我认为你正在寻找的技术被称为视差遮挡映射 ( Parallax Occlusion Mapping) ,是视差映射 ( Parallax Mapping )的延伸。

Parralax Occlusion Mapping(Parralax遮挡贴图)是一种技术,用于根据相对于表面法线的视角来解释选取哪个纹素,同时考虑凹凸贴图所提供的表面位移。 请记住,当你知道哪个texelselect你也知道三角形表面上的哪个(u,v)点正在被查看。

你应该使用这种技术来解释的是给定的三角形的纹理坐标,由给定的光源在特定的方向上投射光线来照明。 所以从这里你应该能够计算固定表面上的每像素光照事件,以便进行光照烘焙,就像你没有凹凸贴图(无论你使用什么技术)。

这应该足够烘焙你的表面漫reflection照明到一些数据源(添加在标准的颜色纹理的顶部也许?)。 但是,处理镜面照明可能更具挑战性,可能只能实时完成,因为它取决于观看角度/位置以及光线和几何信息。

这种技术经常被实时使用,并不昂贵,因此需要烘烤。 考虑将其作为实时扩展添加到您的系统中,因为您可能需要长期使用dynamic对象以适应场景的其他部分。