作者:lucky_笨鸟_660 | 来源:互联网 | 2023-07-03 16:47
使用全局光照贴图对场景进行渲染,首先就需要对场景进行光照贴图的生成,同时计算出场景中各个多边形的顶点所对应的纹理坐标,然后再对多边形列表的光照贴图进行合并,并进行纹理坐标的重新定位,这样就可
使用全局光照贴图对场景进行渲染,首先就需要对场景进行光照贴图的生成,同时计算出场景中各个多边形的顶点所对应的纹理坐标,然后再对多边形列表的光照贴图进行合并,并进行纹理坐标的重新定位,这样就可以生成整个场景的一张光照贴图,从而实现带有光照效果的高效率渲染。
理论上,在渲染时各个多边形根据它所对应的纹理坐标来访问场景光照贴图就能得到正确的显示效果,但在实际中却由于浮点运算的精度误差而使得到的纹理坐标产生误差,导致每个多边形在访问光照贴图时会出现纹理偏差,进而致使渲染出的场景效果不正确,特别是场景中多边形的边缘处会出现很不自然的裂痕,这样就使渲染的质量降低。虽然这些偏差都是在单个纹理区域的边界上出现微小的偏差,但由于两个多边形边界处本应自然衔接,于是这在边界上出现的即便是极小的偏差也导致了整体渲染效果的下降。
如图所示:
根据问题出现的原因可以得到如下的解决方法:
1. 通过提高计算多边形纹理坐标的精度,比如由float -> double,但在实际实现中这样操作并没有什么实质的改善。
2. 在进行多边形的光照贴图到场景的光照贴图的合并过程中,对多边形的光照贴图进行处理。在进行贴图扩展的时间,对原始单个多边形的光照贴图进行扩展,利用原始贴图的边缘颜色值进行扩展,使其边缘范围变大,这样即使是在场景的光照图中出现访问的偏差,得到的依然是该贴图的边界的颜色值,这样就可以使相邻的两个多边形的边缘融合得很好。在实际实现中用这种方法就可以很好地解决各个多边形边界裂痕的问题。
扩展后的光照贴图:
原始的贴图 扩展后的贴图
其中,蓝色边框这外即是扩展出的纹理区域。
改进后的场景渲染效果:
虽然使用贴图的扩展增大了原有光照贴图的尺寸及空间,但相对其带来的好处来说,这一点是可以忽略不计的,这种扩展方法还可以用在其它类似问题的解决中。