首页 / 专利库 / 工业自动化和数控机床 / 坐标系 / 用于渲染立体视觉全景图像的实时系统和方法

用于渲染立体视觉全景图像的实时系统和方法

阅读:109发布:2023-03-10

专利汇可以提供用于渲染立体视觉全景图像的实时系统和方法专利检索,专利查询,专利分析的服务。并且一种用于 渲染 立体视觉 全景图的系统和方法。例如,在一个 实施例 中,针对全景图像生成几何图元的 顶点 。几何图元的顶点被存储在3D 坐标系 中。顶点处理器确定全景图像中的顶点的每个的、等效于纬度和经度坐标的最终 位置 。渲染引擎根据顶点的每个的最终位置渲染全景图像。,下面是用于渲染立体视觉全景图像的实时系统和方法专利的具体信息内容。

1.一种方法,包括:
接收3D坐标系中的几何图元的顶点
确定全景图像中所述顶点的每个的、等效于纬度和经度坐标的最终位置;以及根据所述顶点的每个的所述最终位置来渲染所述全景图像。
2.如权利要求1所述的方法,其中实现反向射线投射技术以执行确定所述最终位置的操作。
3.如权利要求1或2所述的方法,还包括:
基于从左虚拟相机投射出的第一射线来确定一个或多个纬度度和经度角度的集合,所述左虚拟相机要与虚拟立体相机上的右虚拟相机和虚拟中心相机组合。
4.如权利要求3所述的方法,还包括:
使用纬度和经度角度的所述集合旋转所述虚拟中心相机;以及
基于从虚拟中心相机投射的第二射线与用于所述全景图像的立方体图表示的立方体图平面的交叉来确定第一归一化装置坐标(NDC)。
5.如权利要求4所述的方法,还包括:
通过所述经度角度的一个或多个来旋转所述立体相机位置以确定当前立体相机位置;
以及
基于所确定的立体相机位置来确定第二NDC。
6.如权利要求5所述的方法,其中所述第一NDC包括X和Y NDC,并且其中所述第二NDC包括Z和W NDC。
7.如权利要求2或6所述的方法,其中所述反向射线投射技术包括给定射线穿过的场景中的点,确定所述射线的初始方向或纬度/经度角度。
8.一种机器可读介质,具有存储在其上的程序代码,所述程序代码当由机器执行时,使所述机器执行以下操作:
接收3D坐标系中的几何图元的顶点;
确定全景图像中所述顶点的每个的、等效于纬度和经度坐标的最终位置;以及根据所述顶点的每个的所述最终位置来渲染所述全景图像。
9.如权利要求8所述的机器可读介质,其中实现反向射线投射技术以执行确定所述最终位置的操作。
10.如权利要求8或9所述的机器可读介质,还包括使所述机器执行以下操作的程序代码:
基于从左虚拟相机投射出的第一射线来确定一个或多个纬度角度和经度角度的集合,所述左虚拟相机要与虚拟立体相机上的右虚拟相机和虚拟中心相机组合。
11.如权利要求10所述的机器可读介质,还包括使所述机器执行以下操作的程序代码:
使用纬度和经度角度的所述集合旋转所述虚拟中心相机;以及
基于从虚拟中心相机投射的第二射线与用于所述全景图像的立方体图表示的立方体图平面的交叉来确定第一归一化装置坐标(NDC)。
12.如权利要求11所述的机器可读介质,还包括使所述机器执行以下操作的程序代码:
通过所述经度角度的一个或多个来旋转所述立体相机位置以确定当前立体相机位置;
以及
基于所确定的立体相机位置确定第二NDC。
13.如权利要求12所述的机器可读介质,其中所述第一NDC包括X和Y NDC,并且其中所述第二NDC包括Z和W NDC。
14.如权利要求9或13所述的机器可读介质,其中所述反向射线投射技术包括给定射线穿过的场景中的点,确定所述射线的初始方向或纬度/经度角度。
15.一种图形处理设备,包括:
存储装置,用于存储3D坐标系中的几何图元的顶点;
顶点处理器,用于确定全景图像中的所述顶点的每个的、等效于纬度和经度坐标的最终位置;以及
渲染引擎,用于根据所述顶点的每个的所述最终位置渲染所述全景图像。
16.如权利要求15所述的图形处理设备,其中实现反向射线投射技术以执行确定所述最终位置的操作。
17.如权利要求15或16所述的图形处理设备,其中所述顶点处理器要基于从左虚拟相机投射出的第一射线来确定一个或多个纬度角度和经度角度的集合,所述左虚拟相机要与虚拟立体相机上的右虚拟相机和虚拟中心像机组合。
18.如权利要求17所述的图形处理设备,其中所述顶点处理器还要:
使用纬度和经度角度的所述集合旋转所述虚拟中心相机;以及
基于从虚拟中心相机投射的第二射线与用于所述全景图像的立方体图表示的立方体图平面的交叉,确定第一归一化装置坐标(NDC)。
19.如权利要求18所述的图形处理设备,其中所述顶点处理器还要:
通过所述经度角度的一个或多个来旋转所述立体相机位置以确定当前立体相机位置;
以及
基于所确定的立体相机位置来确定第二NDC。
20.如权利要求19所述的图形处理设备,其中所述第一NDC包括X和Y NDC,并且其中所述第二NDC包括Z和W NDC。
21.如权利要求16或20所述的图形处理设备,其中所述反向射线投射技术包括给定射线穿过的场景中的点,确定所述射线的初始方向或纬度/经度角度。
22.一种设备,包括:
用于接收3D坐标系中的几何图元的顶点的部件;
用于确定全景图像中所述顶点的每个的、等效于纬度和经度坐标的最终位置的部件;
以及
用于根据所述顶点的每个的所述最终位置来渲染所述全景图像的部件。
23.如权利要求22所述的设备,其中实现反向射线投射技术以执行确定所述最终位置的操作。
24.如权利要求22或23所述的设备,还包括:
用于基于从左虚拟相机投射出的第一射线来确定一个或多个纬度角度和经度角度的集合的部件,所述左虚拟相机要与虚拟立体相机上的右虚拟相机和虚拟中心相机组合。
25.如权利要求24所述的设备,还包括:
用于使用纬度和经度角度的所述集合旋转所述虚拟中心相机的部件;以及用于基于从虚拟中心相机投射的第二射线与用于所述全景图像的立方体图表示的立方体图平面的交叉来确定第一归一化装置坐标(NDC)的部件。
26.如权利要求25所述的设备,还包括:
用于通过所述经度角度的一个或多个来旋转所述立体相机位置以确定当前立体相机位置的部件;以及
用于基于所确定的立体相机位置来确定第二NDC的部件。
27.如权利要求26所述的设备,其中所述第一NDC包括X和Y NDC,并且其中所述第二NDC包括Z和W NDC。
28.如权利要求23或27所述的设备,其中所述反向射线投射技术包括给定射线穿过的场景中的点,确定所述射线的初始方向或纬度/经度角度。

说明书全文

用于渲染立体视觉全景图像的实时系统和方法

技术领域

[0001] 本发明一般涉及计算机处理器领域。更具体地,本发明涉及用于 渲染立体视觉全景图像的设备和方法。
[0002] 相关技术的描述
[0003] 全360°全景图像是完全覆盖绕相机的区域的图像,包含360° 平视场和180°垂直视场。为了使用此类图像,需要将其用作围绕 相机的球体的纹理的特殊观看器。此类图像通常被称为“球面全景图” 或有时称为“处于等矩形(Equirectangular)格式的全景图像”。附图说明
[0004] 从结合以下附图的以下详细描述中可以获得本发明的更好的理 解,其中:
[0005] 图1是具有处理器(其具有一个或多个处理器核和图形处理器) 的计算机系统实施例框图
[0006] 图2是具有一个或多个处理器核、集成存储器控制器和集成图形 处理器的处理器的一个实施例的框图。
[0007] 图3是可以是分立图形处理单元或者可以是与多个处理核集成的 图形处理器的图形处理器的一个实施例的框图。
[0008] 图4是图形处理器的图形处理引擎的实施例的框图。
[0009] 图5是图形处理器的另一实施例的框图。
[0010] 图6是包含处理元件阵列的线程执行逻辑的框图。
[0011] 图7示出了根据实施例的图形处理器执行单元指令格式。
[0012] 图8是包含图形流水线、媒体流水线、显示引擎、线程执行逻辑 和渲染输出流水线的图形处理器的另一实施例的框图。
[0013] 图9A是示出根据实施例的图形处理器命令格式的框图。
[0014] 图9B是示出根据实施例的图形处理器命令序列的框图。
[0015] 图10示出了根据实施例的用于数据处理系统的示范图形软件架 构。
[0016] 图11示出了根据实施例的示范IP核开发系统,其可以用于制造 执行操作的集成电路
[0017] 图12示出了根据实施例的示范片上系统集成电路,其可以使用 一个或多个IP核来制作。
[0018] 图13示出了片上系统集成电路(其可以使用一个或多个IP核来 制作)的示范图形处理器。
[0019] 图14示出了片上系统集成电路(其可以使用一个或多个IP核来 制作)的附加示范图形处理器。
[0020] 图15A-C示出了具有多个图形引擎/流水线的本发明的不同实施 例;
[0021] 图16示出了在一个或多个流水线阶段上执行中央窝控制 (foveation control)的一个实施例;
[0022] 图17示出了根据本发明的一个实施例执行的时间弯曲(time warping);
[0023] 图18A-B分别示出球面全景图的示例以及它通过观看器看起来 如何;
[0024] 图19示出了示例立方体图;
[0025] 图20示出了示例等矩形图像;
[0026] 图21A-B示出了示例等矩形投射;
[0027] 图22示出了用于从纬度/经度获得射线的示例计算;
[0028] 图23示出了从立方体图获得的全景图的示例;
[0029] 图24示出了可以如何卷绕立方体图;
[0030] 图25A-B示出了立体渲染示例;
[0031] 图26A-C示出了正视差、负视差和零视差;
[0032] 图27A-C示出了示例相机位置
[0033] 图28A-C示出了对于左和右眼(具有在它们之间的垂直移位)两 次采用立体视觉技术的实现;
[0034] 图29A-B示出了示例射线追踪特征;
[0035] 图30A示出了综合渲染的示例;
[0036] 图30B示出了用于获得左相机的全景图像的示例设置;
[0037] 图30C示出全景图像的结果;
[0038] 图31示出了不提供完全全景覆盖的示例;
[0039] 图32示出了得到的全景图像;
[0040] 图33A-B示出了具有对平截头体位置的调整的覆盖;
[0041] 图34示出了图像中的锯齿状伪影;
[0042] 图35A-B示出了涡旋(swirling)伪影的示例;
[0043] 图36A-B示出了用于相机的立体设置的示例;
[0044] 图37A-B示出了示例无解决方案区域;
[0045] 图38A示出了可以如何获得归一化装置坐标;
[0046] 图38B示出了与前立方体平面交叉的中心相机射线;
[0047] 图39A-B示出了相同全景图的左和右图像的示例;
[0048] 图40A-C示出了失真修复片段着色器的一个示例;以及
[0049] 图41示出了用于捕获全景图像的示例相机设置。

具体实施方式

[0050] 在以下描述中,出于解释的目的,阐述了许多特定细节以便提供 下面描述的本发明的实施例的透彻理解。然而,对于本领域技术人员 将显而易见的是,可以在没有这些特定细节中的一些细节的情况下实 践本发明的实施例。在其它实例中,以框图形式示出了公知的结构和 装置,以避免模糊本发明的实施例的基本原理。
[0051] 示范图形处理器架构和数据类型
[0052] 系统概览
[0053] 图1是根据实施例的处理系统100的框图。在各种实施例中,系 统100包含一个或多个处理器102和一个或多个图形处理器108,并 且可以是单处理器桌上型系统、多处理器工作站系统或者具有大量处 理器102或处理器核107的服务器系统。在一个实施例中,系统100 是结合在片上系统(SoC)集成电路内以供移动、手持或嵌入式装置 使用的处理平台。
[0054] 系统100的实施例可以包括基于服务器的游戏平台、游戏控制台, 其包括游戏与媒体控制台、移动游戏控制台、手持式游戏控制台或在 线游戏控制台,或被结合于它们内。在一些实施例中,系统100是移 动电话、智能电话、平板计算装置或移动互联网装置。数据处理系统 100还可以包括可穿戴装置(诸如智能手表可穿戴装置、智能眼镜装 置、增强现实装置或虚拟现实装置)、与所述可穿戴装置耦合、或者 集成在所述可穿戴装置内。在一些实施例中,数据处理系统100是电 视或机顶盒装置,所述电视或机顶盒装置具有一个或多个处理器102 以及由一个或多个图形处理器108生成的图形界面。
[0055] 在一些实施例中,所述一个或多个处理器102每个包括用于处理 指令的一个或多个处理器核107,所述指令在被执行时实行用于系统 和用户软件的操作。在一些实施例中,所述一个或多个处理器核107 中的每个配置成处理特定的指令集109。在一些实施例中,指令集109 可以促进复杂指令集计算(CISC)、精简指令集计算(RISC)、或经 由超长指令字(VLIW)的计算。多个处理器核107可以每个处理不 同的指令集109,所述指令集109可以包括用于促进对其他指令集的 仿真的指令。处理器核107还可以包括其他处理装置,诸如数字信号 处理器(DSP)。
[0056] 在一些实施例中,处理器102包括高速缓冲存储器104。取决于 架构,处理器102可以具有单个内部高速缓存或多个内部高速缓存级 别。在一些实施例中,在处理器102的各种部件之间共享高速缓冲存 储器。在一些实施例中,处理器102还使用外部高速缓存(例如,3 级(L3)高速缓存或末级高速缓存(LLC))(未示出),可以使用 已知的高速缓存一致性技术在处理器核107之间共享所述外部高速缓 存。寄存器堆106被附加地包括在处理器102中,其可以包括用于存 储不同类型的数据的不同类型的寄存器(例如,整数寄存器、浮点寄 存器、状态寄存器、和指令指针寄存器)。一些寄存器可以是通用寄 存器,而其他寄存器可以特定于处理器102的设计。
[0057] 在一些实施例中,处理器102与处理器总线110耦合以在处理器 102与系统100中的其他部件之间传输通信信号,诸如地址、数据、 或控制信号。在一个实施例中,系统100使用示范‘中枢’系统架构, 包括存储器控制器中枢116和输入输出(I/O)控制器中枢130。存储 器控制器中枢116促进存储器装置与系统100的其他部件之间的通 信,而I/O控制器中枢(ICH)130经由本地I/O总线提供到I/O装置 的连接。在一个实施例中,存储器控制器中枢116的逻辑集成在处理 器内。
[0058] 存储器装置120可以是动态随机存取存储器(DRAM)装置、静 态随机存取存储器(SRAM)装置、闪存装置、相变存储器装置、或 具有合适的性能以充当进程存储器的某个其他存储器装置。在一个实 施例中,存储器装置120可作为系统100的系统存储器进行操作,以 存储数据122和指令121供在所述一个或多个处理器102执行应用或 进程时使用。存储器控制器中枢116还与可选的外部图形处理器112 耦合,所述可选的外部图形处理器112可以与处理器102中的所述一 个或多个图形处理器108通信以执行图形和媒体操作。
[0059] 在一些实施例中,ICH 130使得外围装置能够经由高速I/O总线 连接至存储器装置120和处理器102。I/O外围装置包括但不限于音频 控制器146、固件接口128、无线收发机126(例如,Wi-Fi、蓝牙)、 数据存储装置124(例如,硬盘驱动器、闪存等)、以及用于将传统 (例如,个人系统2(PS/2))装置耦合至该系统的传统I/O控制器 140。一个或多个通用串行总线(USB)控制器142连接输入装置,诸 如键盘鼠标144组合。网络控制器134还可以与ICH 130耦合。在 一些实施例中,高性能网络控制器(未示出)与处理器总线110耦合。 将领会,所示出的系统100是示范的而非限制性的,因为还可以使用 不同地配置的其他类型的数据处理系统。例如,I/O控制器中枢130 可以集成在所述一个或多个处理器102内,或者存储器控制器中枢116 和I/O控制器中枢130可以集成到分立的外部图形处理器(诸如外部 图形处理器112)中。
[0060] 图2是处理器200的实施例的框图,其具有一个或多个处理器核 202A-202N、集成存储器控制器214、以及集成图形处理器208。图2 的具有与本文中的任何其他图的元件相同的参考号(或名称)的那些 元件可以以与在本文中的其他地方描述的方式类似的任何方式进行 操作或起作用,但不限于这样。处理器200可以包括多达且包括由虚 线表示的附加核202N的附加核。处理器核202A-202N中的每个包 括一个或多个内部高速缓存单元204A-204N。在一些实施例中,每个 处理器核还能够访问一个或多个共享高速缓存单元
206。
[0061] 内部高速缓存单元204A-204N和共享高速缓存单元206表示处理 器200内的高速缓冲存储器层级结构。高速缓冲存储器层级结构可以 包括每个处理器核内的至少一级指令和数据高速缓存以及一级或多 级共享中级高速缓存,诸如2级(L2)、3级(L3)、4级(L4)、 或其他级的高速缓存,其中在外部存储器之前的最高级的高速缓存被 分类为LLC。在一些实施例中,高速缓存一致性逻辑维持各种高速缓 存单元206与204A-204N之间的一致性。
[0062] 在一些实施例中,处理器200还可以包括系统代理核210和一个 或多个总线控制器单元216的集合。所述一个或多个总线控制器单元 216管理一组外围总线,诸如一个或多个外围部件互连总线(例如, PCI、PCI Express)。系统代理核210提供针对各种处理器部件的管 理功能。在一些实施例中,系统代理核210包括一个或多个集成存储 器控制器214,用于管理对(未示出的)各种外部存储器装置的访问。
[0063] 在一些实施例中,处理器核202A-202N中的一个或多个包括对进 行同步多线程的支持。在此类实施例中,系统代理核210包括用于在 多线程处理期间协调和操作处理器核202A-202N的部件。系统代理核 210可以附加地包括功率控制单元(PCU),所述功率控制单元包括 用于调节处理器核202A-202N以及图形处理器208的功率状态的逻辑 和部件。
[0064] 在一些实施例中,处理器200附加地包括用于执行图形处理操作 的图形处理器208。在一些实施例中,图形处理器208与一组共享高 速缓存单元206和系统代理核210耦合,所述系统代理核210包括所 述一个或多个集成存储器控制器214。在一些实施例中,显示控制器 211与图形处理器208耦合以将图形处理器输出驱动到一个或多个耦 合的显示器。在一些实施例中,显示控制器211可以是经由至少一个 互连与图形处理器耦合的单独模块,或者可以集成在图形处理器208 或系统代理核210内。
[0065] 在一些实施例中,基于环的互连单元212用于耦合处理器200的 内部部件。然而,可以使用替代的互连单元,诸如点对点互连、切换 式互连、或其他技术,包括本领域中公知的技术。在一些实施例中, 图形处理器208经由I/O链路213与环形互连212耦合。
[0066] 示范I/O链路213表示多种I/O互连中的至少一种,包括促进各 种处理器部件与高性能嵌入式存储器模块218(诸如eDRAM模块) 之间的通信的封装上I/O互连。在一些实施例中,处理器核202A-202N 中的每个处理器核以及图形处理器208将嵌入式存储器模块218用作 共享的末级高速缓存。
[0067] 在一些实施例中,处理器核202A-202N是执行相同指令集架构的 同构核。在另一实施例中,处理器核202A-202N在指令集架构(ISA) 方面是异构的,其中处理器核202A-202N中的一个或多个执行第一指 令集,而其他核中的至少一个执行第一指令集的子集或不同的指令 集。在一个实施例中,处理器核202A-202N在微架构方面是异构的, 其中具有相对较高功率消耗的一个或多个核与具有较低功率消耗的 一个或多个功率核耦合。另外,处理器200可以被实现在一个或多个 芯片上或者被实现为除其他部件之外还具有所示出的部件的SoC集 成电路。
[0068] 图3是图形处理器300的框图,所述图形处理器300可以是分立 的图形处理单元、或者可以是与多个处理核一起集成的图形处理器。 在一些实施例中,图形处理器经由到图形处理器上的寄存器的存储器 映射的I/O接口并且利用被放置到处理器存储器中的命令进行通信。 在一些实施例中,图形处理器300包括用于访问存储器的存储器接口 314。存储器接口314可以是到本地存储器、一个或多个内部高速缓 存、一个或多个共享外部高速缓存、和/或到系统存储器的接口。
[0069] 在一些实施例中,图形处理器300还包括用于将显示输出数据驱 动到显示装置320的显示控制器302。显示控制器302包括用于显示 器的一个或多个重叠平面的硬件以及多层视频或用户界面元素的组 成。在一些实施例中,图形处理器300包括用于对媒体进行编码、解 码或者向一个或多个媒体编码格式、从一个或多个媒体编码格式或在 一个或多个媒体编码格式之间对媒体进行转码的视频编解码器引擎 306,所述一个或多个媒体编码格式包括但不限于运动图像专家组 (MPEG)格式(诸如MPEG-2)、高级视频编码(AVC)格式(诸 如H.264/MPEG-4AVC)、以及电影&电视工程师协会(SMPTE)421 M/VC-1和联合图像专家组(JPEG)格式(诸如JPEG、以及运动JPEG (MJPEG)格式)。
[0070] 在一些实施例中,图形处理器300包括用于执行包括例如位边界 块传送的二维(2D)光栅化器操作的块图像传送(BLIT)引擎304。 然而,在一个实施例中,使用图形处理引擎(GPE)310的一个或多 个部件执行2D图形操作。在一些实施例中,GPE 310是用于执行图 形操作的计算引擎,所述图形操作包括三维(3D)图形操作和媒体操 作。
[0071] 在一些实施例中,GPE 310包括用于执行3D操作的3D流水线 312,所述3D操作诸如使用对3D图元形状(例如,矩形、三形等) 起作用的处理功能来渲染三维图像和场景。3D流水线312包括可编 程且固定的功能元件,所述可编程且固定的功能元件执行元件内的各 种任务和/或向3D/媒体子系统315大量产生执行线程。虽然3D流水 线312可以用于执行媒体操作,但是GPE 310的实施例还包括媒体流 水线316,所述媒体流水线316特别地用于执行媒体操作,诸如视频 后处理和图像增强。
[0072] 在一些实施例中,媒体流水线316包括固定功能或可编程逻辑单 元,以代替、或代表视频编解码器引擎306来执行一个或多个专的 媒体操作,诸如视频解码加速、视频解交织、以及视频编码加速。在 一些实施例中,媒体流水线316附加地包括线程大量产生单元以大量 产生用于在3D/媒体子系统315上执行的线程。所大量产生的线程为 在3D/媒体子系统315中所包括的一个或多个图形执行单元上的媒体 操作执行计算。
[0073] 在一些实施例中,3D/媒体子系统315包括用于执行通过3D流水 线312和媒体流水线316大量产生的线程的逻辑。在一个实施例中, 流水线向3D/媒体子系统315发送线程执行请求,所述3D/媒体子系 统315包括用于仲裁各种请求并将各种请求分派到可用的线程执行资 源的线程分派逻辑。执行资源包括用于处理3D和媒体线程的图形执 行单元的阵列。在一些实施例中,3D/媒体子系统315包括用于线程 指令和数据的一个或多个内部高速缓存。在一些实施例中,所述子系 统还包括共享存储器(包括寄存器和可寻址存储器)以在线程之间共 享数据和存储输出数据。
[0074] 图形处理引擎
[0075] 图4是依照一些实施例的图形处理器的图形处理引擎410的框 图。在一个实施例中,图形处理引擎(GPE)410是图3中示出的GPE 310的一个版本。图4的具有与本文中的任何其他图的元件相同的参 考号(或名称)的元件可以以与在本文中的其他地方描述的方式类似 的任何方式进行操作或起作用,但不限于这样。例如,示出了图3的3D流水线312和媒体流水线316。媒体流水线316在GPE 410的一些 实施例中是可选的,并且可能没有显式地包括在GPE 410内。例如并 且在至少一个实施例中,单独的媒体和/或图像处理器被耦合至GPE 410。
[0076] 在一些实施例中,GPE 410与命令流送器403耦合或包括命令流 送器403,所述命令流送器403向3D流水线312和/或媒体流水线316 提供命令流。在一些实施例中,命令流送器403与存储器耦合,所述 存储器可以是系统存储器、或内部高速缓冲存储器和共享高速缓冲存 储器中的一个或多个。在一些实施例中,命令流送器403从存储器接 收命令并将命令发送至3D流水线312和/或媒体流水线316。所述命 令是从存储用于3D流水线312和媒体流水线316的命令的环形缓冲 器获取的指示。在一个实施例中,环形缓冲器另外可以包括存储多个 命令的批次的批命令缓冲器。用于3D流水线312的命令还可以包括 对存储器中存储的数据的引用,所述数据诸如但不限于用于3D流水 线312的顶点和几何数据和/或用于媒体流水线316的图像数据和存储 器对象。3D流水线312和媒体流水线316通过经由相应流水线内的 逻辑来执行操作或者通过将一个或多个执行线程分派至图形核阵列 414而处理命令和数据。
[0077] 在各种实施例中,3D流水线312可以通过处理指令并将执行线 程分派给图形核阵列414来执行一个或多个着色器程序,诸如顶点着 色器、几何着色器、像素着色器、片段着色器、计算着色器或其他着 色器程序。图形核阵列414提供统一的执行资源块。图形核阵列414 内的多用途执行逻辑(例如,执行单元)包括对各种3D API着色器 语言的支持,并且可以执行与多个着色器相关联的多个同时的执行线 程。
[0078] 在一些实施例中,图形核阵列414还包括用于执行诸如视频和/ 或图像处理之类的媒体功能的执行逻辑。在一个实施例中,除了图形 处理操作之外,执行单元附加地包括可编程以执行并行通用计算操作 的通用逻辑。通用逻辑可以与图1的(一个或多个)处理器核107或 如图2中的核202A-202N内的通用逻辑并行地或结合地执行处理操 作。
[0079] 由在图形核阵列414上执行的线程生成的输出数据可以将数据输 出到统一返回缓冲器(URB)418中的存储器。URB 418可以为多个 线程存储数据。在一些实施例中,URB 418可以用于在图形核阵列414 上执行的不同线程之间发送数据。在一些实施例中,URB 
418可以另 外用于共享功能逻辑420内的固定功能逻辑与图形核阵列上的线程之 间的同步。
[0080] 在一些实施例中,图形核阵列414是可缩放的,使得所述阵列包 括可变数量的图形核,每个具有基于GPE 410的目标功率和性能级别 的可变数量的执行单元。在一个实施例中,执行资源是动态可缩放的, 使得可以根据需要来启用或禁用执行资源。
[0081] 图形核阵列414与共享功能逻辑420耦合,所述共享功能逻辑420 包括在图形核阵列中的图形核之间共享的多个资源。共享功能逻辑 420内的共享功能是向图形核阵列414提供专门的补充功能的硬件逻 辑单元。在各种实施例中,共享功能逻辑420包括但不限于采样器421、 数学422和线程间通信(ITC)423逻辑。另外,一些实施例实现共享 功能逻辑420内的一个或多个高速缓存425。在针对给定的专门的功 能的需求不足以包含在图形核阵列414内的情况下实现共享功能。替 代地,该专门的功能的单个例示被实现为共享功能逻辑420中的独立 实体并且在图形核阵列414内的执行资源之间共享。在图形核阵列414 之间共享并被包括在图形核阵列414内的一组精确的功能在实施例之 间变化。
[0082] 图5是图形处理器500的另一实施例的框图。图5的具有与本文 中的任何其他图的元件相同的参考号(或名称)的元件可以以与在本 文中的其他地方描述的方式类似的任何方式进行操作或起作用,但不 限于这样。
[0083] 在一些实施例中,图形处理器500包括环形互连502、流水线前 端504、媒体引擎537、以及图形核580A-580N。在一些实施例中, 环形互连502将图形处理器耦合至其他处理单元,所述其他处理单元 包括其他图形处理器或者一个或多个通用处理器核。在一些实施例 中,图形处理器是集成在多核处理系统内的许多处理器中的一个。
[0084] 在一些实施例中,图形处理器500经由环形互连502接收多批命 令。传入命令由流水线前端504中的命令流送器503来解译。在一些 实施例中,图形处理器500包括用于经由(一个或多个)图形核 580A-580N执行3D几何处理和媒体处理的可缩放的执行逻辑。对于 3D几何处理命令,命令流送器503将命令供应至几何流水线536。针 对至少一些媒体处理命令,命令流送器503将命令供应至视频前端 534,所述视频前端534与媒体引擎537耦合。在一些实施例中,媒 体引擎537包括用于视频和图像后处理的视频质量引擎(VQE)530 以及用于提供硬件加速的媒体数据编码和解码的多格式编码/解码 (MFX)533引擎。在一些实施例中,几何流水线536和媒体引擎537 各自针对由至少一个图形核580A提供的线程执行资源生成执行线 程。
[0085] 在一些实施例中,图形处理器500包括以模块化核580A-580N(有 时被称为核切片)为特色的可缩放的线程执行资源,所述模块化核 580A-580N中的每个具有多个子核550A-550N、560A-560N(有时被 称为核子切片)。在一些实施例中,图形处理器500可以具有任何数 量的图形核580A至580N。在一些实施例中,图形处理器500包括图 形核580A,所述图形核580A至少具有第一子核550A和第二子核 560A。在其他实施例中,图形处理器是具有单个子核(例如,550A) 的低功率处理器。在一些实施例中,图形处理器500包括多个图形核 
580A-580N,每个包括一组第一子核550A-550N和一组第二子核 560A-560N。该组第一子核
550A-550N中的每个子核至少包括第一组 执行单元552A-552N和媒体/纹理采样器554A-
554N。该组第二子核560A-560N中的每个子核至少包括第二组执行单元562A-562N和采样 器564A-564N。在一些实施例中,每个子核550A-550N、560A-560N 共享一组共享资源570A-
570N。在一些实施例中,所述共享资源包括 共享高速缓冲存储器和像素操作逻辑。其他共享资源也可以被包括在 图形处理器的各种实施例中。
[0086] 执行单元
[0087] 图6示出了线程执行逻辑600,所述线程执行逻辑600包括在GPE 的一些实施例中采用的处理元件的阵列。图6的具有与本文中的任何 其他图的元件相同的参考号(或名称)的元件可以以与在本文中的其 他地方描述的方式类似的任何方式进行操作或起作用,但不限于这 样。
[0088] 在一些实施例中,线程执行逻辑600包括着色器处理器602、线 程分派器604、指令高速缓存606、包括多个执行单元608A-608N的 可缩放的执行单元阵列、采样器610、数据高速缓存612、以及数据 端口614。在一个实施例中,可缩放的执行单元阵列可以通过基于工 作负荷的计算要求来启用或禁用一个或多个执行单元(例如,执行单 元608A、608B、608C、608D至608N-1和608N中的任何一个)来 动态地缩放。在一个实施例中,所包括的部件经由互连结构而互连, 所述互连结构链接到部件中的每个部件。在一些实施例中,线程执行 逻辑600包括通过指令高速缓存606、数据端口614、采样器610、以 及执行单元608A-608N中的一个或多个到存储器(诸如系统存储器或 高速缓冲存储器)的一个或多个连接。在一些实施例中,每个执行单 元(例如,608A)是能够执行多个同时的硬件线程同时针对每个线程 并行地处理多个数据元素的独立可编程通用计算单元。在各种实施例 中,执行单元608A-
608N的阵列是可缩放的以包括任何数量的单独执 行单元。
[0089] 在一些实施例中,执行单元608A-608N主要用于执行着色器程 序。着色器处理器602可以处理各种着色器程序并且经由线程分派器604分派与着色器程序相关联的执行线程。在一个实施例中,线程分 派器包括用于对来自图形和媒体流水线的线程发起请求进行仲裁并 且在执行单元608A-608N中的一个或多个执行单元上实例化所请求 的线程的逻辑。例如,几何流水线(例如,图5的536)可以将顶点、 曲面细分或几何着色器分派至线程执行逻辑600(图6)以用于处理。 在一些实施例中,线程分派器604还可处理来自执行着色器程序的运 行时线程大量产生请求。
[0090] 在一些实施例中,执行单元608A-608N支持包括对许多标准3D 图形着色器指令的本机支持的指令集,使得以最小的转换来执行来自 图形库(例如,Direct 3D和OpenGL)的着色器程序。执行单元支持 顶点和几何处理(例如,顶点程序、几何程序、顶点着色器)、像素 处理(例如,像素着色器、片段着色器)以及通用处理(例如,计算 和媒体着色器)。执行单元608A-608N中的每个都有多发布单指令多 数据(SIMD)执行的能,并且多线程操作使得在面对较高等待时 间的存储器访问时能实现高效执行环境。每个执行单元内的每个硬件 线程都具有专用的高带宽寄存器堆和关联的独立线程状态。对于有整 数、单和双精度浮点操作、SIMD分支能力、逻辑操作、超越操作和 其他混杂操作能力的流水线,执行是每一时钟的多发布。在等待来自 存储器或共享功能中的一个的数据时,执行单元608A-608N内的依赖 逻辑使等待线程休眠,直到所请求的数据已返回。当等待线程正在休 眠时,硬件资源可能会被专门用于处理其他线程。例如,在与顶点着 色器操作相关联的延迟期间,执行单元可以执行像素着色器、片段着 色器或包括不同顶点着色器的另一类型的着色器程序的操作。
[0091] 执行单元608A-608N中的每个执行单元对数据元素的阵列进行 操作。数据元素的数量是“执行大小”、或用于指令的通道的数量。 执行通道是用于数据元素访问、掩蔽和指令内的流控制的执行的逻辑 单元。通道的数量可以与针对特定图形处理器的物理算术逻辑单元 (ALU)或浮点单元(FPU)的数量无关。在一些实施例中,执行单 元608A-608N支持整数和浮点数据类型。
[0092] 执行单元指令集包括SIMD指令。各种数据元素可作为压缩数据 类型存储在寄存器中,并且执行单元将基于元素的数据大小来处理各 种元素。例如,当对256位宽的向量进行操作时,该256位的向量被 存储在寄存器中并且执行单元按照四个单独的64位压缩数据元素(四 倍字长(QW)大小的数据元素)、八个单独的32位压缩数据元素(双 字(DW)大小的数据元素)、十六个单独的16位压缩数据元素(字 (W)大小的数据元素)、或三十二个单独的8位数据元素(字节(B) 大小的数据元素)对该向量进行操作。然而,不同的向量宽度和寄存 器大小是可能的。
[0093] 一个或多个内部指令高速缓存(例如,606)被包括在线程执行 逻辑600中以高速缓存用于执行单元的线程指令。在一些实施例中, 一个或多个数据高速缓存(例如,612)被包括用于在线程执行期间 高速缓存线程数据。在一些实施例中,采样器610被包括用于为3D 操作提供纹理采样并且为媒体操作提供媒体采样。在一些实施例中, 采样器610包括专门的纹理或媒体采样功能,以在向执行单元提供采 样数据之前在采样过程期间处理纹理或媒体数据。
[0094] 在执行期间,图形和媒体流水线经由线程大量产生和分派逻辑向 线程执行逻辑600发送线程发起请求。一旦一组几何对象已经被处理 并被光栅化成像素数据,着色器处理器602内的像素处理器逻辑(例 如,像素着色器逻辑、片段着色器逻辑等)就被调用以进一步计算输 出信息并且使得结果被写入到输出表面(例如,颜色缓冲器、深度缓 冲器、模板印刷缓冲器等)。在一些实施例中,像素着色器或片段着 色器计算要跨经光栅化对象来内插的各种顶点属性的值。在一些实施 例中,着色器处理器602内的像素处理器逻辑然后执行应用编程接口 (API)供应的像素或片段着色器程序。为了执行着色器程序,着色 器处理器602经由线程分派器604将线程分派至执行单元(例如,
[0095] 608A)。在一些实施例中,像素着色器602使用采样器610中的纹理 采样逻辑来访问存储器中所存储的纹理映射中的纹理数据。对纹理数 据和输入几何数据的算术操作计算每个几何片段的像素颜色数据,或 丢弃一个或多个像素以免进一步处理。
[0096] 在一些实施例中,数据端口614提供存储器访问机制,供线程执 行逻辑600将经处理的数据输出至存储器以用于在图形处理器输出流 水线上进行处理。在一些实施例中,数据端口614包括或耦合至一个 或多个高速缓冲存储器(例如,数据高速缓存612),以经由数据端 口来高速缓存数据用于存储器访问。
[0097] 图7是示出了根据一些实施例的图形处理器指令格式700的框 图。在一个或多个实施例中,图形处理器执行单元支持具有采用多个 格式的指令的指令集。实线块示出了一般被包括在执行单元指令中的 分量,而虚线包括可选的或仅被包括在指令的子集中的分量。在一些 实施例中,所描述和示出的指令格式700是宏指令,因为它们是供应 至执行单元的指令,与一旦指令被处理由指令解码引起的微操作相 反。
[0098] 在一些实施例中,图形处理器执行单元本机地支持采用128位指 令格式710的指令。基于所选指令、指令选项和操作数的数量,64位 压缩指令格式730可用于一些指令。本机128位指令格式710提供对 所有指令选项的访问,而一些选项和操作限制在64位指令格式730 中。64位指令格式730中可用的本机指令因实施例而不同。在一些实 施例中,使用索引字段713中的一组索引值将指令部分地压缩。执行 单元硬件基于索引值来引用一组压缩表,并使用压缩表输出来重构采 用128位指令格式710的本机指令。
[0099] 针对每个格式,指令操作码712定义执行单元要执行的操作。执 行单元跨每个操作数的多个数据元素来并行地执行每个指令。例如, 响应于添加指令,执行单元跨每个颜色通道执行同时添加操作,所述 每个颜色通道表示纹理元素或图片元素。默认地,执行单元跨操作数 的所有数据通道执行每个指令。在一些实施例中,指令控制字段714 使能控制某些执行选项,诸如通道选择(例如,预测)以及数据通道 排序(例如,拌和)。针对采用128位指令格式710的指令,执行大 小字段716限制了将并行执行的数据通道的数量。在一些实施例中, 执行大小字段716不可用于在64位压缩指令格式730中使用。
[0100] 一些执行单元指令具有多达三个操作数,包括两个源操作数(src0 720、src1722)和一个目的地718。在一些实施例中,执行单元支持 双目的地指令,其中目的地中的一个是隐式的。数据操纵指令可以具 有第三源操作数(例如,SRC2724),其中指令操作码712确定源操 作数的数量。指令的最后的源操作数可以是利用所述指令传递的立即 (例如,硬编码)值。
[0101] 在一些实施例中,128位指令格式710包括访问/寻址模式字段 726,所述访问/寻址模式字段726指定例如是使用直接寄存器寻址模 式还是间接寄存器寻址模式。当使用直接寄存器寻址模式时,直接由 指令中的位来提供一个或多个操作数的寄存器地址。
[0102] 在一些实施例中,128位指令格式710包括访问/寻址模式字段 726,所述访问/寻址模式字段726指定指令的寻址模式和/或访问模式。 在一个实施例中,访问模式用于限定针对指令的数据访问对齐。一些 实施例支持包括16字节对齐的访问模式和1字节对齐的访问模式的 访问模式,其中访问模式的字节对齐确定了指令操作数的访问对齐。 例如,当在第一模式中时,指令可以将字节对齐的寻址用于源操作数 和目的地操作数,并且当在第二模式中时,指令可以将16字节对齐 的寻址用于所有源操作数和目的地操作数。
[0103] 在一个实施例中,访问/寻址模式字段726的寻址模式部分确定指 令要使用直接寻址还是间接寻址。当使用直接寄存器寻址模式时,指 令中的位直接提供一个或多个操作数的寄存器地址。当使用间接寄存 器寻址模式时,可以基于指令中的地址寄存器值和地址立即数字段来 计算一个或多个操作数的寄存器地址。
[0104] 在一些实施例中,基于操作码712位字段对指令进行分组以简化 操作码解码740。针对8位操作码,第4、5和6位允许执行单元确定 操作码的类型。所示出的精确操作码分组仅是示范的。在一些实施例 中,移动和逻辑操作码组742包括数据移动和逻辑指令(例如,移动 (mov)、比较(cmp))。在一些实施例中,移动和逻辑组742共 享五个最高有效位(MSB),其中移动(mov)指令采用0000xxxxb 的形式并且逻辑指令采用0001xxxxb的形式。流控制指令组744(例 如,调用、跳(jmp))包括采用0010xxxxb(例如,0x20)形式的指 令。混杂指令组
746包括指令的混合,包括采用0011xxxxb(例如, 0x30)形式的同步指令(例如,等待、发送)。并行数学指令组748 包括采用0100xxxxb(例如,0x40)形式的分量方面的算术指令(例 如,加、乘(mul))。并行数学组748跨数据通道并行地执行算术 操作。向量数学组750包括采用0101xxxxb(例如,0x50)形式的算 术指令(例如,dp4)。向量数学组对向量操作数执行算术,诸如点 积计算。
[0105] 图形流水线
[0106] 图8是图形处理器800的另一实施例的框图。图8的具有与本文 中的任何其他图的元件相同的参考号(或名称)的元件可以以与在本 文中的其他地方描述的方式类似的任何方式进行操作或起作用,但不 限于这样。
[0107] 在一些实施例中,图形处理器800包括图形流水线820、媒体流 水线830、显示引擎840、线程执行逻辑850、以及渲染输出流水线 870。在一些实施例中,图形处理器800是包括一个或多个通用处理 核的多核处理系统内的图形处理器。图形处理器由至(未示出的)一 个或多个控制寄存器的寄存器写入来控制或者经由通过环形互连802 发布到图形处理器
800的命令来控制。在一些实施例中,环形互连802 将图形处理器800耦合至其他处理部件,诸如其他图形处理器或通用 处理器。来自环形互连802的命令由命令流送器803来解译,所述命 令流送器803将指令供应到图形流水线820或媒体流水线830的单独 部件。
[0108] 在一些实施例中,命令流送器803引导顶点获取器805的操作, 所述顶点获取器805从存储器读取顶点数据并执行由命令流送器803 所提供的顶点处理命令。在一些实施例中,顶点获取器805将顶点数 据提供给顶点着色器807,所述顶点着色器807对每个顶点执行坐标 空间变换和光照操作。在一些实施例中,顶点获取器805和顶点着色 器807通过经由线程分派器831向执行单元852A-852B分派执行线程 来执行顶点处理指令。
[0109] 在一些实施例中,执行单元852A-852B是具有用于执行图形和媒 体操作的指令集的向量处理器的阵列。在一些实施例中,执行单元 852A-852B具有附接的L1高速缓存851,所述L1高速缓存851是针 对每个阵列特定的或在阵列之间共享。该高速缓存可以被配置为数据 高速缓存、指令高速缓存或单个高速缓存,其被分区以将数据和指令 包含在不同分区中。
[0110] 在一些实施例中,图形流水线820包括用于执行3D对象的硬件 加速的曲面细分的曲面细分部件。在一些实施例中,可编程的外壳着 色器811配置曲面细分操作。可编程域着色器817提供对曲面细分输 出的后端评估。曲面细分器813在外壳着色器811的方向上进行操作 并且包含专用逻辑,所述专用逻辑用于基于粗糙几何模型来生成一组 详细的几何对象,其被作为输入提供到图形流水线820。在一些实施 例中,如果未使用曲面细分,则可以绕开曲面细分部件(例如,外壳 着色器811、曲面细分器813和域着色器817)。
[0111] 在一些实施例中,完整的几何对象可以由几何着色器819经由分 派给执行单元852A-852B的一个或多个线程来处理,或者可以直接行 进至剪辑器829。在一些实施例中,几何着色器对整个几何对象而非 对如在图形流水线的先前阶段中的顶点或者顶点补丁进行操作。如果 禁用曲面细分,则几何着色器819从顶点着色器807接收输入。在一 些实施例中,几何着色器819可由几何着色器程序编程以在曲面细分 单元被禁用时执行几何曲面细分。
[0112] 在光栅化之前,剪辑器829处理顶点数据。剪辑器829可以是固 定功能的剪辑器或者具有剪辑和几何着色器功能的可编程剪辑器。在 一些实施例中,渲染输出流水线870中的光栅化器和深度测试部件873 分派像素着色器以将几何对象转换成其每一像素表示。在一些实施例 中,像素着色器逻辑被包括在线程执行逻辑850中。在一些实施例中, 应用可以绕开光栅化器和深度测试部件873并且经由流出单元823访 问未光栅化的顶点数据。
[0113] 图形处理器800具有互连总线、互连结构或允许数据和消息在该 处理器的主要部件之间传递的某个其他互连机构。在一些实施例中, 执行单元852A-852B和(一个或多个)相关联的高速缓存851、纹理 和媒体采样器854、以及纹理/采样器高速缓存858经由数据端口856 进行互连以执行存储器访问并且与处理器的渲染输出流水线部件进 行通信。在一些实施例中,采样器854、高速缓存851、858以及执行 单元852A-852B各自具有单独的存储器访问路径。
[0114] 在一些实施例中,渲染输出流水线870包含光栅化器和深度测试 部件873,其将基于顶点的对象转换成相关联的基于像素的表示。在 一些实施例中,光栅化器逻辑包括用于执行固定功能三角形和线光栅 化的窗口器/掩蔽器单元。相关联的渲染高速缓存878和深度高速缓存 879在一些实施例中也是可用的。像素操作部件877对数据执行基于 像素的操作,然而在一些实例中,与2D操作(例如,利用混合的位 块图像传送)相关联的像素操作由2D引擎841执行,或者在显示时 间由显示控制器843使用重叠显示平面来代替。在一些实施例中,共 享的L3高速缓存875可用于所有图形部件,从而允许在无需使用主 系统存储器的情况下共享数据。
[0115] 在一些实施例中,图形处理器媒体流水线830包括媒体引擎837 和视频前端834。在一些实施例中,视频前端834从命令流送器803 接收流水线命令。在一些实施例中,媒体流水线830包括单独的命令 流送器。在一些实施例中,视频前端834在将媒体命令发送至媒体引 擎837之前处理该命令。在一些实施例中,媒体引擎837包括线程大 量产生功能,以大量产生线程用于经由线程分派器831分派至线程执 行逻辑850。
[0116] 在一些实施例中,图形处理器800包括显示引擎840。在一些实 施例中,显示引擎840在处理器800外部并且经由环形互连802或者 某个其他互连总线或结构与图形处理器耦合。在一些实施例中,显示 引擎840包括2D引擎841和显示控制器843。在一些实施例中,显 示引擎840包含能够独立于3D流水线而操作的专用逻辑。在一些实 施例中,显示控制器
843与(未示出的)显示装置耦合,所述显示装 置可以是系统集成显示装置(如在膝上型计算机中)、或者经由显示 装置连接器附接的外部显示装置。
[0117] 在一些实施例中,图形流水线820和媒体流水线830可配置成基 于多个图形和媒体编程接口来执行操作并且并非特定于任一应用编 程接口(API)。在一些实施例中,用于图形处理器的驱动器软件将 特定于特定图形或媒体库的API调用转换成可以由图形处理器处理的 命令。在一些实施例中,为都来自Khronos Group的开放图形库 (OpenGL)、开放计算语言(OpenCL)和/或Vulkan图形和计算API 提供支持。在一些实施例中,也可以为来自微软公司的Direct3D库提 供支持。在一些实施例中,可以支持这些库的组合。还可以为开源计 算机视觉库(OpenCV)提供支持。如果可以作出从未来的API的流 水线到图形处理器的流水线的映射,则具有兼容的3D流水线的未来 的API也将受到支持。
[0118] 图形流水线编程
[0119] 图9A是示出了根据一些实施例的图形处理器命令格式900的框 图。图9B是示出了根据实施例的图形处理器命令序列910的框图。 图9A中的实线块示出了一般被包括在图形命令中的分量,而虚线包 括可选的或者仅被包括在该图形命令的子集中的分量。图9A的示范 图形处理器命令格式900包括用于标识命令的目标客户端902、命令 操作代码(操作码)904、以及命令的相关数据906的数据字段。一 些命令中还包括子操作码905和命令大小
908。
[0120] 在一些实施例中,客户端902指定处理命令数据的图形装置的客 户端单元。在一些实施例中,图形处理器命令解析器检查每个命令的 客户端字段以调节对命令的进一步处理并将命令数据路由至适当的 客户端单元。在一些实施例中,图形处理器客户端单元包括存储器接 口单元、渲染单元、2D单元、3D单元、和媒体单元。每个客户端单 元具有对命令进行处理的对应处理流水线。一旦命令被客户端单元接 收到,客户端单元就读取操作码904以及子操作码905(如果存在的 话)来确定要执行的操作。客户端单元使用数据字段906中的信息来 执行命令。针对一些命令,期望显式的命令大小908来指定命令的大 小。在一些实施例中,命令解析器基于命令操作码来自动地确定命令 中的至少一些命令的大小。在一些实施例中,经由双字的倍数对命令 进行对齐。
[0121] 图9B中的流程示出了示范图形处理器命令序列910。在一些实施 例中,以图形处理器的实施例为特色的数据处理系统的软件或固件使 用所示出的命令序列的版本来建立、执行和终止一组图形操作。仅出 于示例的目的示出并描述了样本命令序列,因为实施例不限于这些特 定命令或者此命令序列。而且,所述命令可以被作为命令序列中的一 批命令来发布,使得图形处理器将至少部分同时地处理命令的序列。
[0122] 在一些实施例中,图形处理器命令序列910可以以流水线转储清 除命令912开始,以使得任何活跃的图形流水线完成针对该流水线的 当前未决命令。在一些实施例中,3D流水线922和媒体流水线924 不同时进行操作。执行流水线转储清除以使得活跃的图形流水线完成 任何未决命令。响应于流水线转储清除,用于图形处理器的命令解析 器将暂停命令处理直到活跃的绘图引擎完成未决操作和相关的读取 高速缓存为无效的。可选地,渲染高速缓存中被标记为‘脏’的任何 数据可以被转储清除到存储器。在一些实施例中,流水线转储清除命 令912可以用于流水线同步或者用在将图形处理器置于低功率状态中 之前。
[0123] 在一些实施例中,当命令序列要求图形处理器在流水线之间显式 地切换时,使用流水线选择命令913。在一些实施例中,在发布流水 线命令之前在执行上下文内仅需要一次流水线选择命令913,除非该 上下文要发布针对两个流水线的命令。在一些实施例中,紧接在经由 流水线选择命令913的流水线切换之前需要流水线转储清除命令912。
[0124] 在一些实施例中,流水线控制命令914配置用于操作的图形流水 线并且用于对3D流水线922和媒体流水线924进行编程。在一些实 施例中,流水线控制命令914为活跃的流水线配置流水线状态。在一 个实施例中,流水线控制命令914用于流水线同步并且用于在处理一 批命令之前清除来自活跃的流水线内的一个或多个高速缓冲存储器 的数据。
[0125] 在一些实施例中,返回缓冲器状态命令916用于配置一组返回缓 冲器以用于使相应的流水线写入数据。一些流水线操作要求对一个或 多个返回缓冲器的分配、选择或配置,所述操作在处理期间将中间数 据写入到所述一个或多个返回缓冲器中。在一些实施例中,图形处理 器还使用一个或多个返回缓冲器来存储输出数据并且执行跨线程通 信。在一些实施例中,将返回缓冲器状态916配置成包括选择要用于 一组流水线操作的返回缓冲器的大小和数量。
[0126] 命令序列中的剩余命令基于用于操作的活跃的流水线而不同。基 于流水线确定920,命令序列适合以3D流水线状态930开始的3D流 水线922或者在媒体流水线状态940下开始的媒体流水线924。
[0127] 用于配置3D流水线状态930的命令包括用于顶点缓冲器状态、 顶点元素状态、常量颜色状态、深度缓冲器状态、以及要在处理3D 图元命令之前配置的其他状态变量的3D状态设置命令。这些命令的 值至少部分地基于使用中的特定3D API来确定。在一些实施例中,3D流水线状态930命令还能够选择性地禁用或绕开某些流水线元件, 如果将不使用那些元件的话。
[0128] 在一些实施例中,3D图元932命令用于提交要由3D流水线处理 的3D图元。经由3D图元932命令传递给图形处理器的命令和相关联 的参数被转发到图形流水线中的顶点获取功能。顶点获取功能使用3D 图元932命令数据来生成顶点数据结构。顶点数据结构被存储在一个 或多个返回缓冲器中。在一些实施例中,3D图元932命令用于经由 顶点着色器对3D图元执行顶点操作。为了处理顶点着色器,3D流水 线922将着色器执行线程分派到图形处理器执行单元。
[0129] 在一些实施例中,经由执行934命令或事件来触发3D流水线922。 在一些实施例中,寄存器写入触发命令执行。在一些实施例中,经由 命令序列中的‘前进(go)’或‘踢(kick)’命令来触发执行。在 一个实施例中,使用流水线同步命令来触发命令执行以通过图形流水 线来转储清除命令序列。3D流水线将执行针对3D图元的几何处理。 一旦操作完成,所产生的几何对象就被光栅化并且像素引擎对所产生 的像素进行着色。针对那些操作,还可以包括用于控制像素着色和像 素后端操作的附加命令。
[0130] 在一些实施例中,当执行媒体操作时,图形处理器命令序列910 跟随媒体流水线924路径。一般地,针对媒体流水线924的编程的特 定使用和方式取决于要执行的媒体或计算操作。在媒体解码期间,特 定的媒体解码操作可以被卸载到该媒体流水线。在一些实施例中,还 可以绕开该媒体流水线,并且可使用由一个或多个通用处理核提供的 资源来整体地或部分地执行媒体解码。在一个实施例中,媒体流水线 还包括用于通用图形处理器单元(GPGPU)操作的元件,其中图形处 理器被用于使用与渲染图形图元不显式相关的计算着色器程序来执 行SIMD向量操作。
[0131] 在一些实施例中,以与3D流水线922类似的方式对媒体流水线 924进行配置。将用于配置媒体流水线状态940的一组命令分派或放 置到命令队列中,在媒体对象命令942之前。在一些实施例中,媒体 流水线状态命令940包括用于配置媒体流水线元件的数据,所述媒体 流水线元件将用于处理媒体对象。这包括用于在媒体流水线内配置视 频解码和视频编码逻辑的数据,诸如编码或解码格式。在一些实施例 中,媒体流水线状态命令940也支持对指向包含一批状态设置的“间 接”状态元素的一个或多个指针的使用。
[0132] 在一些实施例中,媒体对象命令942将指针供应至媒体对象以用 于由媒体流水线进行处理。媒体对象包括存储器缓冲器,所述存储器 缓冲器包含要被处理的视频数据。在一些实施例中,在发布媒体对象 命令942之前,所有的媒体流水线状态必须是有效的。一旦流水线状 态被配置并且媒体对象命令942被排队,就经由执行命令944或等同 的执行事件(例如,寄存器写入)来触发媒体流水线924。然后可以 通过由3D流水线922或媒体流水线924提供的操作对来自媒体流水 线924的输出进行后处理。在一些实施例中,以与媒体操作类似的方 式来配置和执行GPGPU操作。
[0133] 图形软件架构
[0134] 图10示出了根据一些实施例的数据处理系统1000的示范图形软 件架构。在一些实施例中,软件架构包括3D图形应用1010、操作系 统1020、以及至少一个处理器1030。在一些实施例中,处理器1030 包括图形处理器1032以及一个或多个通用处理器核1034。图形应用 1010和操作系统1020各自在数据处理系统的系统存储器1050中执 行。
[0135] 在一些实施例中,3D图形应用1010包含包括着色器指令1012 的一个或多个着色器程序。着色器语言指令可以采用高级着色器语 言,诸如高级着色器语言(HLSL)或OpenGL着色器语言(GLSL)。 应用还包括用适合于由通用处理器核1034执行的机器语言的可执行 指令1014。应用还包括由顶点数据限定的图形对象1016。
[0136] 在一些实施例中,操作系统1020是来自微软公司的 操作系统、专有的类似UNIX的操作系统、或使用Linux 内核的变体的开源的类似UNIX的操作系统。操作系统1020可以支 持图形API 1022,诸如Direct3D API、OpenGL API或Vulkan API。 当Direct3D API在使用中时,操作系统1020使用前端着色器编译器 1024将用HLSL的任何着色器指令1012编译成较低级的着色器语言。 所述编译可以是即时(JIT)编译,或者所述应用可以执行着色器预编 译。在一些实施例中,在3D图形应用1010的编译期间,将高级着色 器编译成低级着色器。在一些实施例中,以中间形式提供着色器指令 1012,诸如由Vulkan API使用的标准便携式中间表示(SPIR)的版本。
[0137] 在一些实施例中,用户模式图形驱动器1026包含后端着色器编 译器1027,用于将着色器指令1012转换成硬件特定的表示。当 OpenGL API在使用中时,将用GLSL高级语言的着色器指令1012传 递至用户模式图形驱动器1026以用于编译。在一些实施例中,用户 模式图形驱动器1026使用操作系统内核模式功能1028来与内核模式 图形驱动器1029进行通信。在一些实施例中,内核模式图形驱动器 1029与图形处理器1032进行通信以分派命令和指令。
[0138] IP核实现
[0139] 至少一个实施例的一个或多个方面可以由存储在机器可读介质 上的代表性代码来实现,所述机器可读介质表示和/或限定诸如处理器 之类的集成电路内的逻辑。例如,机器可读介质可以包括表示处理器 内的各种逻辑的指令。当由机器读取时,所述指令可以使机器制造用 于执行本文中所描述的技术的逻辑。此类表示(称为“IP核”)是用 于集成电路的逻辑的可重复使用单元,其可以被作为描述集成电路的 结构的硬件模型而存储在有形、机器可读介质上。可以将硬件模型供 应至在制造集成电路的制造机器上加载硬件模型的各种消费者或制 造设施。可以制造集成电路,使得该电路执行与本文中所描述的实施 例中的任何实施例相关联地描述的操作。
[0140] 图11是示出了根据实施例的可以用于制造集成电路以执行操作 的IP核开发系统1100的框图。IP核开发系统1100可以用于生成可 以结合到更大的设计中或用于构建整个集成电路(例如,SOC集成电 路)的模块化、可重复使用的设计。设计设施1130可以用高级编程 语言(例如,C/C++)生成IP核设计的软件仿真1110。软件仿真1110 可用于使用仿真模型
1112来设计、测试和验证IP核的行为。仿真模 型1112可以包括功能、行为和/或时序仿真。
然后可以从仿真模型1112 创建或合成寄存器传输级(RTL)设计1115。RTL设计1115是对硬 件寄存器之间的数字信号的流动进行建模的集成电路的行为的抽象, 其包括使用建模的数字信号执行的相关联逻辑。除了RTL设计1115 之外,还可以创建、设计或合成逻辑级别或晶体管级别处的较低级别 设计。因此,初始设计和仿真的特定细节可能变化。
[0141] 可以由设计设施将RTL设计1115或等同方案进一步合成为硬件 模型1120,所述硬件模型1120可以用硬件描述语言(HDL)或物理 设计数据的某种其他表示。可以进一步仿真或测试HDL以验证IP核 设计。可使用非易失性存储器1140(例如,硬盘、闪存、或任何非易 失性存储介质)来存储IP核设计以用于递送至第3方制造设施1165。 替代地,可以通过有线连接1150或无线连接1160来(例如,经由互 联网)传输IP核设计。制造设施1165然后可以制造至少部分地基于 IP核设计的集成电路。所制造的集成电路可配置成执行依照本文中所 描述的至少一个实施例的操作。
[0142] 示范片上系统集成电路
[0143] 图12-14示出了根据本文中所描述的各种实施例的可以使用一个 或多个IP核来制造的示范集成电路和相关联的图形处理器。除了所示 出的事物之外,还可以包括其他逻辑和电路,包括附加的图形处理器 /核、外围接口控制器或通用处理器核。
[0144] 图12是示出了根据实施例的可以使用一个或多个IP核来制造的 示范片上系统集成电路1200的框图。示范集成电路1200包括一个或 多个应用处理器1205(例如,CPU)、至少一个图形处理器1210,并 且另外可以包括图像处理器1215和/或视频处理器1220,其中的任何 一者都可以是来自相同或多个不同设计设施的模块化IP核。集成电路 1200包括外围或总线逻辑,其包括USB控制器1225、UART控制器 1230、SPI/SDIO控制器1213和I2S/I2C控制器1240。另外,集成电 路可以包括显示装置1245,所述显示装置1245耦合至高清晰度多媒 体接口(HDMI)控制器1250和移动行业处理器接口(MIPI)显示界 面1255中的一个或多个。可以由包括闪存和闪存控制器的闪存子系 统1260来提供存储。可以经由存储器控制器1265来提供存储器接口 以用于对SDRAM或SRAM存储器装置的访问。一些集成电路附加地 包括嵌入式安全引擎1270。
[0145] 图13是示出了根据实施例的可以使用一个或多个IP核来制造的 片上系统集成电路的示范图形处理器1310的框图。图形处理器1310 可以是图12的图形处理器1210的变体。图形处理器1310包括顶点 处理器1305和一个或多个片段处理器1315A-1315N(例如,
1315A、 1315B、1315C、1315D至1315N-1和1315N)。图形处理器1310可 以经由单独的逻辑执行不同的着色器程序,使得顶点处理器1305被 优化以执行用于顶点着色器程序的操作,而所述一个或多个片段处理 器1315A-1315N执行用于片段或像素着色器程序的片段(例如,像素) 着色操作。顶点处理器1305执行3D图形流水线的顶点处理阶段并生 成图元和顶点数据。(一个或多个)片段处理器1315A-1315N使用由 顶点处理器1305生成的图元和顶点数据来产生显示在显示装置上的 缓冲器。在一个实施例中,(一个或多个)片段处理器
1315A-1315N 被优化以执行如在OpenGL API中提供的片段着色器程序,所述片段 着色器程序可以用于执行与如在Direct 3D API中提供的像素着色器 程序类似的操作。
[0146] 图形处理器1310附加地包括一个或多个存储器管理单元(MMU) 1320A-1320B、(一个或多个)高速缓存1325A-1325B和(一个或多 个)电路互连1330A-1330B。所述一个或多个MMU 1320A-1320B为 图像处理器1310,包括为顶点处理器1305和/或(一个或多个)片段 处理器1315A-1315N,提供虚拟到物理地址映射,所述虚拟到物理地 址映射除了存储在所述一个或多个高速缓存1325A-1325B中的顶点 或图像/纹理数据之外还可以引用存储在存储器中的顶点或图像/纹理 数据。在一个实施例中,所述一个或多个MMU 1320A-1320B可以与 系统内的其他MMU同步,所述其他MMU包括与图12的所述一个 或多个应用处理器1205、图像处理器1215和/或视频处理器1220相 关联的一个或多个MMU,使得每个处理器1205-1220可以参与共享 或统一的虚拟存储器系统。根据实施例,所述一个或多个电路互连 1330A-1330B使得图形处理器1310能够经由SoC的内部总线或经由 直接连接与SoC内的其他IP核对接。
[0147] 图14是示出了根据实施例的可以使用一个或多个IP核来制造的 片上系统集成电路的附加示范图形处理器1410的框图。图形处理器 1410可以是图12的图形处理器1210的变体。图形处理器1410包括 图13的集成电路1300的所述一个或多个MMU 1320A-1320B、(一 个或多个)高速缓存1325A-1325B和(一个或多个)电路互连 1330A-1330B。
[0148] 图形处理器1410包括一个或多个着色器核1415A-1415N(例如, 1415A、1415B、1415C、1415D、1415E、1415F至1415N-1和1415N), 它们提供统一的着色器核架构,其中单个核或类型或核可以执行所有 类型的可编程着色器代码,所述可编程着色器代码包括用于实现顶点 着色器、片段着色器和/或计算着色器的着色器程序代码。存在的着色 器核的确切数量可以在实施例和实现之中变化。另外,图形处理器 1410包括核间任务管理器1405,所述核间任务管理器1405充当用于 将执行线程分派给一个或多个着色器核1415A-1415N的线程分派器, 以及用于使分块操作加速以用于进行基于分块的渲染的分块单元 1418,其中针对场景的渲染操作在图像空间中被细分,例如用于利用 场景内的局部空间相干性或用于优化对内部高速缓存的使用。
[0149] 增强现实/虚拟现实设备和方法
[0150] A.概览
[0151] 本发明的实施例可以在虚拟现实系统(例如图15A中示出的虚拟 现实系统)内实现,所述虚拟现实系统包含图形系统部件1580和头 戴式显示器(HMD)1550。在一个实施例中,HMD 1550包括右显示 器1551(图像帧在其上被渲染以用于由用户的右眼观看)以及左显示 器1552(图像帧在其上被渲染以用于由用户的左眼观看)。单独的图 形引擎1556和1557包含响应于具体虚拟现实应用1561的执行分别 用于渲染右和左图像帧的图形处理流水线。图形引擎1556-1557的每 个可包括单独的图形处理单元(GPU)。备选地,图形引擎
1556-1557 可以包含单个GPU内的图形执行资源的不同集合或者跨多个GPU分 布。例如,在虚拟化环境中,可以向每个显示器1551-1552分配单独 的虚拟GPU(vGPU)。不管GPU资源如何被分区,图形引擎1556-1557 可以实现本文描述的图形处理技术的任何一个。
[0152] 在一个实施例中,集成在HMD 1550上的用户/眼睛跟踪装置1553 包含检测用户头的当前取向和用户的凝视的方向的传感器。例如,可 以使用光传感器和加速度计捕获用户的头的取向,同时可以通过例如 相机之类的光眼睛跟踪装置捕获用户的凝视的当前方向。如示出的, 用户/眼睛跟踪装置1553将用户的当前视图1560提供到图形系统 1580,然后图形系统1580相应地调整图形处理(即,以确保正呈现 的当前图像帧来自用户的当前视角)。
[0153] 在一个实施例中,虚拟现实应用1561利用图形应用编程接口 (API)1562来实现如本文描述的图形引擎1556-1557的特征。例如, 可以为图形API 1562提供虚拟现实软件开发工具包(SDK)1563,开 发者可以使用其来生成用于虚拟现实应用1561的应用程序代码。例 如,虚拟现实SDK 1563可以包含编译器(和/或其它设计工具)以生 成用于使用API 
1562(例如,通过对API中包含的功能/命令进行调 用)的虚拟现实应用1561的对象代码。可以使用图形API 1562、图 形引擎1556-1557内的硬件和/或其组合来实现本文描述的技术的一种 或多种。
[0154] 图15B示出了根据一个实施例的用于右和左显示器1551-1552的 两个图形流水线的各种阶段。具体地,基于光栅化的流水线被示出包 含从存储器1515读取索引和顶点数据的输入装配器(assembler)(IA) 1521A-B以及顶点着色器(VS)1522A-B。如提到的,可以由IA 1521A-B经由图形API 1562接收命令。顶点着色器1522A-B对每个 顶点执行着色操作(例如,将虚拟空间中的每个顶点的3D位置变换 成它在屏幕上出现的2D坐标)并生成以图元(例如,三角形)的形 式的结果。几何着色器(GS)1523A-B将整个图元作为输入,可能具 有相邻信息。例如,当在对三角形操作时,三个顶点是几何着色器的 输入。然后,几何着色器1523A-B可以发射零个或多个图元,所述图 元在光栅化阶段1524A-B被光栅化,并且所得到的片段最终传递到像 素着色器(PS)1525A-B,其对独立像素的每个执行着色操作,所述 像素在被显示在HMD上之前,在帧缓冲器1526A-B内逐帧存储。
[0155] 在一个实施例中,可以采用诸如射线追踪架构的全局照明图形处 理架构。例如,图15C示出了示范基于射线追踪的图形流水线1500, 其中一个或多个流水线阶段1501A-B至1505A-B对左和右显示器 1551-1552执行基于射线追踪的渲染。示出的阶段包含射线生成模块 1501A-B,其生成用于处理的射线。例如,一个实施例执行每图像分 块宽度优先射线追踪,其中分块表示小的固定尺寸矩形区域。在宽度 优先实现的一个实施例中,针对图像分块上的每次迭代生成每像素一 个射线。射线遍历模块1502A-B针对边界体积层级(BVH)或其它加 速度数据结构遍历每条射线。一个或多个交叉模块1503A-B针对一个 或多个三角形或其它图元测试射线,并且最后,遍历和交叉单元必须 找到每个射线交叉的最靠近图元。然后,一个或多个着色器单元 1504A-B对所得到的像素执行着色操作,所述所得到像素在被显示在 HMD 1550上之前在帧缓冲器1505A-B内逐帧存储。
[0156] B.中央窝渲染
[0157] 本发明的一个实施例采用中央窝渲染,一种数字图像处理技术, 其中图像分辨率或细节量根据一个或多个“固定点”跨图像变化。固 定点指示图像的最高分辨率区域并且对应于中央窝(眼睛视网膜中 心)。可以以不同方式指定固定点的位置。例如,精确测量眼睛位置 和移动的眼睛跟踪装置用于确定虚拟现实实现中的固定点。可以在围 绕固定点的区域中使用比在图像的其它区域中更高的分辨率。例如, 如图16中示出的,中央窝控制模块1620可以控制光栅化器1404以 针对图像的中央窝区域使用更高的采样或像素密度
[0158] C.时间弯曲
[0159] 可以在使用时间弯曲的VR系统中采用本发明的一些实施例。时 间弯曲是用于改进当前虚拟现实(VR)系统中的性能的技术。根据此 技术,根据用户头和/或眼睛的当前取向(即,如从眼睛跟踪装置和/ 或检测用户头的运动的头戴式显示器(HMD)上的其它传感器读取的) 来渲染每个图像帧。就在显示下一图像帧之前,传感器数据再次被捕 获并用于变换场景以适合最近的传感器数据(即,“弯曲”当前图像 帧)。通过利用已经生成的深度图(即,Z缓冲器),时间弯曲可以 通过相对低的计算要求在3D空间中移动对象。
[0160] 将相对于图17描述一个实施例,图17示出了通信地耦合到头戴 式显示器(HMD)1350的图形处理引擎1300。执行VR应用1310, 生成要由图形处理引擎1300执行的图形数据和命令。图形处理引擎 1300可包含一个或多个图形处理单元(GPU),其包含执行图形命令 并渲染要在HMD 1350上显示的图像帧的图形流水线(例如,诸如本 文描述的图形流水线)。
为了简单性,图17中示出了仅单个显示器 1717,其可以是左和/或右显示器。
[0161] 在操作中,图像渲染模块1305渲染要在左和右显示器1717中显 示的图像帧。在一个实施例中,根据用户的头和/或眼睛的当前取向来 渲染每个图像,如由集成在HMD 1350上的用户/眼睛跟踪模块1353 提供的。具体地,HMD 1350可以包含跟踪用户头的当前取向的各种 传感器以及跟踪用户眼睛的当前焦点的相机和关联电路/逻辑。在虚拟 现实实现中,此数据用于渲染来自正确的视角的左/右图像(即,基于 用户的当前凝视的方向和焦点)。
[0162] 尽管为了简单性在图17中示出为单个部件,单独的图像渲染电 路和逻辑可以用于左和右图像帧。此外,未示出各种其它图形流水线 阶段以避免模糊本发明的基本原理,包含例如顶点着色器、几何着色 器和纹理映射器。在一个实施例中采用的射线追踪架构可以包含射线 生成模块、射线遍历模块、交叉模块和着色模块。在任何实现中,渲 染模块1705基于用户的当前取向/凝视渲染左和右显示器1717的图 像。
[0163] 在示出的实施例中,第一帧缓冲器1716存储当前显示在HMD 的左/右显示器1717内的图像帧N-1。然后,在第二帧缓冲器1715内 渲染要显示的下一图像帧(图像帧N)。在一个实施例中,图像渲染 模块1705使用由用户/眼睛跟踪模块1553提供的坐标数据来渲染帧缓 冲器1715内的下一帧。在需要在左和/或右显示器1717内显示下一帧 的时间,时间弯曲模块1720变换图像帧N-1或图像帧N(如果图像 帧N的渲染完成)以适合由用户/眼睛跟踪模块1553提供的最近传感 器数据。此变换由时间弯曲模块1720使用存储在处理引擎的Z缓冲 器1718中的先前生成的深度图执行。所述变换通过相对小的计算要 求在3D空间中移动对象,引起更最近完成的产品而不需要重新渲染 场景。因此,在大多数情况下,它应该基本上类似于图像帧(如果更 快发生渲染,其会被渲染)。
[0164] 用于渲染立体视觉、球面全景图像的设备和方法
[0165] 下面描述的本发明的实施例提供了优于现有系统的许多益处。首 先,在顶点处理阶段中使用“反向射线投射”技术。不是将射线投射 到某个方向并搜索与场景的交叉(普通射线投射方法),本发明的一 个实施例解决了反向的问题。即,给定射线通过的场景中的点,此实 施例确定其初始方向会是什么和/或将引起此方向的纬度/经度角度。 这允许有效标识最终全景图像中的每个顶点位置。
[0166] 此外,通过将复杂评估分解成两个更简单的评估,本发明的一个 实施例实现复杂评估的解决方案,这显著改进了整体解决方案的效 率。此外,一个实施例使用立方体图以使图形流水线插值能在平面表 面(如它被设计成发生)而不是全景图像的球面表面上发生。
[0167] 最后,一个实施例针对场景的每个顶点生成归一化装置坐标 (NDC)。不是将顶点投射到平面(这是顶点处理阶段的正常操作), 而是以下列方式操纵顶点:在将立方体图转化成等矩形投射的全景图 像之后允许顶点到达正确的位置。下面的详细描述表明,这等效于向 平面投射从通过相同经度/纬度旋转的假想“中心相机”始发的射线。
[0168] 全360°全景图像是完全覆盖相机周围的区域的图像,包含360  °水平视场和180°垂直视场。为了使用此类图像,需要将其用作围 绕相机的球体的纹理的特殊观看器。此类图像通常被称为“球面全景 图”或有时称为“处于等矩形格式的全景图像”。
[0169] 图18A示出了球面全景图的示例,并且图18B示出了它通过观 看器(例如,如上所述的HMD 1450)看起来如何。注意到,“30码 线”在图18A中看起来是弯曲的,但是在图18B中当它将环绕观看器 中的球体时变成完美直线。
[0170] 为了产生此类图像,生成“立方体图”(例如图19中示出的), 其将覆盖所选择的视点周围的区域。相机平截头体设置成90°视野 (垂直和水平),并针对立方体的六个平面创建六个快照:前1901、 右1902、左1903、后1904、顶1905和底1906。注意到,这提供了 围绕相机的空间的完全覆盖,同时侧之间存在完全连续性(即,没有 间隙或重叠区域)。
[0171] 然后将立方体图转化成等矩形图。考虑等矩形图像的一种方式是 将球面对象表示为平面2D图像。可能最著名的等矩形图像是图20中 示出的“未投射的世界地图”。
[0172] 投射将子午线映射成恒定间距的垂直直线,并将纬度圆圈映射成 恒定间距的水平直线。此类地图中的每个点具有纬度/经度坐标(沿地 图线性分布),所述坐标表示两个角度,一个来自赤道,并且一个来 自本初子午线,其标识球体表面上的期望点。图21A中示出了示例, 所述示例示出从本初子午线测量的经度和从赤道测量的纬度。
[0173] 图21B示出了球面表面可以如何由2D图像表示(分别使用地球 仪和世界地图作为3D和2D示例)。地球仪上的橙色圆圈2101a-2102a 被拉伸成椭圆形2101b-2102b,特别是在极点处(例如,2101b被拉伸 到比2101a更大的程度)。
[0174] 因此,理解最终地图的每个像素表示球体表面上的位置,可以计 算对应于该位置处的那个像素的3D空间中的射线。所要求的所有是 要确定此射线与立方体的交叉(上面讨论的)并从交叉的点取得立方 体图的颜色。从纬度/经度获得射线的数学在图22中示出。具体地, 使用示出的x、y和z坐标,Px=cos(φ)cos(θ),Py=cos(φ)sin (θ),以及Pz=sin(φ)。其中φ=atan2(Pz,sqrt(Px2+Py2))且 θ=atan2(Py,Px)。某些API(例如OpenGL)提供了用于采样立方 体图纹理(给定笛卡尔坐标中的射线)的机制。
[0175] 图23示出了从图19中示出的立方体图获得的全景图的示例,并 且图24示出了立方体图可以如何“展开”成球面全景图。
[0176] 总之,一个实施例的渲染引擎如下产生球面全景图。首先,将相 机定位在期望位置,其中其视野设置成90°,并且其纵横比设置成 “1”。生成对应于六个侧的六个图像:前、左、右、后、顶、底(作 为立方体图纹理加载)。创建像素着色器,其针对每个像素基于像素 位置计算球体表面上的笛卡尔坐标(假设纬度/经度坐标系)。最后, 将获得的位置用作用于立方体图采样的射线以获得像素颜色。
[0177] 立体视觉渲染
[0178] 立体视觉被定义为用于借助于将两个偏移图像单独呈现给观看 者的左和右眼来创建或增强图像中的深度错觉的技术。然后将这些二 维图像组合在大脑中以提供3D深度的感知。需要特殊的观看器/装置 来产生到其对应的眼睛的图像的每一个图像(例如,诸如上面描述的 HMD 1350、1450)。
[0179] 立体视觉渲染背后的想法是要从略微移位的两个位置渲染场景 以模拟“通过两只眼睛看”。如提到的,当在游戏引擎中渲染时,捕 获由3D空间中的一系列坐标描述的场景并且每个坐标具有在视口中 的接近平面2501上沿眼睛方向的透视投射,如图25A中示出的。
[0180] 图25B示出了立体渲染的示例设置。虚拟屏幕2502是右和左平 截头体会聚并且对象看起来平坦的地方(不要与视口(图像投射在其 上)混淆)。此平面2502也可以称为“零视差”或“焦距距离”。 对象看起来是平的,因为位于此平面的每个点(顶点)出现在左眼和 右眼两者的视口中的相同位置。
[0181] 在对象在虚拟屏幕后面的情况下,左眼的投射在左,并且右眼的 投射在右。左眼和右眼投射之间的距离称为水平视差。由于投射在与 相应眼睛相同的侧上,因此其被称为正视差。此类对象将看起来在屏 幕内部。注意到,当对象处于无穷远时发生最大正视差,并且在该点 处,水平视差等于眼间距离(或眼睛之间的距离)。
[0182] 图26A示出了正视差的示例,其中投射的点2601在投射平面 2600后面。图26B示出了负视差的示例,其中投射的点2602在投射 平面2600前面。如示出的,如果对象位于投射平面2600前面,则左 眼的投射在右,并且右眼的投射在左。这被称为负水平视差。注意到, 当对象在投射平面和眼睛中心之间的一半时,出现等于眼间距离的负 水平视差。当对象移动更靠近观看器时,负水平视差增加到无穷大, 引起非常不愉快的视觉效果。具有负视差的对象将看起来“突出屏 幕”。虽然负视差具有“哇效果”,但是在扩展的时间期内正视差更 容易看到。
[0183] 图26C示出了零视差的示例,其中投射的点2603在投射平面2600 中。如果对象位于投射平面,则其到焦平面上的投射对于左眼和右眼 是重合的(因此零视差)。
[0184] 注意到,为了实现如图26B中的平截头体会聚,必须使用不对称 的平截头体。相机略微朝向彼此旋转定位,或者“内八字(toed-in)”, 因为这看起来直观正确,因为它以我们的眼睛进行的方式行动。图27A 示出了示例。然而,由于透视偏移(朝向帧的边缘变得更加明显), 这产生称为“垂直视差”的效果。此方法由于立体视觉失真而引起眼 睛疲劳。
[0185] 如图27B中示出的,相机可以以平行设置定位,以解决垂直视差 的问题,但是它立即引入了零视差卡在无穷远处的问题。这意味着场 景中的一切将看起来弹出屏幕。这可以使用称为“水平图像转换”的 技术在后处理中修复,但它是耗时的过程。图27C中的配置称为“离 轴”,并且它是最常用的立体设置。它不产生垂直视差,并且通过使 用不对称的平截头体来使能控制零视差平面。
[0186] 如从上面可以理解的,立体效果的程度取决于相机到虚拟平面的 距离以及左和右相机的间隔(眼间距离)。太大的间隔可能难以解析, 并且被称为超立体。相机的良好变动范围间隔是到虚拟屏幕距离的 1/30,而舒适观看的最大间隔被认为是该距离的1/20。一般实践中的 另一约束是要确保负视差不超过眼睛间隔(其在到虚拟屏幕的一半的 距离处发生,如上面注意到的)。
[0187] 为了产生立体视觉全景图像,对于左眼和右眼(具有在它们之间 的垂直移位),两次采用上面的技术。此类设置在图28A和28B中示 出。问题在于当相机向上看(图28A)时将存在立体3D效果,但是 当它们向右转(图28B)时,水平差异消失并且引入垂直差异。此外, 当相机以与图28A相反的方向转(向下看)时,由于相机的视点被交 换(左与右交换),会引入对眼效果。
[0188] 如图28C中示出的,为了避免这种引起头痛的效果,在一个实施 例中利用相机装置2801,其以与用户的眼睛关于其头进行的相同的方 式行动。这意味着装置2801的两个相机需要通过优选的眼睛间隔(作 为相机之间的距离)绕单个共享枢轴点2802旋转。从观察这种布置 来看,变得清楚的是如相对于图19-24所描述地产生全景图像站不住 脚,因为对于最终图像中的每个像素,相机必须定位在不同的位置。
[0189] 在一个实施例中采用的一种技术从正确位置在所有可能的方向 上拍摄大量图像,并且然后使用拼接软件将它们组合在全景图像中。 将此技术应用于左和右眼图像。最近(在Siggraph 2016中)针对此类 工作流引入了API,通过硬件加速来利用所述过程。然而,基于重叠 区域中的匹配特征来为每个全景图拼接图像可能过于繁重。此外,拼 接软件产品不总是无缝地操作,而是具有拼接伪影。
[0190] 在从合成3D场景产生全景立体视觉的领域中,可以使用用于 Autodesk Maya的Domemaster3D插件。它是开源的,并且能够从Maya 场景中产生立体视觉全景图像。它利用了Maya是射线追踪渲染引擎 的事实,即图像中每个像素的颜色由从相机位置投射(到与此像素对 应的方向)的射线获得,并且基于与它遇到的对象的交叉计算。当存 在产生非常真实的合成图像的需要时,这是有用的,因为射线可以在 对象之间“反弹”以生成场景。这使能在最终结果中模拟真实反射。 图29A示出了示例射线追踪设置,并且图29B示出了从射线追踪引擎 获得的合成图像的示例。不用说,这种渲染技术与游戏引擎进行的操 作(其如上面所提到的,将坐标投射到观看平面)很不同。
[0191] 为了通过射线追踪引擎产生立体视觉全景图,考虑来自图28c的 设置。来自每个相机的“射线”由初始设置位置很好地定义。回想一 下,全景图像可以被想象为纬度/经度图。然后,对于每个像素,初始 设置可以通过对应的纬度/经度角度旋转,并且请求针对所得到的射线 获得的颜色。
[0192] Paul Bourke的方法
[0193] 在2002年,Paul Bourke提出了一种产生用于摄影的立体视觉全 景图的方法,并且稍后在2006年的在他的文章“Synthetic Stereoscopic Panoramic Images”中,他扩展了关于合成渲染的议论。 考虑如图30A中的设置。左和右相机3001和3002分别在假想电路上 通过等于半眼间距离的半径绕轴3003旋转。最终图像从组合细长条 带获得的,细长条带是从对应位置拍摄的窄视野的简单快照。图30B 示出了用于获得左相机的全景图像3005的设置。注意到,每个快照 的窄孔径与旋转角度步长匹配,这引起连续的全景图像3005而没有 间隙或重叠图像。尽管看起来相邻条带的平截头体完美重合,创建连 续性,但每个快照从不同的位置拍摄。放置在一个条带和另一条带之 间的过渡区域中的那些对象将从两个条带中的略微不同的距离处出 现。
[0194] 然而,当条带变得更小时,此差异变得可忽略。参数实验示出, 从1度快照的360个条带产生全景图像引起完美连续的图像。在任何 情况下,为了获得绕0/360边界的完美环绕,图30B中的变量w和W /w必须是整数。此外,为了使条带边缘上的抗混叠完美执行,必须 采用更宽的条带,并且然后提取中间部分。再次,将会被修整的条带 宽度及其边缘必须具有整数像素大小。
[0195] 在一个实施例中,还对右眼图像执行相同的快照。可以通过在快 照之前调整两个相机的开始位置或者通过移位最终全景图来完成控 制零视差距离。为了在f0获得零视差,所要求的移位量D由下式给出:
[0196]
[0197] 图30C示出了创建此类全景图像并将其引入观看器的结果。
[0198] 在图31中示出的一个实施例中,相机3101-3102定位在例如上 面所描述的“内八字”设置中。然而,不像上面描述的实现,在图31 中使用非常窄的平截头体。因此,没有呈现垂直差异并且内八字设置 准确地操作。然而,图31中的实施例不提供完全全景覆盖,其中所 产生图像的顶部和底部区域保持“空白”。这就是图30C中地板上的 “黑洞”的原因,这显著降级了用户体验。
[0199] 要提到的另一件事是所获得的全景图是圆柱全景图(由于其如何 被创建的性质)。当它在意图用于球面全景图的观看器中被观看时, 失真接近边缘产生。垂直视野得到越多,失真越明显。必须使用特殊 着色器以便修复这种失真。
[0200] 总而言之,此实现的主要益处是其实现的简单性。其缺点包含由 于大量条带(720个渲染调用)、用于将它们组合在一个图像中的它 们随后的副本以及用于正确的抗混叠的多余的渲染区域而缺乏完全 覆盖和相对繁重的计算。
[0201] Bourke实现的扩展
[0202] 上面描述的技术不提供完全覆盖的事实是重要的。回想一下,这 些技术针对周围环境生成圆柱覆盖。例如,图33A示出了拍摄快照的 相机,其具有大的垂直视野角度(在这种情况下90度)和窄水平视 野角度的平截头体。这产生了窄条带,其将进一步复合成单个全景图 像。
[0203] 图33B示出了解决这些问题中的至少一些问题的一种实现。不存 在可以实现具有完全连续性且没有重叠区域的周围环境的完全覆盖 的几何设置。这不能通过操纵产生矩形图像的常规相机平截头体来完 成。图33B示出了某种实现,其中平截头体位置向上旋转45度以覆 盖周围环境的上半部分并且向下旋转45度以覆盖下半部分。由于其 垂直视野为
90°,因此在垂直和水平尺寸上都实现了完全覆盖。然而, 可以看出条带之间存在重叠区域。
[0204] 图34示出了通过图33B中的设置产生的图像中的“锯齿状伪影”。 朝向极点,由于条带之间的较大重叠,伪影变得更加明显。然而,结 果是(如参考文献[14]中所建议的)当每个条带的宽度不超过一个像 素时,伪影消失。每个条带仍然必须通过重叠区域渲染,所述区域将 如先前所描述地修整以用于正确的抗混叠处理。所得到的图像现在看 起来完美连续,但它仍然不完美。由于图像通过锥形轮廓的设置产生 以及其在球面观看器上观看的事实,它具有失真。
[0205] 在本发明的一个实施例中,通过针对每个像素定位假想的射线与 锥面交叉的位置(基于像素位置),将其扩展用于与球体的交叉并使 用来自球体交叉的“y”坐标来修复此问题。
[0206] 为了运用现代具有立体能力的装置(具有daydream/GearVR或 其它的智能手机)的分辨率,针对一个眼睛的全景图像的分辨率应该 接近6000×3000像素(假设90度垂直视野)。对于上面的实现,这 意味着24,000个渲染调用(对于每个眼睛,顶部6000个条带,并且 底部6000个条带)以及随后的修整和复合,使其不可使用于实时应 用。此外,最终结果并不完美。在底部可以看到非常令人不愉快的涡 旋伪影。由于涡旋方向对于左和右图像相反的事实,效果在立体中甚 至更加突出(通过其强度以及其影响的区域两者)。例如,图35A示 出左图像涡旋,并且图35B示出右图像涡旋。
[0207] 伪影从立体视觉全景图像的充分定义得到。当朝向地平线(接近 0纬度)看时,对于每个“头位置”,至少在屏幕的中间看到不同的 点。然而,当用户向下看并转身时,从不同位置看到相同的点。虽然 基于用户的头位置示出立体信息将会是正确的,但是在全景图像的极 点处仅有一个像素。这是每一个立体视觉全景图像的限制。这里的一 个解决方案是要在接近极点时逐渐淡出立体效果(减小眼间距离)。
[0208] 总之,虽然上面实施例实现了完全覆盖,但是其运行显著更慢并 且接近极点遭受涡旋伪影的影响。
[0209] 本发明的实施例
[0210] 本发明的一个实施例包含用于在游戏引擎中产生立体视觉全景 图像的技术,其在质量和性能方面均胜过上面描述的实现。此实施例 实现或接近实时性能,并且因此可以集成在实时产生工作流中。
[0211] 如上面描述的,用于立体视觉全景图产生的最佳解决方案是射线 投射,其实现完全覆盖并消除涡旋伪影。然而,射线投射与游戏引擎 当前如何渲染图形非常不同。不是通过对应的纬度/经度角度针对每个 像素投射射线,而是如果可以针对每个顶点找到对应的角度使得通过 它们旋转立体设置将使射线穿过该顶点,则每个顶点的位置在最终的 全景图中已知。
[0212] 考虑图36A中的立体设置和空间中的顶点3601。一个实施例找 到绕'X'轴旋转设置的纬度角度θ,以及绕'Y'轴旋转设置的经度角度 φ,使得射线将遍历空间中的给定点(例如,顶点),如在图36B中。 当然,对于左和右眼将存在不同的解决方案。
[0213] 使用以下现象来得出解决方案。考虑由空间中给定点创建的假想 圆圈。它的中心在Y轴上,它与X-Z平面平行,并且经过给定点。然 后,在通过θ提升立体设置之后,对于每一个φ,射线将会遍历圆圈。 这个新约束通过将其进行分解成两个更简单的单独问题来大大地简 化了解决方案:首先找到θ,然后找到φ。下面相对于图40A-C详细 描述此问题的一种解决方案。
[0214] 注意到,图37A中示出了存在无解决方案区域,其是在图37B 中缩小的相同区域。虽然这个区域扩展到无穷远,但尽管如此它非常 小。可以观察到,此无解决方案区域与立体设置的几何(即,眼间距 离和零视差距离)相关。如先前所讨论的,眼间距离和零视差距离之 间的比率应该在1/20和1/30之间,因此区域非常窄(比图37A-B中 呈现的窄得多)。此外,如上面所描述的,无解决方案区域位于极点 处,通过减少眼间距离来淡出接近极点的立体效果是良好的实践,这 将使无解决方案区域最小化。因此,这个区域不表示现实世界实现中 的问题。
[0215] 顶点着色器通常将顶点从3D空间投射到2D平面。在下一渲染 阶段,像素着色器将根据在多边形中的顶点之间插入的顶点属性(以 及可以添加的其它逻辑)对每个像素上色。顶点着色器输出中的2D 平面具有四个坐标,并且称为NDC空间(归一化装置坐标)。前两 个是2D平面的“X-Y”坐标,并且第三个坐标“Z”含有关于顶点距 相机的距离的信息,其通常用于正确的遮挡计算。第四坐标'W'也含有 一些距离信息,并且用于准确的透视相关插值。在通过W归一化NDC 之后获得归一化范围中的正确x-y位置,但是顶点着色器必须在归一 化之前输出坐标(例如,OpenGL中的gl_Position)。在一个实施例 中,重新调用此信息以在不使用投射矩阵的情况下重建NDC。
[0216] 生成对应于全景图像和在其位置的每个顶点的位置的NDC(对 应于刚刚找到的其纬度/经度角度)。虽然这是可操作的解决方案,但 是接近极点可能存在大的失真,因为两个顶点之间的一切将会被插值 为直线而不是曲线。此外,不连续区域将在经度=180度(地球仪上 的“日界线”)实现。跨越日界线的小多边形将通过整个屏幕拉伸, 因为一些顶点将会投射到接近经度=180度的图的右侧并且投射到接 近经度=-180度的左侧。只要顶点不正好位于极点,多边形将从不跨 越极点。想到相机位于原点(Y轴向上)并且多边形由下面的四个对 称坐标组成的设置:(5,-5,5),(5,-5,-5),(-5,-5,5)和(-5,-5,-5)。 在这种情况下,多边形将会在全景图中表示为完美直线,并且这些将 会根本不可见。
[0217] 所有这些都由于某种程度上包括球面性质的顶点被投射(相机周 围环境)到矩形平面的事实而发生。如果不是这样做,周围环境被投 射到围绕相机的立方体的六个平面以生成立方体图,并且然后立方体 图被转化成等矩形投射(如上面讨论的),这将解决先前描述的所有 问题,因为立方体的每个侧是平面,并且因此紧密接近顶点着色器一 般进行的操作-将场景投射到平面。
[0218] 一个实施例实现以下工作流。对于每个顶点,计算纬度/经度。然 后通过经度角度旋转立体设置的初始位置,以获得针对立体的右/左相 机的位置。射线现在从相机开始并穿过顶点。通过立方体图的平面的 一个确定射线的交叉,并从此交叉为NDC检索X-Y坐标(因为每个 立方体侧现在用作屏幕)。图38A示出了设置。
[0219] 必须确定立方体的尺寸。可以看出,由于射线不是从中心投射的, 因此改变平面距原点的距离影响NDC中的最终位置。事实是,不存 在给出所有顶点的正确的结果的此类距离。但是注意到有趣的事情 是,如果选择零视差距离,则获得的结果靠近正确的距离。
[0220] 虽然引入了在场景几何中难以辨别的失真,但是如与从Maya获 得的(例如,通过使用Domemaster3D插件的射线投射方法)相同全 景图像相比,观察它们引起眼睛疲劳(当通过立体装置观察时)。观 察到此类全景图像的一些人报告了令人不快的不适感,就好像很难聚 焦在场景中的对象上。
[0221] 为了解决此问题,一个实施例不仅将顶点投射到平面,而且以下 列方式定位它们:在应用(上面描述的)全景着色器之后,顶点将到 达计算的纬度/经度位置。为了该目的,本发明的一个实施例生成定位 在原点并指向朝向-Z方向(即,假想的中心相机)的射线。通过获得 的纬度/经度值旋转射线,并且所得到的射线与立方体侧交叉。这是由 于应用的全景着色器假设相机在原点并且没有移位以用于立体的事 实。注意到,此射线将不穿过给定顶点。当从中心射出射线时,平面 距离没有意义,因为在归一化之后交叉会在相同位置。
[0222] 图38B示出了在由圆点3801标记的点处与前立方体平面交叉的 中心相机射线。注意到,尽管交叉在平面上(由网格表示),但它在 立方体侧3802之外(通过虚线示出)。这是可以接受的,因为顶点 可落在可见区域之外。仍然需要确定移位的相机位置(即,右和左相 机的位置),因为NDC空间中的“Z”和“W”应该从相机“射出” 的位置计算。否则,深度计算将会是不正确的并且应该在其它对象后 面的一些对象将出现在它们前面。
[0223] 还注意到,为了简化解决方案,可以仅针对前立方体平面解决最 终投射。对于其它平面,可以旋转设置使得解决方案将会与前平面解 决方案等同。有趣地提到,不要求剔除相机后面的面,因为它们被投 射到具有负W坐标的平面并且硬件自动剔除它们。
[0224] 在一个实施例中,每个顶点被正确地放置在最终纬度/经度图中, 并且正确地计算深度和W。然而,大多边形的插值仍然存在问题。由 于多边形顶点的每个顶点都是从不同的相机位置“拍摄”的,因此中 间的纹理插值对于左和右解决方案将会略微不同。在存在其它对象时 这变得明显。
[0225] 图39A和图39B分别示出了相同全景图的示例左和右图像。此 场景中的地板由非常大(大于屏幕大小)的多边形表示。圆点3901a-b 标记分块角,并且圆点3902a-b标记墙角。注意到,在左图中,点3902a 在点3901a的右侧,而在右图像中,圆点3902b在圆点3901b的左边。 在立体中,这创建不正确深度的效果,就好像墙壁和地板之间存在间 隙,而在给定场景中不存在此类间隙。
[0226] 本发明的一个实施例通过将大多边形曲面细分成较小的多边形 来解决此问题。此外,如上面解释的,位于相机下方和上方的多边形 可以被曲面细分,以便创建针对立体视觉的逐渐淡出。现代图形卡针 对多边形提供动态的基于硬件的曲面细分,利用GPU的高并行性。 因此,一个实施例不手动地对多边形进行曲面细分,而是在工作流中 集成曲面细分并应用恰当的逻辑。注意到,不仅在多边形变得更小时, 而且在多边形距相机更远时,问题变得较不突出。这是因为负责插值 差异的眼间距离变得较不显著。
[0227] 在一个实施例中,应用曲面细分以确保没有多边形侧大于屏幕的 某一部分(例如,5%,10%等)。当利用上面描述的所有技术时, 所获得的结果表明与使用Domemaster3D从Maya获得的立体视觉全 景图像100%匹配。
[0228] 曲面细分可对性能具有影响。如果性能是问题,可以手动对场景 模型进行一次曲面细分,并且然后用于没有曲面细分阶段的全景图产 生。现代硬件能够实时处理大量顶点,因此一旦加载到GPU,手动曲 面细分的场景将比动态曲面细分场景显著更快执行。此外,在本发明 的实施例中可以采用各种优化技术,从有效剔除开始到多渲染目标 (其应该允许在单个渲染调用中为右和左眼渲染六个立方体侧)。
[0229] 总之,可以采用以下技术中的一种或多种来改进全景渲染:
[0230] (1)在一个实施例中,使用曲面细分模型或硬件曲面细分,使 得没有多边形侧大于屏幕的10%。
[0231] (2)对于每个顶点,确定纬度/经度角度使得通过这些角度旋转
[0232] (3)假想虚拟中心相机通过获得的纬度/经度旋转,与立方体图 的前平面交叉,以及基于NDC归一化从交叉获得的X-Y坐标。
[0233] (4)通过使用经度角度旋转其原始位置来确定立体相机位置。
[0234] (5)基于所获得的右/左相机位置确定'Z'和'W'NDC坐标分量。
[0235] (6)可以将更新的相机位置传递到片段着色器以改进光计算。
[0236] (7)操作1至6可以在每次旋转设置以匹配前平面解决方案时 应用于六个立方体平面中的每一个平面。
[0237] (8)应用上面描述的全景着色器(参见例如图18A至24)以将 所获得的立方体图转化为等矩形全景图像。
[0238] (9)将操作1至8应用于第二虚拟相机。
[0239] 图41中示出了用于改进全景渲染的方法的一个实施例。此方法 可以在上面描述的图形架构的上下文内实现,但不限于任何具体图形 架构。
[0240] 通过立方体图的第一平面开始,在4101,针对一个眼睛(例如, 左眼)针对当前场景生成几何对象,并对该几何对象执行曲面细分。 如提到的,在一个实施例中,使用曲面细分模型或硬件曲面细分来限 制多边形侧。
[0241] 在4102,对于每个顶点,确定纬度/经度角度,使得通过这些角 度旋转的立体设置将使相机/眼睛射线(针对期望的眼睛/相机)穿过 顶点(参见例如,相对于图40A-C描述的解决方案)。
[0242] 在4103,假想中心相机/眼睛通过获得的纬度/经度旋转,将其与 立方体图的前平面交叉并获得归一化的X-Y坐标(例如,使用NDC)。
[0243] 在2404,通过使用经度角度旋转其原始位置来确定立体相机/眼 睛位置,并且在2405,将更新的相机位置传递到片段着色器以用于光 计算。在2405,基于所获得的右/左相机位置确定'Z'和'W'NDC坐标分 量;可以可选地将更新的相机位置传递到片段着色器以改进光计算。
[0244] 如果在4107确定当前平面不是立方体图的最终平面,则在4108 选择下一平面并且重复操作4101-4106。如果当前平面是最终平面, 则在2409,应用全景着色器以将所获得的立方体图转化成等矩形图像 (在4109)。
[0245] 如果在4107确定已经仅针对一个眼睛/相机执行上面的操作集 合,则在4111选择下一眼睛/相机(例如,右眼/相机)并且针对立方 体图的每个平面重复所述过程。
[0246] 本发明的这些实施例的益处包含实现周围环境的完全覆盖而在 极点处没有不期望的伪影(例如,涡旋)的事实。此外,这些实施例 使能基于OpenGL的渲染引擎的平滑集成。如果已经存在产生全景图 像的渲染引擎,则可以通过简单地将函数添加到更新相机位置并计算 NDC的顶点着色器来执行涉及立体渲染的实施例。如果手动曲面细分 不是选项,则还添加动态曲面细分阶段。上面的实现比用于游戏引擎 的所有其它描述的技术更有效得多地执行。
[0247] 射线投射匹配数学解
[0248] 考虑图40A-C中的设置。图40A示出了由红圆点表示的空间中 的某一点V以及具有左和右相机的立体设置的初始位置。让我们将 点分量称为(Vx,Vy,Vz)。问题是要针对每个相机找到两个角度 θ和φ,使得从该相机投射的射线将穿过点V。θ是通过从其绕X轴 的初始位置旋转设置而获得的仰角(如在图2中)。Φ是绕Z轴的旋 转(图40C)。
[0249] 容易示出,在通过θ提高设置之后,然后对于每一个 射线将 会与位于Y=Vy平面上、经过V并且在其中心具有Y轴的圆圈(在 图40B和40C中的大圆圈)交叉。这将问题分解为两个更简单的问题: 找到θ,然后找到φ。
[0250] 让我们将小圆圈的半径称为d,其对应于眼间距离的一半。
[0251] 初始位置中的射线将在“零视差”距离处相遇。让我们通过P表 示它。而且,让我们通过R表示大圆圈(经过V)的半径。
[0252] 让我们解决左眼的问题。简单地通过对d取负来获得右眼的解。
[0253] 在通过θ提升之后交叉点会是在:(O,P sinθ,-P cosθ)。左眼的射 线将在(-d,0,0)开始,穿过位于大圆圈上的(x,y,z)并穿过交叉点。对 于那些,我们可以把线的等式写成:
[0254] (-d,0,0)+(d,P sinθ,-P cosθ)t=(x,y,z)
[0255] 因此,我们可以写出具有四个未知数的四个等式,而它们中的一 个在三角函数内:
[0256]
[0257] 其中四个未知变量是:{x,z,t,θ}。
[0258] 从第二等式中提取t并且从第一等式中提取z将3和4带到以下 形式:
[0259]
[0260] 现在我们得到具有两个未知变量的两个等式。从上面的第二个等 式中提取的x由下式给出:
[0261]
[0262] 现在,如果我们将它用于(后两个的)第一个等式,则将两边提 高2次幂并尝试简化我们最终得到以下等式:
[0263] P2Vy2cosθ2=sinθ2(R2P2-P2d2)+2Pd2Vysinθ-Vy2d2
[0264] 让我们对以下常量给出新名称:
[0265]
[0266] 并且然后我们得到以下等式:
[0267] αcosθ2+βsinθ2+γsinθ+d=0
[0268] 记住:cosθ2=1-sinθ2
[0269] 用此我们得到简单的二次等式:
[0270] x2(β-α)+γsinθ+δ+α=0
[0271] 并且其解当然由以下给出:
[0272]
[0273] 这给出了仰角。当然,负判别式意味着没有解。而且,可以示出, 对于y>0,具有“负号”的解是正确的解,并且对于y<0,我们选择 具有“正号”的解。
[0274] 将其代入原始等式给出我们与大圆圈的交叉的x和y。现在 只 是二维向量(x,z)和(Vx,Vz)之间的角度。可以通过在它们之间使用点积 来找到它。
[0275] 注意到,解不能用于当θ=0(即没有仰角)时的情况。这是因为 在原始设置中我们在等式4的两侧都有零,并且在等式展开的进一步 阶段中我们将除以零。
[0276] 然而,这种情况的解非常简单。我们可以把线等式写成:
[0277] (-d,0)+(d,-P)t=(x,z)
[0278] 其给出了具有三个未知变量的三个等式:
[0279]
[0280] 将来自前两个等式中的x和z代入第三等式并稍微简化它,给出 以下:
[0281] (d2+P2)t2-2d2t+d2-R2=0
[0282] 并且其解是:
[0283]
[0284] 注意到,只有具有'+'的解将是好的,因为t必须是正的。
[0285] 上面描述的实施例提供了有效且高质量的重投射技术,其对于渲 染高帧速率多视图显示器(例如立体视觉VR HMD)是特别有益的。 在此类系统中,仅在着色成本的大量摊销情况下提供所要求的每秒像 素/采样速率是可能的。重投射是可用于运用帧的高时间和空间一致性 的技术中的一种。
[0286] 本申请还公开了一组技术方案,如下:
[0287] 技术方案1.一种方法,包括:
[0288] 接收3D坐标系中的几何图元的顶点;
[0289] 确定全景图像中所述顶点的每个的、等效于纬度和经度坐标的最 终位置;以及[0290] 根据所述顶点的每个的所述最终位置来渲染所述全景图像。
[0291] 技术方案2.如技术方案1所述的方法,其中实现反向射线投射 技术以执行确定所述最终位置的操作。
[0292] 技术方案3.如技术方案1所述的方法,还包括:
[0293] 基于从左虚拟相机投射出的第一射线来确定一个或多个纬度角 度和经度角度的集合,所述左虚拟相机要与虚拟立体相机上的右虚拟 相机和虚拟中心相机组合。
[0294] 技术方案4.如技术方案3所述的方法,还包括:
[0295] 使用纬度和经度角度的所述集合旋转所述虚拟中心相机;以及
[0296] 基于从虚拟中心相机投射的第二射线与用于所述全景图像的立 方体图表示的立方体图平面的交叉来确定第一归一化装置坐标 (NDC)。
[0297] 技术方案5.如技术方案4所述的方法,还包括:
[0298] 通过所述经度角度的一个或多个来旋转所述立体相机位置以确 定当前立体相机位置;以及
[0299] 基于所确定的立体相机位置来确定第二NDC。
[0300] 技术方案6.如技术方案5所述的方法,其中所述第一NDC包括 X和Y NDC,并且其中所述第二NDC包括Z和WNDC。
[0301] 技术方案7.如技术方案2所述的方法,其中所述反向射线投射 技术包括给定射线穿过的场景中的点,确定所述射线的初始方向或纬 度/经度角度。
[0302] 技术方案8.一种机器可读介质,具有存储在其上的程序代码, 所述程序代码当由机器执行时,使所述机器执行以下操作:
[0303] 接收3D坐标系中的几何图元的顶点;
[0304] 确定全景图像中所述顶点的每个的、等效于纬度和经度坐标的最 终位置;以及[0305] 根据所述顶点的每个的所述最终位置来渲染所述全景图像。
[0306] 技术方案9.如技术方案8所述的机器可读介质,其中实现反向 射线投射技术以执行确定所述最终位置的操作。
[0307] 技术方案10.如技术方案8所述的机器可读介质,还包括使所述 机器执行以下操作的程序代码:
[0308] 基于从左虚拟相机投射出的第一射线来确定一个或多个纬度角 度和经度角度的集合,所述左虚拟相机要与虚拟立体相机上的右虚拟 相机和虚拟中心相机组合。
[0309] 技术方案11.如技术方案10所述的机器可读介质,还包括使所 述机器执行以下操作的程序代码:
[0310] 使用纬度和经度角度的所述集合旋转所述虚拟中心相机;以及
[0311] 基于从虚拟中心相机投射的第二射线与用于所述全景图像的立 方体图表示的立方体图平面的交叉来确定第一归一化装置坐标 (NDC)。
[0312] 技术方案12.如技术方案11所述的机器可读介质,还包括使所 述机器执行以下操作的程序代码:
[0313] 通过所述经度角度的一个或多个来旋转所述立体相机位置以确 定当前立体相机位置;以及
[0314] 基于所确定的立体相机位置确定第二NDC。
[0315] 技术方案13.如技术方案12所述的机器可读介质,其中所述第 一NDC包括X和Y NDC,并且其中所述第二NDC包括Z和WNDC。
[0316] 技术方案14.如技术方案9所述的机器可读介质,其中所述反向 射线投射技术包括给定射线穿过的场景中的点,确定所述射线的初始 方向或纬度/经度角度。
[0317] 技术方案15.一种图形处理设备,包括:
[0318] 存储装置,用于存储3D坐标系中的几何图元的顶点;
[0319] 顶点处理器,用于确定全景图像中的所述顶点的每个的、等效于 纬度和经度坐标的最终位置;以及
[0320] 渲染引擎,用于根据所述顶点的每个的所述最终位置渲染所述全 景图像。
[0321] 技术方案16.如技术方案15所述的图形处理设备,其中实现反 向射线投射技术以执行确定所述最终位置的操作。
[0322] 技术方案17.如技术方案15所述的图形处理设备,其中所述顶 点处理器要基于从左虚拟相机投射出的第一射线来确定一个或多个 纬度角度和经度角度的集合,所述左虚拟相机要与虚拟立体相机上的 右虚拟相机和虚拟中心像机组合。
[0323] 技术方案18.如技术方案17所述的图形处理设备,其中所述顶 点处理器还要:
[0324] 使用纬度和经度角度的所述集合旋转所述虚拟中心相机;以及
[0325] 基于从虚拟中心相机投射的第二射线与用于所述全景图像的立 方体图表示的立方体图平面的交叉,确定第一归一化装置坐标 (NDC)。
[0326] 技术方案19.如技术方案18所述的图形处理设备,其中所述顶 点处理器还要:
[0327] 通过所述经度角度的一个或多个来旋转所述立体相机位置以确 定当前立体相机位置;以及
[0328] 基于所确定的立体相机位置来确定第二NDC。
[0329] 技术方案20.如技术方案19所述的图形处理设备,其中所述第 一NDC包括X和Y NDC,并且其中所述第二NDC包括Z和WNDC。
[0330] 技术方案21.如技术方案16所述的图形处理设备,其中所述反 向射线投射技术包括给定射线穿过的场景中的点,确定所述射线的初 始方向或纬度/经度角度。
[0331] 本申请中使用的术语“模块”、“逻辑”和“单元”可以指用于 执行指定功能的电路。在一些实施例中,所指定的功能可以由结合软 件的电路执行,例如通过由通用处理器执行的软件。
[0332] 本发明的实施例可包含上面已描述的各种步骤。所述步骤可以体 现在机器可执行指令中,所述机器可执行指令可以用于使通用或专用 处理器执行所述步骤。备选地,这些步骤可以由含有用于执行该步骤 的硬连线逻辑的特定硬件部件来执行,或者由编程的计算机部件和定 制硬件部件的任何组合来执行。
[0333] 如本文所描述的,指令可以指硬件(例如配置成执行某些操作或 具有预定功能性的专用集成电路(ASIC))或存储在以非暂时性计算 机可读介质而体现的存储器中的软件指令的特定配置。因此,可以使 用在一个或多个电子装置(例如,终端站、网络元件等)上存储和执 行的代码和数据来实现图中示出的技术。此类电子装置使用计算机机 器可读介质(例如,非暂时性计算机机器可读存储介质(例如,磁盘; 光盘;随机存取存储器;只读存储器;闪存装置;相变存储器)和暂 时性计算机机器可读通信介质(例如,电、光、声或其它形式的传播 信号-例如载波、红外信号、数字信号等))存储和传递(通过网络在 内部和/或与其它电子装置)代码和数据。
[0334] 此外,此类电子装置通常包含一个或多个处理器集合,其耦合到 一个或多个其它部件,例如一个或多个存储装置(非暂时性机器可读 存储媒体)、用户输入/输出装置(例如,键盘、触摸屏和/或显示器) 以及网络连接。处理器和其它部件的集合的耦合通常通过一个或多个 总线和桥(也称为总线控制器)。存储装置和携带网络业务的信号分 别表示一个或多个机器可读存储介质和机器可读通信介质。因此,给 定电子装置的存储装置通常存储用于在该电子装置的一个或多个处 理器的集合上执行的代码和/或数据。当然,可以使用软件、固件和/ 或硬件的不同组合来实现本发明的实施例的一个或多个部分。遍及此 详细描述中,出于解释的目的,阐述了许多特定细节以便提供对本发 明的透彻理解。然而,对于本领域技术人员将显而易见的是,可以在 没有这些特定细节中的一些的情况下实践本发明。在某些实例中,没 有以详尽的细节描述众所周知的结构和功能,以便避免模糊本发明的 主题。相应地,本发明的范围和精神应该根据跟着的权利要求来判断。
高效检索全球专利

专利汇是专利免费检索,专利查询,专利分析-国家发明专利查询检索分析平台,是提供专利分析,专利查询,专利检索等数据服务功能的知识产权数据服务商。

我们的产品包含105个国家的1.26亿组数据,免费查、免费专利分析。

申请试用

分析报告

专利汇分析报告产品可以对行业情报数据进行梳理分析,涉及维度包括行业专利基本状况分析、地域分析、技术分析、发明人分析、申请人分析、专利权人分析、失效分析、核心专利分析、法律分析、研发重点分析、企业专利处境分析、技术处境分析、专利寿命分析、企业定位分析、引证分析等超过60个分析角度,系统通过AI智能系统对图表进行解读,只需1分钟,一键生成行业专利分析报告。

申请试用

QQ群二维码
意见反馈