CN113393564A - 利用全局照明数据结构的基于水塘的时空重要性重采样 - Google Patents
利用全局照明数据结构的基于水塘的时空重要性重采样 Download PDFInfo
- Publication number
- CN113393564A CN113393564A CN202110237136.4A CN202110237136A CN113393564A CN 113393564 A CN113393564 A CN 113393564A CN 202110237136 A CN202110237136 A CN 202110237136A CN 113393564 A CN113393564 A CN 113393564A
- Authority
- CN
- China
- Prior art keywords
- data structure
- data
- scene
- memory
- ppu
- 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.)
- Granted
Links
- 238000005286 illumination Methods 0.000 title claims abstract description 72
- 238000012952 Resampling Methods 0.000 title claims abstract description 29
- 238000000034 method Methods 0.000 claims description 48
- 238000003860 storage Methods 0.000 claims description 28
- 238000004422 calculation algorithm Methods 0.000 claims description 12
- 230000005855 radiation Effects 0.000 claims description 4
- 239000003086 colorant Substances 0.000 claims description 3
- 238000009877 rendering Methods 0.000 abstract description 18
- 238000012545 processing Methods 0.000 description 90
- 238000004891 communication Methods 0.000 description 33
- 239000012634 fragment Substances 0.000 description 27
- 238000005192 partition Methods 0.000 description 20
- 230000008569 process Effects 0.000 description 20
- 230000006870 function Effects 0.000 description 19
- 239000000523 sample Substances 0.000 description 18
- 239000000872 buffer Substances 0.000 description 16
- 239000011159 matrix material Substances 0.000 description 12
- 238000010586 diagram Methods 0.000 description 11
- 239000004065 semiconductor Substances 0.000 description 10
- 238000012360 testing method Methods 0.000 description 8
- 230000002093 peripheral effect Effects 0.000 description 7
- 238000013519 translation Methods 0.000 description 7
- 230000014616 translation Effects 0.000 description 7
- 238000009826 distribution Methods 0.000 description 5
- 230000004044 response Effects 0.000 description 5
- 238000012546 transfer Methods 0.000 description 5
- 230000000875 corresponding effect Effects 0.000 description 4
- 238000013135 deep learning Methods 0.000 description 4
- 238000005516 engineering process Methods 0.000 description 4
- 238000001914 filtration Methods 0.000 description 4
- 238000007726 management method Methods 0.000 description 4
- 238000005070 sampling Methods 0.000 description 4
- 238000009825 accumulation Methods 0.000 description 3
- 238000001514 detection method Methods 0.000 description 3
- 238000002156 mixing Methods 0.000 description 3
- 230000003287 optical effect Effects 0.000 description 3
- 230000010076 replication Effects 0.000 description 3
- 230000001360 synchronised effect Effects 0.000 description 3
- HPTJABJPZMULFH-UHFFFAOYSA-N 12-[(Cyclohexylcarbamoyl)amino]dodecanoic acid Chemical compound OC(=O)CCCCCCCCCCCNC(=O)NC1CCCCC1 HPTJABJPZMULFH-UHFFFAOYSA-N 0.000 description 2
- 238000013473 artificial intelligence Methods 0.000 description 2
- 230000004888 barrier function Effects 0.000 description 2
- 238000004364 calculation method Methods 0.000 description 2
- 238000004040 coloring Methods 0.000 description 2
- 238000004590 computer program Methods 0.000 description 2
- 238000012937 correction Methods 0.000 description 2
- 238000013500 data storage Methods 0.000 description 2
- 238000007667 floating Methods 0.000 description 2
- 239000004973 liquid crystal related substance Substances 0.000 description 2
- 230000033001 locomotion Effects 0.000 description 2
- 238000005457 optimization Methods 0.000 description 2
- 239000000758 substrate Substances 0.000 description 2
- 238000012614 Monte-Carlo sampling Methods 0.000 description 1
- 230000001133 acceleration Effects 0.000 description 1
- 239000008186 active pharmaceutical agent Substances 0.000 description 1
- 230000002776 aggregation Effects 0.000 description 1
- 238000004220 aggregation Methods 0.000 description 1
- 238000004458 analytical method Methods 0.000 description 1
- 238000013459 approach Methods 0.000 description 1
- 238000013528 artificial neural network Methods 0.000 description 1
- 230000003190 augmentative effect Effects 0.000 description 1
- 230000008901 benefit Effects 0.000 description 1
- 238000005266 casting Methods 0.000 description 1
- 230000006835 compression Effects 0.000 description 1
- 238000007906 compression Methods 0.000 description 1
- 230000002596 correlated effect Effects 0.000 description 1
- 238000007405 data analysis Methods 0.000 description 1
- 238000000354 decomposition reaction Methods 0.000 description 1
- 238000013461 design Methods 0.000 description 1
- 238000003745 diagnosis Methods 0.000 description 1
- 201000010099 disease Diseases 0.000 description 1
- 208000037265 diseases, disorders, signs and symptoms Diseases 0.000 description 1
- 238000009509 drug development Methods 0.000 description 1
- 230000000694 effects Effects 0.000 description 1
- 238000011156 evaluation Methods 0.000 description 1
- 230000007717 exclusion Effects 0.000 description 1
- 230000001815 facial effect Effects 0.000 description 1
- 230000000977 initiatory effect Effects 0.000 description 1
- 230000010354 integration Effects 0.000 description 1
- 239000013067 intermediate product Substances 0.000 description 1
- 238000002955 isolation Methods 0.000 description 1
- 238000011068 loading method Methods 0.000 description 1
- 238000010801 machine learning Methods 0.000 description 1
- 238000013507 mapping Methods 0.000 description 1
- 238000005259 measurement Methods 0.000 description 1
- 230000007246 mechanism Effects 0.000 description 1
- 230000006386 memory function Effects 0.000 description 1
- 238000000329 molecular dynamics simulation Methods 0.000 description 1
- 238000012900 molecular simulation Methods 0.000 description 1
- 238000003062 neural network model Methods 0.000 description 1
- 230000008520 organization Effects 0.000 description 1
- 230000002085 persistent effect Effects 0.000 description 1
- 239000000047 product Substances 0.000 description 1
- 238000011160 research Methods 0.000 description 1
- 230000011664 signaling Effects 0.000 description 1
- 230000000153 supplemental effect Effects 0.000 description 1
- 238000012549 training Methods 0.000 description 1
- 230000009466 transformation Effects 0.000 description 1
- 230000007723 transport mechanism Effects 0.000 description 1
Images
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06T—IMAGE DATA PROCESSING OR GENERATION, IN GENERAL
- G06T15/00—3D [Three Dimensional] image rendering
- G06T15/50—Lighting effects
- G06T15/506—Illumination models
-
- 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/06—Ray-tracing
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06T—IMAGE DATA PROCESSING OR GENERATION, IN GENERAL
- G06T15/00—3D [Three Dimensional] image rendering
- G06T15/10—Geometric effects
- G06T15/20—Perspective computation
- G06T15/205—Image-based rendering
Landscapes
- Engineering & Computer Science (AREA)
- Physics & Mathematics (AREA)
- Theoretical Computer Science (AREA)
- Computer Graphics (AREA)
- General Physics & Mathematics (AREA)
- Computing Systems (AREA)
- Geometry (AREA)
- Image Generation (AREA)
Abstract
本发明公开了利用全局照明数据结构的基于水塘的时空重要性重采样。计算场景的全局照明数据结构(例如,为了存储要渲染的场景中几何体的全局照明信息而创建的数据结构)。此外,利用该全局照明数据结构,使用基于水塘的时空重要性重采样(RESTIR)来执行照明收集。该照明收集包括识别场景内点的光照值,其中基于该光照值在场景内选择一个或更多个点,以便在渲染场景期间执行光线跟踪。
Description
要求优先权
本申请要求2020年3月12日提交的美国临时专利申请No.62/988,789的权益,其全部内容通过引用并入本文。
技术领域
本发明涉及图像渲染,并且更具体地,涉及在场景内执行光收集。
背景技术
水塘(reservoir)重要性重采样提供了一种计算来自多个光源的光照参数的有效手段。然而,当前的水塘重要性重采样实现仅考虑直接光照源,而不考虑间接光照。因此,需要通过在重采样期间考虑间接光照来改进该重采样的技术。
附图说明
图1示出了根据一实施例的利用全局照明数据结构的基于水塘的时空重要性重采样的方法的流程图。
图2示出了根据一实施例的并行处理单元。
图3A示出了根据一实施例的图2的并行处理单元内的通用处理集群。
图3B示出了根据一实施例的图2的并行处理单元的存储器分区单元。
图4A示出了根据一实施例的图3A的流式多处理器。
图4B是根据一实施例的使用图2的并行处理单元(PPU)实现的处理系统的概念图。
图4C示出了可以实现各种先前实施例的各种架构和/或功能的示例性系统。
图5是根据一实施例的由图2的PPU实现的图形处理管线的概念图。
图6是适合用于实现本公开的一些实施例的示例游戏流媒体系统的框图。
图7为适合用于实现本公开一些实施例的示例计算设备的框图。
图8示出了根据一个实施例的利用RESTIR和全局照明数据结构来执行照明收集的示例性场景。
具体实施方式
在图像渲染期间使用当前水塘重要性重采样来确定光照参数,所述光照参数来自要渲染场景中的多个光源,但是该方法仅考虑直接光照源,而不考虑间接光照。作为响应,计算所述场景的全局照明数据结构(例如,创建的数据结构,用于存储要渲染场景中的几何体的全局照明信息)。另外,利用全局照明数据结构,使用基于水塘的时空重要性重采样(RESTIR)来执行照明收集。该照明收集包括识别场景中的点的光量值(light value),其中基于该光量值在场景中选择一个或更多个点,以便在场景渲染期间执行光线跟踪。这样一来,在图像渲染期间可以除了考虑直接光照,也考虑了间接光照。
图1示出了根据一实施例的利用全局照明数据结构的基于水塘的时空重要性重采样的方法100的流程图。尽管在处理单元的上下文中描述了方法100,但是方法100也可以由程序、定制电路,或定制电路和程序的组合来执行。例如,所述方法100可以由GPU(图形处理单元)、CPU(中央处理单元)或能够通过散列执行并行路径空间滤波的任何处理器来执行。此外,本领域普通技术人员将理解,执行方法100的任何系统都在本发明实施例的范围和精神内。
应该理解,本文描述的这种布置和其他布置仅作为示例来阐述。可使用其他布置和元件(例如,机器、接口、功能、命令、功能分组等)来补充或代替所示布置和元件,并且可以完全省略某些元件。此外,本文所描述的许多元件是功能实体,该功能实体可以实现为离散或分布式组件,或与其他组件结合,并且以任何合适的组合和位置实现。本文描述为由实体执行的各种功能可以由硬件、固件和/或软件来执行。例如,各种功能可以由处理器执行,该处理器执行存储在存储器中的指令。
如操作102中所示,计算场景的全局照明数据结构。在一个实施例中,全局照明数据结构可以包括世界空间数据结构,诸如RTX全局照明(RTXGI)数据结构、光子地图、光照地图、辐射高速缓存、辐照高速缓存、辐射度值数据结构、光探针数据结构等中的一个或更多个。在另一个实施例中,全局照明信息可以包括场景中预定点/像素的间接和直接光量值之和。
另外,在一个实施例中,全局照明数据结构可以包括创建的用于存储场景内的元素(例如,表面(几何体)、体(云)、探测数据等)的全局照明信息的任何数据结构。例如,可以将附加信息(例如,到场景中各个点的距离值、方向信息和其他启发式信息)存储在全局照明数据结构内。在另一个示例中,全局照明数据结构可以进行散列、分层实现等。
此外,如操作104中所示,利用全局照明数据结构,实现基于水塘的时空重要性重采样(RESTIR)以在场景内执行照明收集。在一个实施例中,基于水塘的时空重要性重采样(RESTIR)可以识别要渲染场景内的预定的一组候选光源。
另外,在一个实施例中,RESTIR可以识别候选光源上的随机点集,并且可以评估它们对场景的潜在光照贡献(例如,它们的整体亮度等)。例如,可以利用预定的光照方程来确定每个识别出的点的光照贡献。在另一实施例中,使用RESTIR,可以选择候选光源上的一个或更多个随机点集,其中,点选择的概率与该点的潜在光照贡献成比例。
此外,在一个实施例中,然后可以将可见光线(例如,阴影光线等)从场景中被遮蔽(shade)的点发送到每个选定点。在另一个实施例中,RESTIR可以利用流水塘算法来对一组候选光样本进行重新采样并且应用附加的时空重采样来利用附近相关样本的信息。
另外,在一个实施例中,通过将场景中的所有表面视为照明收集期间的候选光源,全局照明数据结构可以扩展RESTIR。例如,表面可以包括场景内的所有三角形(或其他图元/几何体)。
另外,在一个实施例中,可以利用RESTIR内的预定的光照方程,来确定来自实际候选光源的光照贡献。在另一个实施例中,可以通过在全局照明数据结构内执行数据查找(例如,而不是利用预定的光照方程),来确定场景中所有其他表面的光照贡献。
此外,在一个实施例中,可以利用全局照明数据结构来确定实际候选光源的光照贡献和场景内所有其他表面的光照贡献。这样一来,在要渲染的场景中实现RESTIR时,可以考虑直接和间接光照。更具体地说,当使用RESTIR执行照明收集时,要渲染的场景中的所有表面都可以被视为候选光源(利用全局照明数据结构)。这可以通过减少结果渲染场景中的噪声量、增加结果渲染场景中的细节水平等,来改善光线跟踪。
此外,在一个实施例中,照明收集的结果可以在第一计算设备、第一处理器等上计算,并且可以与另一单独的计算设备、另一处理器等共享。在另一实施例中,全局照明数据结构可以在本地计算(例如,在实现RESTIR的设备处等)。在又一实施例中,可以远程地(例如,在与实现RESTIR的设备分开的基于云的计算系统处)计算全局照明数据结构,并且可以将全局照明数据结构发送到实现RESTIR的本地设备(例如移动设备等),以便加速在本地设备上执行的渲染计算。
此外,在一个实施例中,当创建RTXGI数据结构时,RESTIR可用于计算具有可见性信息的辐照(irradiance)探针。例如,可以在运行时间期间确定可见性信息。在另一个实施例中,在创建全局照明数据结构(例如,RTXGI数据结构)期间,RESTIR还可以在光照探针的所有表面上使用。
在又一个实施例中,可以利用诸如图2所示的PPU 200之类的并行处理单元(PPU),来执行基于水塘的时空重要性重采样。
现在将根据用户的期望,阐述关于可以实现前述框架的各种可选架构和特征的更多说明性信息。应该特别注意的是,出于说明性目的阐述了以下信息,并且不应该被解释为以任何方式进行限制。以下任何特征可以可选地并入或不排除所描述的其他特征。
并行处理架构
图2示出了根据一个实施例的并行处理单元(PPU)200。在一个实施例中,PPU 200是在一个或更多个集成电路器件上实现的多线程处理器。PPU 200是设计用于并行处理许多线程的延迟隐藏体系架构。线程(即,执行线程)是被配置为由PPU 200执行的指令集的实例。在一个实施例中,PPU 200是图形处理单元(GPU),其被配置为实现用于处理三维(3D)图形数据的图形渲染管线,以便生成用于在显示装置(诸如液晶显示(LCD)设备)上显示的二维(2D)图像数据。在其他实施例中,PPU 200可以用于执行通用计算。尽管为了说明的目的本文提供了一个示例性并行处理器,但应特别指出的是,该处理器仅出于说明目的进行阐述,并且可使用任何处理器来补充和/或替代该处理器。
一个或更多个PPU 200可以被配置为加速数千个高性能计算(HPC)、数据中心和机器学习应用。PPU 200可被配置为加速众多深度学习系统和应用,包括自动驾驶汽车平台、深度学习、高精度语音、图像和文本识别系统、智能视频分析、分子模拟、药物研发、疾病诊断、天气预报、大数据分析、天文学、分子动力学模拟、金融建模、机器人技术、工厂自动化、实时语言翻译、在线搜索优化和个性化用户推荐,等等。
如图2所示,PPU 200包括输入/输出205、前端单元215、调度器单元220、工作分配单元225、集线器230、交叉开关(Xbar)270、一个或更多个通用处理集群(GPC)250以及一个或更多个存储器分区单元280。PPU 200可以经由一个或更多个高速NVLink 210互连连接到主机处理器或其他PPU 200。PPU 200可以经由互连202连接到主机处理器或其他外围设备。PPU 200还可以连接到包括多个存储器设备204的本地存储器。在一个实施例中,本地存储器可以包括多个动态随机存取存储器(DRAM)设备。DRAM设备可以被配置为高带宽存储器(HBM)子系统,其中多个DRAM管芯(die)堆叠在每个设备内。
NVLink 210互连使得系统能够扩展并且包括与一个或更多个CPU结合的一个或更多个PPU 200,支持PPU 200和CPU之间的高速缓存一致性,以及CPU主控。数据和/或命令可以由NVLink 210通过集线器230发送到PPU 200的其他单元或从其发送,例如一个或更多个复制引擎、视频编码器、视频解码器、电源管理单元等(未明确示出)。结合图4B更详细地描述NVLink 210。
I/O单元205被配置为通过互连202从主机处理器(未示出)发送和接收通信(例如,命令、数据等)。I/O单元205可以经由互连202直接与主机处理器通信,或通过一个或更多个中间设备(诸如内存桥)与主机处理器通信。在一个实施例中,I/O单元205可以经由互连202与一个或更多个其他处理器(例如,一个或更多个PPU 200)通信。在一个实施例中,I/O单元205实现外围组件互连高速(PCIe)接口,用于通过PCIe总线进行通信,并且互连202是PCIe总线。在替代的实施例中,I/O单元205可以实现其他类型的已知接口,用于与外部设备进行通信。
I/O单元205对经由互连202接收的数据包进行解码。在一个实施例中,数据包表示被配置为使PPU 200执行各种操作的命令。I/O单元205按照命令指定将解码的命令发送到PPU 200的各种其他单元。例如,一些命令可以被发送到前端单元215。其他命令可以被发送到集线器230或PPU 200的其他单元,诸如一个或更多个复制引擎、视频编码器、视频解码器、电源管理单元等(未明确示出)。换句话说,I/O单元205被配置为在PPU 200的各种逻辑单元之间和之中路由通信。
在一个实施例中,由主机处理器执行的程序在缓冲区中对命令流进行编码,该缓冲区向PPU 200提供工作量用于处理。工作量可以包括要由那些指令处理的许多指令和数据。缓冲区是存储器中可由主机处理器和PPU 200两者访问(例如,读/写)的区域。例如,I/O单元205可以被配置为经由通过互连202传输的存储器请求访问连接到互连202的系统存储器中的缓冲区。在一个实施例中,主机处理器将命令流写入缓冲区,然后向PPU 200发送指向命令流开始的指针。前端单元215接收指向一个或更多个命令流的指针。前端单元215管理一个或更多个流,从流读取命令并将命令转发到PPU 200的各个单元。
前端单元215耦合到调度器单元220,其配置各种GPC 250以处理由一个或更多个流定义的任务。调度器单元220被配置为跟踪与由调度器单元220管理的各种任务相关的状态信息。状态可以指示任务被指派给哪个GPC 250,该任务是活动的还是不活动的,与该任务相关联的优先级等等。调度器单元220管理一个或更多个GPC 250上的多个任务的执行。
调度器单元220耦合到工作分配单元225,其被配置为分派任务以在GPC 250上执行。工作分配单元225可以跟踪从调度器单元220接收到的若干调度的任务。在一个实施例中,工作分配单元225为每个GPC 250管理待处理(pending)任务池和活动任务池。待处理任务池可以包括若干时隙(例如,32个时隙),其包含被指派为由特定GPC 250处理的任务。活动任务池可以包括若干时隙(例如,4个时隙),用于正在由GPC 250主动处理的任务。当GPC250完成任务的执行时,该任务从GPC 250的活动任务池中逐出,并且来自待处理任务池的其他任务之一被选择和调度以在GPC 250上执行。如果GPC 250上的活动任务已经空闲,例如在等待数据依赖性被解决时,那么活动任务可以从GPC 250中逐出并返回到待处理任务池,而待处理任务池中的另一个任务被选择并调度以在GPC 250上执行。
工作分配单元225经由XBar(交叉开关)270与一个或更多个GPC 250通信。XBar270是将PPU 200的许多单元耦合到PPU 200的其他单元的互连网络。例如,XBar 270可以被配置为将工作分配单元225耦合到特定的GPC 250。虽然没有明确示出,但PPU 200的一个或更多个其他单元也可以经由集线器230连接到XBar 270。
任务由调度器单元220管理并由工作分配单元225分派给GPC 250。GPC 250被配置为处理任务并生成结果。结果可以由GPC 250内的其他任务消耗,经由XBar 270路由到不同的GPC 250,或者存储在存储器204中。结果可以经由存储器分区单元280写入存储器204,存储器分区单元280实现用于从读取数据和向存储器204写入数据的存储器接口。结果可以通过NVLink 210发送到另一个PPU 200或CPU。在一个实施例中,PPU 200包括数目为U的分区单元280,其等于耦合到PPU 200的独立且不同的存储器设备204的数目。下面将结合图3B更详细地描述分区单元280。
在一个实施例中,主机处理器执行实现应用程序编程接口(API)的驱动程序内核,其使得能够在主机处理器上执行一个或更多个应用程序以调度操作用于在PPU 200上执行。在一个实施例中,多个计算应用由PPU 200同时执行,并且PPU 200为多个计算应用程序提供隔离、服务质量(QoS)和独立地址空间。应用程序可以生成指令(例如,API调用),其使得驱动程序内核生成一个或更多个任务以由PPU 200执行。驱动程序内核将任务输出到正在由PPU 200处理的一个或更多个流。每个任务可以包括一个或更多个相关线程组,本文称为线程束(warp)。在一个实施例中,线程束包括可以并行执行的32个相关线程。协作线程可以指代包括执行任务的指令并且可以通过共享存储器交换数据的多个线程。结合图4A更详细地描述线程和协作线程。
图3A示出了根据一个实施例的图2的PPU 200的GPC 250。如图3A所示,每个GPC250包括用于处理任务的多个硬件单元。在一个实施例中,每个GPC 250包括管线管理器310、预光栅操作单元(PROP)315、光栅引擎325、工作分配交叉开关(WDX)380、存储器管理单元(MMU)390以及一个或更多个数据处理集群(DPC)320。应当理解,图3A的GPC 250可以包括代替图3A中所示单元的其他硬件单元或除图3A中所示单元之外的其他硬件单元。
在一个实施例中,GPC 250的操作由管线管理器310控制。管线管理器310管理用于处理分配给GPC 250的任务的一个或更多个DPC 320的配置。在一个实施例中,管线管理器310可以配置一个或更多个DPC 320中的至少一个来实现图形渲染管线的至少一部分。例如,DPC 320可以被配置为在可编程流式多处理器(SM)340上执行顶点着色程序。管线管理器310还可以被配置为将从工作分配单元225接收的数据包路由到GPC 250中适当的逻辑单元。例如,一些数据包可以被路由到PROP 315和/或光栅引擎325中的固定功能硬件单元,而其他数据包可以被路由到DPC 320以供图元引擎335或SM 340处理。在一个实施例中,管线管理器310可以配置一个或更多个DPC 320中的至少一个以实现神经网络模型和/或计算管线。
PROP单元315被配置为将由光栅引擎325和DPC 320生成的数据路由到光栅操作(ROP)单元,结合图3B更详细地描述。PROP单元315还可以被配置为执行颜色混合的优化,组织像素数据,执行地址转换等。
光栅引擎325包括被配置为执行各种光栅操作的若干固定功能硬件单元。在一个实施例中,光栅引擎325包括设置引擎、粗光栅引擎、剔除引擎、裁剪引擎、精细光栅引擎和瓦片聚合引擎。设置引擎接收变换后的顶点并生成与由顶点定义的几何图元关联的平面方程。平面方程被发送到粗光栅引擎以生成图元的覆盖信息(例如,瓦片的x、y覆盖掩码)。粗光栅引擎的输出被发送到剔除引擎,其中与未通过z-测试的图元相关联的片段被剔除,并被发送到裁剪引擎,其中位于视锥体之外的片段被裁剪掉。那些经过裁剪和剔除后留下来的片段可以被传递到精细光栅引擎,以基于由设置引擎生成的平面方程生成像素片段的属性。光栅引擎325的输出包括例如要由在DPC 320内实现的片段着色器处理的片段。
包括在GPC 250中的每个DPC 320包括M管线控制器(MPC)330、图元引擎335和一个或更多个SM 340。MPC 330控制DPC 320的操作,将从管线管理器310接收到的数据包路由到DPC 320中的适当单元。例如,与顶点相关联的数据包可以被路由到图元引擎335,图元引擎335被配置为从存储器204提取与顶点相关联的顶点属性。相反,与着色程序相关联的数据包可以被发送到SM 340。
SM 340包括被配置为处理由多个线程表示的任务的可编程流式处理器。每个SM340是多线程的并且被配置为同时执行来自特定线程组的多个线程(例如,32个线程)。在一个实施例中,SM 340实现SIMD(单指令、多数据)体系架构,其中线程组(例如,warp)中的每个线程被配置为基于相同的指令集来处理不同的数据集。线程组中的所有线程都执行相同的指令。在另一个实施例中,SM 340实现SIMT(单指令、多线程)体系架构,其中线程组中的每个线程被配置为基于相同的指令集处理不同的数据集,但是其中线程组中的各个线程在执行期间被允许发散。在一个实施例中,为每个线程束维护程序计数器、调用栈和执行状态,当线程束内的线程发散时,使线程束和线程束中的串行执行之间的并发成为可能。在另一个实施例中,为每个单独的线程维护程序计数器、调用栈和执行状态,从而在线程束内和线程束之间的所有线程之间实现相等的并发。当为每个单独的线程维护执行状态时,执行相同指令的线程可以被收敛并且并行执行以获得最大效率。下面结合图4A更详细地描述SM340。
MMU 390提供GPC 250和分区单元280之间的接口。MMU 390可以提供虚拟地址到物理地址的转换、存储器保护以及存储器请求的仲裁。在一个实施例中,MMU 390提供用于执行从虚拟地址到存储器204中的物理地址的转换的一个或更多个转换后备缓冲器(TLB)。
图3B示出了根据一个实施例的图2的PPU 200的存储器分区单元280。如图3B所示,存储器分区单元280包括光栅操作(ROP)单元350、二级(L2)高速缓存360和存储器接口370。存储器接口370耦合到存储器204。存储器接口370可以实现用于高速数据传输的32、64、128、1024位数据总线等。在一个实施例中,PPU 200合并了U个存储器接口370,每对分区单元280有一个存储器接口370,其中每对分区单元280连接到对应的存储器设备204。例如,PPU 200可以连接到多达Y个存储器设备204,诸如高带宽存储器堆叠或图形双数据速率版本5的同步动态随机存取存储器或其他类型的持久存储器。
在一个实施例中,存储器接口370实现HBM2存储器接口,并且Y等于U的一半。在一个实施例中,HBM2存储器堆叠位于与PPU 200相同的物理封装上,提供与常规GDDR5 SDRAM系统相比显著的功率高和面积节约。在一个实施例中,每个HBM2堆叠包括四个存储器管芯并且Y等于4,其中HBM2堆叠包括每个管芯两个128位通道,总共8个通道和1024位的数据总线宽度。
在一个实施例中,存储器204支持单错校正双错检测(SECDED)纠错码(ECC)以保护数据。对于对数据损毁敏感的计算应用程序,ECC提供了更高的可靠性。在大型集群计算环境中,PPU 200处理非常大的数据集和/或长时间运行应用程序,可靠性尤其重要。
在一个实施例中,PPU 200实现多级存储器层次。在一个实施例中,存储器分区单元280支持统一存储器以为CPU和PPU 200存储器提供单个统一的虚拟地址空间,使得虚拟存储器系统之间的数据能够共享。在一个实施例中,跟踪PPU 200对位于其他处理器上的存储器的访问频率,以确保存储器页面被移动到更频繁地访问该页面的PPU 200的物理存储器。在一个实施例中,NVLink 210支持地址转换服务,其允许PPU 200直接访问CPU的页表并且提供由PPU 200对CPU存储器的完全访问。
在一个实施例中,复制引擎在多个PPU 200之间或在PPU 200与CPU之间传输数据。复制引擎可以为未映射到页表的地址生成页面错误。然后,存储器分区单元280可以服务页面错误,将地址映射到页表中,之后复制引擎可以执行传输。在常规系统中,针对多个处理器之间的多个复制引擎操作固定存储器(例如,不可分页),其显著减少了可用存储器。由于硬件分页错误,地址可以传递到复制引擎而不用担心存储器页面是否驻留,并且复制过程是否透明。
来自存储器204或其他系统存储器的数据可以由存储器分区单元280取回并存储在L2高速缓存360中,L2高速缓存360位于芯片上并且在各个GPC 250之间共享。如图所示,每个存储器分区单元280包括与对应的存储器设备204相关联的L2高速缓存360的一部分。然后可以在GPC 250内的多个单元中实现较低级高速缓存。例如,每个SM 340可以实现一级(L1)高速缓存。L1高速缓存是专用于特定SM 340的专用存储器。来自L2高速缓存360的数据可以被获取并存储在每个L1高速缓存中,以在SM340的功能单元中进行处理。L2高速缓存360被耦合到存储器接口370和XBar 270。
ROP单元350执行与诸如颜色压缩、像素混合等像素颜色相关的图形光栅操作。ROP单元350还与光栅引擎325一起实现深度测试,从光栅引擎325的剔除引擎接收与像素片段相关联的样本位置的深度。测试与片段关联的样本位置相对于深度缓冲区中的对应深度的深度。如果片段通过样本位置的深度测试,则ROP单元350更新深度缓冲区并将深度测试的结果发送给光栅引擎325。将理解的是,分区单元280的数量可以不同于GPC 250的数量,并且因此每个ROP单元350可以耦合到每个GPC 250。ROP单元350跟踪从不同GPC 250接收到的数据包并且确定由ROP单元350生成的结果通过Xbar 270被路由到哪个GPC 250。尽管在图3B中ROP单元350被包括在存储器分区单元280内,但是在其他实施例中,ROP单元350可以在存储器分区单元280之外。例如,ROP单元350可以驻留在GPC 250或另一个单元中。
图4A示出了根据一个实施例的图3A的流式多处理器340。如图4A所示,SM 340包括指令高速缓存405、一个或更多个调度器单元410(K)、寄存器文件420、一个或更多个处理核心450、一个或更多个特殊功能单元(SFU)452、一个或更多个加载/存储单元(LSU)454、互连网络480、共享存储器/L1高速缓存470。
如上,工作分配单元225调度任务以在PPU 200的GPC 250上执行。任务被分配给GPC 250内的特定DPC 320,并且如果该任务与着色器程序相关联,则该任务可以被分配给SM 340。调度器单元410(K)接收来自工作分配单元225的任务并且管理指派给SM 340的一个或更多个线程块的指令调度。调度器单元410(K)调度线程块以作为并行线程的线程束执行,其中每个线程块被分配至少一个线程束。在一个实施例中,每个线程束执行32个线程。调度器单元410(K)可以管理多个不同的线程块,将线程束分配给不同的线程块,然后在每个时钟周期期间将来自多个不同的协作组的指令分派到各个功能单元(即,核心450、SFU452和LSU 454)。
协作组是用于组织通信线程组的编程模型,其允许开发者表达线程正在进行通信所采用的粒度,使得能够表达更丰富、更高效的并行分解。协作启动API支持线程块之间的同步性,以执行并行算法。常规的编程模型为同步协作线程提供了单一的简单结构:跨线程块的所有线程的栅栏(barrier)(例如,syncthreads()函数)。然而,程序员通常希望以小于线程块粒度的粒度定义线程组,并在所定义的组内同步,以集体的全组功能接口(collective group-wide function interface)的形式使能更高的性能、设计灵活性和软件重用。
协作组使得程序员能够在子块(例如,像单个线程一样小)和多块粒度处明确定义线程组并且执行集体操作,诸如协作组中的线程上的同步性。编程模型支持跨软件边界的干净组合,以便库和效用函数可以在他们本地环境中安全地同步,而无需对收敛进行假设。协作组图元启用合作并行的新模式,包括生产者-消费者并行、机会主义并行以及跨整个线程块网格的全局同步。
分派单元415被配置为向一个或更多个功能单元传送指令。在该实施例中,调度器单元410(K)包括两个分派单元415,其使得能够在每个时钟周期期间调度来自相同线程束的两个不同指令。在替代实施例中,每个调度器单元410(K)可以包括单个分派单元415或附加分派单元415。
每个SM 340包括寄存器文件420,其提供用于SM 340的功能单元的一组寄存器。在一个实施例中,寄存器文件420在每个功能单元之间被划分,使得每个功能单元被分配寄存器文件420的专用部分。在另一个实施例中,寄存器文件420在由SM 340执行的不同线程束之间被划分。寄存器文件420为连接到功能单元的数据路径的操作数提供临时存储器。
每个SM 340包括L个处理核心450。在一个实施例中,SM 340包括大量(例如128个等)不同的处理核心450。每个核心450可以包括完全管线化的、单精度、双精度和/或混合精度处理单元,其包括浮点运算逻辑单元和整数运算逻辑单元。在一个实施例中,浮点运算逻辑单元实现用于浮点运算的IEEE 754-2008标准。在一个实施例中,核心450包括64个单精度(32位)浮点核心、64个整数核心、32个双精度(64位)浮点核心和8个张量核心(tensorcore)。
张量核心被配置为执行矩阵运算,并且在一个实施例中,一个或更多个张量核心被包括在核心450中。具体地,张量核心被配置为执行深度学习矩阵运算,诸如用于神经网络训练和推理的卷积运算。在一个实施例中,每个张量核心在4×4矩阵上运算并且执行矩阵乘法和累加运算D=A×B+C,其中A、B、C和D是4×4矩阵。
在一个实施例中,矩阵乘法输入A和B是16位浮点矩阵,而累加矩阵C和D可以是16位浮点或32位浮点矩阵。张量核心在16位浮点输入数据以及32位浮点累加上运算。16位浮点乘法需要64次运算,产生全精度的积,然后使用32位浮点与4×4×4矩阵乘法的其他中间积相加来累加。在实践中,张量核心用于执行由这些较小的元素建立的更大的二维或更高维的矩阵运算。API(诸如CUDA 9C++API)公开了专门的矩阵加载、矩阵乘法和累加以及矩阵存储运算,以便有效地使用来自CUDA-C++程序的张量核心。在CUDA层面,线程束级接口假定16×16尺寸矩阵跨越线程束的全部32个线程。
每个SM 340还包括执行特殊函数(例如,属性评估、倒数平方根等)的M个SFU 452。在一个实施例中,SFU 452可以包括树遍历单元,其被配置为遍历分层树数据结构。在一个实施例中,SFU 452可以包括被配置为执行纹理图过滤操作的纹理单元。在一个实施例中,纹理单元被配置为从存储器204加载纹理图(例如,纹理像素的2D阵列)并且对纹理图进行采样以产生经采样的纹理值,用于在由SM 340执行的着色器程序中使用。在一个实施例中,纹理图被存储在共享存储器/L1高速缓存370中。纹理单元实现纹理操作,诸如使用mip图(即,不同细节层次的纹理图)的过滤操作。在一个实施例中,每个SM 340包括两个纹理单元。
每个SM 340还包括N个LSU 454,其实现共享存储器/L1高速缓存470和寄存器文件420之间的加载和存储操作。每个SM 340包括将每个功能单元连接到寄存器文件420以及将LSU 454连接到寄存器文件420、共享存储器/L1高速缓存470的互连网络480。在一个实施例中,互连网络480是交叉开关,其可以被配置为将任何功能单元连接到寄存器文件420中的任何寄存器,以及将LSU 454连接到寄存器文件和共享存储器/L1高速缓存470中的存储器位置。
共享存储器/L1高速缓存470是片上存储器阵列,其允许数据存储和SM 340与图元引擎335之间以及SM 340中的线程之间的通信。在一个实施例中,共享存储器/L1高速缓存470包括128KB的存储容量并且在从SM 340到分区单元280的路径中。共享存储器/L1高速缓存470可以用于高速缓存读取和写入。共享存储器/L1高速缓存470、L2高速缓存360和存储器204中的一个或更多个是后备存储。
将数据高速缓存和共享存储器功能组合成单个存储器块为两种类型的存储器访问提供最佳的总体性能。该容量可由程序用作不使用共享存储器的高速缓存。例如,如果将共享存储器配置为使用一半容量,则纹理和加载/存储操作可以使用剩余容量。在共享存储器/L1高速缓存470内的集成使共享存储器/L1高速缓存470起到用于流式传输数据的高吞吐量管线的作用,并且同时提供对频繁重用数据的高带宽和低延迟的访问。
当被配置用于通用并行计算时,与图形处理相比,可以使用更简单的配置。具体地,图2所示的固定功能图形处理单元被绕过,创建了更简单的编程模型。在通用并行计算配置中,工作分配单元225将线程块直接指派并分配给DPC 320。块中的线程执行相同的程序,使用计算中的唯一线程ID来确保每个线程生成唯一结果,使用SM 340执行程序并执行计算,使用共享存储器/L1高速缓存470以在线程之间通信,以及使用LSU 454通过共享存储器/L1高速缓存470和存储器分区单元280读取和写入全局存储器。当被配置用于通用并行计算时,SM 340还可以写入调度器单元220可用来在DPC 320上启动新工作的命令。
PPU 200可以被包括在台式计算机、膝上型计算机、平板电脑、服务器、超级计算机、智能电话(例如,无线、手持设备)、个人数字助理(PDA)、数码相机、运载工具、头戴式显示器、手持式电子设备等中。在一个实施例中,PPU 200包含在单个半导体衬底上。在另一个实施例中,PPU 200与一个或更多个其他器件(诸如附加PPU 200、存储器204、精简指令集计算机(RISC)CPU、存储器管理单元(MMU)、数字-模拟转换器(DAC)等)一起被包括在片上系统(SoC)上。
在一个实施例中,PPU 200可以被包括在图形卡上,图形卡包括一个或更多个存储器设备204。图形卡可以被配置为与台式计算机的主板上的PCIe插槽接口。在又一个实施例中,PPU 200可以是包含在主板的芯片集中的集成图形处理单元(iGPU)或并行处理器。
示例性计算系统
具有多个GPU和CPU的系统被用于各种行业,因为开发者在应用(诸如人工智能计算)中暴露和利用更多的并行性。在数据中心、研究机构和超级计算机中部署具有数十至数千个计算节点的高性能GPU加速系统,以解决更大的问题。随着高性能系统内处理设备数量的增加,通信和数据传输机制需要扩展以支持该增加带宽。
图4B是根据一个实施例的使用图2的PPU 200实现的处理系统400的概念图。示例性系统400可以被配置为实现图1中所示的方法100。处理系统400包括CPU 430、交换机410和多个PPU 200中的每一个以及相应的存储器204。NVLink 210提供每个PPU 200之间的高速通信链路。尽管图4B中示出了特定数量的NVLink 210和互连202连接,但是连接到每个PPU 200和CPU 430的连接的数量可以改变。交换机410在互连202和CPU 430之间接口。PPU200、存储器204和NVLink 210可以位于单个半导体平台上以形成并行处理模块425。在一个实施例中,交换机410支持两个或更多个在各种不同连接和/或链路之间接口的协议。
在另一个实施例(未示出)中,NVLink 210在每个PPU 200和CPU 430之间提供一个或更多个高速通信链路,并且交换机410在互连202和每个PPU 200之间进行接口。PPU 200、存储器204和互连202可以位于单个半导体平台上以形成并行处理模块425。在又一个实施例(未示出)中,互连202在每个PPU 200和CPU 430之间提供一个或更多个通信链路,并且交换机410使用NVLink 210在每个PPU 200之间进行接口,以在PPU 200之间提供一个或更多个高速通信链路。在另一个实施例(未示出)中,NVLink 210在PPU 200和CPU 430之间通过交换机410提供一个或更多个高速通信链路。在又一个实施例(未示出)中,互连202在每个PPU 200之间直接地提供一个或更多个通信链路。可以使用与NVLink 210相同的协议将一个或更多个NVLink 210高速通信链路实现为物理NVLink互连或者片上或管芯上互连。
在本说明书的上下文中,单个半导体平台可以指在管芯或芯片上制造的唯一的单一的基于半导体的集成电路。应该注意的是,术语单个半导体平台也可以指具有增加的连接的多芯片模块,其模拟片上操作并通过利用常规总线实现方式进行实质性改进。当然,根据用户的需要,各种电路或器件还可以分开放置或以半导体平台的各种组合来放置。可选地,并行处理模块425可以被实现为电路板衬底,并且PPU 200和/或存储器204中的每一个可以是封装器件。在一个实施例中,CPU 430、交换机410和并行处理模块425位于单个半导体平台上。
在一个实施例中,每个NVLink 210的信令速率是20到25千兆位/秒,并且每个PPU200包括六个NVLink 210接口(如图4B所示,每个PPU 200包括五个NVLink 210接口)。每个NVLink 210在每个方向上提供25千兆位/秒的数据传输速率,其中六条链路提供200千兆位/秒。当CPU 430还包括一个或更多个NVLink 210接口时,NVLink 210可专门用于如图4B所示的PPU到PPU通信,或者PPU到PPU以及PPU到CPU的某种组合。
在一个实施例中,NVLink 210允许从CPU 430到每个PPU 200的存储器204的直接加载/存储/原子访问。在一个实施例中,NVLink 210支持一致性操作,允许从存储器204读取的数据被存储在CPU 430的高速缓存分层结构中,减少了CPU 430的高速缓存访问延迟。在一个实施例中,NVLink 210包括对地址转换服务(ATS)的支持,允许PPU 200直接访问CPU430内的页表。一个或更多个NVLink 210还可以被配置为以低功率模式操作。
图4C示出了示例性系统465,其中可以实现各种先前实施例的各种体系架构和/或功能。示例性系统465可以被配置为实现图1中所示的方法100。
如图所示,提供系统465,其包括连接到通信总线475的至少一个中央处理单元430。通信总线475可以使用任何合适的协议来实现,诸如PCI(外围组件互连)、PCI-Express、AGP(加速图形端口)、超传输或任何其他总线或一个或更多个点对点通信协议。系统465还包括主存储器440。控制逻辑(软件)和数据被存储在主存储器440中,主存储器440可以采取随机存取存储器(RAM)的形式。
系统465还包括输入设备460、并行处理系统425和显示设备445,例如常规CRT(阴极射线管)、LCD(液晶显示器)、LED(发光二极管)、等离子显示器等。可以从输入设备460(例如键盘、鼠标、触摸板、麦克风等)接收用户输入。前述模块和/或设备中的每一个甚至可以位于单个半导体平台上以形成系统465。可选地,根据用户的需要,各个模块还可以分开放置或以半导体平台的各种组合来放置。
此外,系统465可以出于通信目的通过网络接口435耦合到网络(例如,电信网络、局域网(LAN)、无线网络、广域网(WAN)(诸如因特网)、对等网络、电缆网络等)。
系统465还可以包括辅助存储(未示出)。辅助存储包括例如硬盘驱动器和/或可移除存储驱动器、代表软盘驱动器、磁带驱动器、光盘驱动器、数字多功能盘(DVD)驱动器、记录设备、通用串行总线(USB)闪存。可移除存储驱动器以众所周知的方式从可移除存储单元读取和/或写入可移除存储单元。
计算机程序或计算机控制逻辑算法可以存储在主存储器440和/或辅助存储中。这些计算机程序在被执行时使得系统465能够执行各种功能。存储器440、存储和/或任何其他存储是计算机可读介质的可能示例。
各种在先附图的体系架构和/或功能可以在通用计算机系统、电路板系统、专用于娱乐目的的游戏控制台系统、专用系统和/或任何其他所需的系统的上下文中实现。例如,系统465可以采取台式计算机、膝上型计算机、平板电脑、服务器、超级计算机、智能电话(例如,无线、手持设备)、个人数字助理(PDA)、数字相机、运载工具、头戴式显示器、手持式电子设备、移动电话设备、电视机、工作站、游戏控制台、嵌入式系统和/或任何其他类型的逻辑的形式。
虽然上面已经描述了各种实施例,但是应该理解,它们仅以示例的方式呈现,而不是限制。因此,优选实施例的宽度和范围不应受任何上述示例性实施例的限制,而应仅根据所附权利要求及其等同物来限定。
图形处理管线
在一个实施例中,PPU 200包括图形处理单元(GPU)。PPU 200被配置为接收指定用于处理图形数据的着色程序的命令。图形数据可以被定义为一组图元,例如点、线、三角形、四边形、三角形带等。典型地,图元包括指定图元的多个顶点(例如,在模型空间坐标系中)的数据以及与图元的每个顶点相关联的属性。PPU 200可以被配置为处理图元以生成帧缓冲区(例如,用于显示器的像素中的每一个的像素数据)。
应用程序将场景的模型数据(例如,顶点和属性的集合)写入存储器(诸如系统存储器或存储器204)。模型数据定义可能在显示器上可见的对象中的每一个。然后应用程序对驱动程序内核进行API调用,其请求要被渲染和显示的模型数据。驱动程序内核读取模型数据并将命令写入一个或更多个流以执行操作来处理模型数据。这些命令可以参考要在PPU 200的SM 340上实现的不同着色程序,包括顶点着色、外壳着色、域着色、几何着色和像素着色中的一个或更多个。例如,SM 340中的一个或更多个可以被配置为执行顶点着色程序,其处理由模型数据定义的多个顶点。在一个实施例中,不同的SM 340可以被配置为同时执行不同的着色程序。例如,SM 340的第一子集可以被配置为执行顶点着色程序,而SM 340的第二子集可以被配置为执行像素着色程序。SM 340的第一子集处理顶点数据以产生经处理的顶点数据,并将经处理的顶点数据写入L2高速缓存360和/或存储器204。在经处理的顶点数据被光栅化(例如,从三维数据转换成屏幕空间中的二维数据)以产生片段数据之后,SM 340的第二子集执行像素着色以产生经处理的片段数据,然后将其与其他经处理的片段数据混合并被写入存储器204中的帧缓冲区。顶点着色程序和像素着色程序可以同时执行,以管线方式处理来自同一场景的不同数据,直到该场景的所有模型数据已经被渲染到帧缓冲区。然后,帧缓冲区的内容被传送到显示控制器以在显示设备上显示。
图5是根据一个实施例的由图2的PPU 200实现的图形处理管线500的概念图。图形处理管线500是被实现以从3D几何数据生成2D计算机生成图像的处理步骤的抽象流程图。众所周知,管线架构可以通过将操作分成多个阶段来更高效地执行长延迟操作,其中每个阶段的输出耦合到下一个连续阶段的输入。因此,图形处理管线500接收从图形处理管线500的一个阶段传送到下一阶段的输入数据501,以生成输出数据502。在一个实施例中,图形处理管线500可表示由API定义的图形处理管线。作为选择,图形处理管线500可以在先前附图和/或一个或更多个任何后续附图的功能和架构的上下文中实现。
如图5所示,图形处理管线500包括包含多个阶段的管线架构。这些阶段包括但不限于数据组装阶段510、顶点着色阶段520、图元组装阶段530、几何着色阶段540、视口缩放、剔除和裁剪(viewport scale,cull,and clip,VSCC)阶段550、光栅化阶段560、片段着色阶段570和光栅操作阶段580。在一个实施例中,输入数据501包括命令,其配置处理单元以实现图形处理管线500的阶段,并配置几何图元(例如,点、线、三角形、四边形、三角形带或扇形等)以由这些阶段处理。输出数据502可以包括像素数据(即,颜色数据),其被复制到存储器中的帧缓冲区或其他类型的表面数据结构中。
数据组装阶段510接收输入数据501,其指定用于高阶表面、图元等的顶点数据。数据组装阶段510收集临时存储或队列中的顶点数据,诸如通过从主机处理器接收包括指向存储器中的缓冲区的指针的命令并从该缓冲区读取顶点数据。顶点数据然后被传送到顶点着色阶段520以进行处理。
顶点着色阶段520通过对顶点中的每一个执行一次一组操作(例如,顶点着色器或程序)来处理顶点数据。顶点可以例如被指定为与一个或更多个顶点属性(例如,颜色、纹理坐标、表面法线等)相关联的4坐标向量(例如,<x,y,z,w>)。顶点着色阶段520可以操纵各个顶点属性,诸如位置、颜色、纹理坐标等。换句话说,顶点着色阶段520对与顶点相关联的顶点坐标或其他顶点属性执行操作。这些操作通常包括光照操作(例如,修改顶点的颜色属性)和变换操作(例如,修改顶点的坐标空间)。例如,可以使用对象坐标空间中的坐标来指定顶点,其通过将坐标乘以矩阵进行变换,该矩阵将坐标从对象坐标空间转换到世界空间或归一化设备坐标(normalized-device-coordinate,NCD)空间。顶点着色阶段520生成被传送到图元组装阶段530的经变换的顶点数据。
图元组装阶段530收集由顶点着色阶段520输出的顶点并且将顶点分组成几何图元以由几何着色阶段540处理。例如,图元组装阶段530可以被配置为将每三个连续顶点分组为用于传送到几何着色阶段540的几何图元(例如,三角形)。在一些实施例中,特定顶点可以被重新用于连续几何图元(例如,三角形带中的两个连续三角形可以共享两个顶点)。图元组装阶段530将几何图元(例如,相关联的顶点的集合)传送到几何着色阶段540。
几何着色阶段540通过对几何图元执行一组操作(例如,几何着色器或程序)来处理几何图元。曲面细分(tessellation)操作可以从每个几何图元生成一个或更多个几何图元。换言之,几何着色阶段540可以将每个几何图元细分为两个或更多个几何图元的更精细的网格,以由图形处理管线500的其余部分进行处理。几何着色阶段540将几何图元传送到视口SCC阶段550。
在一个实施例中,图形处理管线500可以在流式多处理器和顶点着色阶段520、图元组装阶段530、几何着色阶段540、片段着色阶段570和/或与其相关联的硬件/软件内操作,可顺序地执行处理操作。一旦顺序处理操作完成,在一个实施例中,视口SCC阶段550可以利用数据。在一个实施例中,由图形处理管线500中的阶段的一个或更多个处理的图元数据可以被写入高速缓存(例如,L1高速缓存、顶点高速缓存等)中。在这种情况下,在一个实施例中,视口SCC阶段550可以访问高速缓存中的数据。在一个实施例中,视口SCC阶段550和光栅化阶段560被实现为固定功能电路。
视口SCC阶段550执行几何图元的视口缩放、剔除和裁剪。正被渲染的每个表面都与抽象相机位置相关联。相机位置表示正观看该场景的观看者的位置并定义了包围该场景的对象的视锥体。视锥体可以包括观看平面、后平面和四个裁剪平面。完全位于视锥体之外的任何几何图元都可被剔除(例如丢弃),因为这些几何图元将不会对最终渲染的场景做出贡献。部分位于视锥体内并且部分位于视锥体外的任何几何图元可以被裁剪(例如,转换为被包围在视锥体内的新的几何图元)。此外,可以基于视锥体的深度来对每个几何图元进行缩放。然后将所有可能可见的几何图元传送到光栅化阶段560。
光栅化阶段560将3D几何图元转换成2D片段(例如,能够用于显示等)。光栅化阶段560可以被配置为利用几何图元的顶点来设置一组平面方程,从中可以内插各种属性。光栅化阶段560还可以计算多个像素的覆盖掩码,其指示像素的一个或更多个样本位置是否拦截几何图元。在一个实施例中,还可以执行z测试以确定几何图元是否被已经被光栅化的其他几何图元遮挡。光栅化阶段560生成片段数据(例如,与每个被覆盖像素的特定样本位置相关联的内插顶点属性),其被传送到片段着色阶段570。
片段着色阶段570通过对片段中的每一个执行一组操作(例如,片段着色器或程序)来处理片段数据。片段着色阶段570可以生成片段的像素数据(例如,颜色值),诸如通过使用片段的内插纹理坐标执行光照操作或采样纹理图。片段着色阶段570生成像素数据,其被发送到光栅操作阶段580。
光栅操作阶段580可对像素数据执行各种操作,诸如执行阿尔法测试、模板测试(stencil test)以及将像素数据与对应于与像素相关联的其他片段的其他像素数据混合。当光栅操作阶段580已经完成对像素数据(例如,输出数据502)的处理时,可以将像素数据写入渲染目标,诸如帧缓冲区、颜色缓冲区等。
应当领会,除上述阶段中的一个或更多个以外或代替上述阶段中的一个或更多个,一个或更多个额外的阶段可以被包括在图形处理管线500中。抽象图形处理管线的各种实现方式可以实现不同的阶段。此外,在一些实施例中,上述阶段中的一个或更多个可以从图形处理管线中排除(诸如几何着色阶段540)。其他类型的图形处理管线被认为是在本公开的范围内所构想的。此外,图形处理管线500的任何阶段可以由图形处理器(诸如PPU200)内的一个或更多个专用硬件单元来实现。图形处理管线500的其他阶段可以由可编程硬件单元(诸如PPU 200的SM 340)来实现。
图形处理管线500可以经由由主机处理器(诸如CPU)执行的应用程序来实现。在一个实施例中,设备驱动程序可以实现应用程序编程接口(API),其定义可以被应用程序利用以生成用于显示的图形数据的各种功能。设备驱动程序是软件程序,其包括控制PPU 200的操作的多个指令。API为程序员提供抽象,其允许程序员利用专用图形硬件(诸如PPU 200)来生成图形数据而不要求程序员利用PPU 200的特定指令集。应用程序可以包括被路由到PPU 200的设备驱动程序的API调用。设备驱动程序解释API调用并执行各种操作以响应API调用。在一些情况下,设备驱动程序可以通过在CPU上执行指令来执行操作。在其他情况下,设备驱动程序可以至少部分地通过利用CPU和PPU 200之间的输入/输出接口在PPU 200上启动操作来执行操作。在一个实施例中,设备驱动程序被配置为利用PPU 200的硬件来实现图形处理管线500。
可以在PPU 200内执行各种程序以便实现图形处理管线500的各个阶段。例如,设备驱动程序可以启动PPU 200上的内核以在一个SM 340(或多个SM 340)上执行顶点着色阶段520。设备驱动程序(或由PPU 300执行的初始内核)还可启动PPU 300上的其他内核以执行图形处理管线500的其他阶段,诸如几何着色阶段540和片段着色阶段570。另外,图形处理管线500的阶段中的一些可以在固定单元硬件(诸如在PPU 300内实现的光栅器或数据组装器)上实现。应当领会,在被SM 340上的后续内核处理之前,来自一个内核的结果可以由一个或更多个中间固定功能硬件单元处理。
示例游戏流媒体系统
现在参考图6,图6是根据本公开的一些实施例的游戏流媒体系统600的示例系统图。图6包括一个或更多个游戏服务器602(其可包括与图7的示例计算设备700类似的组件、特征和/或功能)、一个或更多个客户端设备604(其可包括与图7的示例计算设备700类似的组件、特征和/或功能),以及一个或更多个网络606(其可类似于本文的一个或更多个网络)。在本公开的一些实施例中,可以实现系统600。
在系统600中,对于游戏会话,一个或更多个客户端设备604响应于对一个或更多个输入设备的输入,可以仅接收输入数据,将输入数据发送到游戏服务器602,从游戏服务器602接收编码的显示数据,并将显示数据显示在显示器624上。这样,计算强度更高的计算和处理被卸载到游戏服务器602(例如,渲染-尤其是光线或路径跟踪-由一个或更多个游戏服务器602的一个或更多个GPU执行用于游戏会话的图形输出的渲染)。换句话说,游戏会话从一个或更多个游戏服务器602流传输到一个或更多个客户端设备604,从而减少了一个或更多个客户端设备604对图形处理和渲染的需求。
例如,关于游戏会话的实例,客户端设备604可以基于从一个或更多个游戏服务器602接收显示数据而在显示器624上显示游戏会话的帧。客户端设备604可以接收对一个或更多个输入设备之一的输入,并且作为响应生成输入数据。客户端设备604可以经由通信接口620并且通过一个或更多个网络606(例如,因特网)将输入数据发送到一个或更多个游戏服务器602,并且一个或更多个游戏服务器602可以经由通信接口618接收输入数据。一个或更多个CPU可以接收输入数据,处理输入数据,并且将数据发送到一个或更多个GPU,从而使一个或更多个GPU生成游戏会话的渲染。例如,输入数据可以表示游戏中用户角色的运动、射击武器、重新加载、传球、车辆转弯等。渲染组件612可以渲染游戏会话(例如,代表输入数据的结果),并且渲染捕获组件614可以捕获游戏会话的渲染作为显示数据(例如,作为捕获游戏会话的渲染帧的图像数据)。游戏会话的渲染可包括使用一个或更多个并行处理单元(例如GPU)计算得出的光线或路径跟踪的光照和/或影子效果,并行处理单元可进一步使用一个或更多个专用硬件加速器或处理核心来执行游戏服务器602的光线或路径跟踪技术。编码器616随后可以对显示数据进行编码以生成经编码的显示数据,并且经编码的显示数据可以经由通信接口618通过网络606发送到客户端设备604。客户端设备604可以经由通信接口620接收经编码的显示数据,并且解码器622可以将经编码的显示数据解码以生成显示数据。然后,客户端设备604可以经由显示器624显示显示数据。
示例计算设备
图7为适合用于实现本公开一些实施例的示例计算设备700的框图。计算设备700可以包括直接或间接耦合下列设备的互连系统702:存储器704,一个或更多个中央处理单元(CPU)706,一个或更多个图形处理单元(GPU)708,通信接口710,输入/输出(I/O)端口712,输入/输出组件714,电源716,一个或更多个呈现组件718(例如显示器),以及一个或更多个逻辑单元720。
尽管图7的各个框被示为经由具有线路的互连系统702连接,但是这并不意图是限制性的,并且仅仅为了清楚起见。例如,在一些实施例中,诸如显示设备之类的呈现组件718可以被认为是I/O组件714(例如如果显示器为触摸屏)。作为另一个示例,CPU 706和/或GPU708可以包括内存(例如,存储器704可以表示除了GPU 708、CPU 706和/或其他组件的内存以外的存储设备)。换言之,图7的计算设备仅仅是说明性的。在诸如“工作站”、“服务器”、“膝上型电脑”、“台式机”、“平板电脑”、“客户端设备”、“移动设备”、“手持式设备”、“游戏控制台”、“电子控制单元(ECU)”、“虚拟现实系统”和/或其他设备或系统类型之类的类别之间不进行区分,因为所有这些都被考虑在图7的计算设备的范围内。
互连系统702可以表示一条或更多条链接或总线,例如地址总线、数据总线、控制总线或者其组合。互连系统702可以包括一种或更多种总线或链接类型,例如行业标准架构(ISA)总线、扩展行业标准架构(EISA)总线、视频电子标准协会(VESA)总线、外围组件互连(PCI)总线、外围组件互连快速(PCIe)总线,和/或另一种类型的总线或链接。在一些实施例中,组件之间存在直接连接。作为示例,CPU 706可以直接连接至存储器704。此外,CPU 706可以直接连接至GPU 708。在组件之间存在直接或点对点连接的情况下,互连系统702可以包括PCIe链路以执行连接。在这些示例中,PCI总线不需要包括在计算设备700中。
存储器704可以包括各种各样的计算机可读介质中的任何介质。计算机可读介质可以是可以由计算设备700访问的任何可用介质。计算机可读介质可以包括易失性和非易失性介质以及可移除和不可移除介质。举例而言且非限制性地,计算机可读介质可以包括计算机存储介质和通信介质。
计算机存储介质可以包括易失性和非易失性介质和/或可移除和不可移除介质,其以用于存储诸如计算机可读指令、数据结构、程序模块和/或其他数据类型之类的信息的任何方法或技术实现。例如,存储器704可以存储计算机可读指令(例如其表示程序和/或程序元素,例如操作系统)。计算机存储介质可以包括但不限于RAM、ROM、EEPROM、闪存或者其他存储技术、CD-ROM、数字多功能盘(DVD)或其他光盘存储装置、磁带盒、磁带、磁盘存储装置或其他磁存储设备,或者可以用来存储期望的信息且可以由计算设备700访问的任何其他介质。当在本文使用时,计算机存储介质并不包括信号本身。
计算机存储介质可以在诸如载波之类的调制数据信号或其他传输机制中包含计算机可读指令、数据结构、程序模块和/或其他数据类型,并且包括任何信息输送介质。术语“调制数据信号”可以指这样的信号,该信号使它的特性中的一个或更多个以这样的将信息编码到该信号中的方式设置或改变。举例而言且非限制性地,计算机存储介质可以包括诸如有线网络或直接有线连接之类的有线介质,以及诸如声音、RF、红外和其他无线介质之类的无线介质。任何以上的组合也应当包含在计算机可读介质的范围内。
CPU 706可以被配置为执行至少一些计算机可读指令以便控制计算设备700的一个或更多个组件执行本文描述的方法和/或过程中的一个或更多个。CPU 706中的每一个可以包括能够同时处理大量软件线程的一个或更多个核(例如一个、两个、四个、八个、二十八个、七十二个等等)。CPU 706可以包括任何类型的处理器,并且可以包括不同类型的处理器,这取决于实现的计算设备700的类型(例如具有用于移动设备的较少核的处理器以及具有用于服务器的更多核的处理器)。例如,取决于计算设备700的类型,处理器可以是使用精简指令集计算(RISC)实现的先进RISC机器(ARM)处理器或者使用复杂指令集计算(CISC)实现的x86处理器。除了一个或更多个微处理器或者诸如数学协处理器之类的补充协处理器之外,计算设备700还可以包括一个或更多个CPU 706。
除了或可替代地从CPU706开始,GPU 708可以被配置为执行至少一些计算机可读指令,以控制计算设备700的一个或更多个组件来执行本文的方法和/或过程中的一个或更多个。一个或更多个GPU 708可以是集成GPU(例如,具有一个或更多个CPU 706)和/或一个或更多个GPU 708可以是离散GPU。在多个实施例中,一个或更多个GPU 708可以是一个或更多个CPU 706的协处理器。GPU 708可以由计算设备700用来渲染图形(例如3D图形)或执行通用计算。例如,GPU 708可以用于GPU上的通用计算(GPGPU)。GPU 708可以包括能够同时处理数百或数千个软件线程的数百或数千个核心。GPU 708可以响应于渲染命令(例如经由主机接口接收的来自CPU 706的渲染命令)而生成用于输出图像的像素数据。GPU 708可以包括诸如显示内存之类的图形内存,用于存储像素数据或任何其他合适的数据,例如GPGPU数据。显示内存可以作为存储器704的部分而被包括。GPU 708可以包括(例如经由链路)并行操作的两个或更多GPU。链接可以直接连接GPU(例如,使用NVLINK),也可以通过交换机连接GPU(例如,使用NVSwitch)。当组合在一起时,每个GPU 708可以生成用于输出的不同部分或者用于不同输出的像素数据或GPGPU数据(例如,第一GPU用于第一图像,第二GPU用于第二图像)。每个GPU可以包括它自己的内存,或者可以与其他GPU共享内存。
除了一个或更多个CPU 706和/或一个或更多个GPU 708之外或作为其替代,一个或更多个逻辑单元720可以被配置为执行至少某些计算机可读指令,以控制计算设备700的一个或更多个组件来执行本文描述的一种或更多种方法和/或过程。在实施例中,一个或更多个CPU 706、一个或更多个GPU 708和/或一个或更多个逻辑单元720可以离散地或联合地执行方法、过程和/或其部分的任何组合。一个或更多个逻辑单元720可以是一个或更多个CPU 706、和/或一个或更多个GPU 708的一部分和/或集成在其中,和/或一个或更多个逻辑单元720可以是离散的组件,或以其他方式在一个或更多个CPU 706和/或一个或更多个GPU708外部。在实施例中,一个或更多个逻辑单元720可以是一个或更多个CPU 706和/或一个或更多个GPU 708中的一个或更多个的协处理器。
一个或更多个逻辑单元720的示例包括一个或更多个处理核心和/或其组件,例如张量核心(TC)、张量处理单元(TPU)、像素视觉核心(PVC)、视觉处理单元(VPU)、图形处理集群(GPC)、纹理处理集群(TPC)、流式多处理器(SM)、树遍历单元(TTU)、人工智能加速器(AIA)、深度学习加速器(DLA)、算术逻辑单元(ALU)、专用集成电路(ASIC)、浮点单元(FPU)、输入/输出(I/O)元件、外围组件互连(PCI)或快速外围组件互连(PCIe)元件等。
通信接口710可以包括一个或更多个接收器、发送器和/或收发器,其使得计算设备700能够经由电子通信网络与其他计算设备通信,包括有线和/或无线通信。通信接口710可以包括使能通过若干不同网络中的任何网络进行通信的组件和功能,例如无线网络(例如Wi-Fi、Z波、蓝牙、蓝牙LE、ZigBee等等)、有线网络(例如通过以太网或无线宽带(InfiniBand)通信)、低功率广域网(例如LoRaWAN、SigFox等等)和/或因特网。
I/O端口712可以使得计算设备700能够逻辑地耦合到包括I/O组件714、呈现组件718和/或其他组件在内的其他设备,其中一些组件可以内置到(例如集成到)计算设备700中。说明性I/O组件714包括麦克风、鼠标、键盘、操纵杆、游戏板、游戏控制器、碟形卫星天线、扫描仪、打印机、无线设备等等。I/O组件714可以提供处理用户生成的空中手势、语音或其他生理输入的自然用户界面(NUI)。在一些实例中,输入可以被传输至适当的网络元件以便进一步处理。NUI可以实现语音识别、手写笔识别、面部识别、生物特征识别、屏幕上和邻近屏幕的手势识别、空中手势、头部和眼睛跟踪以及与计算设备700的显示器关联的触摸识别(如下文更详细地描述的)的任意组合。计算设备700可以包括诸如立体照相机系统之类的深度照相机、红外照相机系统、RGB照相机系统、触摸屏技术以及这些的组合,以用于手势检测和识别。此外,计算设备700可以包括使能运动检测的加速度计或陀螺仪(例如作为惯性测量单元(IMU)的部分)。在一些示例中,加速度计或陀螺仪的输出可以由计算设备700用来渲染沉浸式增强现实或者虚拟现实。
电源716可以包括硬接线电源、电池电源或者其组合。电源716可以向计算设备700供电以使得计算设备700的组件能够运行。
呈现组件718可以包括显示器(例如监视器、触摸屏、电视屏幕、平视显示器(HUD)、其他显示器类型或者其组合)、扬声器和/或其他呈现组件。呈现组件718可以接收来自其他组件(例如GPU 708、CPU 706等等)的数据,并且输出该数据(例如作为图像、视频、声音等)。
示例网络环境
适用于实现本公开的实施例的网络环境可以包括一个或更多个客户端设备、服务器、网络附加存储(NAS),其他后端设备和/或其他设备类型。客户端设备、服务器和/或其他设备类型(例如,每个设备)可以在图7的计算设备700的一个或更多个实例上实现,例如,每个设备可以包括计算设备700的相似组件、特征和/或功能。
网络环境的组件可以经由网络彼此通信,网络可以是有线的、无线的或两者兼有。该网络可以包括多个网络或网络中的一网络。举例来说,网络可以包括一个或更多个广域网(WAN)、一个或更多个局域网(LAN)、一个或更多个公共网络,例如Internet和/或公共交换电话网络(PSTN),和/或一个或更多个专用网络。在网络包括无线电信网络的情况下,诸如基站、通信塔、甚至接入点(以及其他组件)之类的组件可以提供无线连接。
兼容的网络环境可以包括一个或更多个对等网络环境(在这种情况下服务器可不包括在网络环境中)和一个或更多个客户端服务器网络环境(在这种情况下一个或更多个服务器可包括在网络环境中)。在对等网络环境中,本文针对服务器描述的功能可以在任意数量的客户端设备上实现。
在至少一个实施例中,网络环境可以包括一个或更多个基于云的网络环境、分布式计算环境、其组合等。基于云的网络环境可以包括在一个或更多个服务器上实现的框架层、作业调度器、资源管理器和分布式文件系统,服务器可以包括一个或更多个核心网络服务器和/或边缘服务器。框架层可以包括用于支持软件层的软件和/或应用层的一个或更多个应用程序的框架。软件或应用程序可分别包括基于web的服务软件或应用程序。在实施例中,一个或更多个客户端设备可以使用基于web的服务软件或应用程序(例如,通过经由一个或更多个应用程序编程接口(API)访问服务软件和/或应用程序)。框架层可以是但不限于一种自由和开源软件Web应用程序框架,例如其可以使用分布式文件系统进行大规模数据处理(例如“大数据”)。
基于云的网络环境可提供云计算和/或云存储,其执行本文描述的计算和/或数据存储功能(或其一个或更多个部分)的任何组合。这些各个功能中的任何一个都可以分布在(例如,跨州、地区、国家、全球等分布的一个或更多个数据中心的)中央或核心服务器的多个位置上。如果到用户(例如,客户端设备)的连接相对靠近一个或更多个边缘服务器,则一个或更多个核心服务器可以向一个或更多个边缘服务器指定至少一部分功能。基于云的网络环境可以是私有的(例如,限于单个组织)、可以是公共的(例如,可用于许多组织),和/或其组合(例如,混合云环境)。
客户端设备可以包括本文关于图7描述的示例计算设备700的至少一些组件、特征和功能。作为示例而非限制,客户端设备可以体现为个人计算机(PC)、膝上型计算机、移动设备、智能手机、平板计算机、智能手表、可穿戴计算机、个人数字助理(PDA)、MP3播放器、虚拟现实耳机、全球定位系统(GPS)或设备、视频播放器,摄像机、监控设备或系统、车辆、船只、飞行船舶、虚拟机、无人机、机器人、手持通信设备、医院设备、游戏设备或系统、娱乐系统、车辆计算机系统、嵌入式系统控制器、遥控器、设备、消费类电子设备、工作站、边缘设备,这些描绘的设备的任何组合,或任何其他合适的设备。
使用高速缓存的间接光照用于直接和间接光照的水塘重要性重采样从预先计算的全局照明收集可以作为直接光照问题重新投射(recast)。当前的方法,包括重采样重要性采样(RIS)和RESTIR,包括特别适合于具有大量光照场景的算法。在一个实施例中,水塘重要性重采样(RIR)将全局照明重新投射作为直接光照,以将间接光照添加到诸如RIS和ReSTIR的以前仅直接的算法中。
水塘重要性重采样异步计算两个元素。第一个元素是存储在世界空间数据结构中整个空间的全局照明(即“光场”)。第二个元素是可见表面上的全局照明,其由水塘重要性采样计算得出,水塘重要性采样将所有表面视为光源,光源本身由世界空间数据结构发光(emissive)或照亮(lit)的。
可以基于光场探针(例如RTXGI)使用滤波后的辐射/辐照度体算法来计算世界空间数据结构。
另外,在一个实施例中,用于直接光照的水塘重要性重采样在光源上获取随机候选点集,评估其潜在贡献,然后以与它们的潜在贡献成正比的选择概率选择其中一个。然后将可见性(阴影)光线发送到该点。例如,可以遍历光源上的候选点集,跟踪由蒙特卡洛采样确定的“最佳”候选点。然后可以将光线(或少量的、固定的光线)发送到“获胜”点。
此外,在一个实施例中,可以通过将场景的三维(3D)体划分为多个区(例如规则的或扭曲的3D网格),并存储在每个方向上穿过这些区的每个顶点(即“光照探针”)的光照,来计算光照体。这些顶点通常不在表面上,并且通常会花费一些精力来确保它们不在表面上,因为在空白空间中的光照对计算很有用。当为3D点着色时,可以通过插入附近探针的值来估计入射光。
使用动态漫反射全局照明/RTXGI方法的插值过程使用关于到附近遮挡物的距离的附加信息,以避免对穿过墙壁的光进行插值,并基于它们的接近度和要着色表面的方向来对周围的探针进行加权。例如,在网格中的一个点集处,对预先计算的“探针”进行插值以对反射对象上的点着色。
此外,在一个实施例中,可以扩展RTXGI以捕获存储在MIP链中的,以不同内核大小过滤的入射辐射。RTXGI可以描述具有可见性的辐照探针的等效物;但是,可以使用具有可见性的经过滤辐射探针的等效物。可见性信息可以在运行时合并和动态计算。
同样,在一个实施例中,当计算RTXGI数据结构本身时,RESTIR可用于着色光线命中点。以前,可以使用暴力穷举直接光照,以及递归使用RTXGI数据结构。通过在所有表面上使用RIR(并在此过程中递归地使用RTXGI)可以改善这一点。可以跨探针的整个表面而不是屏幕的整个表面在RIR中应用重复使用和过滤。
另外,在一个实施例中,RIR可以被扩展,以将所有表面视为光源。当一个表面被选作采样候选时,其强度被当作发射光(如在RIS)加上反射光,其通过对命中表面着色仅使用RTXGI数据结构来计算。因此,在更新的重采样方法中,初始光源和间接光源之间没有重要区别。
在一个实施例中,RTXGI数据结构可以计算若干量,这些量可以用于在RESTIR期间选择更好的候选。
图8示出了根据一个示例性实施例的利用RESTIR和全局照明数据结构来执行照明收集的示例性场景800。如图所示,场景800既包括光源802A-C,又包括几何体804A-D的实例。
在一个实施例中,可以利用RESTIR内的预定光照方程来确定来自光源802A-C的一组随机点的光照贡献。在另一个实施例中,通过在为几何体804A-D实例准备的全局照明数据结构中执行数据查找(而不是使用RESTIR内的预定光照方程),可以确定来自场景800内几何体804A-D实例的随机点集的光照贡献。
然而,在另一个实施例中,可以利用为光源802A-C和几何体804A-D实例所准备的全局照明数据结构来确定来自场景800内光源802A-C的点的光照贡献和来自几何体804A-D实例中的点的光照贡献。
此外,在一个实施例中,使用RESTIR,可以选择来自场景800中光源802A-C或几何体804A-D实例的随机点集之一,其中点选择的概率与点的潜在光照贡献成比例。然后,可以通过将阴影光线808从场景806中被着色的点投射到选定点804C,来对选定点804C执行着色计算。
这样一来,通过在着色期间将光源802A-C和几何体804A-D的实例两者都视为照明源,可以在RESTIR期间考虑直接和间接光照。
尽管上面已经描述了各种实施例,但是应该理解,它们仅以示例的方式而非限制的方式呈现。因此,优选实施例的广度和范围不应受到上述任何示例性实施例的限制,而应仅根据所附权利要求及其等效物来限定。
本公开可以在由计算机或者诸如个人数字助理或其他手持式设备之类的其他机器执行的、包括诸如程序模块之类的计算机可执行指令的机器可使用指令或者计算机代码的一般上下文中进行描述。通常,包括例程、程序、对象、组件、数据结构等等的程序模块指的是执行特定任务或者实现特定抽象数据类型的代码。本公开可以在各种各样的系统配置中实践,这些配置包括手持式设备、消费电子器件、通用计算机、更专业的计算设备等等。本公开也可以在其中由通过通信网络链接的远程处理设备执行任务的分布式计算环境中实践。
如在本文中使用的,关于两个或更多元素的“和/或”的叙述应当解释为仅指一个元素或者元素组合。例如,“元素A、元素B和/或元素C”可以包括仅仅元素A,仅仅元素B,仅仅元素C,元素A和元素B,元素A和元素C,元素B和元素C,或者元素A、B和C。此外,“元素A或元素B中的至少一个”可以包括元素A中的至少一个,元素B中的至少一个,或者元素A中的至少一个和元素B中的至少一个。进一步,“元素A和元素B中的至少一个”可以包括元素A中的至少一个,元素B中的至少一个,或者元素A中的至少一个和元素B中的至少一个。
本文详细地描述了本公开的主题以满足法定要求。然而,描述本身并非意在限制本公开的范围。相反地,本发明人已经设想到,要求保护的主题也可以以其他的方式具体化,以包括与本文中结合其他当前或未来技术描述的步骤不同的步骤或者相似的步骤的组合。而且,尽管术语“步骤”和/或“块”在本文中可以用来隐含采用的方法的不同元素,但是这些术语不应当被解释为暗示本文公开的各个步骤之中或之间的任何特定顺序,除非明确描述了各步骤的顺序。
Claims (20)
1.一种方法,包括:
利用世界空间数据结构实现水塘重要性重采样,以计算场景的可见表面上的全局照明。
2.根据权利要求1所述的方法,还包括:计算场景的整个空间的所述全局照明,并将计算出的全局照明存储在所述场景的所述世界空间数据结构中。
3.根据权利要求1所述的方法,其中所述水塘重要性重采样在计算所述全局照明期间将反射对象和光上的点视为候选者。
4.根据权利要求1所述的方法,其中所述世界空间数据结构包括RTX全局照明(RTXGI)数据结构。
5.根据权利要求1所述的方法,其中在所述世界空间数据结构中查找反射候选者发出的颜色。
6.根据权利要求1所述的方法,其中使用过滤辐射/辐照量算法来计算所述世界空间数据结构。
7.根据权利要求1所述的方法,其中所述水塘重要性重采样将所述可见表面视为光源,所述光源本身由所述世界空间数据结构发光或照亮。
8.根据权利要求1所述的方法,其中所述世界空间数据结构是使用RTX全局照明(RTXGI)算法生成的。
9.根据权利要求8所述的方法,其中所述RTXGI算法每个样本仅使用一条光线来计算所述全局照明。
10.一种系统,包括:
处理器,其被配置为:
利用世界空间数据结构实现水塘重要性重采样,以计算场景的可见表面上的全局照明。
11.根据权利要求10所述的系统,其中所述处理器还被配置为:计算场景的整个空间的所述全局照明,并将计算出的全局照明存储在所述场景的所述世界空间数据结构中。
12.根据权利要求10所述的系统,其中所述水塘重要性重采样在计算所述全局照明期间将反射对象和光上的点视为候选者。
13.根据权利要求10所述的系统,其中所述世界空间数据结构包括RTX全局照明(RTXGI)数据结构。
14.根据权利要求10所述的系统,其中在所述世界空间数据结构中查找反射候选者发出的颜色。
15.根据权利要求10所述的系统,其中使用过滤辐射/辐照量算法来计算所述世界空间数据结构。
16.根据权利要求10所述的系统,其中所述水塘重要性重采样将所述可见表面视为光源,所述光源本身由所述世界空间数据结构发光或照亮。
17.根据权利要求10所述的系统,其中所述世界空间数据结构是使用RTX全局照明(RTXGI)算法生成的。
18.根据权利要求17所述的系统,其中所述RTXGI算法每个样本仅使用一条光线来计算所述全局照明。
19.一种存储指令的计算机可读存储介质,所述指令在由处理器执行时使所述处理器执行步骤,所述步骤包括:
利用世界空间数据结构实现水塘重要性重采样,以计算场景的可见表面上的全局照明。
20.根据权利要求19所述的计算机可读存储介质,还包括:计算场景的整个空间的所述全局照明,并将计算出的全局照明存储在所述场景的所述世界空间数据结构中。
Applications Claiming Priority (4)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
US202062988789P | 2020-03-12 | 2020-03-12 | |
US62/988,789 | 2020-03-12 | ||
US17/152,460 US11315310B2 (en) | 2020-03-12 | 2021-01-19 | Reservoir-based spatiotemporal importance resampling utilizing a global illumination data structure |
US17/152,460 | 2021-01-19 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN113393564A true CN113393564A (zh) | 2021-09-14 |
CN113393564B CN113393564B (zh) | 2024-01-09 |
Family
ID=77457461
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202110237136.4A Active CN113393564B (zh) | 2020-03-12 | 2021-03-03 | 利用全局照明数据结构的基于水塘的时空重要性重采样 |
Country Status (3)
Country | Link |
---|---|
US (2) | US11315310B2 (zh) |
CN (1) | CN113393564B (zh) |
DE (1) | DE102021104310A1 (zh) |
Cited By (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN116847508A (zh) * | 2023-06-27 | 2023-10-03 | 深圳光照度科技有限公司 | 基于场景融合的仿真立体地图的智慧照明控制方法及系统 |
Families Citing this family (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US11954785B2 (en) * | 2021-12-07 | 2024-04-09 | Canon Medical Systems Corporation | Data processing method and apparatus |
WO2024086382A1 (en) * | 2022-10-21 | 2024-04-25 | Innopeak Technology, Inc. | Methods and systems for rendering video graphics using scene segmentation |
Citations (10)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US20050041024A1 (en) * | 2003-08-20 | 2005-02-24 | Green Robin J. | Method and apparatus for real-time global illumination incorporating stream processor based hybrid ray tracing |
US20080018647A1 (en) * | 2006-07-24 | 2008-01-24 | Bunnell Michael T | System and methods for real-time rendering of deformable geometry with global illumination |
US20090322750A1 (en) * | 2008-06-25 | 2009-12-31 | Microsoft Corporation | Real-time radiosity system in a video game environment |
US20130120384A1 (en) * | 2008-09-05 | 2013-05-16 | Wojciech Jarosz | Method and Apparatus for Converting Spherical Harmonics Representations of Functions into Multi-Resolution Representations |
US20130328873A1 (en) * | 2012-06-08 | 2013-12-12 | Advanced Micro Devices, Inc. | Forward rendering pipeline with light culling |
US20140327673A1 (en) * | 2013-05-03 | 2014-11-06 | Crytek Gmbh | Real-time global illumination using pre-computed photon paths |
US20160171753A1 (en) * | 2014-12-15 | 2016-06-16 | Samsung Electronics Co., Ltd. | 3d rendering method and apparatus |
US20170263043A1 (en) * | 2016-03-11 | 2017-09-14 | Imagination Technologies Limited | Importance sampling for determining a light map |
CN107452048A (zh) * | 2016-05-30 | 2017-12-08 | 网易(杭州)网络有限公司 | 全局光照的计算方法及装置 |
CN108537869A (zh) * | 2018-03-08 | 2018-09-14 | 哈尔滨工程大学 | 一种基于级联纹理的圆锥追踪动态全局光照方法 |
Family Cites Families (8)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
WO2008076852A1 (en) * | 2006-12-14 | 2008-06-26 | Mental Images Gmbh | Computer graphics using meshless finite elements for light transport |
KR101536197B1 (ko) * | 2008-02-27 | 2015-07-13 | 삼성전자주식회사 | 3차원 영상 프로세서 및 프로세싱 방법 |
US10713838B2 (en) * | 2013-05-03 | 2020-07-14 | Nvidia Corporation | Image illumination rendering system and method |
US9995573B2 (en) * | 2015-01-23 | 2018-06-12 | Cognex Corporation | Probe placement for image processing |
RU2741572C2 (ru) * | 2016-06-16 | 2021-01-27 | Конинклейке Филипс Н.В. | Способ и устройство для отображения по меньшей мере части структуры на изображении по меньшей мере части тела субъекта |
US10417533B2 (en) * | 2016-08-09 | 2019-09-17 | Cognex Corporation | Selection of balanced-probe sites for 3-D alignment algorithms |
US11676069B2 (en) * | 2018-12-13 | 2023-06-13 | Diveplane Corporation | Synthetic data generation using anonymity preservation in computer-based reasoning systems |
US11423508B2 (en) * | 2018-02-26 | 2022-08-23 | Intel Corporation | Method and system of point cloud registration for image processing |
-
2021
- 2021-01-19 US US17/152,460 patent/US11315310B2/en active Active
- 2021-02-23 DE DE102021104310.7A patent/DE102021104310A1/de active Pending
- 2021-03-03 CN CN202110237136.4A patent/CN113393564B/zh active Active
-
2022
- 2022-03-11 US US17/693,162 patent/US20220198746A1/en active Pending
Patent Citations (10)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US20050041024A1 (en) * | 2003-08-20 | 2005-02-24 | Green Robin J. | Method and apparatus for real-time global illumination incorporating stream processor based hybrid ray tracing |
US20080018647A1 (en) * | 2006-07-24 | 2008-01-24 | Bunnell Michael T | System and methods for real-time rendering of deformable geometry with global illumination |
US20090322750A1 (en) * | 2008-06-25 | 2009-12-31 | Microsoft Corporation | Real-time radiosity system in a video game environment |
US20130120384A1 (en) * | 2008-09-05 | 2013-05-16 | Wojciech Jarosz | Method and Apparatus for Converting Spherical Harmonics Representations of Functions into Multi-Resolution Representations |
US20130328873A1 (en) * | 2012-06-08 | 2013-12-12 | Advanced Micro Devices, Inc. | Forward rendering pipeline with light culling |
US20140327673A1 (en) * | 2013-05-03 | 2014-11-06 | Crytek Gmbh | Real-time global illumination using pre-computed photon paths |
US20160171753A1 (en) * | 2014-12-15 | 2016-06-16 | Samsung Electronics Co., Ltd. | 3d rendering method and apparatus |
US20170263043A1 (en) * | 2016-03-11 | 2017-09-14 | Imagination Technologies Limited | Importance sampling for determining a light map |
CN107452048A (zh) * | 2016-05-30 | 2017-12-08 | 网易(杭州)网络有限公司 | 全局光照的计算方法及装置 |
CN108537869A (zh) * | 2018-03-08 | 2018-09-14 | 哈尔滨工程大学 | 一种基于级联纹理的圆锥追踪动态全局光照方法 |
Non-Patent Citations (3)
Title |
---|
RAFIEE, M ; BARRAU, A;: "State estimation in large-scale open channel networks using particle filters", 《AMERICAN CONTROL CONFERENCE》, pages 1104 - 1110 * |
于平;: "基于GPU加速的辐射度光照算法的研究及应用", 国外电子测量技术, no. 11, pages 46 - 52 * |
柴学梁;吴向阳;王毅刚;戴大蒙;: "采用重要性面片采样的实时全局光照", 计算机工程与应用, no. 02, pages 174 - 176 * |
Cited By (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN116847508A (zh) * | 2023-06-27 | 2023-10-03 | 深圳光照度科技有限公司 | 基于场景融合的仿真立体地图的智慧照明控制方法及系统 |
Also Published As
Publication number | Publication date |
---|---|
DE102021104310A1 (de) | 2021-09-16 |
US20220198746A1 (en) | 2022-06-23 |
US11315310B2 (en) | 2022-04-26 |
CN113393564B (zh) | 2024-01-09 |
US20210287426A1 (en) | 2021-09-16 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN110176054B (zh) | 用于训练神经网络模型的合成图像的生成 | |
US10762620B2 (en) | Deep-learning method for separating reflection and transmission images visible at a semi-reflective surface in a computer image of a real-world scene | |
US11106261B2 (en) | Optimal operating point estimator for hardware operating under a shared power/thermal constraint | |
US20210181674A1 (en) | System and method for near-eye light field rendering for wide field of view interactive three-dimensional computer graphics | |
US11941752B2 (en) | Streaming a compressed light field | |
US10861230B2 (en) | System-generated stable barycentric coordinates and direct plane equation access | |
US10699427B2 (en) | Method and apparatus for obtaining sampled positions of texturing operations | |
CN113393564B (zh) | 利用全局照明数据结构的基于水塘的时空重要性重采样 | |
CN111210498A (zh) | 降低多边形网格的细节水平以减少被渲染几何的复杂度 | |
US11847733B2 (en) | Performance of ray-traced shadow creation within a scene | |
US11501467B2 (en) | Streaming a light field compressed utilizing lossless or lossy compression | |
CN111445003A (zh) | 神经网络生成器 | |
CN111667542A (zh) | 适用于人工神经网络的用于处理压缩数据的解压缩技术 | |
CN113450445A (zh) | 临时密实渲染的自适应像素采样顺序 | |
CN112041894B (zh) | 渲染期间提高涉及水面的场景的真实感 | |
CN113822975A (zh) | 用于对图像进行有效采样的技术 | |
US11055381B1 (en) | Estimating product integrals using a composition of warps | |
US11847737B2 (en) | Temporal denoiser quality in dynamic scenes | |
US11270161B2 (en) | Deep-learning method for separating reflection and transmission images visible at a semi-reflective surface in a computer image of a real-world scene |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
PB01 | Publication | ||
PB01 | Publication | ||
SE01 | Entry into force of request for substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
GR01 | Patent grant | ||
GR01 | Patent grant |