光照贴图生成中的精度问题

1649 篇文章 11 订阅
1623 篇文章 22 订阅

http://blog.csdn.net/bugrunner/article/details/5400411

 

使用全局光照贴图对场景进行渲染,首先就需要对场景进行光照贴图的生成,同时计算出场景中各个多边形的顶点所对应的纹理坐标,然后再对多边形列表的光照贴图进行合并,并进行纹理坐标的重新定位,这样就可以生成整个场景的一张光照贴图,从而实现带有光照效果的高效率渲染。

理论上,在渲染时各个多边形根据它所对应的纹理坐标来访问场景光照贴图就能得到正确的显示效果,但在实际中却由于浮点运算的精度误差而使得到的纹理坐标产生误差,导致每个多边形在访问光照贴图时会出现纹理偏差,进而致使渲染出的场景效果不正确,特别是场景中多边形的边缘处会出现很不自然的裂痕,这样就使渲染的质量降低。虽然这些偏差都是在单个纹理区域的边界上出现微小的偏差,但由于两个多边形边界处本应自然衔接,于是这在边界上出现的即便是极小的偏差也导致了整体渲染效果的下降。

 

如图所示:

 

Scene0

 

根据问题出现的原因可以得到如下的解决方法:

1.       通过提高计算多边形纹理坐标的精度,比如由float -> double,但在实际实现中这样操作并没有什么实质的改善。

2.       在进行多边形的光照贴图到场景的光照贴图的合并过程中,对多边形的光照贴图进行处理。在进行贴图扩展的时间,对原始单个多边形的光照贴图进行扩展,利用原始贴图的边缘颜色值进行扩展,使其边缘范围变大,这样即使是在场景的光照图中出现访问的偏差,得到的依然是该贴图的边界的颜色值,这样就可以使相邻的两个多边形的边缘融合得很好。在实际实现中用这种方法就可以很好地解决各个多边形边界裂痕的问题。

 

扩展后的光照贴图:

      PackedSkin0                  PackedScene1

               原始的贴图                                                               扩展后的贴图

 

其中,蓝色边框这外即是扩展出的纹理区域。

 

改进后的场景渲染效果:

        Scene1

 

        虽然使用贴图的扩展增大了原有光照贴图的尺寸及空间,但相对其带来的好处来说,这一点是可以忽略不计的,这种扩展方法还可以用在其它类似问题的解决中。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值