什么是Lightmapping?


lightmapping本质上说就是标准的贴图,它存储着表面的照明信息。如果大型场景中每个表面都使用lightmapping,内存将无法负担。
一般是在程序开始时将贴图与lightmapping混合。下面是一个例子.

 

你可看到图片结果比仅用贴图要好的多。lightmapping也可用动态的光照。有一些情况下高质量的光照要事先计算出(使用光线跟踪技术)


我如何创建我的 Lightmaps?

你可以使用任何方法创建它(伯朗方程,光线跟踪,等等)这里只介绍一种——计算出灯光照射的每一样本点,如果你理解它...首先你为每一个表面创建空白的贴图。为其上每点分配灯光照射值,但愿你明白.

略...

 

 

 

问题1:我如何处理阴影

取决于你的光源,如果你使用简单的点光和一般的光线方程,你很容易检查出在lightmap上的点,那里被照射,那里被表面遮挡。这个过程还可进行优化。我建议你对硬边线模糊材料,这样显的更自然.
不止一种方法处理阴影.

 

问题2:我如何处理体积雾

这在建筑上很常用,你可设置特殊的lightmaps (通常比贴图小,它与视图相关联的)使用alpha值代表fogging值。雾的浓度只要经过一些简单的相交检察。

 

zh1110注:颜色的MODULATE与ALPHA混合计算是不同的,最后产生效果当然也不同

如两颜色(28,200,10)与(128,128,0)分别进行MODULATE与ALPHA的混合

使用ALPHA混合:((28+128)/2,(200+128)/2,(10+0)/2))=(78,164,5)

使用MODULATE混合:(28*128/256,200*128/256,10*0/256)=(14,100,0)

lightmapping一般用的是MODULATE混合,其他如DOTPRODUCT3、ADD就不在罗嗦了

 

文件下载