CN115690301A - 图形处理系统 - Google Patents
图形处理系统 Download PDFInfo
- Publication number
- CN115690301A CN115690301A CN202210898086.9A CN202210898086A CN115690301A CN 115690301 A CN115690301 A CN 115690301A CN 202210898086 A CN202210898086 A CN 202210898086A CN 115690301 A CN115690301 A CN 115690301A
- Authority
- CN
- China
- Prior art keywords
- ray
- ray tracing
- execution unit
- programmable execution
- unit
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Pending
Links
Images
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06T—IMAGE DATA PROCESSING OR GENERATION, IN GENERAL
- G06T1/00—General purpose image data processing
- G06T1/20—Processor architectures; Processor configuration, e.g. pipelining
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06T—IMAGE DATA PROCESSING OR GENERATION, IN GENERAL
- G06T15/00—3D [Three Dimensional] image rendering
- G06T15/005—General purpose rendering architectures
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06T—IMAGE DATA PROCESSING OR GENERATION, IN GENERAL
- G06T15/00—3D [Three Dimensional] image rendering
- G06T15/04—Texture mapping
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06T—IMAGE DATA PROCESSING OR GENERATION, IN GENERAL
- G06T15/00—3D [Three Dimensional] image rendering
- G06T15/06—Ray-tracing
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06T—IMAGE DATA PROCESSING OR GENERATION, IN GENERAL
- G06T17/00—Three dimensional [3D] modelling, e.g. data description of 3D objects
- G06T17/10—Constructive solid geometry [CSG] using solid primitives, e.g. cylinders, cubes
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06T—IMAGE DATA PROCESSING OR GENERATION, IN GENERAL
- G06T2210/00—Indexing scheme for image generation or computer graphics
- G06T2210/21—Collision detection, intersection
Landscapes
- Engineering & Computer Science (AREA)
- Physics & Mathematics (AREA)
- General Physics & Mathematics (AREA)
- Theoretical Computer Science (AREA)
- Computer Graphics (AREA)
- Geometry (AREA)
- Software Systems (AREA)
- Image Generation (AREA)
Abstract
本文公开了一种在使用光线追踪过程渲染表示场景视图的帧时操作图形处理器的方法,其中用于光线追踪操作的处理的一部分被卸载到该图形处理器的纹理映射器单元。因此,当该图形处理器的执行单元正在执行程序以执行光线追踪操作时,该执行单元能够向该纹理映射器单元发送消息以执行用于该光线追踪操作的一个或多个处理操作。此操作可以通过在光线追踪程序内包括用于向该纹理映射器单元发送消息的适当指令来触发。
Description
背景技术
本文所述的技术涉及图形处理系统,并且具体地讲,涉及帧(图像)的渲染以用于显示。
图1示出了示例性片上系统(SoC)图形处理系统8,其包括中央处理单元(CPU)1、图形处理器(GPU)2、显示处理器3和存储器控制器5形式的主机处理器。
如图1所示,这些单元经由互连器4进行通信并且具有对片外存储器6的访问权限。在该系统中,图形处理器2将渲染待显示的帧(图像),然后显示处理器3将这些帧提供给显示面板7以用于显示。
在该系统的使用中,在主机处理器(CPU)1上执行的应用13诸如游戏将例如需要在显示面板7上显示帧。为此,该应用将为在CPU 1上执行的图形处理器2向驱动器11提交适当的命令和数据。驱动器11然后将生成适当的命令和数据,以使图形处理器2渲染适当的帧以用于显示并将那些帧存储在适当的帧缓冲器中,例如存储在主存储器6中。然后,显示处理器3将这些帧读取到用于显示的缓冲器中,然后从该缓冲器中读取这些帧并将其显示在显示器的显示面板7上。
可由图形处理器执行的一个渲染过程是所谓的“光线追踪”。光线追踪是一种渲染过程,其涉及从视点(有时称为“相机”)通过图像平面中的采样位置将光线的路径追踪到场景中,以及模拟这些光线与该场景中的对象之间的交互效果。输出数据值(例如,图像中的采样点)基于场景中与穿过采样位置的光线相交的对象以及那些对象的表面的特性来确定。光线追踪计算是复杂的,并且涉及针对每个采样位置确定在场景内与穿过采样位置的光线相交的一组对象。
与例如基于光栅化的渲染技术相比,光线追踪被认为提供了更好的(例如更真实的)、物理上更准确的图像,尤其是在捕获反射、折射、阴影和照明效果的能力方面。然而,光线追踪可显著地比光栅化更处理密集。
申请人相信,仍然存在用于使用图形处理器执行光线追踪的改进技术的范围。
附图说明
现在将仅以举例的方式并参考附图来描述本文所述技术的实施方案,其中:
图1示出了示例性图形处理系统;
图2是示出“全”光线追踪过程的示意图;
图3示出了示例性光线追踪加速数据结构;
图4是示出全光线追踪过程的实施方案的流程图;
图5是示出“混合”光线追踪过程的示意图;
图6示意性地示出了能够以本文所述技术的方式操作的图形处理器的实施方案;
图7示出了图形处理器的纹理映射器单元的进一步细节;
图8示意性地示出了根据本文所述技术的一个实施方案的纹理映射器单元中的数据流;
图9示意性地示出了根据本文所述技术的另一个实施方案的纹理映射器单元中的数据流;
图10为示出本文所述技术的实施方案的流程图;并且
图11示出了着色器程序编译过程的实施方案。
在适当的情况下,类似的附图标号用于附图中的类似元件。
具体实施方式
本文所述技术的第一实施方案包括一种在使用光线追踪过程渲染表示场景视图的帧时操作图形处理器的方法,
该图形处理器包括:
可编程执行单元,该可编程执行单元可操作为执行程序以执行图形处理操作;以及
纹理映射器单元,该纹理映射器单元可操作为响应于来自可编程执行单元的对图形纹理化操作的请求而执行图形纹理化操作;
该方法包括:
当可编程执行单元正在执行程序以执行光线追踪操作时,该光线追踪操作使用指示待渲染场景的几何形状分布的光线追踪加速数据结构来确定能够与用于光线追踪操作的光线相交的待渲染场景的几何形状:
作为使用光线追踪加速数据的光线追踪操作的一部分,可编程执行单元向纹理映射器单元发送消息以使纹理映射器单元执行针对光线追踪操作的一个或多个处理操作,其中该一个或多个处理操作的结果被返回到可编程执行单元。
本文所述技术的第二实施方案包括一种图形处理器,该图形处理器可操作为使用光线追踪过程来渲染表示场景视图的帧,该图形处理器包括:
可编程执行单元,该可编程执行单元可操作为执行图形处理程序以执行图形处理操作;以及
纹理映射器单元,该纹理映射器单元可操作为响应于来自可编程执行单元的对图形纹理化操作的请求而执行图形纹理化操作;
其中:
当可编程执行单元正在执行程序以执行光线追踪操作时,该光线
追踪操作使用指示待渲染场景的几何形状分布的光线追踪加速数据结
构来确定能够与正被用于光线追踪操作的光线相交的待渲染场景的几
何形状,可编程执行单元可操作并且被配置为:作为使用光线追踪加
速数据结构的光线追踪操作的一部分,向纹理映射器单元发送消息以
使纹理映射器单元执行针对光线追踪操作的一个或多个处理操作,其
中该一个或多个处理操作的结果被返回到可编程执行单元。
本文所述的技术涉及在图形处理器上执行光线追踪。在本文所述的技术中,如下文将进一步解释的,光线追踪过程使用表示待渲染场景的几何形状的加速数据结构(诸如层次包围盒)来确定光线与正被渲染场景中的几何形状(例如,对象)的相交。因此,在一个实施方案中,光线追踪过程涉及遍历光线追踪加速数据结构以确定:针对正被用于光线追踪操作的光线,加速数据结构的哪些节点表示可能与该光线相交的几何形状(如果有的话)。
此遍历操作基本上涉及遍历光线追踪加速数据结构以及测试光线与跟光线追踪加速数据结构的相应节点相关联的盒相交(光线-盒测试),以确定哪些节点盒与哪些光线相交,例如,以确定因此接下来针对该光线应当测试哪些节点,以此类推,直到例如光线追踪加速数据结构的在最低级别处的末端节点。因此,此操作的结果是识别哪些末端节点(末端节点盒)包含可能与光线相交的几何形状。对于确定其表示能够与光线相交的几何形状的任何末端节点,然后确定由末端节点表示的哪个几何形状(如果有的话)实际上相交。
因此,一旦已经确定了哪些末端节点(如果有的话)表示能够与光线相交的几何形状(通过针对光线追踪加速数据结构的相应节点执行此类光线-盒相交测试),就可相应地确定该光线与占据与相交末端节点相关联的盒的几何形状的实际几何形状相交,例如通过测试光线与针对占据与末端节点相关联的盒的场景定义的各个几何形状单元(基元)相交。
此光线-基元测试可以作为与光线-盒测试相同的总体遍历操作的一部分来执行,使得遍历操作包括:用于确定哪些末端节点表示可能与光线相交的几何形状的光线追踪加速数据结构的初始遍历,以及随后确定哪个几何形状实际上与光线相交(如果有的话)。在这种情况下,末端节点在一个实施方案中被提交用于自身的光线-基元测试,例如使得由该末端节点(并且仅由该末端节点)表示的所有基元在一个实施方案中在一个实例中被测试。然而,不一定是这种情况,并且光线-基元测试可以在对遍历操作的后续单独步骤中执行。在这种情况下,根据需要,可以任何方式提交待测试的基元以进行测试。举例来说,作为使用光线追踪加速数据结构来确定(参考末端节点)能够与用于光线追踪操作的光线相交的几何形状的总体操作的一部分,可以提交由多个不同末端节点表示的基元以用于在一个实例中进行光线-基元测试。就这一点而言,各种布置将是可能的。
因此,在一个实施方案中,光线追踪操作涉及针对光线执行此类光线-盒和光线-基元相交测试(通常为‘光线-节点’相交测试)以确定针对该光线的几何相交。一旦已经确定针对正被用于渲染采样位置的光线的几何相交,光线追踪操作然后就相应地渲染表示场景的输出渲染帧中的采样位置。
因此,在实施方案中,正被执行的光线追踪操作包括光线追踪遍历操作,该光线追踪遍历操作包括遍历光线追踪加速数据结构,例如如上所述。在这种情况下,作为光线追踪遍历操作的一部分,可编程执行单元在一个实施方案中向纹理映射器单元发送消息(使可编程执行单元向纹理映射器单元发送消息)。然而,光线追踪操作可以涉及总体光线追踪操作的任何部分,该部分使用光线追踪加速数据结构来确定能够与(或与)正被用于光线追踪操作的光线相交的几何形状。例如,可编程执行单元可以在初始遍历期间向纹理映射器单元发送消息,例如当期望对特定节点执行光线-盒测试时。然而,可编程执行单元还或替代性地可以在后续确定实际几何形状相交期间向纹理映射器单元发送消息,例如当期望对由光线追踪加速数据结构的一个或多个特定末端节点表示的基元执行光线-基元测试时。
在本文所述的技术中,光线追踪过程由执行用于光线追踪过程的一个或多个适当程序的图形处理器执行。因此,图形处理器包括可编程执行单元,该可编程执行单元可操作为执行此类程序。例如,可以由可编程执行单元的相应执行线程来执行程序,其中各个执行线程对应于例如正被用于光线追踪过程的一条光线。在实施方案中,还可以将多个执行线程一起分组为执行线程组(或“翘曲”)以提高着色器程序执行效率,例如其中一组中的线程同步运行,例如一次一个指令。
在图形处理系统中常见的是,通过将所谓的“纹理”或纹理数据应用于待绘制的表面来生成表示场景的输出渲染帧中的采样位置的外观。通常通过以下方式来应用此类纹理:存储纹理元素或“纹素”的阵列,每个纹理元素表示给定的纹理数据(诸如颜色、亮度和/或光明/阴影等值),并且然后将纹素映射到对应元素上,诸如(并且实际上通常为)所考虑的渲染输出的一组采样位置。
为了促进此操作,本文所述技术中的图形处理器进一步包括纹理映射器单元,该纹理映射器单元可操作为:例如在渲染采样位置时,响应于来自可编程执行单元的对图形纹理化操作的请求,执行图形纹理化操作。因此,待由可编程执行单元执行的给定着色器程序可以包括用于纹理映射操作的纹理化指令,这些纹理映射操作需要由纹理映射器单元(硬件/电路)例如以对于图形处理器内的纹理映射器单元来说正常的方式执行。
在本文所述的技术中,光线追踪操作因此由执行一个或多个图形处理程序的图形处理器的可编程执行单元执行以执行光线追踪操作,如上所述。然而,在光线追踪操作期间并且在实施方案中,作为遍历操作的一部分,其中遍历光线追踪加速数据结构以确定可以与正被用于渲染帧中的采样位置的光线相交的几何形状,可编程执行单元触发纹理映射器单元以执行用于光线追踪操作的一个或多个处理操作。
换句话说,用于光线追踪操作的一些处理操作可以(并且被)卸载到纹理映射器单元,而不是可编程执行单元执行完整的光线追踪操作。
可编程执行单元因此可操作并且被配置为向纹理映射器单元发送消息,以使纹理映射器单元根据需要以及在需要时执行(一个或多个)光线追踪操作所需的一个或多个处理操作。然后,纹理映射器单元相应地执行所需的处理操作,并将处理操作的结果返回到可编程执行单元以供用于光线追踪操作的程序使用。
在本文所述的技术中,纹理映射器单元(硬件/电路)因此被有效地重新用作用于光线追踪操作的加速器。
然后,这具有以下效果:使用纹理映射器单元(硬件/电路)来执行一些光线追踪操作,而不是例如使用被编程为执行所需操作的更通用的可编程处理电路系统来执行完整的操作(并且不提供完全分离的且除现有纹理映射器单元之外的专用光线追踪硬件,从而减少了否则可能需要的额外硅面积)。
因此,不是可编程执行单元执行完整的光线追踪操作,包括遍历加速数据结构以确定可以与光线相交的几何形状以及然后确定实际上光线是否与任何几何形状相交,可编程执行单元将该处理中的一些卸载到纹理映射器单元,并且具体地讲,在一个实施方案中将遍历光线追踪加速数据结构以确定可以与光线相交的几何形状的操作的至少一部分卸载到纹理映射器单元,该纹理映射器单元然后将相关联的结果返回到可编程执行单元以供在光线追踪操作期间进一步使用。
如下文将进一步讨论的,就这一点而言,申请人已经认识到纹理映射器单元(硬件/电路)可能已经通常可操作并且被配置为有效地处置数据结构(例如,当执行正常纹理化操作时),这些数据结构类似于在光线追踪(例如,遍历)操作期间可能需要的那些数据结构。
例如,当图形处理着色器程序遇到纹理化操作时,纹理化指令通常从可编程执行单元发送到纹理映射器,从而请求纹理映射器执行纹理化操作。在一个实施方案中,对纹理映射器的纹理映射操作的请求(例如,指令)指示应当执行纹理映射操作的纹理数据值或“表面”(例如,纹理或“mipmap”)的一个或多个阵列。
用于纹理映射操作的指令可以例如指示(例如,使用一组坐标)涉及应当执行纹理映射操作的一个或多个采样位置。
因此,在实施方案中,执行纹理映射操作的请求(指令)可以指示定义待执行的纹理化操作(的各方面)的一个或多个输入参数(纹理化操作设置(控制数据))。可以使用一个或多个描述符来指示输入参数。该一个或多个描述符可以包含在指令中和/或可以存储(例如在存储器中)。用于存储该一个或多个描述符的存储装置(例如存储器)可以是与存储纹理数据值相同的存储器,或者可以是不同的存储器。响应于执行纹理映射操作的请求,纹理映射器可以可操作为例如从存储器获取并且可以获取执行纹理映射操作所需的描述符和/或输入参数。
描述符可以采取任何期望的和合适的形式。例如,描述符可以包括“纹理描述符”,其可以指示用于纹理映射操作的一个或多个“表面描述符”。表面描述符可以指示和/或描述应当执行纹理映射操作的纹理数据值或表面(纹理)的阵列。描述符可以进一步包括采样器描述符,其指示待用于纹理映射操作的参数(设置)。
当被指示执行纹理化操作时,纹理映射器单元然后从存储器读取所需的纹理,执行纹理映射(例如,滤波)操作,并将从该纹理采样的(例如,RGB)颜色返回到着色器程序,以便在对所考虑的片段和采样位置进行着色时使用。
相应地,通常针对光线(或光线组)执行光线追踪操作,其中单条光线根据其起点、方向和长度来定义。因此,作为从可编程执行单元发送到纹理映射器的消息(指令)的一部分,可以与在执行纹理化操作时将指示纹理化信息的方式类似的方式将该信息指示到纹理映射器单元,例如通过提供指示光线参数(例如,使用定义光线的起点和方向的一组坐标(例如,在x、y、z空间中)以及指示光线长度的值)的新指令。
因此,在实施方案中,当使可编程执行单元向纹理映射单元发送消息以执行用于正对光线执行的光线追踪操作的一个或多个处理操作时,从可编程执行单元发送到纹理映射器的消息(例如,指令)指示定义所考虑的光线的一组参数(例如,坐标)。
在一个实施方案中,消息(指令)还指示光线追踪加速数据结构的涉及待执行处理操作的节点。例如,这可以通过在消息(指令)中指示节点索引来完成,例如表示从所考虑的光线追踪加速数据结构的基节点地址的偏移。
对于消息(指令),也可以与纹理数据的描述符类似的方式(例如以消息的合适标头)来指示正被用于光线追踪操作的光线追踪加速数据结构的描述符,并且因此以相同的方式进行处置。
例如,可以针对光线追踪加速数据结构来构建描述符以指示例如光线追踪加速数据结构的基地址,从该基地址中对消息(请求)中指示的节点进行编索引。因此,可以在正常纹理化操作期间将获得纹理化/采样器描述符的方式类似的方式将描述符指示给纹理映射器并由纹理映射器获取,并且使用该描述符与节点索引一起来确定所考虑的节点。
然后可以与执行纹理化操作时将读入纹理数据的方式类似的方式,经由纹理映射单元的存储器接口相应地从存储器中加载所考虑的光线追踪操作所需的数据(这取决于光线追踪操作的哪个部分正被卸载到纹理映射单元,可以例如包括与针对光线待测试的节点相关联的一组子节点盒,和/或由节点表示的一组基元,取决于所考虑的节点以及该节点是父节点还是末端节点等)。例如,在一个实施方案中,关于加速数据结构的节点执行处理操作,并且经由纹理映射器单元的高速缓存系统来读入节点数据。
因此,在实施方案中,响应于可编程执行单元向纹理映射单元发送消息以关于加速数据结构的节点执行一个或多个处理操作,纹理映射器单元被配置为从存储器中加载针对节点的数据。
因此,申请人已经认识到,纹理映射器单元已经能够处置此类请求(指令),这些请求(指令)适合于提供光线参数的指示。
类似地,纹理映射器单元能够处置此类请求的高吞吐量,因为纹理映射器单元通常将(并且在一个实施方案中)设置有适当的电路系统(诸如“停放”缓冲区,如下文将解释的),以便于在正常纹理化操作期间处理大量纹理化请求,该电路系统因此也可用于在光线追踪操作期间以对应方式进行处理操作的请求。
纹理映射器还可以包括可用于光线追踪遍历操作的其他电路系统,诸如可用于处理压缩节点数据的未命中路径子系统和/或压缩电路系统,光线追踪遍历操作也可以使用单个指令来访问该压缩节点数据。因此,以这种方式重新利用纹理映射器可以比试图在图形处理器中其他地方执行此类操作更有效。
卸载到纹理映射器的光线追踪操作通常可以是任何合适且期望的处理操作。
在一个实施方案中,卸载到纹理映射器单元的处理操作是在光线追踪遍历操作期间关于光线追踪加速数据结构的单个节点待执行的处理操作。
例如,在实施方案中,可编程执行单元被配置为向纹理映射器单元发送消息,以使纹理映射器单元加载测试正被用于光线追踪操作的光线与光线追踪加速数据结构的给定单个节点相交所需的数据。因此,在实施方案中,可编程执行单元将此类加载操作卸载到纹理映射器,例如,不是试图使用图形处理器上的更通用的加载/存储电路系统来加载此类节点数据。由于纹理映射器已经被配置为加载类似的数据,因此此操作可能更有效,如上所述。
在这种情况下,纹理映射器单元然后还可以执行所需的光线和与所考虑的节点相关联的一个或多个盒之间的相交测试(其中的至少一些相交测试),以确定节点是否包含可能与所考虑的光线相交的几何形状,其中相交测试的结果然后相应地被返回到可编程执行单元(并且具体地讲,用于使可编程执行单元然后确定实际上与光线相交的任何几何形状,并且然后相应地渲染采样位置)。
因此,在实施方案中,光线追踪加速数据结构的各个节点表示场景内的一个或多个盒,并且其中针对正被用于光线追踪操作的光线对光线追踪加速数据结构的遍历包括测试光线与跟光线追踪加速数据结构的一个或多个节点相关联的相应盒相交,该方法包括(并且图形处理器被配置成使得):响应于遍历操作需要针对与跟光线追踪加速数据结构的给定节点相关联的盒(或一组盒)相交来对光线进行测试,可编程执行单元向纹理映射器单元发送消息以使纹理映射器单元加载针对所考虑的节点的相交测试所需的数据。
然后,使用纹理映射器单元加载的数据可以取决于所考虑的节点。例如,对于在光线遍历操作期间遇到的父节点,加载的数据可以是(并且在一个实施方案中,是)与待用于上述光线-盒相交测试的所考虑的节点相关联的一组(子)盒(框)。
在实施方案中,纹理映射器被进一步配置为测试光线与所考虑的节点相交。例如,当节点是父节点时,在一些实施方案中,进一步使纹理映射器测试光线与跟所考虑的节点相关联的(一个或多个)盒相交。因此,由纹理映射器返回的结果可以包括关于光线是否与正被测试的节点(盒)相交的指示。
在这种情况下,根据本文所述技术的实施方案的纹理映射器单元可以包括附加的相交测试电路(硬件),该相交测试电路(硬件)在一个实施方案中与纹理化(滤波)单元并行设置,并且可操作为执行光线-节点相交测试。
然后,可编程执行单元可以使用针对节点的相交测试的结果来确定接下来应当测试光线追踪加速数据结构的哪个节点,以此类推,从而确定可能与光线相交的几何形状。例如,在纹理映射器确定光线与给定节点的盒相交并且返回指示此情况的结果的情况下,遍历操作然后应当移动到测试加速数据结构中的下一个(例如,子)节点等,直到加速数据结构的末端节点的级别。
因此,在一个实施方案中,着色器程序控制遍历操作,例如以管理(接下来)应当测试哪些节点,以此类推,其中在遍历操作期间根据需要以及在需要时在适当的点向纹理映射器单元发送消息。
对于确定其包括可能与光线相交的几何形状的任何末端节点,可编程执行单元然后可以执行另外的程序以确定是否存在实际上与光线相交的任何几何形状(并且然后相应地进一步处理与光线对应的采样位置,诸如并且在一个实施方案中并且如下文将进一步讨论的,通过针对该采样位置投射另一条光线和/或对该采样位置进行渲染(着色))。
在实施方案中,纹理映射器单元可以另外或替代性地可操作并且被配置为对光线和由光线追踪加速数据结构的末端节点表示的各个几何形状单元(基元,例如三角形)执行后续的光线-基元相交测试。同样,这可以与上述方式类似的方式实施,其中纹理映射器单元在这种情况下被配置为加载由待测试的(一个或多个)末端节点等表示的基元。
在这种情况下,在实施方案中,针对(末端)节点加载的数据可以包括由待用于光线-基元测试的所考虑的节点表示的基元子集。纹理映射器单元因此可以包括用于执行光线-基元相交测试的适当相交测试电路(硬件)。该相交测试电路可以是执行上述光线-盒相交测试的相同电路,或者可以是专用于光线-基元相交测试的单独电路。
因此,在实施方案中,在纹理映射器已经执行光线-节点(盒/基元)相交测试之后,然后将相交测试的结果(例如,命中/未命中)返回到着色器程序以进行进一步处理。
因为纹理映射器单元可能不专用于执行此类相交测试(因为它也被布置为执行正常纹理化操作),所以对于待由合适的着色器程序执行的相交测试中的至少一些相交测试,例如并且特别是对于复杂情况(例如确定光线与边缘相交的情况),可能仍然存在更好的(例如更有效的)情形。在这种情况下,由纹理映射器返回的结果可以是纹理映射器单元尚未能够确定光线-节点(盒/基元)相交的指示,以便然后触发着色器程序来执行针对该节点的相交测试。
因此,在实施方案中,纹理映射器单元可操作为确定其是否能够执行光线-节点相交测试,并且当纹理映射器单元确定其无法执行光线-节点相交测试时,纹理映射器单元将指示此情况的结果返回到可编程执行单元,以使可编程执行单元执行程序以执行所需的光线-节点相交测试。
这可以帮助降低在纹理映射器单元内提供的相交测试电路的复杂性(面积)(在提供了一个相交测试电路的情况下)。也就是说,纹理映射器单元可以用于仅处置相交测试中的一些相交测试,但不是全部,其中该操作返回到可编程执行单元以执行更复杂的相交测试。
然而,其他布置将是可能的,并且处理可以任何合适且期望的方式在可编程执行单元与纹理映射器单元之间共享,如下文将进一步解释的。
例如,在一些实施方案中,纹理映射器单元可以用于加载测试节点所需的数据,而无需任何执行相交测试的尝试,其中相交测试然后由可编程执行单元执行。在这种情况下,可能不需要将相交电路添加到纹理映射器单元,并且根据该实施方案的操作可以通过提供用于触发此类操作的合适指令而在现有的更“常规”纹理映射器中实施。
在该情况下由纹理映射器单元返回的结果因而可以是节点(盒)数据(其可以类似于返回未滤波纹理的纹理映射器单元)。
因此,在实施方案中,响应于从可编程执行单元接收到适当的消息(指令),使纹理映射器单元从存储器中加载针对加速数据结构的节点的一组数据(例如,由所考虑的节点表示的一组盒和/或基元),并且然后将该数据返回到可编程执行单元以进行进一步处理。
在其他实施方案中,纹理映射器单元可以被布置为执行完整的光线追踪遍历操作,并且在这种情况下,纹理映射器可以返回相交的几何形状的指示(其可以类似于返回已滤波纹理的纹理映射器单元)。在这种情况下,纹理映射器单元可以包括另外的电路系统以促进控制整个遍历操作。各种其他布置也是可能的。
当光线追踪操作确定针对光线的几何形状相交完成时,无论此操作在可编程执行单元与纹理映射器单元之间以何种方式执行,图形处理器然后可以执行另外的着色程序以确定光线被投射的采样位置的外观。作为此操作的一部分,图形处理器可以根据需要执行“正常”纹理化操作。因此,在实施方案中,光线追踪操作还使用纹理映射器单元在对光线被投射的采样位置进行着色(渲染)期间执行正常纹理化操作。
这一切因而具有使用纹理映射器单元(硬件/电路)执行光线追踪操作中的一些操作的效果,即使用加速数据结构的光线追踪操作的一部分,例如(并且在一个实施方案中)遍历操作(以及可以执行的任何正常纹理化操作),而不是例如使用被编程为执行所需操作的更通用的可编程处理电路系统来执行该操作。
例如,在实施方案中,与例如通过使用可编程处理电路执行适当程序来完成的布置相比(这可能是相对低效的,例如,由于对应于不同光线的执行线程的不良存储器访问位置),这因而可导致对光线追踪加速数据结构的加速和更有效的遍历。
这样做的效果是光线追踪加速数据结构遍历过程(以及相应地整个光线追踪渲染过程)可更有效地执行,从而有利于例如在处理资源可能更有限的设备上执行光线追踪和/或改进的光线追踪。
因此,申请人已经认识到,纹理映射器单元已经可用并且适合于处理在光线追踪(例如,遍历)操作期间可能需要处理的此类数据结构,使得光线追踪操作可以有利地利用纹理映射器单元(硬件/电路)来执行用于光线追踪操作的一个或多个处理操作,而不需要对纹理映射器单元(如果有的话)进行显著的硬件改变,并且因此在硅面积方面具有相对较小的增加。
因此,根据本文所述技术的要求,纹理映射器单元可以根据需要以其他方式进行配置,例如以对于纹理映射器单元正常的方式,其中其现有的硬件/电路被重新用于执行此类光线追踪遍历操作。
(因此,除了以本文所述技术的方式执行用于光线追踪操作的处理操作之外,纹理映射器单元可以并且在一个实施方案中确实还在整个图形处理过程期间和/或针对不同的图形处理操作执行(正常)纹理化操作)。
申请人已发现,与例如使用更通用的可编程处理电路执行整个操作相比,这因而具有能够加速光线追踪过程的优点,但另一方面,与例如提供用于加速整个光线追踪过程的专用电路相比,图形处理器具有相对最小的增加成本(例如,就硅面积而言),这是因为现有的纹理映射器单元(硬件/电路)可以重新用于此效果。
因此,与其他可能的方法相比,本文所述的技术提供了各种益处。
该图形处理器可包括任何合适且期望的图形处理器,该图形处理器包括可编程执行单元(电路)。
该可编程执行单元可以是图形处理器可包含的任何合适且期望的可编程执行单元(电路)。该可编程执行单元应当可操作为执行图形着色程序以执行图形处理操作。因此,可编程执行单元将接收待执行的图形线程,并且为那些线程执行适当的图形着色程序以生成期望的图形输出。
可存在单个或多个可编程执行单元。在存在多个可编程执行单元的情况下,在一个实施方案中,每个执行单元可以本文所述技术的方式操作。
本文所述技术中的图形处理器还包括纹理映射器单元。例如,由可编程执行单元执行的着色器程序可以包括用于执行图形纹理化操作的指令。当可编程执行单元在针对线程正执行的着色器程序中遇到此类指令时,可编程执行单元向纹理映射器发送适当的请求以执行所需的图形纹理化操作。
因此,在实施方案中,适当的纹理化操作指令将被包括在着色器程序中以便由可编程执行单元执行,并且被可编程执行单元识别为纹理化操作指令,其中可编程执行单元然后操作为向纹理映射器发送适当的指令以执行纹理化操作(并将纹理化操作的结果返回到可编程执行单元以供进一步处理和/或其他使用)。
纹理映射器单元应当是(并且在一个实施方案中,是)被配置为执行纹理化操作的(基本上)固定功能的硬件单元(电路)。纹理映射器单元因此应当包括一个或多个适当的固定功能电路以执行所需的操作,但其在使用中可包括并具有一些有限形式的可配置性,例如,如果需要的话。
纹理映射器单元可以根据需要具有任何功能的单元/电路,例如,纹理映射器单元通常可以具有的单元/电路。
如上所述,在一个实施方案中,纹理化操作请求(例如,纹理化操作指令)指示待执行纹理化操作,以及待用于该纹理化操作的纹理(纹理数据值集)。在一个实施方案中,纹理化操作请求(例如,指令)指示存储用于纹理化操作的纹理数据的位置,其中纹理映射器然后响应于该指令而存储纹理数据的位置获取纹理数据。在一个实施方案中,纹理映射器然后对指示的纹理数据值执行指示的纹理化操作。
因此,在一个实施方案中,纹理映射器包括数据处理电路系统,该数据处理电路系统可操作为接收纹理化操作指令,并且响应于接收到纹理化操作指令,控制纹理映射器以获取待执行纹理化操作的纹理数据值,并且使纹理映射器对获取的纹理数据值集执行纹理化操作。
纹理映射器(纹理映射装置)可以任何合适且期望的方式执行所需的纹理映射操作,并且相应地,可以包括用于执行纹理映射操作的任何合适且期望的电路、单元和阶段。
在一个实施方案中,纹理映射器至少包括数据获取电路(电路系统),该数据获取电路(电路系统)可操作为(被配置为)从存储器获取在执行纹理化操作时待使用的纹理数据值。在实施方案中,数据获取电路(电路系统)也可以(并且是)以类似的方式,相应地用于从存储器获取在光线追踪遍历操作期间执行处理操作时待使用的数据值。
在一个实施方案中,纹理映射器还包括纹理滤波电路(电路系统),该纹理滤波电路(电路系统)可操作为(被配置为)使用由数据获取电路获取的纹理数据值来执行纹理化操作。
数据获取电路可包括可操作为执行所需功能的任何期望且合适的处理电路(电路系统)。该电路可以呈适当配置的一个或多个专用硬件元件的形式,或者其可以包括已经被适当地编程的可编程处理电路系统。
纹理映射器的数据获取电路可以进一步包括可操作为将输入纹理数据值本地存储到纹理映射器的本地存储装置。例如,本地存储单元可以包括本地高速缓存。高速缓存可以可操作为存储(并且可以存储)任何期望且合适量的纹理数据。
相应地,当纹理映射器被用作光线追踪操作的一部分时,高速缓存可以可操作为存储(并且在一个实施方案中,确实存储)用于光线追踪遍历操作的数据(例如,节点(盒)数据、基元数据等)。
数据获取电路可以可操作为:响应于使用用于操作的数据值的请求,首先确定那些数据值是否已经本地存储(已经从存储器获取),例如在本地高速缓存中。当那些数据值尚未本地存储(先前尚未从存储器获取并且例如未高速缓存)时,纹理数据获取电路然后可以从存储器获取那些数据值。所获取的数据值然后可以由本地高速缓存中的纹理数据获取电路存储(例如,用于将来由纹理滤波电路重新使用)和/或存在在其他本地存储装置中(例如,用于立即由纹理滤波电路使用)。然而,当数据值已经本地存储(已经从存储器获取并且例如被高速缓存)时,纹理映射器的数据获取电路然后可以直接从本地高速缓存获取那些数据值,而无需向主存储器系统发送任何请求。
在一个实施方案中,纹理映射器的数据获取电路包括“停放”缓冲区,该缓冲区包括(维护)待执行的待决(未决)操作(例如,其可能仍然等待从存储器获取数据)的记录。例如,当位于停放缓冲区中的纹理映射操作被确定为准备好执行时,纹理滤波电路可以读取并且然后使用获取的数据来进行操作。
同样,停放缓冲区还可以相同的方式用于处置用于光线追踪操作的处理操作。因此,当位于停放缓冲区中的用于光线追踪操作的处理操作被确定为准备好执行时,相交电路(在提供该相交电路的情况下)可以读取并且然后使用获取的数据来进行操作。
维护在停放缓冲区中的待执行的未决操作的记录可以采取任何期望且合适的形式。
在一个实施方案中,停放缓冲区针对缓冲区中的每个条目(记录)(针对记录中的每个待执行的未决操作)存储用于该操作的适当控制(状态)数据(“有效载荷记录”),诸如用于等待执行的操作的一个或多个指示符和其他信息,诸如为了能够执行该操作所需的元数据。例如,该信息可以指示待用于该操作的特定数据和/或参数、待执行的特定类型的操作(例如,包括操作是纹理化操作还是光线追踪操作,诸如光线追踪遍历)等。
在一个实施方案中,针对记录(在停放缓冲区中)中的待决操作的条目还指示记录(条目)涉及的操作所需的数据,例如并且在一个实施方案中,呈存储所需数据的适当地址(例如,存储器或高速缓存地址,并且在一个实施方案中高速缓存地址)的形式。
纹理映射器的纹理滤波电路可以包括可操作为执行所需的滤波功能的任何期望且合适的处理电路。该处理电路可以呈适当配置的一个或多个专用硬件元件的形式,或者其可以包括已经被适当地编程的可编程处理电路系统。在一个实施方案中,使用专用的纹理滤波电路(硬件)。
纹理滤波电路可以包括可操作为读取本地存储到纹理映射器(例如,在本地存储装置中)的纹理数据值并且然后使用那些数据值来执行纹理映射操作的电路系统。纹理滤波电路可以进一步包括可操作为(例如,在内部)计算待用于纹理映射操作的内插权重值并且使用那些计算的内插权重值来执行纹理映射操作的电路系统。
在一个实施方案中,当执行处理操作作为光线追踪操作的一部分时,不使用纹理滤波电路。因此,如上所述,本文所述技术中的纹理映射器单元根据需要还可以包括用于执行一个或多个光线追踪操作的附加电路/电路系统。
例如,在实施方案中,纹理映射器单元可以包括相交测试电路(单元),该相交测试电路(单元)可操作为测试输入光线与光线追踪加速数据结构的节点相交。
在这种情况下,在一个实施方案中,相交测试电路(单元)与纹理化(例如,滤波)单元并行设置,并且可操作为以类似的方式与加载/存储电路通信,例如,使得纹理化和相交测试操作两者可以共享相同的负载/存储电路系统(但加载有不同的数据)。
相交测试电路(单元)可以包括可操作为执行所需相交测试的任何期望且合适的处理电路。在一个实施方案中,该相交测试电路呈适当配置的一个或多个专用硬件元件的形式,但是如果需要的话,可以存在一定程度的可重构性。其他布置也将是可能的。
可根据需要促进纹理映射器单元与可编程执行单元之间的通信。在一个实施方案中,存在用于在各个单元之间传递消息的适当通信(消息传送)网络。该通信(消息传送)网络可根据任何期望的通信协议和标准进行操作,诸如使用合适的互连/消息传送协议。
本文所述的技术涉及使用光线追踪过程渲染表示包括一个或多个对象的场景视图的帧的情况。在该过程中,正被渲染的帧将(并且在一个实施方案中,确实)包括采样位置的阵列,并且光线追踪过程将用于渲染这些采样位置中的每个采样位置,以便提供表示场景的期望视图的输出帧(图像)(其中所投射的相应光线对应于帧的相应采样位置并且在渲染和待渲染帧的相应采样位置时被使用)。
本文所述的技术可用于任何形式的基于光线追踪的渲染。
因此,例如,本文所述的技术可用于并且当使用“全”光线追踪过程来渲染场景时,即其中所谓的“主”光线从视点(相机)投射通过图像帧中的采样位置以确定该光线与场景中的对象的相交,例如,并且在一个实施方案中,针对每条光线确定该光线相交的场景中的最近对象(该光线的“第一交点”)。该方法可涉及从主光线与场景中对象的相应第一交点投射另外的(次)光线,并且另外使用次光线的相交数据来确定对采样位置的渲染。
在这种情况下,以本文所述技术的方式的操作可在(并且在一个实施方案中)分析主光线和次光线与场景中对象的相交时使用。
本文所述的技术还可用于所谓的“混合”光线追踪渲染过程,例如,其中在执行渲染时执行光线追踪和光栅化过程两者(例如,其中仅执行全光线追踪过程中的步骤中的一些步骤,其中一个或多个光栅化过程用于实现这些“全”光线追踪过程中的其他步骤)。例如,在示例性混合光线追踪过程中,可使用光栅化过程来确定主光线中的每条主光线与场景中对象的第一相交,但随后使用光线追踪过程来执行从所确定的主光线与场景中对象的相应第一交点的一个或多个另外的(次)光线的投射。在这种情况下,以本文所述技术的方式的操作可在(并且在一个实施方案中)分析次光线与场景中对象的相交时使用。
以本文所述技术执行的帧的基于光线追踪的渲染由执行图形处理程序的图形处理器的可编程执行单元触发和执行,该图形处理程序将使得(并且使得)可编程执行单元执行必要的光线追踪渲染过程。
因此,一个或多个图形着色器程序将被发布到图形处理器并由可编程执行单元执行,该一个或多个图形着色器程序包括当被执行时将执行期望的光线追踪渲染过程的一组程序指令(序列)。如果需要,该一个或多个着色器程序可仅包括执行基于特定光线追踪的渲染操作所需的指令,或者其还可包括其他指令,例如以执行其他着色操作。
根据以本文所述技术的方式进行的特定操作,用于执行期望光线追踪过程的着色器程序的执行可以其他方式以任何合适且期望的方式执行,诸如并且在一个实施方案中,根据所考虑的图形处理器和图形处理系统中着色器程序的执行。
因此,图形处理器(图形处理器的可编程执行单元)将用于执行着色器程序,该着色器程序包括用于针对待渲染的帧的多个(并且在一个实施方案中,针对每个)采样位置执行期望的光线追踪渲染过程的指令序列。
相应地,当执行光线追踪着色器程序时,图形处理器将用于派生(发布)针对正被渲染的帧的采样位置的相应执行线程,其中每个线程随后执行程序以便渲染线程表示(并且对应于)的采样位置。因此,在一个实施方案中,图形处理器包括线程派生器(线程派生电路),该线程派生器可操作为并且被配置为派生(发布)执行线程以供可编程执行单元执行。
由可编程执行单元执行的光线追踪渲染着色器程序可以任何合适且期望的方式准备和生成。
在一个实施方案中,该射线追踪渲染着色器程序由所考虑的图形处理系统的图形处理器的编译器(着色器编译器)生成(并且因此在一个实施方案中,生成着色程序的处理电路包括适当的编译器电路)。在一个实施方案中,该编译器在图形处理系统的适当可编程处理电路上执行。
编译器(编译器处理电路)在一个实施方案中是图形处理系统的中央处理单元(CPU)(诸如主机处理器)的一部分,并且在一个实施方案中在该CPU上执行,并且在一个实施方案中是在该CPU上执行的图形处理器的驱动器(例如主机处理器)的一部分。
在这种情况下,编译器和编译代码将在整个图形处理系统内的单独处理器上运行。然而,如果需要,其他布置将是可能的,诸如编译器在与编译代码相同的处理器上运行。
编译过程(编译器)可以任何合适且期望的方式生成光线追踪渲染着色器程序,例如,并且在一个实施方案中,使用用于该目的的任何合适且期望的编译器技术。
因此,在一个实施方案中,由编译器生成着色器程序,并且该编译器被布置成在该着色器程序内包括在本文所述的技术中使用的指令。当然,其他布置将是可能的。
当执行着色器程序以执行基于光线追踪的渲染过程时,因为它是基于光线追踪的渲染过程,所以该过程的执行将包括将光线追踪到被渲染场景中并穿过该被渲染场景,(例如,并且在一个实施方案中)以便确定对应于所考虑的一条或多条光线的给定采样位置应如何渲染以在该采样位置处显示该场景的所需视图。
在本文所述的技术中,当需要将光线追踪(投射)到正被渲染场景作为光线追踪渲染过程的一部分时,可编程执行单元触发纹理映射器单元以便在针对所考虑光线遍历光线追踪加速数据结构期间执行一个或多个处理操作。
如上所述,根据正在使用的光线追踪渲染过程(以及已针对给定采样位置到达的光线追踪渲染过程的阶段),正在被投射的光线可包括主光线(例如,从视点穿过图像平面中的采样位置进入场景中)或另外的(次)光线(例如,已经从确定的几何形状与主光线的交点投射的光线),例如,并且在一个实施方案中,以确定照明/阴影和/或反射等。
以本文所述技术的方式进行的操作适用于正在投射的任何形式的光线。
在实施方案中,将以本文所述技术的方式进行的操作应用于一起执行光线追踪操作的多个光线组。在这种情况下,这些光线在一个实施方案中基于它们彼此的相似性而分组在一起,使得“相似”光线将为此目的分组在一起。因此,光线在一个实施方案中基于一项或多项特定的(在一个实施方案中为选择的、在一个实施方案中为预定义的)标准,诸如以下中的一者或多者(并且在一个实施方案中,基于以下中的全部)被分组用于一起遍历(相同的)光线追踪加速数据结构:光线的起始位置(起点);光线的方向(方向矢量);和光线待被投射的范围。
在本文所述的技术中,纹理映射器单元可操作并且被配置为执行一个或多个处理操作作为使用光线追踪加速数据结构(例如,光线追踪遍历操作)的光线追踪操作的一部分。当可编程执行单元需要纹理映射器单元来执行一个或多个此类处理操作时,可编程执行单元向纹理映射器单元发送具有该效果的消息。
从可编程执行单元发送到纹理映射器单元的消息应当并且在一个实施方案中确实包含执行针对光线追踪操作的相关一个或多个处理操作所需的信息。
因此,如上所述,其在一个实施方案中指示以下中的一者或多者,并且在一个实施方案中指示以下中的全部:待使用(例如,遍历)的光线追踪加速数据结构的描述符;待测试的光线(例如,待针对其确定光线追踪加速数据结构的遍历)的起点(起始位置(例如,x、y、z坐标));正在使用(例如,以遍历光线追踪加速数据结构)的光线的方向(方向矢量);和光线待遍历的范围(距离)(光线待遍历到场景中的(最小和/或最大)距离)。在一个实施方案中,其还指示涉及待执行处理操作的节点(节点索引)。
至少在图形处理器包括多个可编程执行单元的情况下,消息在一个实施方案中还指示消息的发送者(即,哪个可编程执行单元已经发送消息),使得处理操作的结果可返回到正确的可编程执行单元。
可以任何期望且合适的方式实现和触发可编程执行单元向纹理映射器单元发送此类消息。在一个实施方案中,这通过在光线追踪渲染着色器程序中包括待由可编程执行单元执行的适当指令来实现,该指令将触发执行单元向纹理映射器发送适当消息(其中执行单元然后在消息到达(执行)着色器程序中的相关指令时发送该消息)。
因此,在一个实施方案中,本文所述技术的方法包括(并且图形处理系统被相应地配置为):
向图形处理器的可编程执行单元发出着色器程序,以便由可编程执行单元执行来执行使用光线追踪加速数据结构的光线追踪操作,以确定能够与正被用于光线追踪过程的光线相交的场景的几何形状,该着色器程序包括使可编程执行单元向纹理映射器单元发出消息的指令,以使纹理映射器单元执行一个或多个处理操作作为使用光线追踪加速数据结构的光线追踪操作的一部分;以及
可编程执行单元在执行着色器程序时,当其到达着色器程序中的指令时,向纹理映射器单元发出消息,以使纹理映射器单元执行针对光线追踪操作的一个或多个处理操作。
此类指令可包括在着色器程序中,以便由可编程执行单元以任何合适且期望的方式以及由总体数据(图形)处理系统的任何合适且期望的元件执行。
在一个实施方案中,指令由用于图形处理器的编译器(着色器编译器)包括在着色器程序中。因此,在一个实施方案中,编译器在正在执行光线追踪的光线追踪渲染着色器程序中的适当点处插入指令。
在一个实施方案中,此类指令包括在待由图形处理器通过编译器响应于适当的光线追踪指示(例如,“trace()”调用)而执行的光线追踪渲染着色器程序中,该光线追踪指示包括在由需要图形处理的应用提供的(高层级)着色器程序中。因此,例如,并且在一个实施方案中,应用程序将能够包括对光线追踪操作的需要的明确指示,其中编译器然后在本文所述的技术中响应于此而在所编译的着色器程序中包括适当的此类指令。编译器还可能包括其自身的此类指令,例如,在编译器能够评估正被编译的着色器程序以识别何时以及何处包括一个或多个此类指令的情况下,即使在不存在对其的明确指示的情况下也是如此。
在一个实施方案中,编译器分析例如由主机处理器上需要图形处理的应用提供的着色器程序代码,并且在着色器程序中的适当点处(例如,通过将指令插入(编译)着色器程序中)包括此类一个或多个指令。
本文所述的技术还扩展到并且包括编译器的此类操作。
因此,本文所述技术的另一个实施方案包括编译待由图形处理器的可编程执行单元执行的着色器程序的方法,该可编程执行单元可操作为执行图形处理程序以执行图形处理操作;
该方法包括:
在使用光线追踪过程渲染表示场景视图的帧时待由图形处理器的可编程执行单元执行的着色器程序中包括一组一个或多个指令,该一个或多个指令在由该可编程执行单元执行时将使该可编程执行单元执行光线追踪操作,该光线追踪操作使用指示待渲染场景的几何形状分布的光线追踪加速数据结构来确定能够与正被用于该光线追踪操作的光线相交的待渲染场景的几何形状,该光线追踪操作使用该光线追踪加速数据结构;以及
在该着色器程序中进一步包括指令,该指令在由该可编程执行单元执行时将使该可编程执行单元向该图形处理器的纹理映射单元发送消息,以使该纹理映射器单元执行针对该光线追踪操作的一个或多个处理操作,其中该一个或多个处理操作的结果被返回到该可编程执行单元。
本文所述技术的另一个实施方案包括编译器,该编译器用于编译待由图形处理器的可编程执行单元执行的着色器程序的方法,该可编程执行单元可操作为执行图形处理程序以执行图形处理操作;
该编译器包括处理电路,该处理电路被配置为:
在使用光线追踪过程渲染表示场景视图的帧时待由图形处理器的可编程执行单元执行的着色器程序中包括一组一个或多个指令,该一个或多个指令在由该可编程执行单元执行时将使该可编程执行单元执行光线追踪操作,该光线追踪操作使用指示待渲染场景的几何形状分布的光线追踪加速数据结构来确定能够与用于该光线追踪操作的光线相交的待渲染场景的几何形状,该光线追踪操作使用该光线追踪加速数据结构;以及
在该着色器程序中进一步包括指令,该指令在由该可编程执行单元执行时将使该可编程执行单元向该图形处理器的纹理映射单元发送消息,以使该纹理映射器单元执行用于该光线追踪操作的一个或多个处理操作,其中该一个或多个处理操作的结果被返回到该可编程执行单元。
然后,所生成的着色器程序可被发送到图形处理器的可编程执行单元,以供执行。
本文所述技术还扩展到当执行着色器程序时图形处理器本身的操作。
本文所述技术的另一实施方案包括一种在使用光线追踪过程渲染表示场景视图的帧时操作图形处理器的方法,
该图形处理器包括:
可编程执行单元,该可编程执行单元可操作为执行程序以执行图形处理操作;
该方法包括:
该可编程执行单元:
执行着色器程序以使用光线追踪过程来渲染表示包括一个或多个对象的场景视图的帧,该着色器程序包括一组一个或多个指令,以使该可编程执行单元执行光线追踪操作,该光线追踪操作使用指示待渲染场景的几何形状分布的光线追踪加速数据结构来确定能够与用于该光线追踪操作的光线相交的待渲染场景的几何形状,该光线追踪操作使用该光线追踪加速数据结构;以及
响应于该可编程执行单元执行该着色器程序中的指令以向该图形处理器的纹理映射单元发送消息以使该纹理映射器单元执行用于该光线追踪操作的一个或多个处理操作,该可编程执行单元向该纹理映射器单元发送消息以执行该一个或多个处理操作。
本文所述技术的另一实施方案包括一种图形处理器,该图形处理器可操作为使用光线追踪过程渲染表示包括一个或多个对象的场景视图的帧,
该图形处理器包括:
可编程执行单元,该可编程执行单元可操作为执行程序以执行图形处理操作;
其中该可编程执行单元被配置成使得:当该执行单元正在执行着色器程序以使用光线追踪过程来渲染表示包括一个或多个对象的场景视图的帧时,该着色器程序包括一组一个或多个指令以使该可编程执行单元执行光线追踪操作,该光线追踪操作使用指示待渲染场景的几何形状分布的光线追踪加速数据结构来确定能够与正被用于使用该光线追踪加速数据结构的该光线追踪操作的光线相交的待渲染场景的几何形状,响应于该可编程执行单元执行该着色器程序中的指令以向该图形处理器的纹理映射单元发送消息以使该纹理映射器单元执行针对该光线追踪操作的一个或多个处理操作,该可编程执行单元向该纹理映射器单元发送消息以执行该一个或多个处理操作。
如本领域的技术人员将理解的,本文所述技术的这些实施方案可(并且在一个实施方案中,确实)适当地包括本文所述技术的任何一个或多个或所有任选特征。
因此,如上所述,响应于执行指令以使可编程执行单元向纹理映射器单元发送消息以执行针对光线追踪操作的一个或多个处理操作的指令,可编程执行单元然后将相应地向纹理映射器单元发送消息,其中在一个实施方案中,该消息指示定义正在执行光线追踪操作的光线的一组光线参数,并且在一个实施方案中,还指示涉及待执行处理操作的节点(索引)。纹理映射器单元的数据获取电路系统然后可以接收并处理消息以获得光线参数,并且适当地读入或获取用于光线追踪加速数据结构的描述符,例如以上述方式。在一个实施方案中,数据获取电路系统然后在一个实施方案中经由纹理映射器单元的高速缓存系统来加载节点数据(例如,子节点盒(框)和/或与节点相关联的基元)。
纹理映射器单元然后可以执行进一步处理(例如,相交测试),或者可以简单地将加载的数据返回到可编程执行单元以进行进一步处理。
此外,纹理映射器单元以这种方式的操作可以是(并且在一个实施方案中,是)通过在光线追踪着色器程序中包含一个或多个适当的指令来触发,从而减少着色器程序中的指令的数量。
因此,所有这些的效果是提供用于在光线追踪操作期间处置数据的更有效的方法。
在本文所述的技术中使用和遍历的光线追踪加速数据结构可以是指示(表示)待渲染场景的几何形状分布的任何合适且期望的光线追踪加速数据结构,并且可使用(和遍历)这些光线追踪加速数据结构以确定能够与正被投影到待渲染场景中的光线相交的该场景的几何形状。
在一个实施方案中,光线追踪加速数据结构表示正被渲染场景内的(多个)相应盒,并且指示和/或可用于确定存在于那些盒中的待渲染场景的几何形状。
光线追踪加速数据结构可采取任何合适且期望的形式,诸如包括树结构,诸如层次包围盒(BVH)树。这些层次包围盒可以是轴向对准(立方体)盒。因此,在一个实施方案中,光线追踪加速数据结构包括层次包围盒,并且在一个实施方案中包括BVH树。然而,如果需要,可使用其他形式的加速数据结构,诸如KD树、体素(网格层次)等。
可以任何合适且期望的方式生成和提供遍历的光线追踪加速数据结构。例如,其可先前被确定并提供为例如场景的定义的一部分,以由需要图形处理的应用来渲染。
在一个实施方案中,光线追踪加速数据结构由图形处理器本身生成,例如基于例如在渲染场景之前的初步处理遍中提供给图形处理器的该场景的几何形状的指示。在这种情况下,图形处理器可以任何合适且期望的方式生成光线追踪加速数据结构,例如通过相对于相应的包围盒测试针对场景定义的几何形状,以便确定该场景的层次包围盒中的几何形状的分布。
它也可以或替代地由CPU(例如主机处理器)生成,例如基于场景几何形状的指示,例如在渲染场景之前的初步处理遍中。当然,其他布置将是可能的。
光线追踪加速数据结构可表示和指示待以任何合适且期望的方式渲染的场景的几何形状分布。因此,它可以根据单个图形基元或多组图形基元来表示几何形状,例如使得树结构的每个叶节点表示为针对占据该叶节点所对应的盒的场景定义的图形基元的对应子组。除此之外或另选地,光线追踪加速数据结构可以几何形状的更高级表示(描述)的形式表示场景的几何形状,例如根据包括多个基元的模型或对象。
对于给定光线追踪加速数据结构,还可以根据指示需要分析的另外的光线追踪加速数据结构来表示几何形状。在这种情况下,初始光线追踪加速数据结构将例如进一步表示例如更精细的分辨率、需要针对场景的不同盒考虑的光线追踪加速数据结构,随着初始光线追踪加速数据结构的遍历,然后确定需要遍历的一个或多个另外的光线追踪加速数据结构,这取决于所考虑的光线与场景中的哪些盒相交。
因此,光线追踪遍历操作可包括不同光线追踪加速数据结构之间的转变,诸如不同细节层次(LOD)之间的转变,以及/或者多层次光线追踪加速数据结构的不同层次之间的转变。
在光线追踪加速数据结构切换之间也可存在光线变换(例如,使得在具有和/或使用光线的变换的不同光线追踪加速数据结构之间存在自动转变,例如由光线追踪加速数据结构的元数据描述或与光线追踪加速数据结构相关联)。例如,不同细节层次之间的转变可使用身份变换,并且多层次光线追踪加速数据结构之间的转变可使用这些光线的通用仿射变换。当然,其他布置将是可能的。
在光线追踪操作期间,将遍历光线追踪加速数据结构遍历以确定能够与所考虑的光线相交的待渲染场景的几何形状。
可以任何合适且期望的方式(例如,并且在一个实施方案中,取决于正在遍历的光线追踪加速数据结构的形式)来针对光线遍历光线追踪加速数据结构。遍历操作将使用所提供的关于光线的信息来遍历光线追踪加速数据结构,以确定能够与所考虑的光线相交的待渲染场景的几何形状。在一个实施方案中,光线追踪加速数据结构遍历操作遍历并使用光线追踪加速数据结构来识别光线穿过(并且由光线追踪加速数据结构指示)的场景的盒中的几何形状(如果有的话)。
因此,在一个实施方案中,遍历过程用于遍历光线追踪加速数据结构,从而针对光线依次穿过的场景的每个盒确定该盒中是否存在任何几何形状(由光线追踪加速数据结构指示)。因此,将基于光线的位置和方向遍历光线追踪加速数据结构,从而确定沿着该光线的路径在场景的盒中是否存在任何几何形状(其可相应地随后可能与该光线相交)。当然,其他布置将是可能的。
在一个实施方案中,遍历操作遍历光线的路径的光线追踪加速数据结构,直到找到光线与针对场景定义的几何形状的第一(可能)相交。然而,如果需要,还可以在已发现光线的第一(可能)相交之后继续遍历光线追踪加速数据结构。
例如,光线遍历操作可(并且在一个实施方案中)被配置为并且能够丢弃(忽略)(可能)相交并且例如根据所考虑的相交的几何形状的特性来继续遍历。例如,如果(可能)相交的几何形状是完全或部分透明的,则可能期望继续遍历(并且丢弃或保持初始“透明”相交)。当然,其他布置将是可能的。
针对光线的光线追踪加速数据结构遍历可包括针对该光线遍历单个光线追踪加速数据结构,或针对该光线遍历多个光线追踪加速数据结构。因此,在一个实施方案中,针对光线的光线追踪加速数据结构遍历操作包括针对该光线遍历多个光线追踪加速数据结构,从而确定能够与该光线相交的待渲染场景的几何形状。
例如,在场景的整个盒和/或几何形状由多个不同的光线追踪加速数据结构表示的情况下,可针对光线遍历多个光线追踪加速数据结构。
相似地,如上所述,在一个实施方案中,使用指示待遍历的另外的光线追踪加速数据结构的光线追踪加速数据结构。因此,在这种情况下,光线追踪加速数据结构遍历操作将操作为首先针对光线遍历初始光线追踪加速数据结构,以确定针对光线的待遍历的一个或多个另外的光线追踪加速数据结构,并且然后针对光线遍历那些确定的一个或多个光线追踪加速数据结构,以此类推,直到针对光线遍历提供对待渲染场景的几何形状的指示的一个或多个“末端”光线追踪加速数据结构。
作为遍历操作的一部分,如上所述,可编程执行单元可以向纹理映射器单元发送消息以执行针对遍历操作的一个或多个处理操作(例如,用于加载加速数据结构,并且任选地执行相交测试),其中结果然后被返回到可编程执行单元。
一旦已经执行针对光线的光线追踪加速数据结构遍历操作,然后就进一步处理对场景的那个几何形状能够与光线相交的确定,以确定实际几何形状相交以及因此光线应当被投射的采样位置的外观。
针对(可能)相交的几何形状提供的信息可采取任何合适且期望的形式,例如,并且在一个实施方案中,取决于该几何形状本身的形式。例如,在一组基元(作为相交的候选者)的情况下,可以返回适当的基元标识符和任何相关联的几何形状标识符(例如它们所属的几何形状标识符)。
在一个实施方案中,光线的更新的位置和方向矢量也由光线追踪加速数据结构遍历返回。
为了执行光线-基元相交测试以确定实际几何形状相交和任何所需的后续处理,可编程执行单元可以(并且在一个实施方案中,确实)使用与几何形状(例如,基元)相关的另外的信息,诸如几何形状(例如,基元)的适当属性,诸如它们的顶点位置、法线、表面类型/材料)等。这可能是需要的,以便确定实际相交(点),并且相应地用于执行相对于采样位置的进一步处理。
因此,在一个实施方案中,该过程使用关于几何形状的特性(例如,就其表面特性、其所属的表面等而言)的信息。该信息能够以任何合适且期望的方式提供,但是在一个实施方案中,使用到数据结构的索引/指针,在这些数据结构中存储了与几何形状的特性相关的数据。
在一个实施方案中,一旦已经确定相交(例如,通过执行另外的程序指令以获取所需属性),可编程执行单元就适当地获取这些特性(附加的属性)。然而,其他布置也是可能的。
在一个实施方案中,光线追踪渲染过程支持使用多个不同的几何模型,例如,并且在一个实施方案中,根据几何形状与视点(相机)和/或场景的任何照明等的距离,并且光线追踪加速数据结构遍历与所指示的几何形状一起返回不同模型中的哪个模型应当用于该几何形状的指示。
申请人认识到,针对光线的遍历也可能无法找到针对光线可能与之相交的场景定义的任何几何形状,例如,在光线穿过的场景的盒均不包含该场景的任何定义几何形状的情况下。
在光线追踪加速数据结构遍历操作发现光线不遍历包含针对场景定义的几何形状的任何盒的情况下,则在一个实施方案中,光线追踪加速数据结构遍历电路在该情况下返回适当的响应。在一个实施方案中,光线追踪加速数据结构遍历电路返回响应,该响应指示光线没有任何相交(没有发现可能的相交)(即,存在“未命中”)。
在一个实施方案中,响应于来自光线追踪加速数据结构遍历操作的此类“未命中”响应,可编程执行单元执行适当的特定(在一个实施方案中为选择的、在一个实施方案中为预定义的)“默认”操作以用于响应于该情况对所考虑的采样位置进行进一步处理。这可包括例如假设与包围盒或天空盒相交或者计算背景的程序颜色等。可编程执行单元然后将相应地对采样位置进行着色。
因此,在场景不存在能够与所考虑的光线相交的几何形状的情况下,执行“默认”(在一个实施方案中为特定的、在一个实施方案中为选择的、在一个实施方案中为预定义)处理操作,例如,并且在一个实施方案中,该处理操作用于在未发现可能与所考虑的光线相交的场景的“活动”定义几何形状的情况下使用。
在这种情况下,“默认”处理操作可例如简单地包括在没有与针对采样位置的光线相交的活动几何形状的情况下,使用针对采样位置的特定(在一个实施方案中为选择的、在一个实施方案中为预定义的)采样位置数据(“默认”颜色值)。
在一个实施方案中,在光线不与场景的任何“主动”定义的几何形状相交的情况下执行的“默认”处理操作包括使用在该情况下待使用和考虑的特定(在一个实施方案中为选择的、在一个实施方案中为预定义的)“默认”几何形状。在这种情况下,在一个实施方案中,预定义的默认几何形状指示针对该几何形状的至少默认的预定义表面类型和/或该几何形状的位置。该表面类型可例如被预定义为“包围”表面,该“包围”表面包围场景并且待用于穿过该场景而不与该场景的任何以其他方式定义的几何形状相交的光线。
因此,在一个实施方案中,光线追踪加速数据结构遍历可操作为(并且被配置为)确定由光线遍历的光线追踪加速数据结构表示的场景中的任何盒是否包含场景的任何几何形状。
一旦光线追踪加速数据结构遍历操作已经返回了针对光线的适当几何形状信息,可编程执行单元然后就将(并且然后确实)使用由光线追踪加速数据结构遍历电路确定的所指示的几何形状来确定与光线相交的任何几何形状。因此,可编程执行单元自身将使用并基于由光线追踪加速数据结构遍历操作指示的几何形状来执行实际相交测试和确定。
该光线与基元相交确定可根据需要和期望使用由光线追踪加速数据结构遍历返回的信息。因此,在一个实施方案中,将使用能够与光线相交的几何形状的指示来测试该几何形状是否实际上与该光线相交,以及针对可影响光线相交或所需操作的几何形状所指示的任何其他特性,诸如表面特性。
就这一点而言,应当指出的是,虽然可编程执行单元将(并且在一个实施方案中,确实)使用所指示的几何形状来确定与光线相交的几何形状,但由于光线追踪加速数据结构遍历操作仅返回能够与该光线相交的几何形状的指示(例如,其存在于光线相交(穿入/穿过)的盒中),因此事实上该光线将实际上不与所指示的几何形状中的任何几何形状相交。因此,虽然由可编程执行单元执行的对与光线相交的任何几何形状的确定可(并且通常将)导致对实际上与该光线相交的几何形状的识别,但可能的情况是,由可编程执行单元执行的相交确定实际上将确定实际上不存在与该光线相交的几何形状。
在由可编程执行单元执行的相交确定确定了实际上不存在与该光线相交的几何形状的情况下(例如,当光线追踪加速数据结构遍历电路返回一组基元,但没有基元实际上与该光线相交时),然后,在一个实施方案中,可编程执行单元将其视为光线追踪相交“未命中”(如上文针对光线追踪加速数据结构遍历未识别出与光线的任何相交的情况所论述的),然后相应地执行适当的“未命中”“默认”操作(如上所述)。
一旦已确定该光线将实际上相交的几何形状(如果有的话),则可编程执行单元根据被确定为与该光线相交的场景的(任何)几何形状来对帧中该光线所对应的采样位置执行进一步处理。
就这一点而言执行的对采样位置的进一步处理可包括(例如,并且在一个实施方案中,根据并基于被确定为与光线相交的场景的任何几何形状)由于所考虑的光线的光线追踪操作而对采样位置进行的任何合适且期望的处理。
在一个实施方案中,对作为针对光线的光线追踪操作的结果而执行的采样位置的进一步处理是根据并基于被确定为与该光线相交的场景的几何形状,以及/或者根据并基于正在被执行的特定基于光线追踪的渲染过程(例如,光线追踪过程是否需要投射次光线(在适当的情况下),以及/或者投射特定类型的次光线,或者基于光线追踪的渲染是否旨在仅基于确定的第一交点)。例如,该进一步处理可以是(并且在一个实施方案中是)基于所确定的与之相交的几何形状的表面类型,以及针对该表面类型的预定义操作(例如,就投射任何次光线而言)。当然,其他布置将是可能的。
在一个实施方案中,可(并且是)根据被确定为与对应于采样位置的光线相交的场景的任何几何形状来执行的采样位置的进一步处理包括触发将另外的(例如,次)光线投射到所考虑的采样位置的场景中。
在一个实施方案中,对帧中光线所对应的采样位置的进一步处理也可(并且是)根据被确定为与该光线相交的场景的任何几何形状来执行(并且在一个实施方案中也可)包括对帧的采样位置进行渲染(着色)以生成该采样位置的输出数据值(颜色值),例如,并且在一个实施方案中,用于在所考虑帧的采样位置处显示场景视图。
因此,在一个实施方案中,对帧中光线所对应的采样位置执行的进一步处理包括以下中的一者:
触发对所考虑的采样位置的另外的(例如,次)光线的追踪(投射);以及
对采样位置进行渲染(着色),以便为该帧的该采样位置提供输出颜色值。
相应地,在一个实施方案中,本文所述的技术包括基于相交对采样位置进行着色,以及/或者基于该相交将另外的光线投射到场景中。
如上所述,在一个实施方案中,执行这些操作中的哪些操作基于并根据被确定为与光线相交的几何形状的一个或多个特性以及正在使用的特定基于光线追踪的渲染过程。
在可编程执行单元响应于确定存在与光线相交的几何形状(以及与光线相交的几何形状)的情况下,确定该光线所对应的采样位置应当被着色(渲染)以便为帧的采样位置提供输出色值,然后可编程执行单元将执行指令以便为所考虑的采样位置提供输出颜色值。
在实施方案中,着色(渲染)操作包括对采样位置施加一个或多个纹理,并且在一个实施方案中,使用纹理映射器单元(例如,以用于此类纹理化操作的正常方式)来执行此操作。因此,在实施方案中,在针对光线的遍历操作已经完成之后,其中已经使用纹理映射器单元来执行针对光线的遍历操作的一个或多个处理操作,响应于确定存在与光线相交的几何形状(以及与光线相交的该几何形状),程序可以通过对确定光线与其相交的任何几何形状进行着色(渲染)来继续,并且图形处理器还可以在着色(渲染)期间使用纹理映射器单元来根据需要执行纹理化操作。
因此,在本文所述的技术中,纹理映射器单元在一个实施方案中用于使光线追踪遍历操作加速和执行正常纹理化操作两者。在实施方案中,纹理映射器单元可以并行执行两个操作,例如针对正被用于光线追踪操作的不同光线。
可以任何合适且期望的方式执行对采样位置的渲染(着色)。在一个实施方案中,其基于并根据采样位置的一条或多条光线的投射的结果,以及所确定的相交的几何形状(如果有的话),并且/或者基于并根据正在被执行的特定基于光线追踪的渲染过程来执行。例如,渲染(着色)处理可以是(并且在一个实施方案中是)基于所确定的与之相交的几何形状的表面类型,以及针对该表面类型的预定义着色操作。
在一个实施方案中,该渲染(着色)考虑了已针对采样位置投射的所有光线,因此在一个实施方案中,基于第一相交几何形状(和该几何形状的特性,例如表面特性)以及针对该采样位置投射的任何另外的(次)光线的结果,例如以确定任何照明、反射或折射效果。当然,其他布置将是可能的。
在一个实施方案中,一旦所有(期望的)光线已经针对采样位置进行了投射(并且已确定了待针对所考虑的采样位置进行投射的所有光线的几何形状相交(如果有的话)),就执行对该采样位置的渲染(着色)。(如上所述,针对给定采样位置的光线追踪过程可包括确定与从采样位置本身投射的“主”光线相交的任何几何形状,以及确定针对已针对所考虑的采样位置投射的任何次光线的几何形状,等,例如作为针对主光线确定的一个或多个相交的结果)。
因此,在一个实施方案中,一旦已针对采样位置确定了光线(几何形状相交(如果有的话)的最终结果,可编程执行单元就将(至少)根据被确定为与已针对采样位置投射的光线相交的场景的任何几何形状来(至少)对帧中的采样位置进行渲染。
同样,这可以任何合适且期望的方式进行,并且可以使用被确定为与该采样位置的一条或多条光线相交的几何形状等的任何合适且期望的特性等。
可编程执行单元可执行并被触发以执行对与光线相交的任何几何形状的确定,然后响应于光线追踪加速数据结构遍历的结果,以任何合适且期望的方式,相应地对采样位置进行适当的进一步处理。在一个实施方案中,可编程执行单元执行这些操作,并且被触发以通过执行(并被触发以执行)将使可编程执行单元执行所需处理操作的进一步处理指令来执行这些操作。
因此,在一个实施方案中,一旦来自光线追踪加速数据结构遍历操作的对能够与光线相交的几何形状的指示可用,就使可编程执行单元执行进一步的处理指令,例如,并且在一个实施方案中,这将使可编程执行单元执行所需的处理操作,包括确定与该光线相交的任何几何形状,然后根据被确定为与该光线相交的场景的任何几何形状对采样位置进行适当的进一步处理。
因此,当来自光线追踪加速数据结构遍历的结果可用时,可编程执行单元将执行进一步的着色器程序指令以执行期望的几何形状相交确定以及随后对所考虑的采样位置的进一步处理。
在一个实施方案中,存在取决于已被确定并且由光线追踪加速数据结构指示为(可能)与光线相交的几何形状的类型而待执行的不同组的另外指令。因此,在一个实施方案中,存在将由可编程执行单元根据并取决于特定几何形状(并且在一个实施方案中,该几何形状的特定表面类型(一个或多个表面特性))而执行的不同(组)指令(序列)。
待针对不同类型的几何形状(例如,表面)执行的不同组指令可例如被提供为待执行(取决于所指示的几何形状)(并且在一个实施方案中是这种情况)的一组多个不同的着色器程序,或者它们可以是总体更大的着色器程序内的不同指令序列(例如,子例程),该着色器程序包括用于彼此不同处理的不同几何类型中的每种类型的指令序列(组)。
因此,在一个实施方案中,存在多个不同的“表面处理”例程(着色器程序),这些例程将由可编程执行单元根据并基于所确定的能够与光线相交的几何形状来选择以供执行。
一旦基于光线追踪的渲染过程已针对采样位置完成,则这将(并且在一个实施方案中,确实)如上所述生成用于采样位置的适当组的输出数据,例如,并且在一个实施方案中,以针对采样位置的适当组的颜色(例如,RGB)数据的形式。
这将针对帧中的每个采样位置进行(因此,以本文所述技术的方式进行的操作在一个实施方案中针对正被渲染的帧的多个(并且在一个实施方案中,针对每个)采样位置执行),使得将生成示出待渲染场景的视图的最终输出帧,该输出帧然后可例如被写入存储器和/或以其他方式处理以供进一步使用,例如用于在合适的显示器上显示。
然后可针对下一帧(例如,待显示的下一帧)重复该过程,以此类推。
本文所述的技术可用于图形处理器能够输出的所有形式的输出。因此,其可在生成用于显示的帧、用于渲染到纹理的输出等时被使用。在一个实施方案中,来自图形处理器的输出被导出到外部(例如,主存储器)以供存储和使用。
根据对以本文所述技术的方式操作的要求,图形处理器可以其他方式具有图形处理器的任何合适且期望的形式或配置,并且包括和执行图形处理器可能包含的任何其他合适且期望的处理元件、电路、单元和阶段,并且执行任何合适且期望形式的图形处理流水线。
在一个实施方案中,图形处理器是总体图形(数据)处理系统的一部分,该总体图形(数据)处理系统(例如,并且在一个实施方案中)包括主机处理器(CPU),该主机处理器例如执行需要由图形处理器处理的应用。该主机处理器将向图形处理器发送适当的命令和数据,以控制该图形处理器来执行图形处理操作并产生在主机处理器上执行的应用所需的图形处理输出。为了便于这一点,该主机处理器应该(并且在一个实施方案中)还执行用于图形处理器的驱动器以及用于编译待由图形处理器的可编程执行单元执行的程序的一个或多个编译器。
该总体图形处理系统可例如包括以下中的一者或多者:主机处理器(中央处理单元(CPU))、图形处理器(处理单元)、显示处理器、视频处理器(编解码器)、系统总线和存储器控制器。
该图形处理器和/或图形处理系统还可包括存储本文所述的数据和/或由图形处理器生成的输出数据,并且/或者存储用于执行本文所述的过程的软件(例如,(着色器)程序)的一个或多个存储器和/或存储器设备,并且/或者与该一个或多个存储器和/或存储器设备通信。图形处理器和/或图形处理系统还可与显示器通信,以用于基于由图形处理器生成的数据来显示图像。
如根据上文将理解的,在可以本文所述技术的方式操作的图形处理系统中,在至少本文所述技术的实施方案中,编译器(例如在主机处理器上执行的编译器)将生成并向图形处理器发出一个或多个着色器程序,该一个或多个着色器程序在被执行时将根据本文所述的技术执行所需的基于光线追踪的渲染操作,其中图形处理器(图形处理器的可编程执行单元)然后执行程序以执行基于光线追踪的渲染,并且作为该程序执行的一部分,与图形处理器的纹理映射器单元交换上述消息。
本文所述的技术还扩展到此类总体图形处理系统和该系统的操作。
本文所述技术的另一个实施方案包括一种在使用光线追踪过程渲染表示包括一个或多个对象的场景视图的帧时操作包括图形处理器的图形处理系统的方法,
其中该图形处理器包括:
该图形处理器包括:
可编程执行单元,该可编程执行单元可操作为执行程序以执行图形处理操作;以及
纹理映射器单元,该纹理映射器单元可操作为响应于来自可编程执行单元的对图形纹理化操作的请求而执行图形纹理化操作;
该方法包括:
在使用光线追踪过程渲染表示场景视图的帧时待由图形处理器的可编程执行单元执行的着色器程序中包括一组一个或多个指令,该一个或多个指令在由该可编程执行单元执行时将使该可编程执行单元执行光线追踪操作,该光线追踪操作使用指示待渲染场景的几何形状分布的光线追踪加速数据结构来确定能够与正被用于该光线追踪操作的光线相交的待渲染场景的几何形状,该光线追踪操作使用该光线追踪加速数据结构;以及
在该着色器程序中进一步包括指令,该指令在由该可编程执行单元执行时将使该可编程执行单元向该图形处理器的纹理映射单元发送消息,以使该纹理映射器单元执行针对该光线追踪操作的一个或多个处理操作,其中该一个或多个处理操作的结果被返回到该可编程执行单元;
该方法进一步包括:当该可编程执行单元正在执行该着色器程序时,响应于该执行单元执行将使该可编程执行单元向纹理映射单元发送消息以执行用于该光线追踪操作的一个或多个处理操作的指令:该可编程执行单元向该纹理映射器单元发送消息以执行该一个或多个处理操作。
本文所述技术的另一个实施方案包括一种图形处理系统,该图形处理系统包括图形处理器,该图形处理器可操作为使用光线追踪过程来渲染表示包括一个或多个对象的场景视图的帧,
该图形处理器包括:
可编程执行单元,该可编程执行单元可操作为执行程序以执行图形处理操作;以及
纹理映射器单元,该纹理映射器单元可操作为响应于来自可编程执行单元的对图形纹理化操作的请求而执行图形纹理化操作;以及
该图形处理系统还包括:
处理电路,该处理电路被配置为:
在使用光线追踪过程渲染表示场景视图的帧时待由图形处理器的可编程执行单元执行的着色器程序中包括一组一个或多个指令,该一个或多个指令在由该可编程执行单元执行时将使该可编程执行单元执行光线追踪操作,该光线追踪操作使用指示待渲染场景的几何形状分布的光线追踪加速数据结构来确定能够与用于该光线追踪操作的光线相交的待渲染场景的几何形状,该光线追踪操作使用该光线追踪加速数据结构;以及
在该着色器程序中进一步包括指令,该指令在由该可编程执行单元执行时将使该可编程执行单元向该图形处理器的纹理映射单元发送消息,以使该纹理映射器单元执行针对该光线追踪操作的一个或多个处理操作,其中该一个或多个处理操作的结果被返回到该可编程执行单元;
其中该可编程执行单元被配置成使得:当该执行单元正在执行着色器程序以使用光线追踪过程来渲染表示包括一个或多个对象的场景视图的帧时,该着色器程序包括一组一个或多个指令以使该可编程执行单元执行光线追踪操作,该光线追踪操作使用指示待渲染场景的几何形状分布的光线追踪加速数据结构来确定能够与正被用于使用该光线追踪加速数据结构的该光线追踪操作的光线相交的待渲染场景的几何形状,响应于该可编程执行单元执行该着色器程序中的指令以向该图形处理器的纹理映射单元发送消息以使该纹理映射器单元执行针对该光线追踪操作的一个或多个处理操作,该可编程执行单元向该纹理映射器单元发送消息以执行该一个或多个处理操作。
如本领域的技术人员将理解的,本文所述技术的这些实施方案可(并且在一个实施方案中,确实)包括本文所述技术的任何一个或多个或所有任选的特征。例如,在一个实施方案中,使用光线追踪加速数据结构的光线追踪操作是光线追踪遍历操作,其包括遍历光线追踪加速数据结构以确定(例如以上述方式)能够与光线相交的待渲染场景的几何形状。
因此,使可编程执行单元消息向纹理映射器单元发送消息的指令可以是任何合适的指令,例如如上所述。例如,该指令可(并且在一个实施方案中,确实)使纹理映射器单元获取光线追踪加速数据结构的节点的节点数据,以针对节点执行相交测试。指令还可(并且在一些实施方案中,确实)使纹理映射器单元执行期望的光线-节点相交测试,如上所述。各种其他布置也是可能的。
本领域的技术人员将理解,本文所述技术的所有所述实施方案可(并且在一个实施方案中,确实)适当地包括本文所述技术的任何一个或多个或所有任选的特征。
本文所述的技术可在任何合适的系统(诸如适当配置的基于微处理器的系统)中实现。在一个实施方案中,本文所述的技术在基于计算机和/或微处理器的系统中实现。在一个实施方案中,本文所述的技术在便携式设备(诸如在一个实施方案中,移动电话或平板电脑)中实现。
本文所述技术的各种功能可以任何期望且合适的方式执行。例如,本文所述技术的功能可根据需要以硬件或软件实现。因此,例如,除非另外指明,否则本文所述的技术的各种功能元件、阶段和单元可包括合适的一个或多个处理器、一个或多个控制器、功能单元、电路系统、电路、处理逻辑部件、微处理器布置等,这些部件可操作为执行各种功能等,诸如适当专用硬件元件(处理电路系统/电路)和/或可编程硬件元件(处理电路系统/电路),这些部件可被编程为以期望的方式操作。
此处还应当指出的是,如本领域的技术人员将理解的,本文所述技术的各种功能等可在给定处理器上复制和/或并行执行。同样,如果需要,各种处理阶段等可共享一个或多个处理电路等。
根据本文所述技术的方法可至少部分地使用软件例如计算机程序来实现。因此,可以看出,当从另外的实施方案来看时,本文所述的技术提供了:计算机软件,该计算机软件特别适于在安装在数据处理器上时执行本文所述的方法;计算机程序元件,该计算机程序元件包括用于当该程序元件在数据处理器上运行时执行本文所述方法的计算机软件代码部分;和计算机程序,该计算机程序包括适于当该程序在数据处理系统上运行时执行本文所述的一个或多个方法的所有步骤的代码。该数据处理器可以是微处理器系统、可编程FPGA(现场可编程门阵列)等。
本文所述的技术还扩展到包括此类软件的计算机软件载体,该软件在用于操作显示处理器或包括数据处理器的微处理器系统时,使得所述控制器或系统结合所述数据处理器以执行本文所述技术的方法的步骤。此类计算机软件载体可以是物理存储中间体,诸如ROM芯片、CD ROM、RAM、闪存存储器或磁盘,或者可以是信号,诸如通过导线的电子信号、光信号或诸如发送到卫星的无线电信号等。
还应当理解,并非本文所述技术的方法的所有步骤都需要由计算机软件执行,因此相对于另一个广泛的实施方案,本文所述的技术提供了计算机软件和安装在计算机软件载体上的用于执行本文所述方法的步骤中的至少一个步骤的此类软件。
因此,本文所述的技术可适当地体现为与计算机系统一起使用的计算机程序产品。此类具体实施可包括一系列计算机可读指令,这些计算机可读指令固定在有形非暂态中间体上,诸如计算机可读中间体,例如磁盘、CD ROM、ROM、RAM、闪存存储器或硬盘。该具体实施还可包括能够经由调制解调器或其他接口设备通过有形中间体(包括但不限于光通信线路或模拟通信线路)或无源地使用无线技术(包括但不限于微波、红外或其他传输技术)传输至计算机系统的一系列计算机可读指令。该系列计算机可读指令体现了本文先前所述的功能的全部或部分。
本领域的技术人员将会理解,此类计算机可读指令可以多种编程语言编写,以与许多计算机架构或操作系统一起使用。此外,此类指令可使用目前或将来的任何存储器技术(包括但不限于半导体、磁性或光学技术)来存储,或者使用目前或将来的任何通信技术(包括但不限于光学、红外或微波技术)来传输。可以设想的是,此类计算机程序产品可以作为可移除中间体与附随的印刷或电子文档(例如收缩包装软件)一起分发,可以预加载计算机系统(例如系统ROM或固定磁盘),或者可通过网络(例如互联网或万维网)从服务器或电子公告板来分发。
现在将仅以举例的方式并参考附图来描述本文所述技术的实施方案。
本实施方案涉及图形处理器的操作,例如在如图1所示的图形处理系统中,当使用基于光线追踪的渲染过程执行待显示的场景渲染时。
光线追踪是一种渲染过程,其涉及从视点(有时称为“相机”)通过图像平面(其为正被渲染的帧)中的采样位置将光线的路径追踪到场景中,以及模拟这些光线与该场景中的对象之间的交互效果。输出数据值(例如,图像中采样位置的颜色)基于场景中与穿过采样位置的光线相交的对象以及那些对象的表面的特性来确定。因此,光线追踪过程涉及针对每个采样位置确定在场景内与穿过采样位置的光线相交的一组对象。
图2示出了示例性“全”光线追踪过程。光线20(“主光线”)从视点21(例如,相机位置)穿过图像平面(帧)23中的采样位置22向后投射到正被渲染的场景中。识别出光线20首先与场景中的对象25(例如,基元)相交的点24。该第一相交将与该场景中最靠近采样位置的对象在一起。
阴影光线26形式的次光线可从第一交点24投射到光源27。根据对象25的表面的材料,可从交点24追踪到反射光线28形式的另一条次光线。如果对象至少在一定程度上是透明的,则可考虑折射的次光线。
在期望将阴影和反射添加到图像中的情况下,可使用此类次光线的投射。次光线可在每个光源的方向上投射(并且,根据该光源是否为点源,可将多于一条次光线投射回到该光源上的点)。
在图2所示的示例中,在将反射光线追踪回光源之前,仅考虑主光线20的单次弹射。然而,如果需要,可考虑更高次数的弹射。
然后根据主光线和任何次光线投射与场景中对象的相交来确定采样位置22的输出数据,即其颜色值(例如,RGB值)。关于待在图像平面(帧)23中考虑的每个采样位置进行了相同的处理。
为了便于此类光线追踪处理,在本发明的实施方案中,当确定与图像平面中的采样位置相关联的光线的相交数据时,使用指示待渲染场景中的几何形状(例如,对象)的加速数据结构来识别能够与光线相交的几何形状的子组。
光线追踪加速数据结构表示并指示正被渲染场景中的几何形状(例如,对象)的分布,并且具体地讲,表示并指示落入该场景的(即,正被考虑的)总体盒中的相应(子)盒内的几何形状。在本发明的实施方案中,使用层次包围盒(BVH)树形式的光线追踪加速数据结构(但如果需要,也可以或替代地使用其他形式的加速数据结构)。
图3示出了示例性二叉BVH树30,该示例性二叉BVH树通过将整个场景包封在轴对准的包围盒(AABV)例如立方体中,然后根据任何合适且期望的例如各种细分方案将该包围盒递归地细分成两个子AABV的连续对直到达到期望的最小细分(盒)来构造(例如,每子节点相同数量的对象,基于遍历成本等)。
因此,BVH树30中的每个节点将具有与之相关联的待渲染场景的相应盒,其中末端、叶节点31各自表示该场景的特定非重叠的最小细分盒,并且任何父节点表示其子节点的盒并与其相关联。每个叶节点还将相应地与针对场景定义的几何形状相关联,该几何形状至少部分地落在该叶节点所对应的盒内。该BVH树加速数据结构还存储(用于节点本身或以其他方式,例如作为边带信息)适当的信息,以允许该树基于光线的起点和方向逐盒地遍历,以便能够识别表示该光线穿过的盒的叶节点。
这然后允许并便于针对该BVH树中的包围盒的层次测试光线,直到找到叶节点。然后仅需要测试与特定叶节点相关联的几何形状是否与该光线相交。
虽然图3示出了二进制树(其中每个父节点具有两个子节点),但是本文所述的技术还可以使用更宽的树结构,例如其中每个父节点具有多达六个子节点,并且在一些示例中,就是这种情况。当然,其他布置也是可能的。
图4是示出本文所述技术的实施方案中的光线追踪过程的流程图,并且该光线追踪过程将在(并且由)图形处理器2执行。
首先,该场景的几何形状被分析并用于获得加速数据结构(步骤40),例如以BVH树结构的形式,如上所述。这可以任何合适且期望的方式完成,例如通过图形处理器2上的初始处理遍。
然后生成主光线,从相机穿过图像平面中的特定采样位置(帧)(步骤41)。然后针对主光线遍历加速数据结构(步骤42),并且识别对应于该光线穿过的第一盒的叶节点,该第一盒包含可能与该光线相交的几何形状。然后确定光线是否与该叶节点中的任何几何形状例如基元(如果有的话)相交(步骤43)。
如果在该节点中未识别出与光线相交的(有效)几何形状,则该过程返回到步骤42,并且该光线继续遍历加速数据结构和该光线穿过的下一盒的叶节点,该下一盒可包含识别出与该光线相交的几何形状,并且在步骤43处执行对相交的测试。
对(可能)与光线相交的每个叶节点重复该过程,直到识别出与该光线相交的几何形状。
当识别出与该光线相交的几何形状时,然后确定是否针对所考虑的主光线(以及因此采样位置)投射任何另外的(次)光线(步骤44)。这可基于(例如,并且在一个实施方案中基于)已发现与光线相交的几何形状(例如,其表面特性)的性质,以及所使用的光线追踪过程的复杂性。因此,如图4所示,可生成从交点发出的一条或多条次光线(例如,阴影光线、折射光线和/或反射光线等)。然后相对于每条次光线执行步骤42、43和44。
考虑到对象在主交点处的表面特性、与次光线相交的任何几何形状等,一旦没有待投射的另外的光线,就基于主光线的投射结果和所考虑的任何次光线来确定该光线所对应的采样位置的阴影颜色(步骤45)。然后将针对采样位置的着色颜色存储在帧缓冲区中(步骤46)。
如果在步骤42中没有可被识别的能够包括与给定光线(无论是主光线还是次光线)相交的几何形状的(有效)节点(并且不存在针对采样位置待投射的另外的光线),则该过程移动到步骤45,并且执行着色。在这种情况下,该着色在一个实施方案中基于某种形式的“默认”着色操作,该“默认”着色操作待在未发现与光线的相交的几何形状的情况下执行。这可包括例如简单地将默认颜色分配给采样位置,并且/或者具有定义的默认几何形状以在场景中未发现实际几何形状相交的情况下使用,其中该采样位置随后根据该默认几何形状被着色。当然,其他布置将是可能的。
针对待在图像平面(帧)中考虑的每个采样位置执行该过程。
图5示出了能够用于本文所述技术的实施方案中的另选光线追踪过程,其中仅执行相对于图3和图4所述的全光线追踪过程的步骤中的一些步骤。此类另选的光线追踪过程可被称为“混合”光线追踪过程。
在该过程中,如图5所示,首先使用光栅化过程确定图像平面(帧)中每个采样位置的第一交点50,并将其存储在被称为“G缓冲器”51的中间数据结构中。因此,为每个采样位置生成主光线以及识别场景中该主光线与几何形状的第一交点的过程被替换为初始光栅化过程以生成“G缓冲区”。该G缓冲区包括指示图像平面(帧)中的每个采样位置的每个第一(最近)交点的深度、颜色、法线和表面特性的信息(以及任何其他适当且期望的数据,例如,反照率等)。
然后可从第一交点50开始投射次光线(例如,到光源53的阴影光线52)和反射光线54,并且基于首先相交的几何形状的特性以及次光线与场景中的几何形状的相交来确定对这些采样位置进行的着色。
参见图4的流程图,在此类混合过程中,将省略针对主光线的全光线追踪过程的步骤41、42和43的初始遍,因为不需要投射主光线并确定它们与场景中的几何形状的第一相交。相反,从G缓冲区获得了每个采样位置的第一交点数据。
该过程然后可基于从G缓冲区获得的每个像素的第一交点或者在待考虑从第一交点发出的次光线的情况下前进至着色阶段45,这些次光线将需要以参考图4所述的方式被投射。因此,步骤42、43和44将以与先前针对任何次光线的全光线追踪过程所述相同的方式来执行。
针对采样位置确定的颜色将基于针对采样位置确定的着色颜色以与图4的步骤46相同的方式写入帧缓冲区,该着色颜色基于第一交点(如从G缓冲区获得的)以及在适用的情况下使用光线追踪确定的任何次光线与场景中的对象的相交。
本实施方案具体地讲,涉及图形处理器在执行基于光线追踪的渲染时的操作,例如,如上文参考图2至图4所述,并且具体地讲,涉及作为光线追踪操作的一部分执行的光线追踪加速数据结构遍历、几何形状相交和进一步处理(图4中的步骤42至步骤45)。
图6示意性地示出了本发明实施方案的图形处理器(GPU)60的相关元件和部件。
如图6所示,GPU 60包括一个或多个着色器(处理)核心61、62以及存储器管理单元63和二级高速缓存64,该二级高速缓存可操作为(例如,经由适当的互连器和(动态)存储器控制器)与片外存储器系统68通信。
图6示意性地示出了一个着色器核心61的相关配置,但是如本领域的技术人员将理解的,图形处理器60的任何其他着色器核心将以对应的方式配置。
(图形处理器(GPU)着色器核心61、62是可编程处理单元(电路),其通过运行针对要生成的输出(诸如渲染目标,例如帧)中的每个“项目”的小程序来执行处理操作。就这一点而言,“项目”可以是例如顶点、一个或多个采样位置等。着色器核心将通过一个或多个执行线程来处理每个“项目”,该一个或多个执行线程将执行针对所考虑的“项目”所考虑的着色器程序的指令。通常,将存在各自同时(并行)执行的多个执行线程)。
图6示出了与本发明实施方案的操作相关的图形处理器60的主要元件。如本领域的技术人员将理解的,可存在图形处理器60的在图6中未示出的其他元件。此处还应当指出的是,图6仅是示意性的,并且例如在实践中,即使所示的功能单元在图6中被示意性地示出为独立单元,这些功能单元也可共享重要的硬件电路。还应当理解,除非另外指明,否则如图6所示的图形处理器的元件和单元等中的每一者可根据需要来实现,并且将相应地包括例如用于执行必要的操作和功能的适当电路(处理逻辑)等。
如图6所示,图形处理器60的每个着色器核心包括适当的可编程执行单元(执行引擎)65,该可编程执行单元可操作为执行供执行线程用于执行图形处理操作的图形着色器程序。
着色器核心61还包括指令高速缓存66,该指令高速缓存存储要由可编程执行单元65执行以执行图形处理操作的指令。如图6所示,待执行的指令将经由互连器69和微型TLB(转换后备缓冲器)70从存储器系统68中获取。
着色器核心61还包括与可编程执行单元65通信的适当的加载/存储单元76,该加载/存储单元可操作为例如加载适当的高速缓存、数据等以由可编程执行单元65处理,并且将数据写回存储器系统68(用于在可编程执行单元中执行的程序的数据加载和存储)。同样,此类数据将由加载/存储单元76经由互连器69和微型TLB 70获取/存储。
为了执行图形处理操作,可编程执行单元65将执行用于相应执行线程(例如,对应于要渲染的帧的相应采样位置)的图形着色器程序(指令序列)。
因此,如图6所示,着色器核心61进一步包括多个线程创建器(生成器)72,该多个线程创建器可操作为根据需要生成由可编程执行单元65执行的执行线程。
如图6所示,着色器核心61还包括呈纹理映射装置74形式的纹理映射器单元,其与可编程执行单元65通信,并且可操作为执行纹理化操作。
纹理映射装置74包括合适的处理电路系统以遵循纹理化指令。在本实施方案中,该处理电路系统呈适当配置的一个或多个专用硬件元件的形式。
图7进一步详细地示出了纹理映射器(纹理映射装置)74。
如图7所示,纹理映射装置74的输入参数获取单元114包括指令消息输入单元202,该指令消息输入单元可操作为从着色器核心接收纹理化指令。输入参数获取单元114进一步包括描述符获取单元204,其从存储器108检索用于纹理映射操作的输入参数(控制数据)。
然后将输入参数传递到坐标计算单元116,在该坐标计算单元中,生成用于待获取的数据值(纹素)的实际索引。
还如图7所示,纹理高速缓存查找单元118包括高速缓存测试仪206,其确定所需数据(纹素)是否已经在本地高速缓存。如果所需数据未在本地高速缓存,则作出请求以从存储器68获取所需数据。然后,将纹理映射操作停放在纹理高速缓存查找单元118的停放缓冲区208中,以等待处理(例如,使正从存储器68获取的所需数据待决)。
如图7所示,数据获取单元120包括纹理高速缓存210。纹理高速缓存210包括可单独寻址的高速缓存行,其可将纹理数据(纹素)值本地存储到纹理映射装置74。数据获取单元120进一步包括纹理RAM 212,该纹理RAM包括可以将纹理数据值本地存储到纹理映射装置74的可单独寻址的RAM组。
如图7所示,纹理映射装置74进一步包括纹理滤波单元122,该纹理滤波单元可操作为执行纹理化(滤波)操作。例如,纹理滤波单元122可包括纹理读取单元,该纹理读取单元从停放缓冲区208接收用于纹理映射操作的处理遍,并且读取从纹理RAM 212传递的所需数据。纹理滤波单元122可进一步包括权重计算单元,该权重计算单元还从停放缓冲区208接收用于纹理映射操作的处理遍并且计算用于纹理映射操作的内插权重值。纹理滤波单元122然后可以将相应的数据值乘以其相应的权重值,并将乘法的结果组合以为所考虑的处理过程提供输出值。然后可以通过纹理映射装置的输出电路220相应地提供滤波后的纹理以供输出。
因此,图7示出了根据本文所述技术的实施方案的纹理映射装置74的概述。然而,应当再次注意,图7仅是示意图,并且为了清楚起见,已经从该图中省略了各种部件和连接。
现在将描述根据本实施方案的纹理映射装置74在执行正常纹理化操作时的操作。
当由着色器核心61指示以执行纹理映射操作时,纹理映射装置74从存储器68读取纹理(根据需要),执行纹理映射操作,并且将从纹理采样的(例如,RGB)颜色返回到着色器核心104。
作为这种处理的一部分,输入参数获取单元114从着色器核心61接收纹理化指令消息,该纹理化指令消息指示待使用的一个或多个纹理(例如,可以提供包含纹理描述符(TXD)的纹理场)、待执行的纹理映射操作的特定类型(例如,双线性、三线性等)(例如,可以提供包括采样器描述符(SMD)的采样器场),以及用于执行纹理映射操作的采样位置坐标(例如,在标准化坐标系中给出的,其中(0.0,0.0)是纹理的左上角,并且(1.0,1.0)是纹理的右下角)。
在请求执行纹理映射操作时使用的纹理描述符(TXD)可以例如指示在纹理映射操作中待使用的一个或多个输入阵列或表面(纹理、图像或其他阵列)的一个或多个表面或平面描述符(SFD)。每个SFD可指示在纹理映射操作待使用的数据阵列的参数。
在请求纹理映射操作时使用的采样器描述符(SMD)可指示滤波方法(例如双线性、三线性等)和待用于纹理映射操作的其他参数。
然后,坐标计算单元116从采样位置坐标确定待从数据获取单元120查找的纹理中的纹素(纹素索引)。
然后,纹理高速缓存查找单元118检查所需的纹理数据(所需的纹素)是否已经存储在数据获取单元120的高速缓存中,并且如果不存在,则将纹理数据(纹素)获取到纹理映射装置74中。对于典型的双线性查找,从存储器108中的纹理的2×2纹素区域读取来自四个纹素的纹理数据。对于典型的三线性查找,从存储器108中的相应纹理“mipmap”的两个2×2纹素区域读取来自两组四个纹素的纹理数据。
然后,纹理滤波单元122读入每个双线性查找的四个纹素,确定内插权重值,并且计算来自所考虑的采样位置的纹理数据值的内插结果。在三线性内插的情况下,两个双线性查找的结果被组合成所考虑的采样位置的结果。然后将该结果输出到(返回到)着色器核心61。
因此,当着色器核心61的执行引擎65遇到纹理化指令时(例如,这可以在图4中的步骤45期间发生),从执行引擎65向纹理映射装置74发送纹理化指令,以请求纹理映射装置74执行纹理化操作。在纹理映射装置74已经完成其纹理处理(执行纹理化指令)之后,在响应消息中将最终结果发送回着色器核心61以供在对所考虑的片段进行着色时使用。
在本实施方案中,除了执行上述正常纹理化操作之外,纹理映射器74还被用作光线追踪过程的加速器,并且具体地,响应于从着色器核心21的可编程执行单元65接收到的消息75,以执行一个或多个处理操作,作为针对作为基于光线追踪的渲染过程的一部分正被处理的光线的光线追踪加速数据结构遍历(即,图4的步骤42的操作)的一部分。
为了促进这一点,如图7所示,纹理映射装置74进一步包括相交单元218,该相交单元与上述滤波单元122并行提供,并且可操作为作为光线追踪遍历操作的一部分执行光线-盒相交测试。然而,纹理映射装置74中的其他电路系统在相交单元218与滤波单元122之间共享,并且可用于处理与纹理化操作或光线追踪操作有关的数据和操作。
因此,以如上针对纹理化操作所述方式对应的方式,当着色器核心61的执行引擎65遇到待卸载到纹理映射装置74的光线追踪操作时,从执行引擎65向纹理映射装置74发送适当的指令,以请求纹理映射装置74执行针对光线追踪操作的一组处理操作。然后可以与纹理化操作的方式对应的方式(但是其中数据替代地与光线追踪操作有关)将相关数据加载到纹理映射装置74中并且进行相应处理。
在纹理映射装置74已经完成其处理(执行指令)之后,在响应消息中将最终结果发送回着色器核心61以供光线追踪过程使用。
在本实施方案中,纹理映射装置74用于对光线追踪加速数据结构(BVH树30)中的单个节点执行处理操作。
具体地,纹理映射装置74用于获取所考虑的节点的参数。以这种方式,数据获取可以(并且是)从与可编程执行单元65通信的加载/存储单元76卸载到纹理映射装置74的,其中纹理映射装置74然后以与纹理映射装置74将如何读入纹理数据的方式对应的方式将节点参数从存储器68适当地读取到纹理高速缓存210中。
将数据获取卸载到纹理映射装置74,该纹理映射装置具有能够有效读入此类数据的专用数据获取单元120,通常比试图使用可编程执行单元65/加载/存储单元76来完成此操作更有效。这也有利地减少了着色器程序中的指令的数量。
在一些实施方案中,纹理映射装置74被进一步配置成使得:在其已经获取给定节点的参数之后,纹理映射装置74然后继续计算正被用于光线追踪遍历操作的光线与所考虑的节点之间的相交,并且相应地在响应消息中将相交测试的结果返回到可编程执行单元65。
图8示出了在这种情况下纹理映射装置74中的数据流。
因此,图8示出了响应于可编程执行单元65遇到使可编程执行单元65向纹理映射装置74发送消息以执行针对给定节点的相交测试的指令,纹理映射装置74中的数据流。
因此,消息75被发送到纹理映射装置74的指令消息输入单元202,其中消息75指示所考虑的光线的光线参数。例如,可在类似纹理化的消息中将光线参数发送到纹理映射装置74。还可以包括包含正被遍历的加速数据结构的基地址的描述符索引作为消息的一部分。
例如,可以使用分配给正在执行遇到指令的光线遍历着色器程序的执行线程的一组寄存器来输送该信息。因此,可通过按如下方式分级寄存器来提供该消息的有效负载:
//分级-寄存器:
//0:ray_dir.x
//1:ray_org.x
//2:ray_dir.y
//3:ray_org.y
//4:ray_dir.z
//5:ray_org.z
//6:ray_len
//7:node_index
//warp_constant字将包含TreeDescriptor的描述符索引,该描述符索引包含树节点的基地址。
在第一步骤中,消息输入单元(MSGIN/CPP)202然后可以计算光线方向的逆相。为了促进这一点并减少缓冲,在该示例中,ray_org-vector的分量分布在消息的三个“flit”上。逆光线方向的计算可以例如如下执行:
vec3 ray_inv_dir;
ray_inv_dir.x=1.0/ray_dir.x;
ray_inv_dir.y=1.0/ray_dir.y;
ray_inv_dir.z=1.0/ray_dir.z;
然后,描述符获取器(DF)204可以读取树描述符,并且然后可以通过坐标计算单元(纹理索引生成器,TIG)116来计算所考虑的节点的存储器地址。待测试的树节点的存储器地址的计算可以类似于可如何计算用于阵列纹理的PlaneDescriptor地址的方式来完成,例如如下
u64_t node_address=TreeDescriptor.pointer+node_index*64;
然后可以经由纹理高速缓存210来读入节点,并且以在执行正常纹理化操作时将如何处置纹理数据的方式对应的方式使用高速缓存测试仪(CT)206和停放缓冲区208来处置该节点。
例如,如果节点数据已经在纹理高速缓存210中,则其可以直接被加载。否则,可以使用纹理映射装置的未命中路径适当地处置该数据。
在合适的纹理高速缓存查找(TCL)之后,然后将节点数据(子节点框/盒)传递到相交测试单元218,该相交测试单元针对与该节点相关联的每个框/盒执行所需的相交测试。例如,对于具有六个子节点的节点,相交测试可以重复六次。可以执行光线与跟正被测试的节点相关联的六个子节点框之间的相交测试,例如如下:
vec3 vmin,vmax;
vmin.x=ray_inv_dir.x<0.0?box.hi.x:box.lo.x;
vmin.y=ray_inv_dir.y<0.0?box.hi.y:box.lo.y;
vmin.z=ray_inv_dir.z<0.0?box.hi.z:box.lo.z;
vmax.x=ray_inv_dir.x<0.0?box.lo.x:box.hi.x;
vmax.y=ray_inv_dir.y<0.0?box.lo.y:box.hi.y;
vmax.z=ray_inv_dir.z<0.0?box.lo.z:box.hi.z;
vec3 tmin=(ray_org+vmin)*ray_inv_dir;
vec3 tmax=(ray_org+vmax)*ray_inv_dir;
float fmin=max(tmin.x,max(tmin.y,tmin.z));
float fmax=min(tmax.x,min(tmax.y,tmax.z));
//如果该框被命中,则返回true
返回fmin<fmax&&fmax>0.0&&fmin<ray_len;
然后,通过输出(MSGOUT)220将响应消息返回到可编程执行单元65。响应消息应当包含指示子节点框中的哪些被命中的标记以及子节点索引。
这可以各种方式指示。例如,一个选项是针对每个框返回fmin,如上文的示例代码所示。这种情况始终为正,因此可以将其设置为负值以指示未命中。各种其他布置也是可能的。
由纹理映射装置74执行的图8中所示的整个操作可以通过将(单个)合适的指令包括到可编程执行单元65中来触发,从而显著降低着色器程序代码的复杂性。
例如,下面的伪代码示出了一段GPU执行的代码(编译的着色器),其将执行相交操作,其中引入新的TEX_RAY_BOX_INTERSECT指令使可编程执行单元65向纹理映射装置74发送消息以执行光线与树结构的相应节点之间的相交:
TEX_RAY_BOX_INTERSECT intersect_bool,ray_inv_dir,ray_org,ray_len,node_index
//需注意,node_address和框是在纹理映射装置中内部获取的虽然上面的示例主要是根据测试光线与跟树中的节点相关联的一组子节点盒(框)相交来描述的,但是应当理解,还可以类似的方式将后续基元相交测试卸载到纹理映射装置74,例如通过包括对应的TEX_RAY_TRI_INTERSECT指令,该指令使可编程执行单元65向纹理映射装置74发送消息以执行光线与由树结构的相应末端节点表示的一组基元之间的相交。
在这种情况下,不是加载用于测试的一组子节点框/盒,纹理映射装置74替代地加载由所考虑的节点表示的一组基元,并且然后执行适当的光线-基元相交测试。
在图8中,纹理映射装置74因此用于加载节点数据,并且然后根据需要在针对光线的遍历操作期间执行光线-节点相交测试。
然后将相交测试的结果返回到着色器程序,该着色器程序适当地控制遍历,以确定接下来应当测试哪些节点等,并且然后相应地向纹理映射装置74发送消息以触发针对下一节点的光线-节点相交测试,以此类推,直到遍历操作完成为止。
然而,其他布置也是可能的。例如,在其他实施方案中,纹理映射装置74可以被配置为读入节点的节点数据,并且然后将节点数据返回到可编程执行单元65以进行进一步处理,例如其中纹理映射装置74本身无需执行任何相交测试。
在这种情况下,不需要提供相交测试单元218(尽管它仍可以提供)。
图9示出了在这种情况下纹理映射装置74中的数据流。如图9所示,总体的流类似于图8所示的流,如上所述。然而,在这种情况下,如图9所示,在读入节点数据之后,然后将其直接提供给输出电路(MSGOUT)220。
因此,在这种情况下,响应消息应当包含待用于测试所考虑节点的框特性(子节点盒)和子节点索引。然后,可编程执行单元65使用返回的节点数据来适当地执行相交测试。因此,在图9中,仅加载操作被卸载到纹理映射装置74。
同样,这可以通过将合适的TEX_BOX_FETCH指令包括到正由可编程执行单元65执行的光线遍历着色器程序中来实施,例如如下:
TEX_BOX_FETCH box,node_index
//需注意,node_address和框是在纹理映射装置中内部获取的
在这种情况下,然后由执行适当“do_intersection”函数着色器代码的可编程执行单元65来计算实际相交,例如如下:
//假设:光线早些时候已经被计算出并存储在寄存器文件中
ARITH ray_inv_dir,ray_vec_dir;
//例如在纹理映射装置中执行,如上。
TEX_BOX_FETCH box,node_index
//node_address和框是在纹理映射装置中内部获取的
//完成光线与树节点中的子框之间的相交计算。
//在该示例中,接下来将执行6次,因为存在6个子框,并且这已经在TreeDescriptor中被设置为例如“box_format”
//例如“box_format”(如纹理格式)将对一个节点具有多个子节点以及因此执行多少次下面的相交指令进行编码
ARITH intersect_bool,ray_inv_dir,ray_org,ray_len,vec_box.1
ARITH intersect_bool,ray_inv_dir,ray_org,ray_len,vec_box.2
ARITH intersect_bool,ray_inv_dir,ray_org,ray_len,vec_box.3
ARITH intersect_bool,ray_inv_dir,ray_org,ray_len,vec_box.4
ARITH intersect_bool,ray_inv_dir,ray_org,ray_len,vec_box.5
ARITH intersect_bool,ray_inv_dir,ray_org,ray_len,vec_box.6
上面示出的“do_intersection”函数然后将递归地用于遍历树,并且将其自身用于相交的每个节点。对于在TreeDescriptor中设置的加速结构中描述的许多的节点,这将是一个递归函数。
代码的示例如下所示:
当然,其他布置也是可能的,并且根据需要,可在可编程执行单元65与纹理映射器74之间以任何合适的方式共享处理工作。
例如,在实施方案中,纹理映射装置74可选择性地以图8中所示的方式或图9中所示的方式操作。具体地,纹理映射装置74可能够提供不同的输出,例如取决于所需的相交测试的复杂性。
具体地,在一些情况下,可能更有效的是,纹理映射装置74将节点参数返回到可编程执行单元65以执行相交测试,例如,在预期相交测试是复杂的情况下,例如,因为光线与节点盒的边缘相交。在这种情况下,纹理映射装置74可通过试图执行相交测试而基本上以图8所示的方式操作,但是结果可能指示相交测试单元218无法确定相交,因此输出的结果可以与节点盒一起作为这种情况的指示。
如果需要,纹理映射装置74也可以执行整个遍历操作。该方法可能需要在纹理映射装置74中提供附加的硬件以用于控制遍历操作。
图10是示出在本文所述技术的实施方案中,在执行基于光线追踪的渲染过程以渲染场景的视图时图形处理器60的着色器核心61的操作的流程图。
图10示出了关于正被渲染的帧的给定采样位置的操作。该操作将针对正被渲染的帧的每个采样位置重复,并且由活动的且用于渲染帧的每个相应着色器核心重复。
如上所述,在本实施方案中,通过为采样位置生成相应的执行线程,然后执行针对这些线程的适当着色器程序来渲染这些采样位置。因此,该过程将从线程创建器72生成对应于正被渲染的采样位置的适当执行线程开始。然后执行线程将执行初始光线追踪着色器程序以执行针对采样位置的基于光线追踪的渲染过程(步骤80)。
在本实施方案中,针对采样位置执行的初始光线追踪着色器程序尤其包括一个或多个“光线遍历”指令以执行正被用于光线追踪操作的光线的光线遍历。因此,对于正在使用的给定光线,执行线程将执行对应的光线遍历着色器程序(步骤81)。
作为此操作的一部分,在光线遍历着色器程序中,包括这样的指令:这些指令在被执行时触发可编程执行单元65以向纹理映射装置74发送消息75以执行针对所考虑的光线的遍历操作的一个或多个处理操作。如上所述,并且如图8和图9所示,这些操作可以例如包括在遍历操作期间遇到的节点的数据中的装载,并且任选地还执行光线节点相交测试。
因此,如图10所示,当针对光线执行光线追踪遍历着色器程序时(步骤81),可编程执行单元65遇到并执行此类指令(步骤82),然后可编程执行单元65将消息75发送到纹理映射装置74以触发纹理映射装置74以执行针对所考虑的光线的遍历操作的必要处理操作(步骤83)。
如上所述,从可编程执行单元65发送到纹理映射装置74的消息75指示:待遍历的光线追踪加速数据结构;待针对其确定光线追踪加速数据结构的遍历的光线的起点(起始位置(x、y和z坐标));所述光线的方向矢量,待针对所述光线遍历所述光线追踪加速数据结构;和光线待遍历到场景中的(最小和/或最大)距离。
如图10所示,响应于来自可编程执行单元65的消息,纹理映射装置74执行针对光线追踪遍历的必要处理操作并将适当的结果返回到光线遍历着色器程序(步骤83)。
光线遍历着色器程序使用所提供的关于光线的信息来遍历光线追踪加速数据结构,以确定能够与所考虑的光线相交的待渲染场景的几何形状。在本实施方案中,遍历过程用来基于光线的位置和方向遍历光线追踪加速数据结构,从而针对光线依次穿过的场景的每个盒确定该盒中是否存在任何几何形状(由光线追踪加速数据结构指示),直到找到光线与针对场景定义的几何形状的第一(潜在)相交。
因此,光线遍历着色器程序使用从纹理映射装置74返回的结果来继续光线遍历操作。如图10所示,在一个实施方案中,从纹理映射装置74返回的结果因此被循环回到着色器程序,其中每当着色器程序确定光线追踪加速数据结构中的新节点需要测试时,着色器程序就向纹理映射装置74发送消息(步骤84)。当然,其他布置将是可能的。
针对光线的光线追踪加速数据结构遍历可包括针对该光线遍历单个光线追踪加速数据结构,或者针对该光线遍历多个光线追踪加速数据结构(例如,在场景的整个盒和/或几何形状由多个不同的光线追踪加速数据结构表示的情况下,以及/或者在首先遍历指示另外的待遍历的光线追踪加速数据结构的初始光线追踪加速数据结构的情况下)。
一旦针对光线的光线追踪加速数据结构遍历完成(步骤84–是),并且光线追踪遍历操作已确定(可能)与光线相交的几何形状,就将该信息返回到可编程执行单元65,以供可编程执行单元根据并基于所确定的针对光线的遍历的结果对所考虑的采样位置执行进一步处理(步骤85)。
然后,可编程执行单元65基于任何确定的几何相交来相应地执行针对光线的期望的进一步处理(步骤85)。例如,针对采样位置的进一步处理可包括针对所考虑的采样位置投射另一条光线(次光线)(步骤86)(在这种情况下,如图10所示,将针对另一条光线(次光线)重复该遍历操作(步骤81至85)),并且附加地或另选地,例如,一旦已针对采样位置投射了所有必要光线,所考虑的采样位置就获得着色(即,生成针对所考虑的采样位置的输出颜色值)(步骤87)。
一旦已生成所考虑的采样位置的最终输出值,就完成关于该采样位置的处理。然后可以相似的方式处理下一个采样位置,依此类推,直到帧的所有采样位置都被适当地加阴影。然后可输出帧,例如以用于显示,并且以相似方式处理下一帧,依此类推。
如根据上文将理解的,本实施方案的基于光线追踪的渲染过程尤其涉及图形处理器60的可编程执行单元65执行适当的着色器程序以执行基于光线追踪的渲染。在本实施方案中,这些着色器程序由用于图形处理器60的编译器(着色器编译器)12生成,该编译器例如在图形处理系统的中央处理单元(CPU)诸如主机处理器上执行(并且在一个实施方案中,作为用于图形处理器的驱动器11操作的一部分),如图1所示。
编译器(驱动器)将从需要基于光线追踪的渲染的应用13接收待执行的一个或多个基于高级光线追踪的渲染着色器程序,然后将该一个或多个程序编译成适当的着色器程序以用于由图形处理器执行,并且作为该处理的一部分,如上所述,将在要由该图形处理器执行的所编译的着色器程序中的一者或多者中包括一个或多个适当的“光线遍历”指令,以使得可编程执行单元向光线追踪加速数据结构遍历电路发送消息,从而执行针对光线的光线追踪遍历。相应地,编译器还将响应于并根据由光线追踪加速数据结构遍历电路确定的光线遍历的结果而生成待执行的一组适当的另外的“表面处理”着色器程序。
编译过程(编译器)可使用任何合适的和期望的编译器技术来实现这一点。图11示出了编译过程的实施方案。
如图11所示,用于图形处理器的编译器将接收用于编译的一个或多个基于光线追踪的渲染程序(步骤100)。该编译器然后将分析所提供的着色器程序代码,以识别该着色器程序代码中的光线遍历操作(步骤101),并且相应地在所编译的着色器程序中的适当点处插入光线遍历指令(步骤102)。
作为此操作的一部分,编译器将包括光线追踪遍历着色器程序内的指令以向纹理映射装置74发送消息以使纹理映射装置74执行针对光线追踪遍历操作的处理操作,如上所述。
然后,将所编译的着色器程序发出给图形处理器以用于执行(例如,存储在图形处理器的和/或图形处理器能够访问的适当存储器中,使得图形处理器可根据需要获取所需着色器程序以用于执行)(步骤103)。
从上文可以看出,本文所述的技术在一些实施方案中至少可提供用于执行基于光线追踪的渲染的更有效的过程。至少在本文所述技术的实施方案中,这通过使用纹理映射器单元来执行针对正被处理的光线的光线追踪加速数据结构遍历的一个或多个处理操作来实现,但是其中也可通过使用图形处理器的可编程执行单元执行一个或多个适当的着色器程序来执行基于光线追踪的渲染的其他处理。
上述具体实施方式是为了举例说明和描述的目的而呈现的。其并非旨在穷举或将技术限制为所公开的精确形式。按照上述教导内容,许多修改形式和变型形式是可能的。选择所述实施方案是为了最佳地解释本技术的原理及其实际应用,从而使得本领域的其他技术人员能够最佳地利用各种实施方案中的技术并且具有适合于所设想的特定用途的各种修改。本发明的范围旨在由所附权利要求限定。
Claims (20)
1.一种在使用光线追踪过程渲染表示场景视图的帧时操作图形处理器的方法,
所述图形处理器包括:
可编程执行单元,所述可编程执行单元可操作为执行程序以执行图形处理操作;以及
纹理映射器单元,所述纹理映射器单元可操作为响应于来自所述可编程执行单元的对图形纹理化操作的请求而执行图形纹理化操作;
所述方法包括:
当所述可编程执行单元正在执行程序以执行光线追踪操作时,所述光线追踪操作使用指示待渲染场景的几何形状分布的光线追踪加速数据结构来确定能够与用于所述光线追踪操作的光线相交的待渲染场景的几何形状:
作为使用所述光线追踪加速数据结构的所述光线追踪操作的一部分,所述可编程执行单元向所述纹理映射器单元发送消息以使所述纹理映射器单元执行针对所述光线追踪操作的一个或多个处理操作,其中针对所述光线追踪操作的所述一个或多个处理操作的结果被返回到所述可编程执行单元。
2.根据权利要求1所述的方法,其中所述光线追踪加速数据结构包括多个节点,每个节点与所述场景内的相应一个或多个盒相关联,所述光线追踪加速数据结构包括一组末端节点,所述一组末端节点表示针对占据与所述末端节点相对应的盒的场景定义的相应基元子集,并且其中针对光线的所述光线追踪操作包括遍历操作,所述遍历操作包括测试用于与跟所述光线追踪加速数据结构的所述节点相关联的相应盒相交的光线,并且其中所述方法包括:响应于所述遍历操作需要针对与所述光线追踪加速数据结构的给定节点相交来对光线进行测试,所述可编程执行单元向所述纹理映射器单元发送消息以使所述纹理映射器单元加载针对所讨论的节点的相交测试所需的数据。
3.根据权利要求2所述的方法,其中所述节点数据经由所述纹理映射器单元的高速缓存系统被加载到所述纹理映射器单元。
4.根据权利要求2或3所述的方法,其中针对所述相交测试的加载数据被返回到所述可编程执行单元,所述方法包括所述可编程执行单元随后执行一个或多个程序以执行所述相交测试。
5.根据权利要求2或3所述的方法,其中所述纹理映射器单元被进一步配置为执行所述相交测试,并将针对所述节点的所述相交测试的结果返回到所述可编程执行单元以用于所述遍历操作。
6.根据任一前述权利要求所述的方法,其中所述可编程执行单元被配置为向所述纹理映射器单元发送消息以执行所述一个或多个处理操作,所述消息指示以下各项中的一者或多者:待使用的光线追踪加速数据结构的描述符;待测试的所述光线的原点;所述光线的方向;所述光线待遍历的范围;以及涉及待执行所述处理操作的节点。
7.根据任一前述权利要求所述的方法,其中所述光线追踪过程进一步包括:在使用所述光线追踪加速数据结构来确定所述光线追踪加速数据结构的哪些节点表示能够与光线相交的几何形状之后,对于确定包含能够与光线相交的几何形状的任何节点,所述可编程执行单元执行程序以确定所述节点表示的任何几何形状是否与所述光线相交,并且对于与所述光线相交的任何几何形状,执行进一步处理操作以确定所述光线被投射的采样位置的外观。
8.根据权利要求7所述的方法,其中用于确定所述光线被投射的采样位置的外观的所述进一步处理操作包括使用所述纹理映射器单元执行的一个或多个纹理化操作。
9.一种编译待由图形处理器的可编程执行单元执行的着色器程序的方法,所述可编程执行单元可操作为执行图形处理程序以执行图形处理操作;
所述方法包括:
在使用光线追踪过程渲染表示场景视图的帧时待由图形处理器的可编程执行单元执行的着色器程序中包括一组一个或多个指令,所述一个或多个指令在由所述可编程执行单元执行时将使所述可编程执行单元执行光线追踪操作,所述光线追踪操作使用指示待渲染场景的几何形状分布的光线追踪加速数据结构来确定能够与用于所述光线追踪操作的光线相交的待渲染场景的几何形状,所述光线追踪操作使用所述光线追踪加速数据结构;以及
在所述着色器程序中进一步包括指令,所述指令在由所述可编程执行单元执行时将使所述可编程执行单元向所述图形处理器的纹理映射单元发送消息,以使所述纹理映射器单元执行针对所述光线追踪操作的一个或多个处理操作,其中所述一个或多个处理操作的结果被返回到所述可编程执行单元。
10.一种在使用光线追踪过程渲染表示场景视图的帧时操作图形处理器的方法,
所述图形处理器包括:
可编程执行单元,所述可编程执行单元可操作为执行程序以执行图形处理操作;
所述方法包括:
所述可编程执行单元:
执行着色器程序以使用光线追踪过程来渲染表示包括一个或多个对象的场景视图的帧,所述着色器程序包括一组一个或多个指令,以使所述可编程执行单元执行光线追踪操作,所述光线追踪操作使用指示待渲染场景的几何形状分布的光线追踪加速数据结构来确定能够与用于所述光线追踪操作的光线相交的待渲染场景的几何形状,所述光线追踪操作使用所述光线追踪加速数据结构;以及
响应于所述可编程执行单元执行所述着色器程序中的指令以向所述图形处理器的纹理映射单元发送消息以使所述纹理映射器单元执行用于所述光线追踪操作的一个或多个处理操作,所述可编程执行单元向所述纹理映射器单元发送消息以执行所述一个或多个处理操作。
11.一种图形处理器,所述图形处理器可操作为使用光线追踪过程来渲染表示场景视图的帧,所述图形处理器包括:
可编程执行单元,所述可编程执行单元可操作为执行图形处理程序以执行图形处理操作;以及
纹理映射器单元,所述纹理映射器单元可操作为响应于来自所述可编程执行单元的对图形纹理化操作的请求而执行图形纹理化操作;
其中:
当所述可编程执行单元正在执行程序以执行光线追踪操作时,所述光线追踪操作使用指示待渲染场景的几何形状分布的光线追踪加速数据结构来确定能够与用于所述光线追踪操作的光线相交的待渲染场景的几何形状,所述可编程执行单元可操作并且被配置为:作为使用所述光线追踪加速数据结构的所述光线追踪操作的一部分,向所述纹理映射器单元发送消息以使所述纹理映射器单元执行用于所述光线追踪操作的一个或多个处理操作,其中所述一个或多个处理操作的结果被返回到所述可编程执行单元。
12.根据权利要求11所述的图形处理器,其中所述光线追踪加速数据结构包括多个节点,每个节点与所述场景内的相应一个或多个盒相关联,所述光线追踪加速数据结构包括一组末端节点,所述一组末端节点表示针对占据与所述末端节点相对应的盒的场景定义的相应基元子集,并且其中针对光线的光线追踪操作包括光线遍历操作,所述光线遍历操作包括测试所述光线与跟所述光线追踪加速数据结构的所述节点相关联的相应盒相交,并且其中所述可编程执行单元被配置为:响应于所述遍历操作需要针对与所述光线追踪加速数据结构的给定节点相交来对光线进行测试,向所述纹理映射器单元发送消息以使所述纹理映射器单元加载针对所讨论的节点的相交测试所需的数据。
13.根据权利要求12所述的图形处理器,其中所述纹理映射器单元包括高速缓存系统,其中所述节点数据经由所述高速缓存系统被加载到所述纹理映射器单元。
14.根据权利要求12或13所述的图形处理器,其中所述可编程执行单元被配置为将加载用于所述相交测试的数据返回到所述可编程执行单元,并且其中所述可编程执行单元被配置为然后执行一个或多个程序以使用由所述纹理映射器单元返回的数据来执行针对所述节点的相交测试。
15.根据权利要求12或13所述的图形处理器,其中所述纹理映射器单元被进一步配置为执行所述相交测试,并将针对所述节点的所述相交测试的结果返回到所述可编程执行单元以用于所述遍历操作。
16.根据权利要求11至15中任一项所述的图形处理器,其中所述可编程执行单元被配置为向所述纹理映射器单元发送消息以执行所述一个或多个处理操作,所述消息指示以下各项中的一者或多者:待使用的所述光线追踪加速数据结构的描述符;待测试的所述光线的原点;所述光线的方向;所述光线待遍历的范围;以及涉及待执行所述处理操作的节点。
17.根据权利要求11至16中任一项所述的图形处理器,其中所述光线追踪过程进一步包括:在使用所述光线追踪加速数据结构来确定所述光线追踪加速数据结构的哪些节点表示能够与光线相交的几何形状之后,对于确定包含能够与光线相交的几何形状的任何节点,所述可编程执行单元执行程序以确定所述节点表示的任何几何形状是否与所述光线相交,并且对于与所述光线相交的任何几何形状,执行进一步处理操作以确定所述光线被投射的采样位置的外观。
18.根据权利要求17所述的图形处理器,其中用于确定所述光线被投射的采样位置的外观的所述进一步处理操作包括使用所述纹理映射器单元执行的一个或多个纹理化操作。
19.一种用于编译待由图形处理器的可编程执行单元执行的着色器程序的编译器,所述可编程执行单元可操作为执行图形处理程序以执行图形处理操作;
所述编译器包括处理电路,所述处理电路被配置为:
在使用光线追踪过程渲染表示场景视图的帧时待由图形处理器的可编程执行单元执行的着色器程序中包括一组一个或多个指令,所述一个或多个指令在由所述可编程执行单元执行时将使所述可编程执行单元执行光线追踪操作,所述光线追踪操作使用指示待渲染场景的几何形状分布的光线追踪加速数据结构来确定能够与用于所述光线追踪操作的光线相交的待渲染场景的几何形状,所述光线追踪操作使用所述光线追踪加速数据结构;以及
在所述着色器程序中进一步包括指令,所述指令在由所述可编程执行单元执行时将使所述可编程执行单元向所述图形处理器的纹理映射单元发送消息,以使所述纹理映射器单元执行用于所述光线追踪操作的一个或多个处理操作,其中所述一个或多个处理操作的结果被返回到所述可编程执行单元。
20.一种可操作为使用光线追踪过程渲染表示包括一个或多个对象的场景视图的帧的图形处理器,
所述图形处理器包括:
可编程执行单元,所述可编程执行单元可操作为执行程序以执行图形处理操作;
其中所述可编程执行单元被配置成使得:当所述执行单元正在执行着色器程序以使用光线追踪过程来渲染表示包括一个或多个对象的场景视图的帧时,所述着色器程序包括一组一个或多个指令以使所述可编程执行单元执行光线追踪操作,所述光线追踪操作使用指示待渲染场景的几何形状分布的光线追踪加速数据结构来确定能够与用于所述光线追踪操作的光线相交的待渲染场景的几何形状,所述光线追踪操作使用光线追踪加速数据结构,响应于所述可编程执行单元执行所述着色器程序中的指令以向所述图形处理器的纹理映射单元发送消息以使所述纹理映射器单元执行用于所述光线追踪操作的一个或多个处理操作,所述可编程执行单元向所述纹理映射器单元发送消息以执行所述一个或多个处理操作。
Applications Claiming Priority (2)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
GB2110957.4 | 2021-07-29 | ||
GB2110957.4A GB2609425B (en) | 2021-07-29 | 2021-07-29 | Graphics processing systems |
Publications (1)
Publication Number | Publication Date |
---|---|
CN115690301A true CN115690301A (zh) | 2023-02-03 |
Family
ID=77651420
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202210898086.9A Pending CN115690301A (zh) | 2021-07-29 | 2022-07-28 | 图形处理系统 |
Country Status (3)
Country | Link |
---|---|
US (1) | US20230043630A1 (zh) |
CN (1) | CN115690301A (zh) |
GB (1) | GB2609425B (zh) |
Family Cites Families (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US9607425B2 (en) * | 2014-10-17 | 2017-03-28 | Qualcomm Incorporated | Ray-box intersection testing using dot product-based fixed function logic |
US11200724B2 (en) * | 2017-12-22 | 2021-12-14 | Advanced Micro Devices, Inc. | Texture processor based ray tracing acceleration method and system |
US10885698B2 (en) * | 2018-08-10 | 2021-01-05 | Nvidia Corporation | Method for programmable timeouts of tree traversal mechanisms in hardware |
-
2021
- 2021-07-29 GB GB2110957.4A patent/GB2609425B/en active Active
-
2022
- 2022-07-22 US US17/814,387 patent/US20230043630A1/en active Pending
- 2022-07-28 CN CN202210898086.9A patent/CN115690301A/zh active Pending
Also Published As
Publication number | Publication date |
---|---|
GB2609425B (en) | 2023-11-15 |
GB202110957D0 (en) | 2021-09-15 |
GB2609425A (en) | 2023-02-08 |
US20230043630A1 (en) | 2023-02-09 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
US7973790B2 (en) | Method for hybrid rasterization and raytracing with consistent programmable shading | |
US7719532B2 (en) | Efficient and flexible data organization for acceleration data structure nodes | |
CN113781625B (zh) | 适用于光线追踪的基于硬件的技术 | |
US11804002B2 (en) | Techniques for traversing data employed in ray tracing | |
US20080088619A1 (en) | Branch Prediction for Acceleration Data Structure Traversal | |
US11315303B2 (en) | Graphics processing | |
US10607400B2 (en) | Graphics processing systems using a vertex shader to render plural images | |
US20080192044A1 (en) | Deferred Acceleration Data Structure Optimization for Improved Performance | |
CN113808245B (zh) | 用于遍历光线追踪加速结构的增强技术 | |
US20230084570A1 (en) | Accelerating triangle visibility tests for real-time ray tracing | |
CN113822788B (zh) | 光线追踪硬件中对资源的早期释放 | |
US20220392147A1 (en) | Graphics processing | |
US11798221B2 (en) | Graphics processing | |
US11341708B2 (en) | Graphics processing | |
US20220392146A1 (en) | Graphics processing | |
US20230043630A1 (en) | Graphics processing systems | |
US20240087211A1 (en) | Generation and Traversal of Partial Acceleration Structures for Ray Tracing | |
US20240104824A1 (en) | Accelerated bounding volume hierarchy (bvh) traversal for ray tracing | |
GB2622226A (en) | Graphics processing |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
PB01 | Publication | ||
PB01 | Publication |