由于升级Unity版本导致的Lightmap错乱问题

      由于某些迫不得已的原因,对一个几年前的旧项目升级了Unity的版本,从Unity5.5.4升级到Unity2017.4.25。
      升级过程没什么太大问题,就是某些api已经过时了修改一下代码就好。但检查美术场景的时候,发现之前经过烘焙Lightmap的场景,都出现了莫名其妙的黑块。
由于升级Unity版本导致的Lightmap错乱问题_第1张图片
由于升级Unity版本导致的Lightmap错乱问题_第2张图片
      从现象分析,lightmap贴图没有变过,从编辑器查看模型本身的lightmapIndex和LightmapScaleOffset都没有发生变化,但模型上的lightmap叠加出错,那应该是UV出问题了,于是用代码获取一下某个模型分别在新旧版本里面的顶点数和uv数据,结果发现,在新版本Unity里面模型的uv2变化了。
由于升级Unity版本导致的Lightmap错乱问题_第3张图片
      出现uv2变化的原因,是因为在模型导入的时候,选择了Generate Lightmap UV。
由于升级Unity版本导致的Lightmap错乱问题_第4张图片
      从结果分析,应该是不同版本的Unity,自动展UV的算法不太一样,从而导致了同样的模型展出来的uv结果有区别。
      Generate Lightmap UV这个选项其实不是一定要勾选的,只有当模型本身没有经过展UV的操作,或者模型的UV本身超过0-1的范围,或者模型的UV有重叠的地方,才需要Unity给你重新展一次UV用于lightmap烘焙。如果模型本身的UV已经完全展开,没有重叠,并且都在0-1之间,完全可以用uv1来作为lightmap烘焙时的UV。
      于是验证了一下想法,同一个fbx复制一份,一个勾选了Generate Lightmap UV,一个没有勾选,然后烘焙,再用高版本的打开,勾选了Generate Lightmap UV的模型lightmap错乱了,没有勾选的模型是正常显示的。
由于升级Unity版本导致的Lightmap错乱问题_第5张图片
      如果说美术那边很习惯做模型用对称、或者复用某个部位的贴图,而导致模型uv一定有重叠或者超出0-1的,那么建议也可以在3dmax里面生成个uv2,直接自动展开就行了。毕竟如果你的uv1不能直接用做lightmap烘焙,unity也会自动给你展,数据量不会省的,自己展起码不会受unity版本的影响。

你可能感兴趣的:(unity相关)