0717-7821348
关于我们

500万彩票网完场即时比分

您现在的位置: 首页 > 关于我们 > 500万彩票网完场即时比分
如安在Oculus Mobile VR渠道进行Vulkan开发
2019-08-28 20:02:04

移动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内存中并丢掉它们”。

加分项是,MSAA色彩和深度缓冲区应该设置为瞬态,并且体系会慢悠悠地分配它们的内存,因为所述缓冲区乃至没有内存(仅有的是pResolveAttachment中的色彩解析附件)。下面是一个优异的管道状况示例:

运用这一途径(经过renderpass/subpass体系进行MSAA处理)而非vkCmdResolveImage途径十分重要。vkCmdResolveImage途径是一个以PC为中心的API,它不会运用Tiler在存储期间解析的才能,所以经过vkCmdResolveImage指令履行MSAA的引擎会将4x MSAA数据存储在内存中,再次从内存加载到Tiler ,然后将非MSAA解析回内存。这很简略就会给GPU增加3ms。

2. 多视图(Multiviw)

每次提交时,Multiview这个扩展答应GPU驱动程序在纹路数组的N个不同的切片(slice)履行N次制作调用。它在VR中经过单次制作调用来在2-deep纹路阵列制作左眼和右眼。Vulkan经过VK_KHR_Multiview扩展供给支撑。它需求色彩,深度和解析图画为2D Array而非2D,并且需求将VkRenderPassMultiviewCreateInfo结构增加到要经过Multiview履行的烘托通道。它(在UE4.23进行了测验)支撑多个子通道。renderdoc管道状况图片(与上面相同)展现了具有2个视图的多视图捕获(一个用于左眼,一个用于右眼)。

Vk植物大战僵尸全明星RenderPassMultiviewCreateInfo有一个pViewMasks参数,其要求对多视图的视图数进行按位掩码。如安在Oculus Mobile VR渠道进行Vulkan开发关于viewMask[0]值为0b11,双视图体系要求bit0和bit1为真。

咱们的运转时自身支撑纹路数组作为时刻歪曲组成的输入纹路。开发者应该运用VRAPI_TEXTURE_TYPE_2D_ARRAY枚举创立纹路,而非烘托到多视图缓冲区,然后再手动将它们复制到非多视图图画并发送到VRAPI(核算要求十分高)。

3. 固定注视点烘托(Fixed Fove如安在Oculus Mobile VR渠道进行Vulkan开发ated Rendering;FFR)

从开发者的视点来看,因为两个FFR API之间存在较大的架构差异,所以GL和Vulkan之间的FFR十分不同。从概念上讲,FFR是一种运用于帧缓冲区的烘托设置,因为它会修正GPU核算帧的办法,一同不会以任何办法影响纹路(不管发作什么,色彩和深度纹路中的全部纹素都会被填充)。

实际上,来自QCOM的原始FFR扩展应该经过glFramebufferFoveationConfigQCOM函数运用于帧缓冲区,而厚道说它应该存在于API中。但关于Oculus Go,咱们期望在无需深化的引擎/运用改动的景象下引进这项功用。更重要的是,咱们期望运转时操控运用的注视点设置,这样咱们就不需求每位开发者和引擎来操控FFR设置,并且整个渠道上都会具有同类设置。所以,咱们要求QCOM在色彩纹路中存储FFR元数据(由咱们操控,因为运转时分配纹路而非帧缓冲区),因而诞生了glTextureFoveationParametersQCOM。从开发者的视点来看,这个完成在很大程度上是躲藏在运转时中。开发者恳求FFR等级(封闭/低/中/高),而咱们主动为他们装备更低的等级。

虽然这个解决方案为Go和Quest带来了适当大的协助,但它却面临着多重应战。首要,因为它是依据VRAPI修正色彩纹路元数据,所以每个预通道(不会烘托到色彩纹路中)都不是依据注视点进行。现在没有太大问题,因为咱们的大多数运用程序都是单通道,但状况总是会发作改动,因为开发者期望启用(例如)HDR管道。其次,QCOM有一个硬编码的注视点功用模型,它不答应咱们依据视场和透镜来挑选咱们实在想要的分辨率曲线。

经过引进VK_EXT_fragment_density_map扩展,Vulkan彻底修正了这个问题。需求注视点烘托的运用程序烘托通道不是选用硬编码方程式,而是增加另一个图画附件。它不是写入附件,而是读取附件。这个附件是一个R8G8像素密度图画,与一般附件比较(12161344烘托通道将具有3842片段密度附件),其分辨率为/32并驱动应该烘托的帧缓冲区域的分辨率。

下面是一个片段密度图画示例。黄色区域是咱们1:1的高分辨率区域,离屏幕中心越来越远,像素密度将越来越小。

虽然上图纹路有一种注视点的形状,但这种纹路可所以你想要的形状。例如,假如敞开国际游戏的开发者不太乐意花费太多时刻,他们彻底能够削减天空的有用分辨率。关于以方程式为中心的GL扩展,这是彻底不可能的作业。纹路一同能够绑定到任何烘托通道,所以双通道HDR-LDR烘托器的开发者能够简略地绑定两个烘托通道中的纹路,并将FFR运用于两者。

考虑到咱们仍是期望保持VrDriver对注视点曲线的操控,但rendepass是彻底由运用程序操控,所以咱们终究选用了混合办法。当开发者创立交流链来从Vulkan中的Oculus运转时获取色彩纹路时,它会创立另一个交流链:注视点交流链,其间色彩交流链的索引0与注视点交流链的索引0匹配,依此类推。开发者能够经过新的vrapi_GetTextureSwapChainBufferFoveationVulkan函数恳求注视点交流链图画,并且无需对其进行任何修正,只需将它们绑定到自己想要启用FFR的烘托通道即可。

当运用一般的FFR操控API时,咱们的运转时将修正注视点交流链图画并生成一个注视点图画,其强度与开发者恳求的设置相对应。上图示例是运转时为High注视点设置生成的注视点图画。假如引擎没有任何进一步的改变,图画将主动切换注视点曲线,下一个renderpass的履行将运用新的FFR设置,就像开发者运用OpenGLES的FFR扩展相同。

4. 东西

Vulkan的一大优势是它是PC和Mobile同享的图形API。最重要的是,它是一个无状况API,这意味着驱动程序不需求在指令之间存储根底状况。这极大地协助了像RenderDoc这样的东西。它支撑MSAA,Multiview,VK_EXT_fragment_density_map,并且自RenderDoc 1.4起就能够合作Oculus Quest一同运用。片段密度贴图纹路能够在RenderDoc中可视化,然后保证你取得自己想要的注视点图画,并且帧将包括注视点图画,所以你能够看到头显中的实在纹路输出。

5. 引擎

Oculus 4.22.2 release 1.39.0是咱们主张用于Vulkan开发的首个UE4版别。它完成了MSAA,Multiviw,FFR,sRGB原生烘托和多个UE4-Vulkan缝隙修正。留意,要在GitHub中拜访所述文件,你需求登录订阅账号,不然你将会看到404过错页面。

咱们看到了适当不错的功用增益,一个SunTemple的开发版别在烘托线程上从16ms变成了13sm。别的,因为着色器是SPIRV预编译而非GLSL,加载速度有了明显的提高。

不只仅仅速度,Vulkan优化的规划和固有的多线程处理答应咱们完成GLES所无法支撑的功用,如引擎内每帧定时器查询。stat unit中的GPU定时器数据现在现已可用,并由引擎生成的计时器查询驱动,不再是从运转时传回的均匀数据,并且stat gpu为你供给逐烘托通道信息。Vulkan一同答应咱们能够开端考虑未来的理论功用,如依据子通道的HDR,多线程着色器加载,简略的色彩映射等等。

虽然咱们发现这一版别和最新的Quest操作体系就Vulkan而言适当安稳,但对UE4-Vulkan-VR来说仍然是前期阶段,所以假如你遇到任何问题,请向咱们陈述反应。

6. 示例

Oculus Mobile样本目录中的VrCubeWorld_Vulkan样本现在现已完成了全部这些功用,你能够进行参看并从中获取创意。

7. 总结

期望这篇文章能够为你当时的Vulkan图形开发作业带来协助,或许假如你是原生开发者或UE4开发者,期望这篇文章能够鼓舞你测验运用Vulkan。除了答应你在PC和移动渠道之间轻松同享代码之外,它一同能够令你的图形代码作业更明晰,更快速。

假如您也认同,打赏支撑下作者吧
打赏
0人打赏
果叔
程老板
挑选付出金额
1元 2元 5元 如安在Oculus Mobile VR渠道进行Vulkan开发
挑选付出办法
金币 微信 付出宝
打赏成功

感谢您对87870的支撑