本文章由cartzhang编写,转载请注明出处。 所有权利保留。

文章链接:http://blog.csdn.net/cartzhang/article/details/50176429

作者:cartzhang

-------------
之前为蛮牛翻译的文章,对VR开发还是蛮有用的。故此自己也放在这里。
以备后用和参考!!

12个Unity5中优化VR 应用的技巧

VR应用比非VR应用需要更强的计算,性能优化是一个很重要的任务。若目标平台是像GearVR这样的手机设备,优化就更重要了。

以下是一些应该试着了解的性能指标:

· 每只眼睛50次绘制调用。Unity5更精确地将其称为SetPass Calls。

· 场景中顶点数少于50K~100K 且面数少于50~100K 。

下面是一些简单的技巧,用于满足上述要求:

静态批处理

场景中可能存在大量的静态几何体,例如墙体,椅子,灯光和从不移动的网格。在编辑器中将它们标记为静态对象。为烘焙光照贴图,请确保将其标记为静态贴图。不要让每个对象都会导致一次绘制调用,而是把对象标记为可被组合成一个网格的静态对象。

静态批处理有个关键要求:所有对象必须使用相同的材质。若静态墙带有木头材质,静态椅子带有铁材质,所有墙会被批量处理为一次绘制调用,椅子作为单独网格进行另外的绘制调用。

纹理集

如之前所说,每个材质引发一次绘制调用。直觉可能是木门和铁椅子需要使用不同的材质,由于它们的纹理不同。然而,若使用相同的着色器,就可以用纹理集为它们创建共用的材质。纹理集就是一个包含所有小纹理的大纹理。我们可以使用一个材质加载一个纹理,而非使用多个材质加载多次。每个对象可以对应到纹理集中不同坐标的一个纹理。

你可以的绘制管线中手动生成纹理集,但是Juan Sebastian的Pro Draw Call Optimizer工具非常有用。它可以生成纹理集,并且在替换新对象时不会搞混资源。

动态批处理

非静态对象可以动态批处理为一个单独的绘制调用。我曾注意到该过程大量占用CPU且每帧都在计算,但这是一个很好的优化。这只对使用相同材质且顶点数少于900的对象有效。使用纹理集为所有的动态对象创建一个材质,就可以进行简单的动态批处理啦。

LODs(多细节层次)

LOD组是改善性能的简便方法。使用有多个LOD的资源,并用低分辨率的几何体渲染离相机远的对象。Unity可以自动随着相机临近在各个LOD间转换。

填充率,过度绘制和裁剪

这是个值得关注的话题。减少过度绘制,最远的对象最先绘制,随后中上面依次绘制更近的对象。这个在平均分辨率为1080P的PC显示器上没什么问题,但对于有极高分辨率的VR和手机设备来说问题就比较严重。大量的过度绘制组成了大量像素从而影响填充率。纹理 填充率是限制GPU性能的关键。

一些解决方案提供了遮挡剔除和视锥体剔除。视锥体剔除是指不渲染位于相机视锥体外的对象。不渲染看不到的对象!遮挡剔除是剔除被其它对象挡住的对象。比如,门后的房间可以被整体剔除。默认情况下,遮挡剔除是针对整个场景的,如果关卡设计得当甚至可以让你剔除游戏中的整个关卡。

LOD组当然也可以裁剪离场景很远的对象,进一步使填充率最小化。

关卡设计

若游戏涉及到玩家从一个房间移到另一个房间,简单的解决方法是一个关卡包含整个游戏。缺点在于内存的消耗。尽管每个房间中的各对象和材质都不可见,但其仍会被加载到内存中。将每个房间放置于单独的关卡中,在代码中智能的异步加载关卡可以改善性能。

异步加载

在玩家即将进入下个房间之前,加载下一个关卡。不要使用Application.LoadLevel()同步加载,因为加载时会导致游戏挂起。由于头盔的跟踪是实时的,这会导致眩晕,对玩家来说体验太糟糕。

使用Application.LoadLevelAsync()来加载关卡。你可以在Oculus Mobile SDK BlockSplosion例子的StartupSample.cs中找到使用方法。

光照烘焙

关掉实时阴影!接受动态阴影的对象不会被批处理,这会导致严重的绘制调用。

在PC机上,使用单个实时方向光就可以实现很好的动态阴影效果。对于大多数现代的PC都可以提供逼真的逐像素阴影。然而在移动平台,你需要烘焙光照而不是实时阴影,以高分辨率烘焙光照结合软硬阴影实现类似的效果。

阴影

尤其是为了高性能的手机体验,对于3D对象的阴影处理要使用传统技巧。可以通过在对象下放置一个简单的带有模糊阴影纹理的2D四边形模拟半真实的阴影。

VR提示:不要尝试使用阴影缓冲。预处理光照环境并在角色下方使用老套的模糊阴影纹理处理方法。

例如,你Hold不住像《GTA V》中这种在高性能PC机上使用的实时动态阴影。

用如下方法代替:这是一张2002年《GTA Vice City》的游戏截图,你可以在Playstation 2上使用阴影斑点来提供阴影效果的幻觉。

光线探测器

当使用烘培光照时,静态对象效果不错但动态对象有点欠妥。对于动态对象可以使用光照探针来模拟简单的动态光照。

光照探针是烘焙好的立方贴图,存储了场景中多个点直接、间接甚至自发光的信息。当动态对象移动时,它在光照探测器附近进行插值获取近似某个点的光照。这是一种在动态对象上模拟实时光照的简便办法,而不用成本高昂的实时光照。

Unity的文档解释了光照探针要如何放置。

避免使用透明和多个材质的对象

类似玻璃这种使用透明着色器的对象很消耗性能。使墙壁看起来更逼真的常见做法是,用一个带有灰尘或锈斑纹理的透明材质,加上另一个单独的基本漫射材质。多材质的alpha混合是很消耗性能的,每个材质都会增加一次绘制调用!但是请注意:多个纹理并没有问题,使用多个材质才耗费性能。使用一个材质结合着色器来实现多纹理的alpha混合,而非使用多个单独材质。

蒙皮网格渲染器

蒙皮网格渲染器常用于角色身上,它带有动画关节,可以使用物理(布娃娃)变或自定义动画(走,跳等)来实现逼真的网格变形。

坏消息是:蒙皮网格渲染器不支持批处理。对于每只眼睛,场景中各角色都会进行多次绘制调用。目前还没什么解决方案。

扩展阅读

推荐大家观看Oculus大会上关于GearVR的开发演讲。

原文链接:

链接:http://dshankar.svbtle.com/performance-optimization-for-vr-apps

作者:DARSHAN SHANKAR

-----

若有问题,请随时联系!

非常感谢!

--------------

再次感谢可爱的刺酱为本文做的努力!!辛苦!

转载于:https://www.cnblogs.com/qitian1/p/6461936.html

12个Unity5中优化VR 应用的技巧相关推荐

  1. Unity5.3官方VR教程重磅登场-系列7 优化VR体验

    本文转自:知乎专栏-笨猫快乐学编程,作者:王寒 简介 对于VR应用来说,如果想要让用户获得好的用户体验,特别是免除恶心眩晕的困扰,在VR开发中进行优化是必不可少的,惟其如此才能达到我们期望的游戏运行帧 ...

  2. 成长中的SEO,应该避免这12个过时的优化策略(转载自:https://www.duiji.net)

    成长中的SEO,应该避免这12个过时的优化策略 SEO在过去几年里经历了广泛的变化及进化,并且每天都在进行着. 虽然大多数传统的营销策略(在很大程度上)仍然适用于今天的数字营销,SEO的变化已经大大改 ...

  3. 不知道怎么开发VR游戏?Unity5.3官方VR教程重磅登场(转)

    如果你不是VR游戏或应用的开发者,可以选择无视下面的内容,这不是给普通用户看的~如果你之前曾经为Oculus Rift DK2或者Gear VR开发过,那么心里面一定曾经有千万个草泥马来回奔跑过.虽然 ...

  4. Unity5.3官方VR教程-系列1

    如果你不是VR游戏或应用的开发者,可以选择无视下面的内容,这不是给普通用户看的~ 如果你之前曾经为Oculus Rift DK2或者Gear VR开发过,那么心里面一定曾经有千万个草泥马来回奔跑过.虽 ...

  5. Unity5.3官方VR教程重磅登场-系列1

    原地址 PART I UNITY VR Unity内置对若干VR设备的支持,至于具体是哪些设备,不妨看看VRDeviceType这个枚举变量. 本教程主要针对Oculus系列的VR设备,特别是Ocul ...

  6. Unity5中的光照简介

    unity 5中的光照可以用整本书来说明,此文是过去几个月使用 unity5 的简单汇总.下面主要分6个部分来讲解. Forward(前向)与Deferred(延迟)渲染 Realtime(实时)与B ...

  7. 【Unity3D Shader编程】之十 深入理解Unity5中的Standard Shader(二)屏幕油画特效的实现

    本系列文章由@浅墨_毛星云 出品,转载请注明出处.   文章链接: http://blog.csdn.net/poem_qianmo/article/details/49719247 作者:毛星云(浅 ...

  8. Unity3D Shader编程】之十 深入理解Unity5中的Standard Shader(二)屏幕油画特效的实现

    本系列文章由@浅墨_毛星云 出品,转载请注明出处.   文章链接: http://blog.csdn.net/poem_qianmo/article/details/49719247 作者:毛星云(浅 ...

  9. Unity VR游戏开发干货教程:优化VR体验

    简介 对于VR应用来说,如果想要让用户获得好的用户体验,特别是免除恶心眩晕的困扰,在VR开发中进行优化是必不可少的,惟其如此才能达到我们期望的游戏运行帧速.和其它平台上的开发不同,对VR应用的优化应该 ...

最新文章

  1. python接口 同花顺_这是真的么 | 学会了用Python预测股票价格
  2. ASP.NET MVC Music Store教程(1):概述和新项目
  3. 实事求实来看综合布线网络
  4. ZooKeeper:win7上安装单机及伪分布式安装
  5. IDEA Java Web 推送Tomcat
  6. php树莓派魔镜,用树莓派和显示器制作一面“魔镜”
  7. enter power save mode解决
  8. Linux-----diff命令
  9. mysql5.5查询字段语句_mysql查询同一个字段下,不同内容的语句
  10. 创建war类型的maven工程时报web.xml is missing and failOnMissingWebXml is set to true
  11. android view设置按钮颜色_Android 酷炫自定义 View:高仿 QQ 窗帘菜单
  12. [UOJ22]外星人
  13. 自尊就是吃饱了撑的-莫言
  14. 5、海康威视摄像头配置和初步测试
  15. ORCAD原理图检查
  16. Linux unison 效率,linux利用unison实现双向或多向实时同步
  17. 下载安装SQL server2008的步骤
  18. 张一鸣:创业6年,估值750亿美元!人才不是核心竞争力,机制才是!
  19. ubuntu和windows双系统默认启动顺序
  20. uni-app - 电子签字板组件(签名专用写字画板,支持调整写字板 “横纵“ 方向,可调整线条粗细颜色等,Canvas 绘制非常丝滑流畅)完美兼容 H5 APP 小程序,最好用的画板签字教程插件源码

热门文章

  1. 卡死 App 的神秘字符串,究竟是何方神圣(下)
  2. 分布式数据库中间件介绍
  3. C#中的时间(判断是否是时间,比较大小百货等一些操作)
  4. JAVA实现QQ邮箱推送邮件
  5. spring boot 集成 redis spring-boot-starter-data-redis 2.1.7.RELEASE jedis: pool: #连接池配置 及踩坑经验
  6. 美团robust使用
  7. java分布式调度框架_基于Redis的分布式Java任务执行和调度框架
  8. 计算机设计大赛校赛答辩后的感想和反思
  9. 微信公众号下发统一消息
  10. 怀旧服服务器在线人数查询,魔兽世界怀旧服如何查询人口普查?