畸变补偿的画面所需信息,比 GPU 渲染出的画面要少很多(镜片光路损失一部分,直播,同时人眼对视觉中心比边缘看得更清楚)。所以 GPU 本质上做了很多无用功。 Multi-res shading 要做的就是,把每一帧的画面分成多个部分,中间保留更多细节,而边缘保留较少细节。换个角度就是压缩画面,从而提升渲染速度。 所以当我们把游戏切成 9 个部分,根据 9 个部分,中间形变最少采取 100% 的分辨率,剩下的开发商可以自己填,填完之后在没有减少视觉的差异下,还是 100%,不会浪费。 Front Buffer Rendering 前缓冲渲染 我刚刚讲,天下武功为快不破,这里就要通过直接对前缓冲渲染来减少延迟。 前缓冲渲染技术原理跟直接模式相关。 简单来讲,如果电脑把 VR 头盔当做普通显示器的话,就需要通过标准的两级缓冲模式进行渲染。而识别成 VR 头盔的话,就可以越过 Back Buffer 直接进入 Front Buffer,从而减少延迟。
图片来源:Virtalis Context Priority 上下文优先级 Context Priority 可控制 GPU 调度以支持各种先进的 VR 功能,像是异步时间扭曲。 稍微解释一下什么是异步时间扭曲。 它是指在一个线程(称为 ATW 线程)中进行处理,这个线程和渲染线程并行运行。在每次同步之前,ATW 线程根据渲染线程的最后一帧生成一个新的帧。 可能不是很好理解,我用简单一点的语言来描述。 举个例子。 如果转头过快的话,新位置的画面还没渲染出来,或者出现的是前一个位置的画面,就会引起不适。 怎么解决这个问题呢? 技术专家想到一种方法,即人为插入一个根据位置计算出来的帧来占位。 GPU 需要一个独立的线程来做这件事,抢在下一帧出现之前占位,从而减少画面的延迟(或因为掉帧而引起的抖动)。 如此不仅能缩减延迟,当游戏玩家移动头部时还能快速调整显示影像,无须重新渲染画面。 VR SLI 多显卡支持 这需要用到 CPU,以确保两个眼睛看到同一点。这里就需要通过增加显卡来增强渲染性能。 人有双眼,所以 VR 图像都被渲染成左右两个画面。但是这两个画面是不一样的,这就额外增加了 CPU 和 GPU 的占用。 虽然,有些计算不需要算两遍,比如物理计算,阴影图,游戏逻辑等,但实际视角包含的画面肯定需要重新计算,以保证正确的时差和深度信息。
图片来源:Digital Trends 所以说,在有些极端情况下,虚拟现实渲染模式下 GPU 用量是翻番了的。 在这种情况下,如果使用两块显卡,并行处理左右两个画面,就可以解决好了。 也就是说,一块显卡处理左眼的画面,另一块处理右眼的画面,最后整合在一起输出。 这个方法可以大大提升计算效率,却也不会增加延迟。举一个例子。 常规多显卡渲染即: 显卡 0 和显卡 1 轮流渲染第 n 帧和第 n1 帧,但是要求 CPU 提交得足够快,因为 CPU 要提交两份 DRAWCALL,CPU 不能成为瓶颈。 而经过改进之后: 让显卡 0 和显卡 1 分别负责绘制左右两眼,而 CPU 为两个显卡提供一模一样的 DRAWCALL,因为在 VR 的两眼绘制的东西基本是一样的,除了 PERSPECTIVE 矩阵不一样。 而 VRWORKS 通过其 API,实现了一组 DRAWCALL 对多个显卡的广播,可以为不同显卡设置不同的 PERSPECTIVE(常量)。这样 CPU 一份 DRAWCALL 对于两眼,而两眼的绘制在两个 CPU 并行,延迟大大节省。
图片来源:Glass Apps Source DIRECT MODE 直接模式 这个模式使得 GPU 与头戴式可视设备之间,能够具备良好的即插即用兼容性。 它能兼容各种虚拟现实头盔,即插即用。传统的渲染,PC 显示器会把 VR 眼镜作为显示器的一个显示扩展,VR 眼镜和 GPU 是没有直接交互的。 而透过 Direct Mode (直连模式),我们的绘图处理器驱动程式就有能力,把头戴装置辨识成一部 VR 显示器,而不仅仅是一个标准的桌面显示器,因此能提供更接近无缝的用户体验。 (责任编辑:本港台直播) |