IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 游戏开发 -> VR MultiPass |SinglePass(Instanced) |MultiView 浅析和区分总结 -> 正文阅读

[游戏开发]VR MultiPass |SinglePass(Instanced) |MultiView 浅析和区分总结

目录

Stereo Rendering

Multi Pass

Single Pass Stereo Rendering单通道立体渲染(双宽渲染)

Single Pass Instanced Rendering单通道(立体)实例化渲染

Multi-view 移动端多视图

性能对比和区别

相关链接


Stereo Rendering

Stereo Rendering(立体渲染)是一种让人眼能感受到立体效果的渲染方式,为给予人眼立体效果,需要2个Camera对同一个场景进行成像,即设置不同的View矩阵渲染两张图像,这两张略有差异的图片能使人眼感觉出深度。(原文链接见最后)

pipeline:

Multi Pass

默认的 Stereo Rendering MethodMulti Pass。此设置较慢,但通常更适合于自定义着色器。如果有自定义着色器,则可能需要更改这些着色器,使之与 Single Pass Instanced 渲染兼容。

多通道渲染运行 2 个完整的渲染通道(每只眼睛对应一个)。因此,与单通道实例化渲染方法相比,多通道方法会产生几乎两倍的 CPU 工作负载。但是,此方法具有最高的向后兼容性,不需要对着色器进行任何更改。

核心思想是提取独立于视图的渲染循环部分。意味着可以共享非依赖单只眼睛视图的资源,比如阴影和剔除。

对于剔除,将两只眼睛的平截头体合为一个做一次剔除,这意味着每只眼睛将比单眼剔除平截头体渲染多一点,但我们认为单次剔除的好处超过了一些额外的顶点着色器、裁剪和光栅化的成本。

pipeline:

Single Pass Stereo Rendering单通道立体渲染(双宽渲染)

Single-Pass Stereo Rendering意味着我们将对整个渲染循环进行一次遍历,而不是两次,或者某些部分两次。

单通道立体渲染功能适合基于 PC 和 Playstation 4 的 VR 应用。该功能可将两只眼睛的图像同时渲染到同一个经打包的双宽渲染纹理,该纹理的宽度是单眼纹理宽度的两倍。(比起切换渲染目标,切换渲染视口开销更小,将左右眼的两张纹理合成为一张双宽的纹理)Unity 针对每个包含渲染器组件的游戏对象使用 2 个绘制调用,从而将场景渲染两次,但是当同时针对左眼和右眼渲染时,Unity 仅对场景迭代一次。在单通道立体渲染期间,双眼共享剔除和阴影计算所需要的工作。图形命令状态更改切换也会减少,因为 GPU 以往返方式(在双眼之间交替渲染对象)渲染每个游戏对象。

单通道立体渲染允许 GPU 针对双眼共享剔除。为了进行剔除,GPU 只需要对场景中的所有游戏对象迭代一次,然后渲染在剔除过程之后仍然存在的游戏对象。

在典型的 OpenGL 立体渲染中,必须按顺序渲染每个眼睛缓冲区,从而使应用程序和驱动程序开销加倍。使用 Single Pass Stereo 渲染,对象被渲染一次到左眼缓冲区,然后自动复制到右缓冲区,并对顶点位置和视图相关变量(例如反射)进行适当修改。它主要是降低 CPU 使用率,而 GPU 性能基本没有变化。

由于两个drawcall之间的缓存一致性,可大大降低 CPU 的使用,并略微减少 GPU 的使用。这样可以大幅降低应用程序的功耗。

下面的比较图显示了普通 VR 渲染和单通道立体渲染之间的区别。

普通立体 VR 渲染:

单通道立体 VR 渲染:

问题:

后处理需要一些额外的工作才能支持单通道立体渲染。每个后期处理效果在打包的渲染纹理(同时包含左眼和右眼图像)上运行一次,但对于在后处理过程中运行的所有绘制命令,这种效果将应用两次:一次是左眼的一半目标渲染纹理,一次是右眼的一半。

后期处理效果不会自动检测单通道立体渲染,所以您需要调整打包的渲染纹理的任何读取操作,使得这些读取操作仅读取对于正在渲染的眼睛来说正确的一面。根据后期处理效果的渲染方式,有两种方法可以实现这一点:

屏幕空间效果是指在预先渲染的图像上绘制的视觉效果。屏幕空间效果的例子包括环境光遮挡景深泛光

例如,假设有一种屏幕空间效果要求在屏幕上绘制一幅图像(也许您正在绘制飞溅到屏幕上某种污垢)。只需要应用这种效果两次:每只眼睛应用一次,而不必将效果应用于整个输出显示,否则将使污垢图像在两只眼睛之间拉伸。在这种情况下,需要从引用整个双宽渲染纹理的纹理坐标转换为引用每只眼睛的坐标。

在单通道下,对于unity,shader需要做额外工作,asset store中的资源很可能无法使用

rift pipeline

pipeline:

在multi pass 中,每只眼睛有自己的rendertarget,但在绘制中切换rt开销十分高,如果选择使用rt数组,在大多数平台上需要将view的相关数据导出到gs外,这个操作也十分消耗性能,所以使用双宽技术,将左右眼纹理绘制在一个纹理上,简单来说,multi pass 切换渲染目标,single pass 切换渲染视口

Single Pass Instanced Rendering单通道(立体)实例化渲染

使用单通道实例化 (Single Pass Instanced)渲染(也称为立体实例化)的情况下,由 GPU 执行单个渲染通道,将每个绘制调用替换为实例化绘制调用。

Single Pass Instanced使用render target array进行实现,眼睛纹理共享格式和大小,以此在rt数组中使用。在扩展的图形api接口中,从顶点着色器导出渲染目标数组索引的功能变得越来越常见,借此我们可以指定要渲染到render target 数组的哪个纹理上。利用现有的single-pass double-wide结构,使用unity中的unity_StereoEyeIndex,在着色器中填充SV_RenderTargetArrayIndex。

通过从vs中获取索引可以实现在同一视口渲染多个渲染目标,即无需切换视口

single pass 和 single pass instanced 调用区别:

single pass:

- Draw mesh 1 for left eye
- Draw mesh 1 for right eye
- Draw mesh 2 for left eye
- Draw mesh 2 for left eye

single pass instanced:

- Draw mesh 1 twice, for left eye and right eye
- Draw mesh 2 twice, for left eye and right eye

Multi-view 移动端多视图

多视图是某些OpenGL / OpenGL ES实现的可用扩展,其中驱动程序本身负责处理双眼之间的各个drawcall的多路复用。

有一个与立体声实例化不同的底层实现细节:驱动程序本身确定渲染目标,而不是顶点着色器指定渲染目标数组索引显式选择。其会自动生成一个 gl_ViewID,用于计算视图相关状态,但不用于选择渲染目标。 在使用中,这对开发人员来说并不重要。

multi viwe 与 single pass具有相同架构,开发人员可以使用相同的架构来支持两种single pass技术。

简单来说 multi-view 就是移动端的single pass instanced

OpenGLES支持ovr_multiviwe2扩展https://www.khronos.org/registry/OpenGL/extensions/OVR/OVR_multiview.txt

性能对比和区别

single pass(instanced) 与 multi pass之间cpu开销有显著的区别。 但是,单通道和单通道实例化之间的差异相对较小。 原因是通过将multi pass切换到single pass已节省了大量CPU开销。单通道实例化确实减少了draw call的数量,但是与处理场景图形相比,区别不明显。

技术

原理

缺点

优点

Multi Pass

两个渲染通道,共享剔除和阴影,绘制时切换渲染目标

使用两个通道,双倍的CPU负荷,性能差

高兼容性,

不用改shader

Single Pass

单个通道,使用双宽纹理,绘制时切换渲染视口

对于部分资源和后处理等,可能不支持

性能好

Single Pass Instanced

单个通道,使用双宽纹理,绘制时不切换视口

对于部分资源和后处理等,可能不支持,同时对于部分项目也不兼容

Single Pass

性能好

Multi-view

同SPI

同SPI,用于移动端,需GPU支持

同SPI

相关链接

How to maximize AR and VR performance with advanced stereo rendering | Unity Blog

单通道实例化渲染 - Unity 手册

立体渲染(Stereo Rendering)_linuxheik的专栏-CSDN博客_立体渲染

https://www.facebook.com/photo.php?fbid=10154006919426632&set=a.46932936631.70217.703211631&type=3

  游戏开发 最新文章
6、英飞凌-AURIX-TC3XX: PWM实验之使用 GT
泛型自动装箱
CubeMax添加Rtthread操作系统 组件STM32F10
python多线程编程:如何优雅地关闭线程
数据类型隐式转换导致的阻塞
WebAPi实现多文件上传,并附带参数
from origin ‘null‘ has been blocked by
UE4 蓝图调用C++函数(附带项目工程)
Unity学习笔记(一)结构体的简单理解与应用
【Memory As a Programming Concept in C a
上一篇文章      下一篇文章      查看所有文章
加:2022-03-04 15:56:00  更:2022-03-04 15:56:46 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/27 16:26:02-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码