介绍MobileVR设计

这节包含VR应用开发在移动开发的独特领域的指南。

早期标题的性能建议

保守性能。虽然两个线程是用于VR应用的,很多安卓系统的问题我们不能控制,性能有比我们可能喜欢的更多的统计特性。一些后台任务偶尔使用GPU。一直逼近限制确实会导致更多的丢帧,并使体验不愉快。

你不能实现图形效果在这些性能约束(人们几年前不能再其他平台上看到)下,所以不要尝试去实现。VR体验来自发生在合成场景中的有趣事情,图形应该主要的尝试不调用对他们自己的注意。

虽然你一直保持60FPS,更多的高质量绘制消耗更多的电能,标题的视觉质量上的稍微改进不会消耗20分钟的电池生命。

保持直接渲染。绘制任何东西到一个视图里,在一个单一的假冒的每个网格中。对于VR重新设置深度缓冲区和多摄像机层的技巧是不好的,不管他们的性能问题。如果几何图形工作不正确--所有东西渲染进一个单一视图--这会导致感知问题在VR中,你应该修复这个设计。

你不能处理大多数的混合因为性能原因。如果你在标题上有续航能力限制,保证特效不要覆盖整个屏幕。

不要使用alpha测试/像素丢弃透明度--别名使用会是可怕的,性能一直是有问题的。alpha覆盖能有帮助的,但是设计一个标题不需要很多的切断几何是更好的。

大多数的VR场景应该用16位深度缓冲区分辨率和2x MSAA构建。如果你的场景主要是用pre-lit来压缩纹理。这儿有一点不同在16位和32位颜色缓冲。

赞成适度的“场景”代替”开放场景“。这是理论和实践上为什么你应该的原因,至少在短期内。第一代的标题应该是关于低挂果实,不是挑战。

看起来最好的场景会是独一无二的纹理模式。你能加载很多纹理--128M的纹理是可以的。和全局照明烧制进纹理,或者数据实际上是真实世界的抽样,你能制作合理的图像逼真场景(一直运行在60FPS立体视图上)。很多低级保真度的对比动态元素可能是不和谐的,所以这是重要的格式上的做决定。

全景照片为场景产生卓越的和有效率的背景。如果你不是太挑剔关于全局照明,允许它们被换出是经常美好的。全景基于图片灯光模式不是实践性能对于整个场景,但是大概是可以的对于特性(不能覆盖屏幕)。

帧率

感谢异步时间扭曲,在GearVR中游览会一直是平稳的和颤抖自由的在60FPS下,无论应用渲染的多快或多慢。这不是意味着性能不再是一个关心的事,改善应用的体验不是完全的保持在60FPS下。

如果一个应用不是一直运行在60FPS下,动画对象移动起伏,迅速转动头部拉取一些黑色在边上,玩家移动不会感觉到平滑,游戏手柄转动看起来特别坏。然而,异步时间扭曲不需要GPU管线空闲和很容易保持60FPS比不使用异步时间扭曲。

绘制任何东西(在视图中是卡住的)会看起来坏的如果帧率没有保持值60FPS,因为它只会在一只眼帧率更新上移动,替换任何视频帧率。不要使头向上显示。如果一些东西需要停留在玩家前面,就像一个漂浮的GUI面板,大部分时间它是静止的,必要时它会快速冲回中心,替换用头方向连续不断的牵引它。

场景

每个场景目标:

1.5W到10W个三角形

2.5W到10W个顶点

3.50到100绘制调用

一个应用可能会渲染更多的三角形通过使用非常简单的顶点和碎片程序,减小透支,减少绘制调用下降到一打。然而,很多小细节和轮廓边可以导致明显的混淆现象尽管MSAA。

对保守派来说它是好的!一个虚拟现实体验的质量不只是由渲染图像的质量决定。低延迟和高帧率是同样重要的在高质量、全沉浸式体验中,如果没有更多的话。

保持一只眼在顶点数量上因为顶点处理不是自由的在一个瓷砖架构的移动GPU上。一个场景中的顶点数量期望在相同的棒球场就和三角形的数量一样。一个典型的场景中,顶点数量不应该超过三角形数量的两倍。减小独一无二的顶点的数量,删除顶点属性对渲染来说这不是必要的。

纹理理想上用每texel4位存储在ETC2格式来改善渲染性能和一个8倍的存储空间减少比32位RGBA纹理。加载到512M的纹理是可行的,但是移动设备有效存储空间的限制需要考虑。为了一个独特的纹理环境在一个有移动性限制的应用中,加载128M的纹理是合理的。

纹理的直接烘焙反射和反光工作的很好为有移动限制的应用。来自动态着色的混淆现象基于反射在凸起的地图表面经常是一个网络消极的在VR中,但是简单的,平滑的形状一直是有益的来自动态反射在一些案例中。

动态阴影的动态灯光通常不是一个好主意。很多好技术需要使用深度缓冲区,它是特别昂贵的在一个瓷砖架构的移动GPUs上。渲染一个阴影缓冲区为一个单一的平行灯光在一个场景中是可行的,但是烘焙灯光和阴影通常产生更好的质量。

为了渲染更多的三角形,尽可能的减少透支是重要的。在透支场景中,它是重要的不透明的几何图形从前到后渲染显著的减少形状数量的操作。场景(只会从一个单一视口被显示)能被静态排序来保证从前到后渲染在一个每三角形基础上。场景(能被观看从多个有利点)可能需要被破碎在合理的几何(会被从前到后动态排序在运行时)块大小.

分辨率

由于主题的失真,在屏幕上的一个像素的感知大小.便利的,高分辨率是在屏幕的中心(它很好),即使是一个2560*1440的屏幕,像素一直是大的对比对一个传统的监视器或移动设备在典型的观看远离。

当前屏幕和主题,中心像素覆盖大约0.06度的视觉弧度,所以你可能希望一个6000像素长波段来包裹360度围绕一个镜头视口。远离中心,示例之间的空隙可能比一个大,所以变频解码应该被建立和被用来避免混淆现象。

通常目的,渲染需要90度FOV至少1500*1500分辨率的眼缓冲区,额外的变频解码的创建。当系统是仅仅能胜任的做这些用不重要的场景在最大时钟频率时,热的约束是这些无法维持。

很多游戏风格3DVR内容应该把1024*1024眼缓冲作为目标。在这个分辨率,像素会是轻微的拉伸的在中心,只仅仅压缩在边缘,所以变频解码是不必要的。入股你有很多性能净空,你能尝试增加这一位来增加好的显示分辨率的高级特性,但是这回消耗电能和性能。

专注于“观察者”应用(电子书阅读器,图片查看器,远程监视器等等)真实想聚焦在最高质量应该考虑使用时间扭曲覆盖物盘子来避免分辨率妥协和失真的双重采样在一个单独的渲染眼视图。使用一个sRGB帧缓冲和源纹理是重要的来避免“边不均匀”效果在高对比区域当示例非常接近最佳分辨率时。

时间: 2024-10-20 07:54:17

介绍MobileVR设计的相关文章

详细介绍软件架构设计的三个维度

如果你对项目管理.系统架构有兴趣,请加微信订阅号"softjg",加入这个PM.架构师的大家庭 架构设计是一个非常大的话题,不管写几篇文章,接触到的始终只是冰山一角,更多的是实践中去体会.这篇文章主要介绍面向对象OO.面向方面AOP和面向服务SOA这三个要素在架构设计中的位置与作用. 架构设计有三个维度,或者说是我们在考虑架构时需要思考三个方向. 这三个维度分别为面向对象.面向方面.面向服务. 这三个维度可以看作是正交的,但不同维度会互相印证,互相支撑,整个架构的示意图如图所示. 面向

html5/css3响应式布局介绍及设计流程

html5/css3响应式布局介绍及设计流程,利用css3的media query媒体查询功能.移动终端一般都是对css3支持比较好的高级浏览器不需要考虑响应式布局的媒体查询media query兼容问题 html5/css3响应式布局介绍 html5/css3响应式布局介绍及设计流程,利用css3的media query媒体查询功能.移动终端一般都是对css3支持比较好的高级浏览器不需要考虑响应式布局的媒体查询media query兼容问题 一个普通的自适应显示的三栏网页,当你用不同的终端来查

Django基础核心技术之Model模型的介绍与设计

Django基础核心技术之Model模型的介绍与设计原创: Yunbo Shi Python Web与Django开发 2018-05-03Django网络应用开发的5项基础核心技术包括模型(Model)的设计,URL的配置,View(视图)的编写,Template(模板)的设计和Form(表单)的使用.今天小编我就拼了老命来用千字长文给你来介绍下第一项Django核心基础知识之Model的设计吧.想持续了解后续Django Web开发技术请订阅我的公众号[Python与Django大咖之路].

游戏引擎介绍,架构,设计及实现

本文的灵感来自于<Android应用开发揭秘>的游戏引擎的那一章. 关于Game Engine,我能想到的几个问题: 1.游戏引擎是什么? 2.Game Engine是为了解决什么问题? 3.Game Engine的架构是什么? 4.如何设计一款游戏引擎? 5.游戏引擎包含哪些模块? 下面就来探讨几个问题:  1. Game Engine是什么? 游戏产业在全球来看是一个很大的产业,一款游戏大作包含了非常多的元素.游戏涉及到剧情.人物.任务.关卡.地图.画质.美术.音乐.网络等多种元素.开发一

Linux系统运维与架构设计

一 本章概览 介绍Linux系统运维与架构设计的方方面面 二 Linux基础入门 认识计算机核心硬件和服务器 Linux发展历史.系统组成.应用领域以及发行版 搭建运维环境:VMWareWorkStation.SecureCRT的使用 Linux系统的基本使用 Shell入门以及命令概述 三 Linux系统管理 文件目录管理 用户管理 权限管理 VIM编辑器的使用 文档压缩打包 程序包管理 网络管理 文件系统管理 内存管理 系统管理(监控.环境变量) 安全管理(selinux,iptables)

分布式架构设计之电商平台

分布式架构设计之电商平台 何为软件架构?不同人的答案会有所不同,而我认为一个好的软件架构除了要具备业务功能外,还应该具备一定的高性能.高可用.高伸缩性及可拓展等非功能需求.而软件架构是由业务架构和技术架构两部分组成,因为有了业务结构才会催生出软件架构,进而来满足业务上的需求,所以,在做软件架构设计时,需要分为业务架构设计和技术软件架构设计,二者不可分离哦!那么,接下来就以本人实际工作中的电商平台为例,进行说明电商平台架构设计,因为不同行业产品系统不同业务不同,而催生的系统软件的实现要求及架构设计

第十二篇:为用户设计良好的接口

前言 作为一名优秀的程序员,必须保证自己的代码能提供正确的,完善的接口,如此方能和同事,甲方更好的沟通合作,也让自己的代码更加地容易维护. 本文将介绍一些设计优秀接口的思路. 思路一:导入新的类型 下面还是先看这个例子,我定义了一个存储日期的 Date 类: 1 class Date 2 { 3 public: 4 Date(int month, int day, int year); 5 // ...... 6 }; 可用以下方法定义一个 Date 对象: 1 Date d(30, 3, 19

Kafka设计解析(三)- Kafka High Availability (下)

本文转发自Jason’s Blog,原文链接 http://www.jasongj.com/2015/06/08/KafkaColumn3 摘要 本文在上篇文章基础上,更加深入讲解了Kafka的HA机制,主要阐述了HA相关各种场景,如Broker failover,Controller failover,Topic创建/删除,Broker启动,Follower从Leader fetch数据等详细处理过程.同时介绍了Kafka提供的与Replication相关的工具,如重新分配Partition等

从涂鸦到发布——理解API的设计过程(转)

英文原文:From Doodles to Delivery: An API Design Process 要想设计出可以正常运行的Web API,对基于web的应用的基本理解是一个良好的基础.但如果你的目标是创建出优秀的API,那么仅凭这一点还远远不够.设计优秀的API是一个艰难的过程,如果它恰巧是你当前的工作任务,那么你很可能会感到手足无措. 不过,优秀的设计绝对是可以实现的.本文所描述的流程将帮助你获得成功,我们将共同研究什么是优秀的设计,以及迭代式的流程如何帮助我们实现这一目标.我们还将叙