研发实战:如何在Oculus Mobile VR平台进行Vulkan开发
发布时间:2019-08-09 09:22来源: 未知移动VR从一开始就将OpenGL ES作为图形API,但现在大多数引擎都开始转向Vulkan和DX12等API,因为它们为开发者提供了更大的灵活性和更低的渲染负载。Oculus日前介绍了GL和Vulkan在开发VR游戏功能方面的差异。需要注意的是,本文深入介绍了与图形相关的细节,读者需要掌握GL和Vulkan的基本知识。下面是映维网的具体整理:
由于Adreno图形驱动和Oculus运行时方面的改动,下面介绍的大多数功能都需要新发布的Build 7.0版本。
1. 多重采样抗锯齿(Multi-sampling Anti-aliasing;MSAA)
与PC显卡不同,移动芯片集的MSAA是由Tiler执行MASS操作,然后当Tile完成时进行解析(将所有子样本平均到最终像素),再将其结果存储到主存储器。由于从Tile内存到一般内存的带宽是非MSAA,这允许我们以接近与非MSAA相同的速度运行MSAA帧缓冲器。这对VR非常重要,因为每个眼睛的像素非常低,会产生明显的边缘锯齿。
对于GLES,这是通过使用MSAA帧缓冲区将其渲染到非MSAA纹理来完成。MSAA帧缓冲区使用以下函数进行初始化:glFramebufferTextureMultisampleMultiviewOVR
尽管有效,但由于其隐式性质,这引起了一系列的问题,例如“我不认为我的系统支持MSAA,我的纹理只是RGBA8888,我如何启用MSAA”。
在Vulkan中,由于一切都为显式。每个子通道由包含pColorAttachments,pDepthStencilAttachment和pResolveAttachments的vkSubpassDescription结构定义。一个优秀的Vulkan应用程序应该通过附着4x MSAA缓冲区来设置MSAA,并将其用于颜色/深度附件中的颜色和深度,以及pResolveAttachment中的非MSAA颜色缓冲区。应用程序同时应该将pColorAttachments和pDepthStencilAttachments storeOperations设置为VK_ATTACHMENT_STORE_OP_DONT_CARE。这将告诉驱动:“我以后不会要求这种颜色或深度,请不要将它们存储在Tile内存中并丢弃它们”。