2016Unite Shanghai 总结
有幸参加了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
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 总结的更多相关文章
- 将一句话里的单词进行倒置,标点符号不倒换。比如将“I come from Shanghai.”倒换后变为“Shanghai. from come I”
string str = "I come from Shanghai."; //根据空格切割 string[] strS = str.Split(' '); string temp ...
- Shanghai Regional Online Contest 1004
Shanghai Regional Online Contest 1004 In the ACM International Collegiate Programming Contest, each ...
- 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 ...
- 为什么选择Premium Fabric Shanghai
展商首页 为什么选择Premium Fabric Shanghai
- Unite'17 Shanghai再一次问候
Unite'17 Shanghai再一次问候 --暨Unity2017年度大会 2017年5月11日,主题为"再一次问候"的Unity年度盛会在上海国际会议中心举行,这是Unity ...
- 王者齐聚!Unite 2017 Shanghai 日程讲师全揭晓
汇聚了来自全球的 Unity开发者.发行商.培训家及爱好者的 Unite 2017 Shanghai 即将于于 5 月 11 日-13日在上海·国际会议中心隆重举行.Unite 大会是由 Unity ...
- 解决mysql设置时区时的错误Unknown or incorrect time zone: 'Asia/Shanghai'
Mysql默认时区格式是'+8:00'的格式,这个时区可以在my.ini中[mysqld]节点下设置 default-time-zone = '+8:00' 默认这个设置是没有的 但是mysql不支持 ...
- 关于服务器时区BEIST-8、GMT-8、Asia/Shanghai、CST、GMT+8:00等缩写的含义
http://www.talkwithtrend.com/Article/147961 AIX系统时区总结 字数 2078阅读 5844评论 0赞 0 前几天NTP的问题牵涉出时区问题,大家可能被眼花 ...
- Unite Shanghai 2019全日程曝光(建议收藏)
https://mp.weixin.qq.com/s/KvAyXpDhqWROtTX1Ol3a4Q 5月10-12日,Unite Shanghai 2019即将在上海国际会议中心正式开幕.本次大会共设 ...
随机推荐
- Django小总结
初始Git git init 初始化本地仓库,会在根目录下创建一个.git文件夹 git log 查看提交日志 git status 查看日志 git add 文件名 添加到缓存区 git commi ...
- Monkeyrunner脚本的录制与回放
继上一篇monkeyrunner环境搭建:http://www.cnblogs.com/zh-ya-jing/p/4351245.html 之后,我们可以进一步学习monkeyrunner了. 我也是 ...
- 解决使用intellij idea开发MAVEN项目在target目录下不存在mapper.xml文件
原 解决使用intellij idea开发MAVEN项目在target目录下不存在mapper.xml文件 原文章链接:https://blog.csdn.net/beauxie/article/de ...
- 理一理Spring如何对接JUnit
测试代码 package org.simonme.srcstudy.spring3.demo.stub; import static org.junit.Assert.assertNotNull; i ...
- python学习--学习时间属性的应用(time / datetime )
#!/usr/bin/python # -*- coding:utf-8 -*- # import time # myd={1:'a',2:'b'}# for key,value in dict.it ...
- javascript是脚本语言?javascript万物皆对象?
呵呵哒!带你见识下js面对对象的魅力 是的是的,退后,朕要开始装逼了- 这是什么鸟东西?是的是的,装逼开始,2016年度最佳JS编译器,ES6标准出来后,小伙伴们对新特性摩拳擦掌,奈何浏览器支持把我们 ...
- Thinkphp5.1源码阅读
主要流程 1 \public\index.php require __DIR__ . '/../thinkphp/start.php'; \thinkphp\start.php require __D ...
- Winform 连接Oracle10g时出错的解决方法
环境:Win7(64位). VS2012 update3.Oracle10 (本机已安装ODTwithODAC1120320_32bit) 最近在开发一程序时莫名其妙报一个错误(未能加载文件或程序集“ ...
- Java中接口的作用
转载于:https://www.zhihu.com/question/20111251 困惑:例如我定义了一个接口,但是我在继承这个接口的类中还要写接口的实现方法,那我不如直接就在这个类中写实现方法岂 ...
- 【Luogu】P3155叶子的染色(树形DP)
题目链接 树形DP水题qwq. 设f[i][j]是以i为根的子树,染成j色,且满足内部需求的最少染色节点数. 设to是x的子节点,那么状态转移方程如此设计: 1.f[i][0] 这个状态表示i不染色, ...