关于 Unity 版本升级后可能会引起偶发光照图错乱的问题
近期项目遇到一个奇怪的问题,使用 Unity 2017 版本升级后,团队中某些人的机器光照图总是不正确,而有的人是正确的,一直不知道为什么。
为了查到这个奇怪问题的原因,首先查看了美术的在 Max 中的导出设置,虽然不是特别规范,但也没啥特别的问题,且声称以前也是这样导出,但是没有遇到过这样的问题;然后查看了美术使用的版本,美术果然没有升级,还是用旧版本的 Unity 生成光照图,然后把相关的场景资源全部到导出成 Package,然后再导入主干的工程并签入,那么这个过程就比较值得怀疑。
还有一点,如果两台机器的光照图不一致,那么他们的光照图 UV 肯定是不一样的,用肉眼也能看出来。但是有个问题是我的电脑得下来总是对的,想看错误的复现也不容易,好在美术找到了一个之前的 Package 我导入后如愿出错,然后其本机是正确的,出现了问题这样就比较好查了。于是拿出之前写的一个 光照图查看工具,在我本机和美术的机器上查看,果然出错模型的光照图的 UV 分布明显不一致。
后来终于确认原因并且可以复现:Unity 导入模型会做顶点优化,顶点数并不是和 Max 中一致,重点是不同 Unity 版本即使同一个模型优化过的顶点数也不一致(应该是算法不同的问题),顶点数不同自然光照图 UV 分布生成的也不同。所以比如在 Unity2017.3 中导入一个模型并生成光照图,导出成 Package 并导入到 Unity2017.4 或者其它版本,会发现光照图 UV 错乱,因为重新导入的模型顶点和光照图 UV 都不同了。所以同一个 Team 中的美术同学一定要和开发人员使用相同版本。
这里有一个更隐蔽的情况:大家都使用同一个 Unity 版本,但是不同的机器依然会出现某些人光照图错乱的问题。表现正常的机器是由于使用低版本的 Unity 烘焙完光照图或者更新了别人烘焙完的光照图后,然后直接用高版本的 Unity 打开这样是不存在问题的;如果同一个项目删掉 Library 后,再用高版本的 Unity 重新打开这时候就不对了。究其原因是因为不删除 Library 升级项目每个模型不会被重新导入,顶点数维持在老版本导入的结果,一旦删除 Unity 就会重新按照新版本来导入并生成顶点数,当然其实你在新版本中修改模型的设置,也会导致按照新版本来重新导入模型而发生光照图错乱。
以上就是所有原因,并可以轻松复现,结论就是:1.Team 中所有人必须要保证使用同版本的 Unity 开发;2.升级过程中需要删除本地的 Library 然后再用新版本 Unity 打开。
关于 Unity 版本升级后可能会引起偶发光照图错乱的问题的更多相关文章
- Unity 5.6中的混合光照(下)
https://mp.weixin.qq.com/s/DNQFsWpZm-ybIlF3DTAk2A 在<Unity 5.6中的混合光照(上)>中,我们介绍了混合模式,以及Subtracti ...
- Unity光照图UV显示
美术的同学觉得 Unity 光照图烘焙的不够美丽,需要在 ps 里修一修,但是不知道每个物体对应的光照图在哪个区域,UV 是如何分布的,于是要求写一个工具显示,于是有了下面这个: 打开场景自动读取当前 ...
- 《Unity預計算即時GI》笔记:二、光照图
说明 这篇文章是对<Unity預計算即時GI>这个系列文章的笔记. 光照图 什么是光照图 光照图在第三章中有如下的定义,读起来很是费解. 一個光照圖(Chart)是表示一個光照貼圖的區域, ...
- Unity 5.6中的混合光照(上)
https://mp.weixin.qq.com/s/AbWM21sihHw5pFdMzENDPg 在Unity 5中,光照得到了很大的改进.现在,创建高度逼真的游戏已成为可能.但是,出于对性能的考虑 ...
- node版本升级后,原有项目打不开
node版本升级后,原有项目出现以下问题 gulp[8272]: src\node_contextify.cc:628: Assertion `args[1]->IsString()' fail ...
- unity 3d 之合并网格和贴图(combine mesh and texture)
https://www.cnblogs.com/eangulee/p/3877824.html unity 3d 之合并网格和贴图(combine mesh and texture) 本人是个小白 ...
- 浅析Unity中的Enlighten与混合光照
0x00 前言 在Unity的5.6版本之前的5.x中,主要使用了Geomerics公司的Enlighten[1]来提供实时全局照明以及烘焙全局照明,在5.6之后Unity引入了新的Lightmapp ...
- 【Unity Shaders】Shader中的光照
写在前面 自己写过Vertex & Fragment Shader的童鞋,大概都会对Unity的光照痛恨不已.当然,我相信这是因为我们写得少...不过这也是由于官方文档对这方面介绍很少的缘故, ...
- 【Unity Shaders】Diffuse Shading——漫反射光照改善技巧
本系列主要参考<Unity Shaders and Effects Cookbook>一书(感谢原书作者),同时会加上一点个人理解或拓展. 这里是本书所有的插图.这里是本书所需的代码和资源 ...
随机推荐
- ZooKeeper在线迁移
在至少有一个Leader存在的前提下,进行Zookeeper的在线增量.在线减量.在线迁移 在全过程中ZooKeeper不停止服务 注意事项 首先,当我们要从3台扩充到5台时,应保证集群不停止服务. ...
- LightOJ 1364 树形DP
52张扑克牌,问拿到指定数量的4个花色的最少次数期望是多少,其中拿到joker必须马上将其视作一种花色,且要使后续期望最小. 转移很容易想到,主要是两张joker的处理,一个状态除了普通的4个方向的转 ...
- MySQL性能优化之道
1.in和not in子查询优化 not in 是不能命中索引的,所以以下子查询性能很低. 如果是确定且有限的集合时,可以使用.如 IN (0,1,2). 用 exists或 notexists代替 ...
- python学习笔记(十三)之lambda表达式
lambda表达式: 用法 lambda x : 2 * x + 1 其中:前面是参数,后面是返回值. >>> def ds(x): ... return 2 * x + 1 ... ...
- 2017ACM暑期多校联合训练 - Team 4 1004 HDU 6070 Dirt Ratio (线段树)
题目链接 Problem Description In ACM/ICPC contest, the ''Dirt Ratio'' of a team is calculated in the foll ...
- NYOJ 208 Supermarket (模拟+并查集)
题目链接 描述 A supermarket has a set Prod of products on sale. It earns a profit px for each product x∈Pr ...
- bzoj 2303 并查集
首先如果没有限制的话,我们可以直接求出答案,假设对于n*m的矩阵,我们最上方一行和左方的一列随意确定,那么首先这写确定的状态肯定是不会不合法的,因为我们可以调整剩下的01状态来使得这一行一列的状态合法 ...
- 用户空间与内核空间数据交换的方式(9)------netlink【转】
转自:http://www.cnblogs.com/hoys/archive/2011/04/10/2011722.html Netlink 是一种特殊的 socket,它是 Linux 所特有的,类 ...
- juey点击tr选中里面的radio
//点击一行选中银行卡 $("tr").bind("click",function(){ $("input:radio").attr(&qu ...
- 牛奶ddw如何通过以太坊钱包实现互相打赏
很多朋友不清楚如何转账ddw,但是万能的网友是无敌的,这两天就自己摸索的一点经验总结下今天的转账经验. 1. 提取到自己的账户 这个大家都知道如何操作,使用官方的钱包 在“日日盈app”中点击&quo ...