CN115701305A - 阴影筛选 - Google Patents

阴影筛选 Download PDF

Info

Publication number
CN115701305A
CN115701305A CN202180037447.4A CN202180037447A CN115701305A CN 115701305 A CN115701305 A CN 115701305A CN 202180037447 A CN202180037447 A CN 202180037447A CN 115701305 A CN115701305 A CN 115701305A
Authority
CN
China
Prior art keywords
shadow
objects
map
hit
camera
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
Application number
CN202180037447.4A
Other languages
English (en)
Inventor
R·吉利格
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Microsoft Technology Licensing LLC
Original Assignee
Microsoft Technology Licensing LLC
Priority date (The priority date 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 date listed.)
Filing date
Publication date
Application filed by Microsoft Technology Licensing LLC filed Critical Microsoft Technology Licensing LLC
Publication of CN115701305A publication Critical patent/CN115701305A/zh
Pending legal-status Critical Current

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06TIMAGE DATA PROCESSING OR GENERATION, IN GENERAL
    • G06T15/003D [Three Dimensional] image rendering
    • G06T15/04Texture mapping
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06TIMAGE DATA PROCESSING OR GENERATION, IN GENERAL
    • G06T15/003D [Three Dimensional] image rendering
    • G06T15/10Geometric effects
    • G06T15/40Hidden part removal
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06TIMAGE DATA PROCESSING OR GENERATION, IN GENERAL
    • G06T15/003D [Three Dimensional] image rendering
    • G06T15/10Geometric effects
    • G06T15/40Hidden part removal
    • G06T15/405Hidden part removal using Z-buffer
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06TIMAGE DATA PROCESSING OR GENERATION, IN GENERAL
    • G06T15/003D [Three Dimensional] image rendering
    • G06T15/50Lighting effects
    • G06T15/60Shadow generation
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06TIMAGE DATA PROCESSING OR GENERATION, IN GENERAL
    • G06T15/003D [Three Dimensional] image rendering
    • G06T15/50Lighting effects
    • G06T15/80Shading
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06TIMAGE DATA PROCESSING OR GENERATION, IN GENERAL
    • G06T2210/00Indexing scheme for image generation or computer graphics
    • G06T2210/36Level of detail
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06TIMAGE DATA PROCESSING OR GENERATION, IN GENERAL
    • G06T2215/00Indexing scheme for image rendering
    • G06T2215/12Shadow map, environment map

Landscapes

  • Engineering & Computer Science (AREA)
  • Physics & Mathematics (AREA)
  • Computer Graphics (AREA)
  • General Physics & Mathematics (AREA)
  • Theoretical Computer Science (AREA)
  • Geometry (AREA)
  • Image Generation (AREA)

Abstract

本概念涉及在渲染3D计算机图形虚拟世界时的阴影筛选。深度缓冲可从相机的视角被渲染,并且深度缓冲可用于生成命中图,该命中图可用于确定所述世界中的哪些对象将需要阴影测试。当阴影图是通过从光的角度渲染多个级联而生成的,而不是将特定级联中的所有对象都包括到阴影图中时,将检查命中图中对应于对象的像素,以确定是否需要对该对象进行阴影测试。如果对象不会对主场景有所贡献,则从阴影图中排除该对象,从而节省GPU处理资源。

Description

阴影筛选
背景技术
显示三维(“3D”)计算机图形可能是处理器密集型任务,尤其是在虚拟3D世界包括许多需要渲染阴影的对象的情况下。
附图说明
附图解说了本概念的实现。所例示的实现的特征可通过参考以下结合附图的描述来更容易地理解。所例示的实现的特征可通过参考以下结合附图的描述来更容易地理解。这些附图不一定是按比例绘制。在附图中,附图标记中最左边的数字标识该附图标记首次出现的附图。在说明书和附图的不同实例中使用类似的附图标记可指示类似或相同的项目。
图1示出了与本概念一致的示例世界的俯视图。
图2示出了符合本概念的示例世界的相机视图。
图3示出了符合本概念的示例命中图。
图4示出了符合本概念的示例世界的相机视图。
图5示出了符合本概念的示例命中图。
图6示出了图示与本概念一致的示例阴影筛选方法的流程图。
图7示出了符合本概念的示例计算机的框图。
具体实施方式
本概念涉及用于渲染3D计算机图形的改进处理。这些概念包括阴影筛选(shadowculling)技术,该技术节省了对可能对可视场景没有贡献的对象的潜在不必要的计算的处理。
假设一个简单的虚拟世界包括地面和树以及阳光。在显示屏上向用户渲染场景的传统方式是使用地面和树的基色来渲染照明,这被称为漫射照明,不存在任何阴影。也就是说,对象(例如,地面和树)的颜色被渲染而没有遮蔽或阴影。然后,为了渲染阴影,可以确定屏幕上的逻辑点是否处于阴影中。
进行这些确定的传统方法是将场景中对象的深度从太阳的视角渲染到深度纹理中。例如,如果太阳在世界的最顶端(即正午),从太阳的视角来看,从顶部看到的树的视图是可见的。深度纹理中的这些深度表示从太阳视角来看被填充或遮挡的最近点。
当使用纹理存储器从相机的视角(即,从显示屏的用户视角)渲染世界的场景时,可以从太阳的视角映射树下的点,并且可以将从树下的点到太阳的距离与存储在深度纹理中的在太阳的视角下的距离进行比较。如果存储在深度纹理中的距离小于太阳视角下的点的距离,则该点处于阴影中。由于深度纹理存储了离太阳最近的距离(即阳光照射到的第一个点),在离太阳的距离比深度纹理中存储的距离更远的点就处于阴影中。
执行这些用于确定点是否在整个场景的阴影中的这些传统技术可能非常慢。而且,特别是归因于投影走样(projected aliasing),所得到的阴影可能是不令人满意的,其中所渲染的阴影看起来是像素化、方形、参差不齐或锯齿状由于内存限制和阴影渲染的处理密集型特性,简单地增加阴影的分辨率通常是不可行的。例如,像大城市这样的大规模场景可以包含许多对象。为所有这些对象计算离太阳的距离可能会超出图形处理单元(“GPU”)的处理能力。
级联阴影图(“CSM”)是一种方案,该方案通过将世界中的对象分组为多个级联,并在观察者附近提供较高分辨率的深度纹理,而在远处提供较低分辨率,从而有助于缓解走样问题。因此,CSM可以为靠近观察者的对象提供高质量的阴影,这是质量最重要的地方,而较远的对象可以具有较低质量的阴影,这是质量不太重要且不引人注意的地方。CSM可以包括将第一级联中的最靠近相机的第一对象集渲染到深度纹理。然后,下一级联中的离相机较远的下一对象集可以被映射到另一深度纹理。对于后续级联中离相机更远的对象,可以重复该过程。
上述过程可以由中央处理单元(“CPU”)来执行。为了针对主视图渲染对象,CPU可以命令GPU从特定视点以特定颜色渲染对象。从太阳的视角渲染深度可以被类似地执行。CPU可以命令GPU渲染该对象,并渲染另一个对象,等等。因此,对于具有许多对象的非常大的场景,CPU可以命令GPU渲染漫射照明,并随后渲染所有级联的深度。因此,在有四个级联的实例中,CPU可能会命令GPU渲染一个对象五次,这可能会增加大量从CPU到GPU的绘制调用。这些传统上由CPU执行的过程可以由GPU执行,因为如果CPU将对象的位置发送到GPU,那么,GPU可以确定哪些对象从特定的视点是可见的。
对于CSM中的阴影筛选,可以对每个对象和每个级联执行可见性测试。这些可见性测试通常在CPU上执行并且针对每个级联独立地执行,并且因此计算的结果不能在贯穿多个级联的各遍之间被重复使用。此外,由于计算是在CPU上执行的,结果可能会从CPU发送到GPU,这是非常耗时的,并且可能会成为瓶颈。此外,结果往往非常保守(即,过度包含),并且可能包括许多对在各遍阴影采样期间取得的任何样本都不会有贡献的对象。
存在基于GPU的筛选技术,但它们通常用于主场景筛选。例如,分层Z缓冲(“HZB”)筛选技术使用深度缓冲来生成深度mip图金字塔,以有效地筛选出可能被遮挡的对象。multum in parvo图(或“mip图”)可以存储同一图像的分辨率逐渐降低的多个表示,这对于在远距离以陡峭角度渲染对象时提高速度和减少走样特别有用。然而,将这种技术应用于CSM将需要为每个级联存储和生成HZB缓冲,这在存储器方面是禁止的。在基于GPU的渲染器中,一个主要目标是减少操作的CPU使用率,如可见性测试、视锥测试等。然而,对于使用CSM的阴影投射对象来说,这样做是有挑战性的。
因此,与本发明的概念一致,命中图可以通过让GPU执行上述过程以及通过为所有级联存储一个命中图来克服其他技术的缺点。因为可以将场景深度投影到阴影空间中,所以每个级联的所得到的可见对象集可以表示实际将产生阴影样本的最小集合。
与本概念一致,可以创建命中图,该命中图指示屏幕的哪些部分将实际上针对阴影进行测试。使用该命中图,GPU可以立即直接为所有级联确定是否需要渲染对象。此外,因为这些信息可以保存在图形卡上,所以性能会大大提高。从CPU到GPU的通信可能会更少。在本概念的一个实现中,CPU可以向图形卡发送对象列表(如果对象不移动,这可以一次完成),并且随后GPU可以执行处理以渲染这些对象,其中该处理可以包括生成和使用命中图。
在GPU上执行这些过程至少有两个好处。首先,与CPU相比,GPU可以执行更高级的并行处理。例如,如果虚拟世界有一千棵树,CPU可以一个接一个地确定每棵树是否可见,而图形卡可以并行地做出这些确定,例如一次以64棵树为一组。因此,GPU的并行处理可以更快。第二,另一个好处是信息留在图形卡上,图形卡可以有自己的存储器。从CPU到GPU的数据传输通常非常耗时,因为数据可能需要很长时间才能传输,而且将存储器中的数据复制到易于访问的位置也需要很长时间。因此,将信息保存在图形卡上对性能有所帮助。
图1示出了符合本概念的示例世界100的俯视图。在该示例中,世界100可以是包含虚拟3D对象的虚拟3D计算机图形世界,包括两排立方体102和墙壁104。(参考图2的世界100的透视图。)世界100中的对象还可以包括地板,立方体102放置在地板上,墙壁104站立在地板上。图1中没有画出地板,因为该图显示的是俯视图。
图1示出了相机106,其指示用户和/或显示屏的位置和观察方向。相机106示出了图2中所示的世界100的示例相机视图(也称为主视图)。相机106不是在世界100中将被显示的对象。
图1还示出了光108(由灯泡符号表示)和光方向110(由箭头符号表示)。这些不是在世界100中将被显示的对象。光108可以是在世界100中具有一位置的任何类型的点光(也称为聚光点),或者光108可以是在世界100中没有位置但具有方向的定向光。例如,光108可以通过具有方向但没有位置来模拟阳光。此外,定位非常远的点光源可以模拟或近似定向光。在该示例中,将使用在由光方向110指示的方向上的定向光来渲染世界100。
图2示出了符合本概念的世界100的示例相机视图。如图2所示,源自相机106的透视图包括地板201、墙壁104和两排立方体102,它们的一部分被隐藏在墙壁104后面且在更靠近相机106的其他立方体102后面而观看不到。图2还包括阴影202,包括由墙壁104投射的墙壁阴影202(1)和由立方体102投射的立方体阴影202(2)。阴影202投射在光方向110上。框架立方体204示出了隐藏在墙壁104后面并且从相机106处不可见的立方体102之一的位置。将参照图3解释框架立方体204。
图2可以表示可以在显示屏上向用户显示的世界100的视图。在本概念的一个实现中,为了渲染世界100以供显示,CPU可以向GPU发送所有对象(例如,立方体102和墙壁104)的位置列表,并命令GPU从相机106的特定视点渲染世界100(或渲染所有对象)。假设GPU已经具有对象的3D模型形状,GPU现在具有所有对象的位置,并且因此可以使用对象的基色从相机106的视角渲染那些对象。为此,GPU可以确定世界100的哪些部分(世界100中的哪些对象)从相机106的视点来看是可见的,并且还可以确定世界100的哪些部分是否在阴影中。
回头参考图1,在一个实现中,视图平截锥体112(也称为相机平截锥体)可以被定义为来自相机106透视视场,其包括世界100的可以出现在显示屏上的区域。视图平截锥体112可以包括近平面114和/或可以包括远平面116。与本概念一致,视图平截锥体112可被分成两个或更多个子平截锥体118(也称为级联)。在图1所示的示例中,视图平截锥体112已被分成三个子平截锥体118——近平截锥体118(1)、中间平截锥体118(2)和远平截锥体118(3)——但其他数量的子平截锥体118也是可能的。
子平截锥体118的数量和它们覆盖的沿z轴的距离(即,分离的位置)可以是任意的。有许多技术用于将视图平截锥体112划分成多个子平截锥体118。一种用于分割视图平截锥体112的技术可以是在坐标轴方向(相机106的观察方向)上计算从0%到100%的间隔。这些间隔中的每一个可以表示相邻子平截锥体118之间的近/远平面边界。分割可以手动设置。替代地,可以使用公式来划分视图平截锥体112。作为另一种选择,分割的位置可以取决于场景。
例如,近平面114位于1个单位,远平面116位于1000个单位(可以使用任何单位,例如像素、米、百分比等),近平截锥体118(1)可以覆盖1-20个单元,中间平截锥体118(2)可以覆盖20-80个单元,而远平截锥体118(3)可以覆盖80-400个单元。在该示例中,离相机106非常远(即,超过400个单位)的对象将不具有任何阴影,因为无论如何这种细节对于用户来说都不会非常明显。例如,在图2所示的透视图中,只有前四对立方体102有阴影,而较远的较小立方体没有任何阴影。因此,子平截锥体118可能不会覆盖沿着视图平截锥体112的z轴从其近平面114到远平面116的整个范围。
因为将要为子平截锥体118生成的阴影图可以是相同的大小,并且子平截锥体118倾向于靠近相机106较小而远离相机106则较大,所以近平截锥体118(1)中的阴影可以比远平截锥体118(3)中的阴影具有更高的分辨率和质量。因此,靠近用户的阴影可能比远离用户的阴影具有更高的分辨率和质量。这种技术提供了计算资源的改进分配,因为远处的对象倾向于投射占据较小屏幕空间的阴影,而靠近相机106的对象倾向于投射占据较大屏幕空间的阴影。
图3示出了为图1和图2所示的世界100生成的示例命中地图300,其与本发明的概念一致。深度缓冲可通过渲染世界100的在从相机的视角可见的视图平截锥体112中的部分的深度来生成。因此,深度缓冲可以存储从相机106的视角可见的像素距相机106的距离(深度值)。深度缓冲可被存储为纹理图像。
深度缓冲可用于生成命中图300。命中图300可以通过使用每个级联的世界到阴影的矩阵将每个像素从主场景的深度缓冲(离相机106的距离)投影到阴影图空间来生成。GPU可能已经知道世界到阴影的矩阵。世界到阴影的矩阵可以将世界100的3D世界坐标变换成用于命中图300的二维(“2D”)世界坐标。世界到阴影的矩阵可用于从相机106的视角渲染对象的深度。可以使用世界到阴影的矩阵将从相机106可见的场景中的所有最近像素的深度投影到命中图300的2D空间中,该空间在图3所示的命中图300中由白色像素表示。
除了存储深度值之外,命中图300的每个像素还可以包含零值(在图3中用黑色像素示出,如果没有从其获取样本的话),或者包含指示哪个级联将对像素进行采样的掩码。因此,命中图300不仅可以指示每个阴影图像素是否将在这遍阴影采样期间被采样,还可以指示哪些级联将对该像素进行采样。
命中图300可以作为纹理图像被保存在图形卡的存储器中。出于说明的目的,图3中的命中图300的示例纹理图像仅示出了白色像素,但是命中图300可以包括对应于多个级联的多种颜色。
在一个实现中,命中图300可以被一次生成,并且它可以覆盖所有多个级联。例如,对应于近子平截锥体118(1)的近级联可以被分配一种颜色,对应于中间子平截锥体118(2)的中间级联可以被分配不同的颜色,而对应于远子平截锥体118(3)的远级联可以被分配另一种颜色。稍后,当使用命中图300来生成每个级联的阴影图时,可以仅渲染每个级联内的对象。通过对多个级联使用不同的颜色来生成命中图300,可以查询命中图300,并且可以从命中图300中一次采样对应于对象的位置的像素以确定对象是哪个级联的部分。
生成命中图300可能只花费整个帧时间的一小部分。通过在帧开始时生成命中图300一遍,命中图300可以随后被用于直接在GPU上筛选不同的对象集。此外,因为命中图300立刻包含了所有级联的结果,所以命中图300可以通过在将每个对象的边界框投影到阴影图空间中之后对命中图300进行采样以在GPU上实现非常高效的阴影筛选。
与本概念一致,图3所示的该示例中的命中图300包括世界100的对应部分的许多黑色像素,这些部分对于从相机106的视角渲染场景来说没有任何贡献,因为世界100的所述部分被隐藏在墙壁104后面并且隐藏在立方体102后面,因此不被相机106看到。因此,不可见的对象(在墙104和/或立方体102后面)可以不被用于测试阴影。这样做将会浪费处理资源。命中图300中的白色像素对应于世界100的应当被测试以确定它们是否在阴影中的部分。
与本概念一致,命中图300指示是否应该执行影子测试。命中图300没有直接指示像素是否实际处于阴影中。在基于命中图300确定应该执行阴影测试之后,可以稍后执行阴影测试本身。
为了能够确定一个点是否在阴影中,可以从光108的视角为每个级联渲染阴影图。在图1所示的例子中,有三个级联。最后一个级联(即,远子平截锥体118(3))可能不会延伸到视图平截锥体的远平面116。为了使GPU能够确定哪些对象在每个级联内并且因此应该从光108的视角被渲染到当前级联的阴影图上,GPU可以确定特定对象是否在对应于当前级联的当前子平截锥体118内。
与本概念一致,可以为子平截锥体118确定正交投影立方体120(也称为光视图投影)。正交投影立方体120可以被定义为包围子平截锥体118并且沿着光方向110定向的最小边界框(即,正交投影立方体120的边平行于或垂直于光方向110)。
在一个实现中,子立方体118的顶点的坐标可用于计算正交投影立方体120。在图1的示例中,可以为近平截锥体118(1)、中间平截锥体118(2)和远平截锥体118(3)分别定义近正交投影立方体120(1)、中正交投影立方体120(2)和远正交投影立方体120(3)。这三个正交投影立方体120可用于将每个子平截锥体118渲染成不同的阴影图。
与本概念一致,可以为每个子平截锥体118渲染阴影图。在图1所示的例子中,可以使用三个正交投影立方体120为三个子平截锥体118创建三个阴影图。
传统上,世界100的由正交投影立方体120定义的一部分的快照是通过从光108的视点(而不是从相机106的视点)渲染深度以生成阴影图来获取的。该常规步骤可以检查世界100中的哪些对象在当前级联(或当前子平截锥体118)内,并且可以筛选出当前级联之外的对象。然而,这种传统的筛选可能是不够的,因为当前级联中的对象集可能仍然包括可能实际上没有将任何阴影投射到场景上的对象。
因此,与本发明的概念一致,可以通过检查命中图300来执行额外的筛选,以确定级联内部的对象是否实际上将阴影投射到场景上。对于当前级联中的每个对象,对照当前级联的命中图300中的相应坐标来检查包围该对象的边界框的坐标。如果对象的命中图300中的所有像素都具有零值(在图3中由黑色像素表示),则该对象可以从阴影图中排除,从而减少GPU的处理资源并加速渲染过程。如果该对象的命中图300中的任何像素具有为当前级联设置的掩码位(在图3中由白色像素表示),则该对象可以被包括在阴影图中,使得该对象可以稍后被测试以确定它的任何部分是否将阴影投射到场景上。这个筛选过程可以对每个级联重复进行。
在一个实现中,当每次一个级联地渲染阴影图时,可以参考命中图300。命中图可以包含位掩码,例如,四个位用于四个级联,一个位用于每个级联。例如,如果为特定像素设置级联#1的位#1,则在那里将有阴影测试。因此,图3所示的命中图300中的黑色像素指示没有级联位被设置,因此阴影测试是不必要的。
图3中所示的命中图300中的白色像素指示至少一个级联位被设置,并且根据哪些级联位被设置,应该在一个或多个级联中执行阴影测试。例如,如果命中图300中的像素设置了级联位#1、#2和#3,但是没有设置级联位#4,则对应于该像素的位置中的对象对于级联#1、#2和#3是有用的,但是对于级联#4是无用的。
因此,本概念可以提供阴影筛选。一般来说,筛选是确定一个对象是否被需要的过程。基本筛选的一个例子是平截锥体筛选,它与阴影无关,其中测试每个对象以确定它是否在视图平截锥体112内。如果平截锥体筛选由CPU执行,则不在视图平截锥体112内的对象可以被筛选出,并且不被CPU发送到GPU进行渲染。
本概念提供了阴影筛选,除了阴影之外,其在原理上类似于平截锥体筛选。可以使用每个级联的命中图300来执行额外的筛选测试,使得通过筛选出将不用于阴影测试的某些对象,需要将更少的对象渲染到阴影图中。
作为说明,假设从相机106的角度来看,有一个完全隐藏在大立方体后面的小立方体。使用世界到阴影的矩阵将小立方体周围的边界框的坐标转换成命中图300中的坐标。如果命中图300中的坐标覆盖任何白色像素,则小立方体(或其至少一部分)可以将阴影投射到场景上,并且因此小立方体应该被渲染到阴影图。因此,稍后可以对小立方体执行阴影测试。
因此,阴影图可以存储从光108的角度来看的场景的深度(即,离光108最近的距离)。存储深度值的阴影图可以称为深度图。在一个实现中,组合的视图和投影矩阵可被用作阴影变换来将世界100的模型渲染到阴影图中。可以对每个正交投影立方体120重复该过程,以生成多个阴影图,每个子平截锥体118或级联生成一个阴影图。
在一个实现中,每个阴影图可以被存储为纹理图像。因此,阴影图也可以被称为阴影纹理或深度纹理。每个阴影图可以具有相同的大小(例如,1024×1024、2048×2048或4096×4096)。因此,近平截锥体118(1)的阴影图可以比远平截锥体118(3)的阴影图具有更高的分辨率,因为近平截锥体118(1)往往比远平截锥体118(3)的尺寸更小。空像素着色器可用于生成阴影图,因为只需要深度而像素颜色是不必要的。阴影图可以覆盖世界100的从相机106的视角可见的部分,因为正交投影立方体120包围构成视图平截锥体112的子平截锥体118。
与本概念相一致,通过使用命中图300来检查并另外筛选出不会对场景有贡献的对象,GPU可以更高效且快速地生成阴影图。如上所述,命中图300可用于确定哪些对象将潜在地对场景贡献任何阴影,并因此用于筛选出不具有为场景贡献任何阴影的潜力的对象。基于命中图300通过该筛选测试的所有对象可以用于从光108的视角为所有级联渲染阴影图。然后,级联的阴影图可用于确定主视图中的像素是否在阴影中。
当光方向110不同于相机106的方向时,从相机106的视角来看隐藏的对象在从光108的视角来看时可能并不会隐藏,因此仍然投射出相机106可见的阴影(例如,侧面)。这样的对象可以由GPU渲染,使得它们的阴影可以被渲染到场景中。
当生成阴影图时,对象的筛选可以考虑从相机106可见但由对相机106隐藏的对象投射的这种阴影。因为来自场景的深度空间被映射到阴影空间,所以如果在相机的视野中隐藏起来的对象可以投射从相机106可见的阴影,则命中图300可以具有该对象的白色像素,从而在该位置引起阴影测试。这考虑了命中图300中黑色区域内的白色像素,该黑色区域表示在相机106的视野中隐藏起来的在墙104之后和立方体102之后的区域。
例如,图2中的框架立方体204可以隐藏在墙壁104之后,不被相机106看到。然而,当图2中的帧立方体204的世界坐标作为投影帧立方体302被投影到图3中的命中图300中时,投影帧立方体302可能与命中图300中的白色像素重叠。因此,框架立方体204(尽管对相机106隐藏)可能在从相机106可见的场景(如图2所示)上投射阴影。因此,框架立方体204通过筛选测试,并因此被渲染到阴影图中,该阴影图随后将被用于实际的阴影测试。如上所述,虽然在图3中只是白色,但命中图300中的白色像素可以包含关于哪个(哪些)级联将查询该像素的数据,从而可以快速确定框架立方体204是否是特定级联的部分。
在已经为所有级联生成阴影图之后,可以通过渲染场景从相机106的视角向用户显示世界100(如图2所示)。此外,三个阴影图可以用于确定场景中的哪些像素处于阴影中或者不处于阴影中。
在一个实现中,对于每个像素,可以对照三个阴影图的深度范围来检查从相机106的视角来看的像素的深度,以确定该像素落入哪个阴影图中。因为对于多个级联存在有多个阴影图,所以可以选择合适的阴影图来确定像素是否在阴影中。然后,来自光108的视角的像素的深度可以与存储在阴影图中的在对应于该像素位置的坐标处的深度值进行比较。如果从光108的角度来看的像素的深度大于存储在阴影图中的深度值,则该像素处于阴影中(要么因为该像素被更靠近光108的另一个对象遮挡,要么因为该像素背向光108),并且该像素的颜色可以变暗。
因为阴影图包含从太阳视角到最近像素的距离,所以阴影图可用于测试像素是否在阴影中。例如,可以测试地板201上的像素,以确定该像素是否处于阴影中。像素的坐标可以从世界空间转换到阴影空间,以获得阴影图中的坐标。如果从像素到光108的距离大于存储在阴影图中的该坐标处的深度值,则对象阻挡了来自处于阴影中的像素的光108。因此,像素位置处的地板201的颜色可以变暗,以显示其处于阴影中。
如上所述,阴影图用于执行阴影测试。因此,阴影图应该包含所有可能在场景中投射阴影的对象。但是,阴影图不需要浪费地包含不需要阴影测试的对象。
在一个实现中,对于场景中的每个像素,可以参考合适的阴影图来确定该像素是否在阴影中。首先,可以确定该像素的合适的阴影图。有许多方法来进行这种确定。例如,可以基于从像素到相机106的距离来确定合适的阴影图。或者,可基于对应于像素坐标的纹理坐标来确定合适的阴影图。
然后,将从像素到光108的距离与存储在阴影图中的在计算的坐标下的深度进行比较。这种比较确定像素是否在阴影中。如果从像素到光108的距离高于从阴影图采样的深度值,则该像素处于阴影中,并且存在比该像素更靠近光108的遮挡对象。如果该像素在阴影中,像素颜色(或漫射值)可以变暗。
参考图4和图5,将使用另一个3D虚拟世界示例来进一步说明本概念。图4示出了与本概念一致的另一示例世界400的相机视图。在该示例中,世界400可以是包括地面402和树木404的虚拟森林。图4所示的世界400的描绘可以是可以在显示屏上被渲染给用户的透视图。场景中的光可以由来自右上角的阳光模拟。图4可以包括一棵树的大树干406,不一定是因为这棵树实际上比其他树404更大,而是因为由于大树干406更靠近相机而显得更大。因此,森林包括隐藏在大树干406之后并且因此在相机的透视图中不可见的许多树404。
可以基于相机的位置和方向来定义相机的视图平截锥体。相机视图平截锥体可以定义世界400的哪一部分从相机的透视图中是可见的。然后,可以选择多个级联。并且,相机视图平截锥体可以基于所选择的级联数量被分割成多个子平截锥体。子平截锥体可以扩展相机视图平截锥体的整个z方向范围。或者,最远子平截锥体的远平面可以比相机视图平截锥体的远平面更靠近相机,使得世界400中的在最远子平截锥体的远平面之外的对象可能没有任何阴影。这种细节的缺乏对于用户来说应该不是很明显的。
与本概念一致,可以通过从相机的视角渲染场景、获取场景的深度缓冲并存储每个像素离相机的距离来创建命中图。也就是说,可以使用世界到阴影的矩阵将从相机可见的所有像素的3D世界位置变换成命中图中的2D位置。来自场景的深度缓冲(从相机到每个像素的距离)可以被转换成命中图。
图5示出了可以使用世界400生成的示例命中图500,其符合本概念。命中图500中的白色像素可以是世界400中的对象的已经被变换成命中图500中的2D位置的3D位置。因此,命中图500中的白色像素示出了应该在世界400中的哪里执行阴影测试。命中图500中的白色像素可以以圆锥(或金字塔)形状散开,类似于相机视图平截锥体的形状,因为命中图500是从相机的视角生成的,其中相机的位置靠近命中图500的底部中心。此外,命中图500可包括底部附近的许多白色像素,因为在图4中的主视图的底部附近有靠近相机的阴影。
因此,命中图500中的黑色像素可以表示世界400的将不执行阴影测试的部分,因为这些部分可能对图4中的主场景没有任何贡献。命中图500中的这些黑色像素允许节省处理资源。
因为大树干406隐藏了在大树干406之后的树404中的一些和地面402的一部分,所以命中图500可以包括在大部分是白色像素的金字塔形区域内的大部分是黑色像素的楔形区域。在图4所示的相机视图中,大树干406之后的任何对象可以不被阴影测试以确定它是否在阴影中。因此,GPU可能不会将这样的对象渲染到阴影图。因此,这样的对象将是命中图500中黑色像素的楔形的一部分。因此,与本发明的概念一致,命中图500可以允许筛选出对场景没有贡献的对象(世界400的部分)。例如,大树干之后的地面可能不需要阴影测试,因为那些地面像素不会出现在主场景上。
在生成阴影图之前生成命中图500可以允许将不为主场景做出任何贡献的许多对象(例如,隐藏在大树干406之后的树木404)从阴影图中省略掉。这些对象可以从阴影图中省略,因为大树干406之后的像素不需要阴影测试来确定它们是否在阴影中。因此,阴影图在对应于命中图500中的黑色像素的楔形的坐标中将没有任何东西。
然而,命中图500中的黑色楔形可以包括一些白色像素。即使大树干406可能从相机的视野来看阻挡了其后面的对象,这些隐藏的对象中的一些仍然可以将阴影投射到从相机可见的主场景上。因此,这些像素是白色的,并可以执行阴影测试。
与本发明的概念一致,阴影测试(确定像素是否在阴影中)是与命中图测试(筛选出可以不执行阴影测试的对象)不同的测试。命中图500可以确定是否应该执行阴影测试,但是确定像素是否处于阴影中的实际阴影测试本身可以稍后执行。
与本发明的概念一致,可以从太阳的视角为每个级联渲染阴影图。在一个实现中,当每次为每个级联生成阴影图时,可以使用包围相应子平截锥体的多个正交投影边界框来确定世界400中的哪些对象是当前级联的一部分。
一旦确定了作为当前级联的一部分的对象集,与本概念一致,不是将所有那些对象投影到阴影图中,而是可以检查命中图500以确定那些对象是否将潜在地对场景贡献任何阴影。这种对场景没有任何贡献的对象的额外阴影筛选节省了GPU处理。
例如,为了确定大树干406之后的树404应该被包括在阴影图中还是从阴影图中排除,可以使用世界到阴影的矩阵将该树404的边界框的所有八个顶点的3D坐标变换成阴影空间坐标。这种变换产生了八个2D坐标。可以在命中图500上检查这八个2D坐标。如果命中图500中的所有八个2D坐标都具有黑色像素,则树404将不为主场景做出贡献,并且可以从阴影图中排除。如果命中图500中的八个2D坐标中的任意坐标具有白色像素,则从太阳方向投影的树404的边界框从主视图来看是可见的,并且树404可以被包括在阴影图中。在这个阶段,已经确定边界框的某个部分可能投射可见的阴影,但是确定树404的哪个部分(例如,树叶、树枝、树干等)实际上投下了一个可见的阴影,将在之后进行。
如果基于命中图500确定对象需要阴影测试,则该对象可用于为当前级联从太阳的视角渲染阴影图(或深度缓冲)。可以对每个级联重复该过程,以生成多个级联的多个阴影图。
在该示例中,因为大树干406在其后面隐藏了许多对象,所以命中图500包括在楔形中的许多黑色像素。因此,世界400在大树干406之后的部分可能不需要阴影测试。因此,GPU可能不会测试大树干406之后的所有对象是否实际上都处于阴影中。GPU可以跳过所有黑色像素的阴影测试,因为它们不会在场景中产生阴影。因为可以使用命中图500来做出该确定,所以通过不必渲染那些对象来降低GPU处理要求。即使从太阳视角可见的大树干406之后的那些对象传统上将在阴影图中被渲染,与本概念一致,GPU将跳过将那些对象渲染到阴影图中,因为阴影图中的那些像素稍后在主场景被渲染时将不会被查询。
在生成阴影图之后,可以在显示屏上渲染世界400的主场景。阴影图可用于确定主视图中的像素是否在阴影中。对于被渲染的每个像素,选择相应的阴影图,对阴影图中的相关坐标进行采样,以比较存储在阴影图中的深度值和从像素到太阳的距离,并且基于该比较,可以确定像素是否处于阴影中。
与本概念一致,命中图500允许对对象的额外筛选,这可以节省处理需求。如果大树干406从世界400中移除,使得大树干406之后的许多树和地面现在可见,则命中图500中的黑色像素的楔形将被白色像素替换,这将需要更多的阴影测试。
使用命中图500,与本概念一致,隐藏在大树干406之后的地面402的大部分和许多树404可以不包括在阴影地图中,并且可以不进行阴影测试。因此,本概念提供了阴影筛选和优化有限的GPU资源。节省GPU的处理资源是一个优势。这里,创建命中图500可以被快速执行,并且命中图500允许GPU跳过对不会对场景上可见的任何事物有贡献的对象执行的处理。
图6示出了图示与本概念一致的示例阴影筛选方法600的流程图。阴影筛选方法600可被执行以经由显示屏向用户显示虚拟3D计算机图形世界,诸如世界100和世界400。
在动作602,可以接收渲染世界以供显示的命令。该命令可以包括和/或伴随有世界中的对象集、对象的3D形状模型、对象的位置、应该从其渲染世界的透视图的相机的位置和方向、以及光源的位置和/或方向的任意组合。
在动作604,可以从相机的视角定义视图平截锥体。视图平截锥体可以在相机的方向上从相机发散,并且定义相机的透视图。这样,视图平截锥体内的对象可以被渲染为对用户可见,而视图平截锥体外的对象可能不被渲染,因为它们对用户不可见。
在动作606中,与本概念一致,可以定义多个级联。例如,在一个实现中,可以定义三个级联,从靠近相机的z轴距离开始,并且在z方向上逐渐远离相机并置。可选地,可以定义其他数量的级联(例如,两个、四个、五个、六个等等)。
在一些实现中,级联可以分割整个视图平截锥体。在其他实施方式中,最远的级联的终点可以比视图平截锥体的远平面更靠近相机。在一个实现中,级联可以通过将视图平截锥体(或其一部分)分割成多个子平截锥体来定义。可以用许多不同的方式来选择子平截锥体之间边界的位置。
在动作608,可以为所有级联生成命中图。与本概念一致,一个命中图可以通过从相机的视角渲染场景的深度缓冲(即,从世界中的像素到相机的距离)来生成。对于世界上的被变换成命中图中的像素的每个点,命中图可以为该像素存储掩码,对于与该点相关联的级联,该掩码将级联位设置为1。
在动作610,可以使用命中图为级联生成阴影图。首先,对于每个级联,可以确定当前级联中的一对象集,从而筛选并移除所有其他对象。在一个实施方式中,可以使用与和当前级联相关联的子平截锥体紧密配合的正交投影立方体来确定哪些对象在当前级联内部,哪些对象在当前级联外部。
第二,可以检查命中图以确定当前级联中的对象是否需要阴影测试。在一个实现中,对于当前级联中的每个对象,可以使用世界到阴影的矩阵将对象周围的边界框的3D世界空间坐标变换成2D阴影图空间坐标。然后,可以检查所计算的2D坐标处的命中图中的像素,以确定当前级联的级联位是否被设置。如果任何像素已被设置,则该对象可能被包含在阴影图中。如果没有设置任何像素,则可以从阴影图中排除该对象,因为该对象不会对场景产生影响或投射阴影。从阴影图中筛选并排除对象可以避免不必要的处理来渲染对场景没有任何贡献的对象。
在动作612,包括阴影的世界可以使用来自相机视角的阴影图来渲染以供显示。在一个实现中,当从相机的视角渲染世界场景时,对于每个像素,可以参考其z值(从像素到相机的距离)来确定要查找哪个阴影图。为了确定像素是否在阴影中,可以将来自太阳视角的像素深度与存储在阴影图中对应于该像素位置的位置处的深度值进行比较。如果像素的深度大于存储在阴影图中的深度值,则该像素处于阴影中。
尽管包括阴影筛选方法600在内的各种过程已被示出并描述为一系列动作,但这些过程不限于该序列的特定示例顺序。例如,一些动作可以以不同于这里描述的顺序发生。此外,一些动作可以与其他动作同时发生。此外,在一些情况下,可能不需要所有动作来实现这里描述的方法。
图7示出了符合本概念的示例计算机700的框图。计算机700可以执行阴影筛选方法600的全部或一部分。计算机700可以是包括能够执行指令的处理能力和存储能力的任何系统,例如,服务器、大型计算机、工作站、台式个人计算机(“PC”)、膝上型电脑、笔记本、平板电脑、智能手机、视频游戏控制台、电器、信息亭、汽车导航或娱乐系统、虚拟现实模拟器、小型机、手持设备、可编程电子设备等。尽管在图7中仅示出了一台计算机700,但是计算机700可以包括若干台计算机,例如,在数据中心中或者经由网络连接和/或由云计算服务提供的多台计算机。
计算机700可以包括用于执行指令的CPU 702,例如,实现这里描述的本发明概念的各个方面的机器可执行指令。尽管为了简单起见,在图7中仅示出了一个CPU 702,但是计算机700可以包括多个CPU 702。CPU 702可以是单处理器、多处理器、单核单元和/或多核单元。CPU 702可以执行处理以实现本概念,包括阴影筛选方法600的全部或部分。
计算机700可以包括用于存储数据的存储器704,所述数据包括程序、应用、操作系统和其他机器可执行指令。存储器704可以包括计算机可读存储介质,例如磁盘、光盘、固态驱动器、可移动存储器、外部存储器和/或闪存等。计算机可读存储介质可以是用于存储信息而不使用传播的信号的任何可用介质。存储器704可以存储用于实现本概念的指令和/或数据(例如,世界中的对象)。
计算机700可以包括随机存取存储器(RAM)706,用于从存储704加载活动数据、程序、应用、操作系统和/或其他机器可执行指令。RAM 706可以是易失性和/或非易失性存储器。CPU 702可以使用RAM 706来加载、访问和操纵用于实现本概念的指令和/或数据。
计算机700可以包括网络接口708,用于与一个或多个网络对接,以与其他计算机或设备(例如,联网的存储、联网的显示器等)通信)。.网络接口708可以包括用于连接到有线网络(例如,以太网)的有线网络接口,并且还可以包括用于连接到无线网络(例如,Wi-Fi、蓝牙、蜂窝等)的无线网络接口。.在一些实现中,计算机700可以使用网络接口708与其他计算机通信,以分布式方式实现本发明的全部或部分概念。
计算机700可以包括用于在显示屏上显示图形的图形卡710。图形卡可以连接到板载显示器或外部显示器,并且可以包括向显示器发送视频信号的接口。图形卡710可以包括用于执行与图形相关的指令的GPU 712。图形卡710还可以包括图形存储器714,用于存储与图形相关的指令和/或数据。
尽管图7仅示出了一个GPU 712,但是图形卡710可以包括多个GPU。GPU 712可以是单处理器、多处理器、单核单元和/或多核单元。包括GPU 712和图形存储器714的图形卡710可以实现本概念,包括阴影筛选方法600的全部或一部分。例如,与本概念一致,图形存储器714可以存储命中图。GPU 712和CPU 702可以相互通信,并且一起工作以实现本概念。
计算机700可以包括输入/输出(“I/O”)设备接口716,用于与一个或多个I/O设备对接,例如键盘、鼠标、跟踪板、扬声器、麦克风、打印机、扫描仪、传真机、照相机、红外遥控器、操纵杆、游戏手柄、指示笔、触摸屏等。用户可以使用这些输入设备中的一个或多个向计算机700提供输入,并使用这些输出设备中的一个或多个从计算机700接收输出。
计算机700可以包括总线718,其连接计算机700的各种组件,并为那些组件提供接口以在彼此之间通信和传输数据。总线718还可以连接到组件内部的其他总线,例如RAM706内部的存储器总线,和/或连接到外部外围总线,用于与外部外围设备对接,例如外围组件互连(“PCI”)组件。例如,I/O设备接口716可以包括并行端口、串行端口、游戏端口、通用串行总线(“USB”)端口等。
图7所示的计算机700仅仅是一个例子。计算机700的许多其他配置是可能的。计算机700中组件的数量和类型可以变化。多台计算机可以一起使用。
在本概念的一个示例实现中,包括阴影筛选方法600在内的上述技术可由使用DirectX上的计算着色器(Compute Shader)的代码来实现,DirectX是可用于渲染3D图形的应用编程接口(“API”)。在这个例子中,代码可以用高级着色语言(“HLSL”)编写。计算着色器可用于在GPU上运行代码,该代码不仅仅是图形代码。因此,在计算着色器中编写的代码可以在视频游戏控制台或PC上运行。或者,本发明的概念可以通过使用OpenGL的计算着色器的代码来实现,OpenGL是DirectX的替代API。
作为示例,游戏开发者或游戏引擎开发者可以用HLSL代码对与本概念一致的阴影筛选技术进行编程,以使用DirectX API。图形卡制造商可能会提供支持DirectX API的图形驱动程序。因此,HLSL可以被转换成GPU理解的语言,并且可以由GPU运行。因此,阴影筛选可以在GPU内部执行。
本概念不限于这里描述的具体实现。例如,可见性测试和平截锥体测试可以由CPU执行,或者替换地由GPU执行。这里描述的其他动作可以由CPU或GPU执行。一般来说,使用能够执行并行处理的GPU来执行某些任务可能比使用CPU更有利。
在上文中描述了各个示例。附加的示例在下文中描述。一个示例包括存储指令的计算机可读存储介质,所述指令在被处理器执行时使处理器:接收显示对象集的命令,生成指示将对其执行阴影测试的第一对象子集的命中图,为多个级联生成多个阴影图,所述阴影图基于命中图排除第二对象子集,以及基于阴影图从相机视图渲染该对象集和阴影。
另一示例可包括以上和/或以下示例中的任何一个,其中生成命中图包括从相机视图渲染该对象集的深度缓冲。
另一示例可包括以上和/或以下示例中的任何一个,其中生成命中图还包括使用世界到阴影的矩阵将深度缓冲中的像素投影到阴影图空间中。
另一示例可包括以上和/或以下示例中的任何一个,其中命中图包括像素并存储包括用于每个像素的级联位的掩码。
另一个例子可以包括上面和/或下面例子中的任何一个,其中生成阴影图包括基于命中图筛选对象集,以确定该对象集中的哪些对象要包括在阴影图中或要从阴影图中排除。
另一示例可包括以上和/或以下示例中的任一个,其中筛选该对象集包括将围绕该对象集的边界框投影到阴影图空间中,并在投影的边界框的顶点处对命中图进行采样。
另一示例可包括以上和/或以下示例中的任何一个,其中筛选对象集包括响应于对命中图进行采样而将第一对象子集包括在阴影图中。
另一示例可包括以上和/或以下示例中的任何一个,其中筛选该对象集包括响应于对命中图进行采样而从阴影图中排除第二对象子集。
另一个例子包括一种系统,该系统包括处理器和存储指令的存储器,当由处理器执行指令时,使处理器:接收对象集的位置,生成包括像素和是否将对像素执行阴影测试的指示的命中图,通过从光的视角渲染该对象集来生成阴影图,所述阴影图基于命中图排除将不执行阴影测试的对象子集,并且从相机视角渲染该对象集,所述阴影图用于确定该对象集的哪些像素处于阴影中。
另一个例子可以包括以上和/或以下例子中的任何一个,其中命中图中的指示是该命中图中的包括用于每个像素的级联位的掩码。
另一个例子可以包括以上和/或以下例子中的任意个,其中级联位确定是将该对象集包括在阴影图中还是从阴影图中排除该对象集。
另一示例包括一种方法,该方法包括接收一对象集,定义多个级联,以及通过从相机视角渲染该对象集的深度来生成命中图,该命中图存储将针对多个级联中的哪些级联对哪些像素进行采样的指示。该方法还包括通过基于命中图从光的视角渲染第一对象子集来生成对应于多个级联的多个阴影图,该多个阴影图排除不在第一对象子集中的第二对象子集,从相机视角渲染该对象集以供显示,以及基于该多个阴影图对处于阴影中的像素集进行着色。
另一个例子可以包括以上和/或以下例子中的任何一个,其中该方法还包括接收光的位置或方向中的至少一个。
另一个例子可以包括以上和/或以下例子中的任何一个,其中该方法还包括接收相机的位置或方向中的至少一个。
另一个例子可以包括以上和/或以下例子中的任何一个,其中该方法还包括基于相机定义视图平截锥体。
另一个例子可以包括以上和/或以下例子中的任何一个,其中该方法还包括定义对应于多个级联的多个子平截锥体,该多个子曲面分割该视图平截锥体。
另一个例子可以包括以上和/或以下例子中的任何一个,其中指示是包括级联位的掩码。
另一示例可包括以上和/或以下示例中的任一个,其中生成多个阴影图包括通过检查命中图中的级联位来筛选对象集,以确定要将对象集中的哪些对象包括在多个阴影图中的哪些阴影图中。
另一示例可包括以上和/或以下示例中的任何一个,其中生成多个阴影图包括筛选对象集以确定对象集的哪些对象在多个级联中的哪些级联中。
另一个例子可以包括以上和/或以下例子中的任何一个,其中当生成多个阴影图时,基于命中图不从光的视角渲染第二对象子集。
上面已经描述了各种例子。尽管用结构特征和/或方法动作专用的语言描述了本主题,但所附权利要求书中定义的主题不必限于上述特定特征或动作。相反,上述特定特征和动作是作为实现权利要求书的示例形式而呈现的,并且由本领域技术人员认可的其他特征和动作旨在落在权利要求书的范围之内。

Claims (15)

1.一种存储指令的计算机可读存储介质,所述指令在由处理器执行时使所述处理器:
接收显示对象集的命令;
生成指示将对其执行阴影测试的第一对象子集的命中图;
为多个级联生成多个阴影图,所述阴影图基于所述命中图排除第二对象子集;以及
基于所述阴影图从相机视角渲染所述对象集和阴影。
2.如权利要求1所述的计算机可读存储介质,其特征在于,其中生成所述命中图包括:
从所述相机视角渲染所述对象集的深度缓冲。
3.如权利要求2所述的计算机可读存储介质,其特征在于,其中生成所述命中图还包括:
使用世界到阴影的矩阵来将所述深度缓冲中的像素投影到阴影图空间中。
4.如权利要求1所述的计算机可读存储介质,其特征在于,所述命中图包括像素并存储包括用于每个像素的级联位的掩码。
5.如权利要求1所述的计算机可读存储介质,其特征在于,其中生成所述阴影图包括:
基于所述命中图筛选所述对象集以确定所述对象集中的哪些对象要包括在所
述阴影图中或要从所述阴影图中排除。
6.如权利要求5所述的计算机可读存储介质,其特征在于,其中筛选所述对象集包括:
将围绕所述对象集的边界框投影到阴影图空间中;以及
在投影的边界框的顶点处对所述命中图进行采样。
7.如权利要求6所述的计算机可读存储介质,其特征在于,其中筛选所述对象集包括:
响应于对所述命中图进行采样,将所述第一对象子集包括在所述阴影图中。
8.如权利要求6所述的计算机可读存储介质,其特征在于,其中筛选所述对象集包括:
响应于对所述命中图进行采样,从所述阴影图中排除所述第二对象子集。
9.一种方法,包括:
接收对象集;
定义多个级联;
通过从相机视角渲染所述对象集的深度来生成命中图,所述命中图存储将针对所述多个级联中的哪些级联对哪些像素进行采样的指示;
通过基于所述命中图从光的视角渲染第一对象子集来生成对应于所述多个级
联的多个阴影图,所述多个阴影图排除不在所述第一对象子集中的第二对象子集;
从所述相机视角渲染所述对象集以供显示;以及
基于所述多个阴影图对阴影中的像素集进行着色。
10.如权利要求9所述的方法,其特征在于,还包括:
接收相机的位置或方向中的至少一个;以及
基于所述相机定义视图平截锥体。
11.如权利要求10所述的方法,其特征在于,还包括:
定义对应于所述多个级联的多个子平截锥体,所述多个子平截锥体分割所述视图平截锥体。
12.如权利要求9所述的方法,其特征在于,其中所述指示是包括级联位的掩码。
13.如权利要求12所述的方法,其特征在于,其中生成所述多个阴影图包括:
通过检查所述命中图中的所述级联位来筛选所述对象集,以确定要将所述对象集中的哪些对象包括在所述多个阴影图中的哪些阴影图中。
14.如权利要求9所述的方法,其特征在于,其中生成所述多个阴影图包括:
筛选所述对象集以确定所述对象集中的哪些对象在所述多个级联中的哪些级
联中。
15.如权利要求9所述的方法,其特征在于,当生成所述多个阴影图时,基于所述命中图不从所述光的视角渲染所述第二对象子集。
CN202180037447.4A 2020-05-22 2021-04-10 阴影筛选 Pending CN115701305A (zh)

Applications Claiming Priority (3)

Application Number Priority Date Filing Date Title
US16/882,065 2020-05-22
US16/882,065 US11270494B2 (en) 2020-05-22 2020-05-22 Shadow culling
PCT/US2021/026743 WO2021236255A1 (en) 2020-05-22 2021-04-10 Shadow culling

Publications (1)

Publication Number Publication Date
CN115701305A true CN115701305A (zh) 2023-02-07

Family

ID=75787233

Family Applications (1)

Application Number Title Priority Date Filing Date
CN202180037447.4A Pending CN115701305A (zh) 2020-05-22 2021-04-10 阴影筛选

Country Status (4)

Country Link
US (1) US11270494B2 (zh)
EP (1) EP4154221A1 (zh)
CN (1) CN115701305A (zh)
WO (1) WO2021236255A1 (zh)

Families Citing this family (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
WO2021149526A1 (ja) * 2020-01-23 2021-07-29 ソニーグループ株式会社 情報処理装置、情報処理方法及びプログラム
CN112150575B (zh) * 2020-10-30 2023-09-01 深圳市优必选科技股份有限公司 场景数据获取方法及模型训练方法、装置及计算机设备
CN116485989B (zh) * 2023-06-14 2024-03-12 腾讯科技(深圳)有限公司 一种图像处理方法、装置、设备及存储介质

Family Cites Families (6)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US8325186B2 (en) * 2009-05-21 2012-12-04 Sony Computer Entertainment America Llc Method and apparatus for rendering shadows
US20110141112A1 (en) 2009-12-11 2011-06-16 William Allen Hux Image processing techniques
US9659393B2 (en) 2013-10-07 2017-05-23 Intel Corporation Selective rasterization
US10055883B2 (en) 2015-01-08 2018-08-21 Nvidia Corporation Frustum tests for sub-pixel shadows
US10748332B2 (en) 2017-03-15 2020-08-18 Nvidia Corporation Hybrid frustum traced shadows systems and methods
US10628910B2 (en) 2018-09-24 2020-04-21 Intel Corporation Vertex shader with primitive replication

Also Published As

Publication number Publication date
WO2021236255A1 (en) 2021-11-25
EP4154221A1 (en) 2023-03-29
US11270494B2 (en) 2022-03-08
US20210366176A1 (en) 2021-11-25

Similar Documents

Publication Publication Date Title
EP3008701B1 (en) Using compute shaders as front end for vertex shaders
US11069124B2 (en) Systems and methods for reducing rendering latency
KR101286318B1 (ko) 렌더링된 그래픽 엘리먼트들을 위한 성능 메트릭들의 시각적 표현의 디스플레이
US10529117B2 (en) Systems and methods for rendering optical distortion effects
KR100510131B1 (ko) 픽셀 캐쉬 및 이를 이용한 3차원 그래픽 가속 장치 및 방법
CN115701305A (zh) 阴影筛选
US10553012B2 (en) Systems and methods for rendering foveated effects
US10699467B2 (en) Computer-graphics based on hierarchical ray casting
KR102151443B1 (ko) 하이브리드 gpu 아키텍처 기반의 그래픽 처리 장치
CN113822788B (zh) 光线追踪硬件中对资源的早期释放
US8400447B1 (en) Space partitioning trees using planes selected from a discrete set of orientations
JP5873683B2 (ja) 仮想環境でのオクルージョンを推定する方法
JP2012089121A (ja) 仮想環境のポイントにおいて受光された光の量の推定方法
KR20170040698A (ko) 그래픽스 파이프라인을 수행하는 방법 및 장치
US20190035147A1 (en) Graphics processing systems
US10432914B2 (en) Graphics processing systems and graphics processors
CN114758051A (zh) 一种图像渲染方法及其相关设备
JP2017062789A (ja) グラフィックス処理装置、及びテクスチャリングのためのlodを決定する方法
JP2014006901A (ja) 関与媒質により受光された光量を推定する方法及び対応する装置
US11341708B2 (en) Graphics processing
JP5864474B2 (ja) 空間を分割してグラフィックスを処理する画像処理装置及び画像処理方法
KR20120138185A (ko) 저해상도 그래픽 영상을 고해상도 그래픽 영상으로 실시간 변환하는 그래픽 영상 처리 장치 및 방법
Jensen et al. Tools for virtual reality visualization of highly detailed meshes
CN116993894B (zh) 虚拟画面的生成方法、装置、设备、存储介质及程序产品
JP6205200B2 (ja) ソート機能を持つ画像処理装置及び画像処理方法

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