Unity5动态加载烘培场景

  有时候我们需要动态加载场景(比如场景比较大,或者一些无限重复的自动生成的场景),这时如果对场景又使用了烘培,那么在unity5里面就会有一些小问题。

  1.在这种需求下我们一般会把场景物体存成一个预置,需要的时候加载进来,但是在unity5里面,物体的lightmap信息(index和偏移)并不会记录在预置上,这导致你直接把预置加载进来看不到烘培效果,这里要这样,在加载之后手动的赋值这个lightmap信息,(你可以在烘培时预先保存这个信息),使用render的lightmapIndexlightmapScaleOffset来设置它的烘培信息。

2.然而使用上面的方法对于一些shader还是会看到错误的结果(编辑器正确,至少android设备上是错的),因为unity5在某些设备上,对于这种动态加载的物体,无论你是否设置它的renderer的 lightmapIndex和 lightmapScaleOffset, 它都不会为其shader设置LIGHTMAP_ON这个关键字,如果看一下unity 支持light map的shader的源码,可以发现这个 LIGHTMAP_ON是控制显示烘培图的关键,但是这种情况unity5不会设置,并且你自己手动设置也不行。这里有一个方法,就是修改这个shader,自己加一组关键字,比如叫做DYNAMIC_LIGHTMAP_ON,就算没有定义LIGHTMAP_ON,定义了DYNAMIC_LIGHTMAP_ON也会触发lightmap的贴图,然后在代码里加载完毕动态场景后,设置这个keyword就行了


UNity4据说没有这个问题,对于动态场景,直接加载就自动有lightmap里了,因为unity4会把lightmap信息存储在预置里。



posted on 2016-06-13 15:48  leonwei  阅读(851)  评论(0编辑  收藏  举报