近期项目遇到一个奇怪的问题,使用 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. ubuntu学习命令

    1.双系统下挂载windows硬盘 检测ntfs-3g是否安装:locate ntfs-3g 没有则安装: sudo apt-get install ntfs-3g 查看硬盘信息: sudo fdis ...

  2. 在asp.net 中生成PDF的方法

    近期要用asp.net 2.0生成PDF,看了下书,查了下资料,发现可以有组件帮得上忙,可以下载itextsharp(https://sourceforge.net/projects/itextsha ...

  3. Tool1—安装配置Windows Live Writer

    详细步骤请看:http://home.cnblogs.com/group/topic/8550.html . Windows Live Writer手工配置步骤(在博客园配置时输入用户名与密码会自动完 ...

  4. 【BZOJ】4764: 弹飞大爷 LCT

    [题意]给定n个数字ai,表示大爷落到i处会被弹飞到i+ai处,弹飞到>n或<1处则落地.m次操作,修改一个ai,或询问大爷落到x处经过几次落地(或-1).n,m<=10^5,|ai ...

  5. TypeScript在react项目中的实践

    前段时间有写过一个TypeScript在node项目中的实践. 在里边有解释了为什么要使用TS,以及在Node中的一个项目结构是怎样的. 但是那仅仅是一个纯接口项目,碰巧赶上近期的另一个项目重构也由我 ...

  6. oracle01--单表查询

    1. 基本(基础)查询 1.1. 基本查询语法 基本查询是指最基本的select语句. [语法] [知识点]如何使用工具进行查询 在plsql developer中打开查询窗口(执行sql语句): 执 ...

  7. 一. Jmeter--使用代理录制脚本

    Jmeter脚本是以.JMX格式为主 1. Jmeter也是支持录制的,支持第三方录制方式和代理录制方式. (1).第三方录制主要是通过badboy来录制,录制后另存为jmx格式即可. (2).Jme ...

  8. Python标准库笔记(5) — sched模块

    事件调度 sched模块内容很简单,只定义了一个类.它用来最为一个通用的事件调度模块. class sched.scheduler(timefunc, delayfunc)这个类定义了调度事件的通用接 ...

  9. 大数据系列之kafka-java实现

    Java源码GitBub地址: https://github.com/fzmeng/kafka-demo 关于kafka安装步骤可见文章   http://www.cnblogs.com/cnmeng ...

  10. 「caffe编译bug」 undefined reference to `boost::match_results<__gnu_cxx::__normal_iterator<char const*, std::__cxx11

    CXX/LD -o .build_release/tools/test_net.binCXX/LD -o .build_release/tools/convert_annoset.binCXX/LD ...