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

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,下图是一些使用注意事项

2016Unite Shanghai 总结

七.总结

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

上一篇:构建WebGL目标时的内存考量


下一篇:PAT甲 1041. Be Unique (20) 2016-09-09 23:14 33人阅读 评论(0) 收藏