有幸参加了Unite 2016 Shanghai unity开发者大会,这里做一些简单总结

一.日本Marza 分享 《The Gift》

Marza用unity做渲染,加上一些自己的扩展技术实现了效果非常棒的动画效果,《The Gift》就是Marza团队在unite向开发者展示的作品,当然他们也简介了他们怎么减少DrawCall,做presudo-instancing技术……不过都是思路,很难get到具体做法,公司网址http://marza-realtime.com/。整体介绍虽然跟我们并没什么关系,但是也告诉我们一个信息:unity做渲染的品质还是可以的,哈哈。最干货的是Marza在github上开源了他们做录屏的库,还是可以看看的https://github.com/unity3d-jp/FrameCapturer(可惜的是资料都是日文)

二.Unity5.4 渲染改善

a.实时渲染

Unite开场相关嘉宾就开始鼓吹unity5.4以后的实时渲染有多么牛X,播放了一段电影般画质的CG,一开始由于还陷入误区,以为实时渲染是unity新技术呢,结果查了各种资料也没有相关介绍,最后才发现原来仅仅是为了鼓吹unity对渲染的优化可以达到很高的品质,并不是某种新技术,汗……

不过播放的那段CG动画的确很吊,unity对渲染的处理也还是可以的,哈哈

附上两个关于渲染的文章链接:http://www.cnblogs.com/alonecat06/archive/2012/09/24/2700747.html

https://community.arm.com/community/arm-cc-cn/blog/2014/06/06/mali-gpu-%E6%8A%BD%E8%B1%A1%E6%9C%BA%E5%99%A8-%E7%AC%AC%E4%B8%80%E9%83%A8%E5%88%86-%E5%B8%A7%E7%AE%A1%E7%BA%BF%E5%8C%96

b.一些新技术

1.Mulithreaded Reandering多线程渲染在unity5.x以后就开始慢慢使用了,但是unity5.4有使用了一个DW(double wide rendering 具体是什么还得5.4出来后看看)据介绍可以使得整体渲染效率提升30%左右吧

2.Cinematic Image Effects: 对影视常用效果提供了一些脚本和资源,大都作用已Camera上,并且是开源的https://bitbucket.org/Unity-Technologies/cinematic-image-effects/downloads

3.progressive LightMapper : 具体是什么网上资料很少,据描述应该就是一个渲染优化的技术

4.Memory Profiler : unity开发的一款开源内存监视器,用起来还是蛮方便的https://bitbucket.org/Unity-Technologies/assetbundledemo

5.另外发现了unity的开源仓库原来在https://bitbucket.org/Unity-Technologies/,里面有不少unity开源项目,如:AssetBundle、IAP、Networking……值得学习一下

三.unity 提出的一些常见优化

a.Asset Auditing

在资源导入时进行检测,避免资源出错,规范资源命名等,具体做法可以参考AssetPostprocessor类,直接在文档里检索就可以了

b.Common Rules : Texture

1.Make sure Read/Write is disable

2.Disable mipmap if possible

3.Make sure textures are Compressed

4.Ensure sizes aren’t too large

2048*2048  / 1024*1024  for UI atlas

512*512 or smaller for model textures

c.Common Rules : Model

1.Make sure Read/Write is disable

2.Disable rig on non-character models

3.Enable mesh compression

d.Common Rules : Audio

1.MP3 compression on IOS

2.Vorbis compression on Android

3.”Force Mono”for mobile games

d.set bitrate as low as possible

e.内存优化建议

1.unity mono堆内存的分配是只增不减的,也就是说尽量降低在堆上内存分配的峰值

2.减少在临时内存的分配,不然会提高GC频率,对帧率有很大影响

3.合理使用匿名方法和闭包,避免不必要的内存分配

4.避免装箱拆箱的操作

5.避免使用反射的机制去序列化或反序列化json,可以使用unity自己提供的JsonUtility(5.3以后支持)

四.VR 介绍

1.unity 对VR做了一些渲染层的优化,具体就是一定层度上提高VR Game 的渲染效率,当然只有默认支持的VR设备才可以使用到这些优化。目前已经支持的只有Oculus,unity5.4以后就会支持htc Vive 和PlayStation设备,当然也介绍了一些简单用法,在文档里直接可以查到

2. htc VR 产品经理分享:

a.VR目前还无法被玩家接受,主要受限于硬件设备

b.VR 的体验并不完全在于帧率保持在90帧,更重要的是不能出现帧率的频繁波动,也就是说稳定的帧率>=75fps可以有降低眩晕感

c.VR 的性能问题给开发者预留的发挥空间并不多,所以只有必须对资源和代码做的精益求精才能做出靠谱的产品

d.VR 的UI,VR中尽量少用UI

e.htc vive 推荐了一款NewtonVR(免费的vive 输入套件)

五.暴风产品经理分享

1.资源管理:把unity所有资源标识一个单独的key,做一张key与其存放路径的映射表,资源的房问就可以通过解析映射表完成,隔离了项目中对路径的依赖,不过要维护这种索引表还需要做一些支持工具,也有一定得代价

2.资源再次压缩。很多项目也采用了多AssetBundle的再次压缩操作,不过值得一提的是:暴风的团队他们根据自己的需求改了一些压缩算法,使得压缩率更高了

3.标准化资源存放路径,几乎所有项目都是遵守这种规则的,不过值得一提的是,我们可以对使用前面的AssetPostprocessor完成对资源的自动化处理

4.资源更新:在对资源更新有比较大的需求时,他们觉得使用untiy的www去更新资源效率太低,于是他们使用C# 的httpRequest加上多线程去下载资源,断点续传,更好的保证了资源下载的效率。

5.针对Json的数据压缩:他们主要提出了这么一个优化想法,当有一个序列itemList[{name : XXX1 ,price : 12},{name : XXX2 ,price : 13} ,{name : XXX3 ,price : 14} …….  ],这时我们发现数据中大量包含了“name”,“price”等关键key,造成数据冗余,这时可以选择以这种方式去做压缩itemList[{name : XXX1 ,price : 12},{ XXX2 ,13} ,{ XXX3 ,14} …….  ],减少了重复key的冗余

6.对代码的加密。这里也是很常规的做法,重新编译mono,从而加密dll,实现代码加密

7.兼容和适配:他们为了兼容各种低高端机型,做了各种对应的配置文件,当玩家首次进入游戏会高数服务器当前的机型,然后下载一份对应配置表,这样很大层度上可以解决机型适配问题。但是显而易见,这样做的工作量还是蛮大的

六.Instancing 技术分享

instancing技术网上信息很多,不做过多介绍,有兴趣的自己百度

1.instancing 可以减少drawCall 减低CPU的消耗,无法减少GPU负载。根据展示的demo,有一个一万多小石头的场景,draw call已经达到一万多了,但是使用instancing技术后draw call可以降到63

2.只有大量使用相对材质和相同网格的物体使用instancing技术才有价值,典型的植被系统

3,下图是一些使用注意事项

七.总结

unite大会大多数都是广告时间,但是也可以感受到新技术的气息,尤其高内暴风的干货分享值得点赞,遗憾的是,unite展示的各种游戏中没发现一款国内团队的作品,国内两大巨头网易和腾讯的分享也是广告+无聊的吹嘘。总体上说两天的收获勉强对得起1.2k的门票吧,哈哈

2016Unite Shanghai 总结的更多相关文章

  1. 将一句话里的单词进行倒置,标点符号不倒换。比如将“I come from Shanghai.”倒换后变为“Shanghai. from come I”

    string str = "I come from Shanghai."; //根据空格切割 string[] strS = str.Split(' '); string temp ...

  2. Shanghai Regional Online Contest 1004

    Shanghai Regional Online Contest 1004 In the ACM International Collegiate Programming Contest, each ...

  3. Amazon Kindle Device is hiring in Beijing Shanghai and Shenzhen!

    This is Angela from recruitment team of Amazon Kindle Device Software & Applications, we are exp ...

  4. 为什么选择Premium Fabric Shanghai

    展商首页 为什么选择Premium Fabric Shanghai

  5. Unite'17 Shanghai再一次问候

    Unite'17 Shanghai再一次问候 --暨Unity2017年度大会 2017年5月11日,主题为"再一次问候"的Unity年度盛会在上海国际会议中心举行,这是Unity ...

  6. 王者齐聚!Unite 2017 Shanghai 日程讲师全揭晓

    汇聚了来自全球的 Unity开发者.发行商.培训家及爱好者的 Unite 2017 Shanghai 即将于于 5 月 11 日-13日在上海·国际会议中心隆重举行.Unite 大会是由 Unity ...

  7. 解决mysql设置时区时的错误Unknown or incorrect time zone: 'Asia/Shanghai'

    Mysql默认时区格式是'+8:00'的格式,这个时区可以在my.ini中[mysqld]节点下设置 default-time-zone = '+8:00' 默认这个设置是没有的 但是mysql不支持 ...

  8. 关于服务器时区BEIST-8、GMT-8、Asia/Shanghai、CST、GMT+8:00等缩写的含义

    http://www.talkwithtrend.com/Article/147961 AIX系统时区总结 字数 2078阅读 5844评论 0赞 0 前几天NTP的问题牵涉出时区问题,大家可能被眼花 ...

  9. Unite Shanghai 2019全日程曝光(建议收藏)

    https://mp.weixin.qq.com/s/KvAyXpDhqWROtTX1Ol3a4Q 5月10-12日,Unite Shanghai 2019即将在上海国际会议中心正式开幕.本次大会共设 ...

随机推荐

  1. LeetCode(289)Game of Life

    题目 According to the Wikipedia's article: "The Game of Life, also known simply as Life, is a cel ...

  2. Linuxx学习-特殊文件与进程

    具有 SUID/SGID 权限的指令执行状态 SUID 的权限其实与进程的相关性非常的大!为什么呢?先来看看 SUID 的程序是如何被一般用户 执行,且具有什么特色呢? SUID 权限仅对二进制程序( ...

  3. 逻辑与(&)和短路与(&&)的关系

    逻辑与(&)和短路与(&&)在运算上对条件的结果判断不会产生影响,但会对条件判断的运算有影响.关键在于,逻辑与(&)在运算时会连续运算所有需要判断的命令.但短路与当遇到 ...

  4. linux中的部分宏

    *:first-child { margin-top: 0 !important; } body>*:last-child { margin-bottom: 0 !important; } /* ...

  5. python基础学习笔记——类空间问题以及类之间的关系

    一. 类的空间问题 1.1 何处可以添加对象属性 class A: def __init__(self,name): self.name = name def func(self,sex): self ...

  6. 大数据学习——scala的wordCount小例子

    val lines=List("hello tom hello jerry","hello tom hello kitty hello china") //方法 ...

  7. mac iterm 快捷键

    标签 新建标签:command + t 关闭标签:command + w 切换标签:command + 数字 command + 左右方向键 切换全屏:command + enter 查找:comma ...

  8. Leetcode 454.四数相加II

    四数相加II 给定四个包含整数的数组列表 A , B , C , D ,计算有多少个元组 (i, j, k, l) ,使得 A[i] + B[j] + C[k] + D[l] = 0. 为了使问题简单 ...

  9. 使用 D8 分析 javascript 如何被 V8 引擎优化的

    在上一篇文章中我们讲了如何使用 GN 编译 V8 源码,文章最后编译完成的可执行文件并不是 V8,而是 D8.这篇我们讲一下如何使用 D8 调试 javascript 代码. 如果没有 d8,可以使用 ...

  10. HDU-3315 My Brute

    先对于每种可能的PK情况进行判断胜负,然后求最小改动最大匹配. #include <cstdlib> #include <cstdio> #include <cstrin ...