热门标签 | HotTags
当前位置:  开发笔记 > 程序员 > 正文

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

使用全局光照贴图对场景进行渲染,首先就需要对场景进行光照贴图的生成,同时计算出场景中各个多边形的顶点所对应的纹理坐标,然后再对多边形列表的光照贴图进行合并,并进行纹理坐标的重新定位,这样就可

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

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

 

如图所示:

 

Scene0

 

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

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

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

 

扩展后的光照贴图:

      PackedSkin0                   PackedScene1

               原始的贴图                                                               扩展后的贴图

 

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

 

改进后的场景渲染效果:

        Scene1

 

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


推荐阅读
  • 生成式对抗网络模型综述摘要生成式对抗网络模型(GAN)是基于深度学习的一种强大的生成模型,可以应用于计算机视觉、自然语言处理、半监督学习等重要领域。生成式对抗网络 ... [详细]
  • 云原生边缘计算之KubeEdge简介及功能特点
    本文介绍了云原生边缘计算中的KubeEdge系统,该系统是一个开源系统,用于将容器化应用程序编排功能扩展到Edge的主机。它基于Kubernetes构建,并为网络应用程序提供基础架构支持。同时,KubeEdge具有离线模式、基于Kubernetes的节点、群集、应用程序和设备管理、资源优化等特点。此外,KubeEdge还支持跨平台工作,在私有、公共和混合云中都可以运行。同时,KubeEdge还提供数据管理和数据分析管道引擎的支持。最后,本文还介绍了KubeEdge系统生成证书的方法。 ... [详细]
  • 使用Ubuntu中的Python获取浏览器历史记录原文: ... [详细]
  • 本文介绍了Hyperledger Fabric外部链码构建与运行的相关知识,包括在Hyperledger Fabric 2.0版本之前链码构建和运行的困难性,外部构建模式的实现原理以及外部构建和运行API的使用方法。通过本文的介绍,读者可以了解到如何利用外部构建和运行的方式来实现链码的构建和运行,并且不再受限于特定的语言和部署环境。 ... [详细]
  • 本文介绍了Perl的测试框架Test::Base,它是一个数据驱动的测试框架,可以自动进行单元测试,省去手工编写测试程序的麻烦。与Test::More完全兼容,使用方法简单。以plural函数为例,展示了Test::Base的使用方法。 ... [详细]
  • Voicewo在线语音识别转换jQuery插件的特点和示例
    本文介绍了一款名为Voicewo的在线语音识别转换jQuery插件,该插件具有快速、架构、风格、扩展和兼容等特点,适合在互联网应用中使用。同时还提供了一个快速示例供开发人员参考。 ... [详细]
  • XML介绍与使用的概述及标签规则
    本文介绍了XML的基本概念和用途,包括XML的可扩展性和标签的自定义特性。同时还详细解释了XML标签的规则,包括标签的尖括号和合法标识符的组成,标签必须成对出现的原则以及特殊标签的使用方法。通过本文的阅读,读者可以对XML的基本知识有一个全面的了解。 ... [详细]
  • Google Play推出全新的应用内评价API,帮助开发者获取更多优质用户反馈。用户每天在Google Play上发表数百万条评论,这有助于开发者了解用户喜好和改进需求。开发者可以选择在适当的时间请求用户撰写评论,以获得全面而有用的反馈。全新应用内评价功能让用户无需返回应用详情页面即可发表评论,提升用户体验。 ... [详细]
  • Tomcat/Jetty为何选择扩展线程池而不是使用JDK原生线程池?
    本文探讨了Tomcat和Jetty选择扩展线程池而不是使用JDK原生线程池的原因。通过比较IO密集型任务和CPU密集型任务的特点,解释了为何Tomcat和Jetty需要扩展线程池来提高并发度和任务处理速度。同时,介绍了JDK原生线程池的工作流程。 ... [详细]
  • 本文介绍了Linux系统中正则表达式的基础知识,包括正则表达式的简介、字符分类、普通字符和元字符的区别,以及在学习过程中需要注意的事项。同时提醒读者要注意正则表达式与通配符的区别,并给出了使用正则表达式时的一些建议。本文适合初学者了解Linux系统中的正则表达式,并提供了学习的参考资料。 ... [详细]
  • 本文介绍了如何使用python从列表中删除所有的零,并将结果以列表形式输出,同时提供了示例格式。 ... [详细]
  • 热血合击脚本辅助工具及随机数生成器源码分享
    本文分享了一个热血合击脚本辅助工具及随机数生成器源码。游戏脚本能够实现类似真实玩家的操作,但信息量有限且操作不可控。热血合击脚本辅助工具可以帮助玩家自动刷图、换图拉怪等操作,并提供了雷电云手机的扩展服务。此外,还介绍了使用mt_rand函数作为随机数生成器的代码示例。 ... [详细]
  • 闭包一直是Java社区中争论不断的话题,很多语言都支持闭包这个语言特性,闭包定义了一个依赖于外部环境的自由变量的函数,这个函数能够访问外部环境的变量。本文以JavaScript的一个闭包为例,介绍了闭包的定义和特性。 ... [详细]
  • 本文介绍了在Windows环境下如何配置php+apache环境,包括下载php7和apache2.4、安装vc2015运行时环境、启动php7和apache2.4等步骤。希望对需要搭建php7环境的读者有一定的参考价值。摘要长度为169字。 ... [详细]
  • flowable工作流 流程变量_信也科技工作流平台的技术实践
    1背景随着公司业务发展及内部业务流程诉求的增长,目前信息化系统不能够很好满足期望,主要体现如下:目前OA流程引擎无法满足企业特定业务流程需求,且移动端体 ... [详细]
author-avatar
coolbreeze
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有