近期项目遇到一个奇怪的问题,使用 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 版本升级后可能会引起偶发光照图错乱的问题的更多相关文章

  1. Unity 5.6中的混合光照(下)

    https://mp.weixin.qq.com/s/DNQFsWpZm-ybIlF3DTAk2A 在<Unity 5.6中的混合光照(上)>中,我们介绍了混合模式,以及Subtracti ...

  2. Unity光照图UV显示

    美术的同学觉得 Unity 光照图烘焙的不够美丽,需要在 ps 里修一修,但是不知道每个物体对应的光照图在哪个区域,UV 是如何分布的,于是要求写一个工具显示,于是有了下面这个: 打开场景自动读取当前 ...

  3. 《Unity預計算即時GI》笔记:二、光照图

    说明 这篇文章是对<Unity預計算即時GI>这个系列文章的笔记. 光照图 什么是光照图 光照图在第三章中有如下的定义,读起来很是费解. 一個光照圖(Chart)是表示一個光照貼圖的區域, ...

  4. Unity 5.6中的混合光照(上)

    https://mp.weixin.qq.com/s/AbWM21sihHw5pFdMzENDPg 在Unity 5中,光照得到了很大的改进.现在,创建高度逼真的游戏已成为可能.但是,出于对性能的考虑 ...

  5. node版本升级后,原有项目打不开

    node版本升级后,原有项目出现以下问题 gulp[8272]: src\node_contextify.cc:628: Assertion `args[1]->IsString()' fail ...

  6. unity 3d 之合并网格和贴图(combine mesh and texture)

    https://www.cnblogs.com/eangulee/p/3877824.html unity 3d 之合并网格和贴图(combine mesh and texture)   本人是个小白 ...

  7. 浅析Unity中的Enlighten与混合光照

    0x00 前言 在Unity的5.6版本之前的5.x中,主要使用了Geomerics公司的Enlighten[1]来提供实时全局照明以及烘焙全局照明,在5.6之后Unity引入了新的Lightmapp ...

  8. 【Unity Shaders】Shader中的光照

    写在前面 自己写过Vertex & Fragment Shader的童鞋,大概都会对Unity的光照痛恨不已.当然,我相信这是因为我们写得少...不过这也是由于官方文档对这方面介绍很少的缘故, ...

  9. 【Unity Shaders】Diffuse Shading——漫反射光照改善技巧

    本系列主要参考<Unity Shaders and Effects Cookbook>一书(感谢原书作者),同时会加上一点个人理解或拓展. 这里是本书所有的插图.这里是本书所需的代码和资源 ...

随机推荐

  1. Atcoder #017 agc017 B.Moderate Differences 思维

    LINK 题意:给出最左和最右两个数,要求往中间填n-2个数,使得相邻数间差的绝对值$∈[L,R]$ 思路:其实也是个水题,比赛中大脑宕机似的居然想要模拟构造一个数列,其实我们只要考虑作为结果的数,其 ...

  2. JVM调优总结:一些概念

    数据类型 Java虚拟机中,数据类型可以分为两类:基本类型和引用类型.基本类型的变量保存原始值,即:他代表的值就是数值本身:而引用类型的变量保存引用值.“引用值”代表了某个对象的引用,而不是对象本身, ...

  3. 移动Web界面样式-CSS3

    CSS2.1发布至今已经有7年的历史,在这7年里,互联网的发展 已经发生了翻天覆地的变化.CSS2.1有时候难以满足快速提高性能.提升用户体验的Web应用的需求.CSS3标准的出现就是增强CSS2.1 ...

  4. 【LibreOJ】#6259. 「CodePlus 2017 12 月赛」白金元首与独舞

    [题目]给定n行m列的矩阵,每个位置有一个指示方向(上下左右)或没有指示方向(任意选择),要求给未定格(没有指示方向的位置)确定方向,使得从任意一个开始走都可以都出矩阵,求方案数.n,m<=20 ...

  5. 使sqoop能够启用压缩的一些配置

    在使用sqoop 将数据库表中数据导入至hdfs时 配置启用压缩 hadoop 的命令    检查本地库支持哪些  bin/hadoop checknative 需要配置native    要编译版本 ...

  6. 【leetcode 简单】第十四题 最后一个单词的长度

    给定一个仅包含大小写字母和空格 ' ' 的字符串,返回其最后一个单词的长度. 如果不存在最后一个单词,请返回 0 . 说明:一个单词是指由字母组成,但不包含任何空格的字符串. 示例: 输入: &quo ...

  7. Jsoup爬取带登录验证码的网站

    今天学完爬虫之后想的爬一下我们学校的教务系统,可是发现登录的时候有验证码.因此研究了Jsoup爬取带验证码的网站: 大体的思路是:(需要注意的是__VIEWSTATE一直变化,所以我们每个页面都需要重 ...

  8. C++中string.find()函数,string.find_first_of函数与string::npos

    查找字符串a是否包含子串b,不是用strA.find(strB) > 0而是strA.find(strB) != string:nposstring::size_type pos = strA. ...

  9. elk系列1之入门安装与基本操作【转】

    preface 我们每天都要查看服务器的日志,一方面是为了开发的同事翻找日志,另一方面是巡检服务器查看日志,而随着服务器数量以及越来越多的业务上线,日志越来越多,人肉运维相当痛苦了,此时,参考现在非常 ...

  10. C#串口serialPort操作

    现在大多数硬件设备均采用串口技术与计算机相连,因此串口的应用程序开发越来越普遍.例如,在计算机没有安装网卡的情况下,将本机上的一些信息数据 传输到另一台计算机上,那么利用串口通信就可以实现.运行本程序 ...