您好,欢迎来到Unity之家!   unity.jb51.net 
  • 首 页
  • 你问我答
  • 当前位置:首页 > 美工设计 > Unity美化 >
    Lightmap与动态光照的实时切换
    时间:2015-01-26 10:20 来源:Unity之家 作者:unity.jb51.net 浏览:收藏 挑错 推荐 打印

    在项目中,常常因为效率与显示效果的多方面考虑,来选择是使用lightmap 还是 动态光照。

    在页游和微端游戏中,还要考虑游戏资源包的大小。


    使用lightmap,在渲染的时候由于pix shader计算量的减小,会带来性能上的提升,直接的表现就是帧速的提高。

    但是,显示效果上面,显然不如动态光照来的精细和真实。LightMap也可以做到很漂亮,

    但是带来的结果就是LightMap文件的大小,也许会高到10M+的尺寸。这就造成前面说的,下载量的增加。

    对于3D页游和微端来说,是很不合理的,这意味着,如果要进入一个场景,

    光照图就需要下载10M,在中国的网速环境下,必然造成部分用户流失。


    动态光照可以减少下载量,提高渲染质量,带来的就是帧数的下降。如果不使用延迟渲染的话,场景中灯光越多,帧数掉的越快。


    怎么找到一个平衡?


    由此想到一个解决方案,根据用户配置,决定,使用动态光照还是Lightmap。


    1. 需要做的是,在Unity编辑器中,烘培lightmap。

       烘培后,把lightmap从场景文件夹中移开(是在文件夹中操作,不是在unity 的LightMap面板中点击clear button ,那我烘培它干啥)。放到其他指定文件夹下。

       比如“Assetsghtmap/scenenXXX/ ”。当然也可以不移除,移除是为了不把light map和场景一起打包,

       这样可以实现,lightmap与场景分开下载。减少第一次进场景的下载量。


    2. 虽然把lightmap移走了,但是在Unity的Scane中,还是记得有哪些GameObject使用了lightmap的。

       只是在游戏渲染中,渲染每个接收lightmap的物体的时候,去采样lightmap的时候,找不到数据。

       因为light已经被移出默认文件夹,就不能顺利的加载至内存,上传到显存。


    3. 如果是使用动态光照,在进入场景后,调用一个脚本,该脚本只做一件事情,

       就是把所有场景中用到MeshRender组件中的lightmapIndex的值赋值为-1,这个lightmapIndex是指该gameobject是使用lightmap中的哪一张。

       所以如果这lightmapIndex有大于等于0的值的时候,如果场景中的LightMap不存在,会出现显示上的Bug。




    (责任编辑:脚印)
    免责声明:Unity之家部分内容来源于互联网,如有侵权,请联系我们,本站将立即进行处理。