首页 > 科技革新 > 内容

研发实践:在VR游戏中添加LiquidVRMultiView渲染

发布于:2024-06-26 编辑:匿名 来源:网络

加入英伟网会员文章相关引用和参考文献:gpuopen本文来自Croteam的引擎程序员 Karlo Jez,目前负责《Serious Sam VR: The Last Hope》。

(2020年11月24日)AMD的MultiView渲染功能可以减少VR应用中复制对象绘制调用的次数,允许GPU在一次绘制调用中将对象广播到左眼和右眼(原本渲染两个二流)。

这有助于减少 CPU 负载,从而减少丢帧并优化渲染延迟。

当我们开始使用单通道渲染时,我们首先使用多个 GPU,因为它更容易实现并且对性能影响最大。

不幸的是,尽管 GPU 在 VR 渲染中发挥着巨大作用,但我们大多数用户都无法使用多个 GPU。

因此,我们计划在单GPU上支持MultiView渲染。

MultiView渲染并不会真正影响GPU负载,但可以显着降低CPU的渲染负载。

研发实践:在VR游戏中添加LiquidVRMultiView渲染

对我们来说,支持同一组着色器并确保所有支持的 VR 渲染方法尽可能高效非常重要,从而最大限度地减少仅出现在其中一种渲染方法上的错误数量。

使用 LiquidVR Affinity Multi-GPU,双眼图像会渲染到同一渲染目标的同一视口,但一个位于主 GPU 上,另一个位于另一个 GPU 上。

渲染后,图像被复制到主GPU上的不同渲染目标,并传递到VR系统进行显示。

在单 GPU 渲染的情况下,两个图像不能同时存在于 2D 渲染目标的同一视口中,但我们可以使用渲染目标数组或包含两个并排视图的渲染目标。

我们决定使用并行渲染,因为我们想避免编译一组单独的着色器(我们在Future Rendering中没有使用Texture2D,而是使用Texture2DArray),并且因为我们想通过Future 尝试未来的MultiRes Rendering 实现。

对于单个 Radeon GPU 上的 Kongfung 渲染,我们使用了 AMD GPU 服务 (AGS) 库。

除了一些初始化函数之外,我们只需要库中的一个函数:agsDriverExtensionsDX11_SetViewBroadcastMasks()。

要在同一渲染目标上使用两个视口启用MultiView渲染,我们调用: agsDriverExtensionsDX11_SetViewBroadcastMasks(context, 0x3, 0x1, 0);第二个和第三个参数是最重要的,因为它们将选择视口和渲染目标切片蒙版。

渲染时,我们不设置单个视口,我们同时设置两个视口: D3D11_VIEWPORT ad3dViewports[] = { {fLeftX, fY, fHalfWidth, fHeight, fNear, fFar}, {fRightX, fY, fHalfWidth, fHeight, fNear , fFar} };pd3d11context- RSSetViewports(2, aViewports);对于基于 Affinity Multi-GPU 的单通道渲染,我们仅使用每个 GPU 不同的常量缓冲区;所有其他数据都相同,即两个 GPU 都有双眼的渲染数据,但只选择其中一个进行渲染。

这使得在单个GPU上添加对MultiView渲染的支持变得更容易。

因为所有数据都在同一个 GPU 上,所以同一个常量缓冲区中不能有不同的值。

要通过 AGS 获取每只眼睛的正确矩阵,唯一需要的更改是使用 AmdDxExtShaderIntrinsics_GetViewportIndex()。

我们没有选择 GPU 索引,而是在 Affinity Multi-GPU 模式下将命令缓冲区传递给两个 GPU。

uint GetVREye() { // c_multiview 是传递给所有着色器的常量 return (c_multiview 0.0f) ? AmdDxExtShaderIntrinsics_GetViewportIndex() : c_eye;当启用Future时,该函数返回视口索引;当MultiView被禁用时,该函数返回眼睛常数。

在多通道渲染中为每个渲染通道设置眼常量,或者在 Affinity Multi-GPU 模式下渲染单通道时将眼常量上传到每个 GPU。

该索引可用于获取所有着色器上每只眼睛的数据,无论使用何种渲染方法。

在MultiView模式中,我们使用两倍于通常宽度的渲染目标。

从外部代码(即更高级别)的角度来看,渲染目标是原始大小(一半),例如× 渲染目标将在内部创建为 × ,但是当从外部代码查询纹理尺寸时,您将得到 × 。

这样做的目的是尽量减少MultiView需要感知的代码量。

只有着色器和底层渲染函数需要知道实际纹理大小或我们正在使用MultiView渲染的事实。

当绘制到渲染目标时,一切就像分两次渲染场景一样,每次都使用不同的视口。

如果我们想要采样MultiView纹理,我们需要在渲染左眼视图时采样纹理的左半部分;我们在渲染右眼视图时需要对右半部分进行采样。

为此,我们使用 MAD 来调整 UV 坐标。

因此,对于左眼,它们不是从 (0.0, 0.0) 到 (1.0, 1.0),而是从 (0.0, 0.0) 到 (0.5, 1.0);右眼从 (0.5,0.0) 到 (1.0,1.0)。

我们如何为每只眼睛提供不同的值?答案是AmdDxExtShaderIntrinsics_GetViewportIndex()。

float4 GetMultiviewMAD() { uint eyeIndex = AmdDxExtShaderIntrinsics_GetViewportIndex();返回 float4(0.5f, 1.0f, 0.5f * eyeIndex, 0.0f);为了能够在 MultiView 和非 MultiView 渲染中使用相同的着色器代码,我们添加了所有需要在采样之前应用 MAD 的着色器,但我们向该函数添加了一个条件,因此当 MultiView 被禁用时,它将返回 (1.0, 1.0、0.0、0.0)。

添加MultiView支持最具挑战性的部分是检查所有着色器并将 MAD 应用到正确的位置。

这些主要是后处理着色器,因为它们经常对先前渲染的纹理进行采样。

当我们错过一些视觉伪像时,通常很难不注意到它们。

这些着色器渲染的图像大小是两倍,并且它们的长宽比不正确(因为您将对整个图像进行采样,而不是一半): 这是正确渲染的场景(仅左眼视图): 这是相同的场景,但是其中一个后处理着色器(FXAA)缺少MultiViewMAD:我们可以注意到图像是如何被挤压的,并且左眼可以看到右眼视图的一部分。

我们可以通过在采样纹理之前调整UV坐标来解决这个问题。

修复了所有渲染错误后,我们可以看看 SteamVR 游戏中的帧计时。

禁用 MultiView渲染: 启用 MultiView渲染: 可以看到两种情况下 GPU 帧时间几乎相同(约 6.5 毫秒),但 CPU 从 9 秒减少到 7 毫秒,这与我们得到的结果相同LiquidVR Affinity Multi-GPU 结果类似。

在这种情况下,性能提升不到两倍,因为我们的 VR 渲染器已经进行了相当程度的优化,但主渲染通道只能通过 AGS 每帧执行一次,因此我们不需要花费 2 毫秒来处理渲染命令,但 4 毫秒。

结论 在已经支持 LiquidVR Affinity Multi-GPU 的引擎中添加对 Kongfun 渲染的支持并不困难,因为我们提前计划了。

在开始添加MultiView支持之前,我们将所有着色器设置为单通道渲染。

相反,一开始就增加对MultiView的支持存在一个更大的初始障碍,因为我们需要处理单遍错误和MultiView错误。

但一旦完成,我们就可以非常轻松地添加 LiquidVR Affinity 多 GPU 支持。

补充低级功能非常重要,这些功能为MultiView提供清除或复制视口的意识。

如果视口的一部分被清除,右眼也必须做同样的事情。

视口复制需要考虑是否从MultiView纹理复制/复制到MultiView纹理,并进行相应操作。

另一件需要考虑的事情是使用 SV_Position 语义读取像素着色器输入。

我们需要小心,因为它给出了渲染目标的像素中心相对于渲染目标(而不是相对于视口)的坐标,因此右眼视图的值将成为纹理右半部分的坐标。

这并不是MultiView渲染所特有的,而是我们对返回值范围的错误假设导致了一些渲染错误。

研发实践:在VR游戏中添加LiquidVRMultiView渲染

站长声明

版权声明:本文内容由互联网用户自发贡献,本站不拥有所有权,不承担相关法律责任。如果发现本站有涉嫌抄袭的内容,欢迎发送邮件 举报,并提供相关证据,一经查实,本站将立刻删除涉嫌侵权内容。

标签:

相关文章

  • WPS CEO葛珂:业务创建工具的演变与WPS办公的云棋局

    WPS CEO葛珂:业务创建工具的演变与WPS办公的云棋局

    WPS CEO葛珂 只剩一个月了,我们要告别,迎来新的一个月。 就在12月,我们为WPS重构办公模式、转型云协作做好了充分准备。 这或许是WPS自2006年诞生以来最重大、影响最深远的一次升级。 作为在PC普及之前萌芽的“中国软件”的种子,作为默默生长了28年的“中国原创”的象征过

    06-17

  • 【创业24小时】2023年4月11日

    【创业24小时】2023年4月11日

    投融资昨天,国内市场共发生14起投资披露事件,其中先进制造5起(锐势科技、粤方科技、先堆科技、宇微半导体、牧野微)、医疗健康案例4个(灵复生物、华宁世纪、茵塞普、洞察网络)、企业服务案例1个(五季智能)、农业案例1个(嘉安农牧)、电商零售1个案例(同聪齐)、当地

    06-17

  • 千芯半导体完成数千万元融资

    千芯半导体完成数千万元融资

    据3月22日消息,可重构内存和计算AI芯片的提出者千芯半导体(TensorChip)完成数千万元融资。 本轮投资方为前海融华汇金、NW投资。 与此同时,公司还准备启动新一轮融资。 千芯半导体成立于2007年,核心技术团队来自AMD、瑞萨半导体、联发科、长江存储等国际先进企业。 在存

    06-17

  • 预览:分析移动机器人中的视觉算法 -硬创新公开课

    预览:分析移动机器人中的视觉算法 -硬创新公开课

    现在自动驾驶汽车已经上路很久了,越来越多的公司开发出了可以自主行走的移动机器人,而且很多机器人已经在军队中使用或者大显身手在月球和火星等危险环境中。 移动机器人要完全依靠自身在不同环境下平稳移动,需要具备类似人眼、大脑、腿部的功能,实现定位导航、路径规划、

    06-18

  • IRP Systems完成约1700万美元B轮融资,复星锐领投

    IRP Systems完成约1700万美元B轮融资,复星锐领投

    投资社区(ID:pedaily)据5月14日消息,以色列电力系统解决方案提供商IRP Systems宣布,其公司已完成约美国B轮融资10,000美元。 本轮融资由复星锐资本领投,日航创投跟投。 此外,IRP Systems还成功获得大众集团旗下Champion Motors以及Entre Capital、Tal Capital、Union T

    06-17

  • 贵州设立10亿元优势产业发展基金

    贵州设立10亿元优势产业发展基金

    投资界11月1日消息,10月27日-28日,由贵阳市人民政府、贵安新区管委会主办,贵阳市金融办、贵州省政府主办贵州“强省会”行动——“百资进贵州”投资峰会在“中国数字谷”贵阳成功举办,《“基金入黔 筑梦未来”支持贵州“强省会”行动宣言》在峰会上签约发布。 申万宏源集团

    06-18

  • 索尔维镇江电子级双氧水工厂正式投产

    索尔维镇江电子级双氧水工厂正式投产

    上海,2019年10月22日——索尔维镇江新电子级双氧水工厂今日正式举行落成典礼。 新工厂年产能高达24,000吨,将为电子行业供应产品。 双氧水是电子集成电路生产中不可缺少的化学试剂。 近年来,随着中国电子工业的快速发展,用于清洗和蚀刻大型集成电路、液晶显示器和半导体的

    06-06

  • 梁伯韬解密CVC:IRR25%你绝对不会投资的5大类

    梁伯韬解密CVC:IRR25%你绝对不会投资的5大类

    全球五大私募基金之一的CVC最近动作不断。 昨日,CVC以5亿对价转让饮料包装行业龙头企业珠海中富16%股权。 不久前,CVC刚刚完成了对中式快餐领先品牌大娘饺子和连锁教育品牌启德教育的收购。   今年是CVC进入中国的第八个年头。 过去一段时间,这家全球五大私募基金之一在

    06-18

  • 中科慧远获近亿元A+轮融资,中科海创、国投创投领投

    中科慧远获近亿元A+轮融资,中科海创、国投创投领投

    据投资界7月24日消息,据36氪报道,“中科慧远”近日宣布上半年已完成A+。 由中科海创、国投创合联合领投的万元人民币融资。 本轮融资主要用于中科慧远旗下的AOI设备制造、工业互联网及AI大数据平台、工业AI算法公共平台研发。 中科慧远是工业外观精密检测专有设备制造商和工

    06-18

  • 阿里云宣布推出中小企业数字服务节,200项数字服务权益支持中小企业云创新

    阿里云宣布推出中小企业数字服务节,200项数字服务权益支持中小企业云创新

    9月1日,在宁波举行的阿里云城市峰会上,阿里云宣布推出“中小企业数字服务节”,为中小企业提供数字服务权益,支持中小企业云创新。 阿里云创新中心副总经理焦志良在会上表示,“我们希望利用阿里云的技术能力和开放生态能力,为中小企业提供更普惠、更安全、更绿色的产品和

    06-17

  • 想要沉浸观鸟,需要像鸟一样生活在树上

    想要沉浸观鸟,需要像鸟一样生活在树上

    日常生活中,各种各样的鸟随处可见,观鸟的方式也有很多种。 你可以在电线杆前用手机随处拍照。 树梢上有飞过的身影,也有扛着双筒望远镜或扛着“长枪短炮”捕捉大自然鸟类每一个细节的专业人士。 ▲ 图片来自:All About Birds 在瑞典北部的拉普兰,有一种更为独特的观鸟方

    06-21

  • 马斯克:比特币是好东西,我是支持者

    马斯克:比特币是好东西,我是支持者

    特斯拉CEO埃隆马斯克表示,比特币是好东西,我是支持者。

    06-17