关于Vulkan多视图(立体3D)功能的说明
我对Vulkan中的立体3D有一些困惑关于Vulkan多视图(立体3D)功能的说明,3d,vulkan,3d,Vulkan,我对Vulkan中的立体3D有一些困惑 VK_KHR_multiview有什么用途?如果我只使用计算着色器渲染图像,是否有必要显示3D视觉 必须启用哪些必要的扩展(设备和实例)才能显示三维图像?我需要查询和创建什么?按什么顺序 “多视口”物理设备功能的含义是什么 用于在单个渲染过程中显示来自同一组命令的两个视图,而不必设置两个渲染过程和两组命令。它通过附加到的pNext的扩展结构来实现这一点,特别是附加到的 这更清楚地解释了此扩展提供的功能: 当您将VkRenderPassMultiviewCr
pNext
的扩展结构来实现这一点,特别是附加到的
这更清楚地解释了此扩展提供的功能:
当您将VkRenderPassMultiviewCreateInfo
连接到
VkRenderPassCreateInfo
-您正在告诉Vulkan您想要
执行管道两次(或更多-取决于管道的数量)
查看在VkRenderPassMultiviewCreateInfo
中设置的遮罩,但我们正在讨论
关于虚拟现实)
这两次执行之间只有两个区别:
变量在每次运行时具有不同的值(0或1)-您可以将其用作制服的索引,以检索特定的摄影机 每只眼睛的矩阵gl_ViewIndex
- 渲染结果将转到附件的不同层(层0或层1)
VK\u KHR\u multiview
将不会真正起到帮助作用,除非您使用的是renderpass
从示例中,似乎需要以下扩展:
- 显然
设备扩展(通过VK\u KHR\u多视图
)VK\u KHR\u多视图扩展名
,用于VK\u KHR\u GET\u PHYSICAL\u DEVICE\u PROPERTIES\u 2\u EXTENSION\u NAME
(实例扩展)。这将启用多视图功能的查询李>VK\u KHR\u GET\u PHYSICAL\u DEVICE\u PROPERTIES 2
#extension GL_EXT_multiview : enable
要使用gl_ViewIndex
请参阅,以获取显示此属性的Sascha Willems着色器,请参阅以获取扩展文档
除此之外,您只需要渲染多个图像(如Saschas示例所示)。从最初的reddit帖子中可以看出,有多种方法可以实现这一点:
Sascha的演示将这两个层渲染为一个swapchain图像(
因为他使用单输出图像)
- 您可以类似地渲染它,但使用两个图像作为输出 附件-使用两个输出附件创建两个渲染过程, 使用纹理数组作为输入存储图像(或组合图像采样器) 如果要重新缩放结果)
- 您可以将结果从纹理数组复制到图像中
使用
或vkCmdCopyImage
(如果要重新缩放 结果)VKCMDBLTIMAGE
- 您可以创建两个别名为相同内存的
,该 图像阵列正在使用VkImages
multiViewport
指定是否支持多个视口。
如果未启用此功能:
- 的
和视口计数
成员剪刀计数
VkPipelineViewportStateCreateInfo结构必须设置为1
- 将
和firstViewport
参数添加到viewportCount
命令必须分别设置为0和1vkCmdSetViewport
- 将
和firstScissor
参数添加到scissorCount
命令必须分别设置为0和1vkCmdSetScissor
- 公司的
成员排他性ISSORCOUNT
结构必须为 设置为0或1VkPipelineViewportExclusiveScissorStateCreateInfoNV
- 将
和firstExclusiveSissor
参数添加到ExclusiveSissOrCount
命令必须设置为0和1, 分别vkCmdSetExclusiveScissorNV