CN107430784A - 图形处理*** - Google Patents
图形处理*** Download PDFInfo
- Publication number
- CN107430784A CN107430784A CN201680012554.0A CN201680012554A CN107430784A CN 107430784 A CN107430784 A CN 107430784A CN 201680012554 A CN201680012554 A CN 201680012554A CN 107430784 A CN107430784 A CN 107430784A
- Authority
- CN
- China
- Prior art keywords
- texture
- scene
- vector
- color
- refraction
- 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
Classifications
-
- 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
- G06T15/00—3D [Three Dimensional] image rendering
- G06T15/10—Geometric effects
- G06T15/20—Perspective computation
-
- 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/503—Blending, e.g. for anti-aliasing
-
- 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
- G06T19/00—Manipulating 3D models or images for computer graphics
- G06T19/20—Editing of 3D images, e.g. changing shapes or colours, aligning objects or positioning parts
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06T—IMAGE DATA PROCESSING OR GENERATION, IN GENERAL
- G06T13/00—Animation
- G06T13/20—3D [Three Dimensional] animation
-
- 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/80—Shading
-
- 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/12—Bounding box
-
- 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
-
- 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/62—Semi-transparency
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06T—IMAGE DATA PROCESSING OR GENERATION, IN GENERAL
- G06T2219/00—Indexing scheme for manipulating 3D models or images for computer graphics
- G06T2219/20—Indexing scheme for editing of 3D models
- G06T2219/2012—Colour editing, changing, or manipulating; Use of colour codes
Landscapes
- Engineering & Computer Science (AREA)
- Physics & Mathematics (AREA)
- Theoretical Computer Science (AREA)
- Computer Graphics (AREA)
- General Physics & Mathematics (AREA)
- Architecture (AREA)
- Computer Hardware Design (AREA)
- General Engineering & Computer Science (AREA)
- Software Systems (AREA)
- Computing Systems (AREA)
- Geometry (AREA)
- Image Generation (AREA)
Abstract
在图形处理***中,定义了表示要渲染的场景的全部或部分的体积的包围体(20)。然后,当在所述场景中渲染在所述包围体(20)内的至少部分透明的对象(21)时,针对所述对象(21)的部分或全部执行渲染通道,其中所述对象(21)被渲染,好像它是不透明的对象一样。在所述渲染通道中,针对所述对象(21)的表面上的至少一个采样位置(23),要用于表示将在所述采样位置(23)处通过所述对象(21)可见的折射场景的部分的颜色通过以下步骤来确定:使用从所述场景的视点位置(25)起的视图矢量(24)来确定针对所述采样位置(23)的折射视图矢量(26);确定由所述折射视图矢量(26)在所述包围体(20)上交叉的位置(28);使用所述交叉位置(28)来确定要用于对表示所述场景中的所述包围体(20)的所述表面的所述颜色的图形纹理进行采样的矢量(29);以及使用所确定的矢量(29)来对所述图形纹理进行采样以针对所述采样位置(23)确定要用于表示将在所述采样位置(23)处通过所述对象(21)可见的所述折射场景的所述部分的颜色和在所述纹理的一个或更多个通道中编码的任何其它相关信息。
Description
背景技术
本文所描述的技术涉及图形处理***,并且具体地涉及用于在渲染图像以供显示时考虑折射的效应的方法和设备。
当渲染图像(诸如输出帧)以便在图形处理***中显示时,常常期望能够在被渲染的场景中考虑折射的效应。每当透明的或半透明的对象出现在场景中时这些效应可以存在。各种渲染技术设法做这个。
一个这样的技术是所称的“光线追踪”。在此技术中光线的路径通过图像平面中的各个像素来追踪并且它与场景中的对象遭遇的效应被模拟。
虽然光线追踪可以是用于允许在渲染图像时考虑折射的效应的有效技术,但是它一般而言是非常计算昂贵的。光线追踪因此通常不适于在图形处理***的处理能力有限的情形下渲染图像。这可能例如特别是期望使用例如可以相应地具有有限处理容量的移动装置来渲染图像的情况。
用于考虑折射的效应的另一技术利用所称的“扰动纹理”。在此技术中,场景的(例如相对于视点(摄像机)位置)在透明的或半透明的对象后面的部分被首先渲染到纹理。纹理然后经受某种形式的扰动,例如使得当纹理被随后应用于对象时为该对象实现了“折射样子”。
因为此技术基于纹理的扰动,所以它未适当地考虑折射的真实世界物理效应,并且所以结果得到的图像可能常常是不逼真的。附加地,此技术不可考虑场景的在摄像机的视场外部但是由于折射的效应而将另外可见的区域。通常也存在诸如像素闪烁的失真和不稳定。这在例如当显示复杂透明的或半透明的对象的特写镜头时和/或当摄像机正在移动时折射的效应在场景中重要的情况下可能是特别引人注意的。
此外,使用此技术,有必要每当视点(摄像机)位置改变(各个帧可发生)时再生纹理。这例如在用于准备、存储并使用纹理的处理、存储器和带宽资源方面可能是相对昂贵的。
申请人因此认为,用于在图形处理***中渲染折射的技术仍然存在改进的空间。
附图说明
现在将仅通过示例并且参照附图描述本文所描述的技术的许多实施方式,在附图中:
图1示意性地示出了可按照本文所描述的技术的方式操作的图形处理流水线;
图2示意性地示出了本文所描述的技术的实施方式的操作;
图3、图4、图5、图6和图7例示了本文所描述的技术的实施方式的操作;
图8示意性地例示了表面处的折射的效应;以及
图9至图13示意性地示出了本文所描述的技术的实施方式的操作。
在附图中在适当情况下相同的附图标记被用于相同的组件。
具体实施方式
本文所描述的技术的第一实施方式包括一种在渲染场景以供输出时操作图形处理***的方法,在该场景中表示要渲染的所述场景的全部或部分的体积的包围体被定义;该方法包括:
当在所述场景中渲染在所述包围体内的至少部分透明的对象时:
针对所述对象的一些或全部执行渲染通道,在该渲染通道中所述对象被渲染,好像它是不透明的对象一样;以及
在所述渲染通道中:
针对所述对象的表面上的至少一个采样位置,通过以下步骤来确定要用于表示将在所述采样位置处通过所述对象可见的所述场景的所述部分的颜色:
使用从所述场景的视点位置起的视图矢量来确定所述采样位置的折射视图矢量;
确定在所述包围体上由所述折射视图矢量交叉的位置;
使用所述交叉位置来确定要用于对表示所述场景中的所述包围体的所述表面的所述颜色的图形纹理进行采样的矢量;以及
使用所确定的矢量来对所述图形纹理进行采样以针对所述采样位置确定要用于表示将在所述采样位置处通过所述对象可见的所述场景的所述部分的颜色。本文所描述的技术的第二实施方式包括一种图形处理流水线,该图形处理流水线包括:
多个处理级,包括至少光栅化输入基元以生成要处理的图形片段的光栅化器,各个图形片段具有与它关联的一个或更多个采样位置,以及处理由所述光栅化器生成的片段以生成输出片段数据的渲染器;
其中所述图形处理流水线当渲染定义有表示要渲染的所述场景的全部或部分的体积的包围体的场景以供输出时被配置为:
当在所述场景中渲染在所述包围体内的至少部分透明的对象时:
针对所述对象的一些或全部执行渲染通道,在该渲染通道中所述对象被渲染,好像它是不透明的对象一样;以及
在所述渲染通道中:
针对所述对象的表面上的至少一个采样位置,通过以下步骤来确定要用于表示将在所述采样位置处通过所述对象可见的所述场景的所述部分的颜色:
使用从所述场景的视点位置起的视图矢量来确定所述采样位置的折射视图矢量;
确定在所述包围体上由所述折射视图矢量交叉的位置;
使用所述交叉位置来确定要用于对表示所述场景中的所述包围体的所述表面的所述颜色的图形纹理进行采样的矢量;以及
使用所确定的矢量来对所述图形纹理进行采样以针对所述采样位置确定要用于表示将在所述采样位置处通过所述对象可见的所述场景的所述部分的颜色。
本文所描述的技术致力于用于当渲染场景以供输出时特别在被渲染的场景内存在至少一个至少部分透明的(即不完全不透明的)对象的情形下考虑折射的效应的方法和设备。在本文所描述的技术中,为了考虑通过所述至少部分透明的对象的折射的效应,所述至少部分透明的对象的一些或全部被处理,好像它是不透明的一样,并且针对对象的表面上的采样位置的适当的颜色使用表示围绕对象(并且所以表示什么将通过对象可见)的包围体的表面的颜色的纹理来确定,同时使用从“折射”视图矢量得到的矢量来对纹理进行采样。
如将在下面进一步讨论的,申请人已经认识到,此布置可用于按照特别高效的方式模拟折射的真实世界物理效应。这然后意味着可在实时渲染期间(即在“运行时”)和/或当在图形处理***的处理能力有限的情形下渲染时模拟折射的真实世界物理效应。这与一般而言对移动实时渲染来说太计算昂贵的“光线追踪”技术形成对照,并且与可能是相对昂贵的并且未适当地考虑折射的真实世界物理效应的“扰动纹理”形成对照。
本文所描述的技术的布置可用于使用表示包围体的表面的颜色的单个“静态的”图形纹理来模拟折射的效应。这然后意味着例如,即使视点(摄像机)位置改变,相同的图形纹理也可被用于多个帧。这与例如必须例如为各个帧连续地再生扰动纹理的常规实时渲染布置形成对照。
因为本文所描述的技术可使用“静态的”纹理来模拟折射效应,而不是像在常规布置中一样使用“动态的”纹理,所以那也意味着可按照高得多的质量并且使用更成熟的效应来生成本文所描述的技术的纹理。纹理可例如被“离线”生成并且经受非实时优化,然后提供以供由图形处理***使用。这与例如因为必须例如为各个帧生成扰动纹理所以必须按照低分辨率/低质量形式生成它以便维持实时渲染所必需的速度的常规布置形成对照。本文所描述的技术不会遭受此缺点,并且所以用于模拟折射效应的纹理可以被生成为具有高得多的质量,从而提供更高质量的折射效应。因为可针对给定包围体在本文所描述的技术中使用单个“静态的”纹理,所以也能够视需要以压缩形式提供纹理,从而提供带宽和存储器节约。
在本文所描述的技术中,被应用来自纹理的颜色的采样位置处的至少部分透明的对象被处理(渲染),好像它是不透明的一样(而不像完全或部分透明的一样,它实际上就是完全或部分透明的)。申请人在这点上已经认识到,不管对象它本身是完全或部分透明的事实,都可通过处理采样位置处的对象好像它是不透明的一样并且然后按照本文所描述的技术的方式对它应用纹理来实现折射的更好表示。这然后确保针对采样位置的颜色(即表示将在采样位置处通过对象可见的折射场景的部分)将(使用从折射视图矢量得到的矢量)从图形纹理确定并且例如将不经受与来自可以在所述对象后面但是由于折射的效应而在所述采样位置处实际上不可见的对象的颜色值混合的任何混合。此外,将采样位置处的对象处理为不透明的方便按照本文所描述的技术的方式将纹理用于渲染完全或部分透明的对象,并且因此具有那带来的优点(如本文所讨论的)。
本文所描述的技术可相应地改进渲染质量(并且方便折射的真实世界物理效应的模拟),同时减小图形处理***的处理、存储器、带宽和能力要求,并且可在实时渲染期间(即在“运行时”)和/或当在图形处理***的处理能力更有限的情形下渲染时方便通过场景中的完全或部分透明的对象的折射的真实世界物理效应的模拟。
本文所描述的技术的包围体可以是表示要渲染的场景的全部或部分的体积的任何适合的包围体。该包围体能表示正被渲染的整个场景(并且在一个实施方式中情况是这样的),但是对包围体来说表示场景的仅一部分也将是可能的。包围体例如可以表示房间。
可按照任何期望且适合的方式定义包围体。它在实施方式中被定义在世界空间中。它可采取任何适合且期望的形式,但是在实施方式中形式为包围盒(立方体)。针对包围体的其它布置当然将是可能的。
表示包围体的表面的颜色的图形纹理可采取任何适合且期望的形式。在实施方式中它形式为被用于环境映射的纹理,诸如立方体纹理(立方体贴图)或球体纹理(球体贴图)。
因此,在实施方式中,表示包围体的表面的颜色的纹理包括针对围绕该纹理包含的体积内的参照位置的表面上的点来指示并存储各个点的一个或更多个颜色值的纹理,同时然后基于从纹理的参照位置(相对于该参照位置定义该纹理)起的矢量(方向)对该纹理进行采样。
换句话说,纹理在实施方式中存储针对从纹理表示的体积内的参照位置(点)起的各个方向的一个或更多个颜色值,并且通过确定从纹理内的参照位置(点)到纹理表示的表面上的位置的方向来采样。
可以视需要而定选择定义(并且采样)纹理所相对于的纹理内的参照位置(点)。在一个实施方式中,定义(并且采样)纹理所相对于的纹理内的参照位置(点)在纹理包含的体积的中心处。这然后意味着,纹理将有效地表示“如”从体积的中心“看到”的包围体的表面的颜色,并且所以将包括相对“均匀的”表示(例如使得包围体的表面的所有部分将通过具有类似级别的细节的纹理来表示)。
然而,情况未必是这样的,并且在实施方式中,相对于在将与纹理一起使用的包围体内的至少部分透明的对象定义纹理(以及在实施方式中其参照位置(点))。在实施方式中纹理的参照位置(点)位于对象内,例如(并且在实施方式中)靠近或者在对象的中心处。因此,在实施方式中,定义(并且采样)纹理所相对于的参照位置(点)在至少部分透明的对象内,并且在实施方式中在至少部分透明的对象的中心处或附近。(因此,参照位置可取纹理包含的体积内的任何位置,即取决于对象在体积内的位置。)因此,在实施方式中,针对并且相对于将与纹理一起使用的特定至少部分透明的对象定义纹理。
申请人已经认识到,按照这种方式定义纹理在本文所描述的技术的上下文中是特别方便且有用的。这是因为,按照这种方式,纹理将有效地表示“如”从对象“看到的”(而不是,例如,如从纹理包含的体积的中心看到的)包围体的表面的颜色。因此,纹理可以包括包围体的表面的颜色的相对“非均匀的”表示(例如,使得参照位置相对更靠近的包围体的表面的那些部分将通过具有相对更多的细节的纹理来表示)。当这样的“非均匀的”纹理被采样以确定要用于表示将在采样位置处通过对象可见的(折射)场景的部分的颜色时,包围体的表面的相对地更靠近对象的部分将能够被相对更详细地采样(然而包围体的表面的相对地更远离对象的部分将被相对不太详细地采样)。如本领域技术人员应了解的,这可改进折射的效应的描绘。
视需要,其它布置当然将是可能的。
表示包围体的表面的颜色的纹理在实施方式中被配置为对应于场景的包围体。因此,例如,在包围体形式为立方体的情况下,纹理在实施方式中形式为立方体纹理(立方体贴图)。在实施方式中,纹理是立方体纹理(立方体贴图)。
因此,纹理在实施方式中具有将适合于将与它一起使用的包围体的预期大小的分辨率(但是这是不必要的,并且如果需要,纹理能例如被缩放以供使用)。
纹理应该并且在实施方式中确实存储指示在从定义纹理所相对于的体积内的参照点起的相关方向上的场景中的包围体的表面的颜色的一个或更多个颜色值(例如,三个RGB颜色值)。
纹理能单独存储颜色值(例如仅存储一个或更多个RGB颜色信道)(并且可以在实施方式中是RGB纹理)。在实施方式中,纹理也能存储一个或更多个其它数据通道,诸如α通道(例如,纹理可以是RGBα纹理(并且在实施方式中,这个被完成))。在这种情况下,其它数据通道(α通道)能被用于不同目的。例如,RGBα纹理能用来将要按照本文所描述的技术的方式使用的纹理存储在RGB颜色通道中,并且也将用于其它目的的第二纹理存储在α通道中。这将然后允许相同的(例如立方体)纹理被用于不同目的。
在表示包围体的表面的颜色的纹理也包括其它数据通道(例如α通道)的实施方式中,其它数据通道(例如α通道)用于表示包围体的表面的一个或更多个附加特性,诸如例如包围体的表面的透明度(即,纹理可以包括透明度(α)通道)。
在纹理也包括透明度通道的实施方式中,透明度通道也被用在本文所描述的技术的方法中,例如作为要在计算折射的效应时使用的另一个透明度参数。
附加地或另选地,表示包围体的表面的颜色的纹理可以包括(编码)与被渲染的场景有关(例如,未必束缚于包围体的表面)的其它信息或特性。附加信息能包括例如与折射渲染过程相关(诸如与应该例如在表面处或者在对象的体积内应用折射效应的方式有关)的信息。这样的信息能包括例如与包围体有关(诸如指示可通过其看到遥远环境(诸如天空)的包围体的一个或更多个区域)的信息。附加地或另选地,附加信息能包括与在实施方式中与折射渲染过程相关的至少部分透明的对象的一个或多个特性有关的信息,诸如指示(编码)不会发生折射的至少部分透明的对象的一个或多个区域,诸如存在一个或更多个孔并且/或者对象是完全不透明的一个或更多个区域。
此附加信息在实施方式中然后被用作用于控制或者修改渲染操作的(另一个)参数。例如,在附加信息指示(编码)不会发生折射的至少部分透明的对象的一个或多个区域,诸如存在一个或更多个孔并且/或者对象是完全不透明的一个或更多个区域,那么该信息能用于确定是否应用折射效应。在附加信息指示可通过其看到遥远环境(诸如天空)的包围体的一个或更多个区域的情况下,那么该信息能用于按照方便的方式应用例如“天空盒”纹理。其它布置当然将是可能的。
因此,在实施方式中,表示包围体的颜色的纹理用于指示(存储)与被渲染的场景有关的其它信息和/或特性,诸如对象它本身的一个或多个特性。
可视需要而定将此附加信息存储(包括)在纹理中。在实施方式中它被存储在纹理的另一例如附加数据通道(例如其未用于存储颜色值)中,该附加数据通道诸如在实施方式中,在RGBα纹理的情况下为α通道。
其它布置当然将是可能的。
如以上所讨论的,本文所描述的技术与期望模拟通过存在于被渲染的场景中的至少部分透明的对象的折射的效应的情形有关。
在本文所描述的技术中考虑的至少部分透明的对象应该是(并且在实施方式中是)透明的或半透明的(即不完全不透明的)对象,即,使得折射的效应是相关的。对象的全部可以是至少部分透明的,或者对象的仅一部分(一些而非全部)可以是至少部分透明的。
如将在下面更详细地讨论的,可以在渲染通道中渲染整个(所有的)至少部分透明的对象,或者可以在渲染通道中渲染至少部分透明的对象的仅一部分(一些而非全部)。在实施方式中至少在渲染通道中渲染对象的至少部分透明的部分。
在本文所描述的技术中,在渲染通道中渲染的对象(的部分)被渲染,好像它是不透明的对象一样(不管正被渲染的对象(的部分)的一些或全部实际上是完全或部分透明的事实),即,针对在渲染通道中渲染的对象(的部分)禁用阿尔法混合。此效应然后是所述对象(的部分)被渲染为不透明的对象,但是同时来自表示包围体的表面的纹理的适当的颜色值被用于对象的表面上的任何至少部分透明的采样位置。
来自渲染通道的采样位置的作为结果得到的(输出)颜色值相应地在实施方式中也被设定为是不透明的,即,使其α值等于1(α=1)。
在本文所描述的技术中,要用于表示将在对象的表面上的采样位置处通过对象可见的(折射)场景的部分的颜色被确定。所述采样位置应该是(并且在实施方式中是)完全或部分透明的对象的一部分的表面上的采样位置,即,使得折射是相关的(但是如以上所讨论的,将实际上在渲染通道中被处理为是不透明的)。
在本文所描述的技术中,为了确定要用于所述采样位置的颜色,从视点(摄像机)位置起的视图矢量用于确定(需要颜色的)采样位置的折射视图矢量(即,考虑到当视图矢量在所述采样位置处通过至少部分透明的对象的表面时的折射的效应,从视点(摄像机)位置到包围体的表面的视图矢量的路径)。
可按照任何适合且期望的方式确定这个。
在一个实施方式中,从视点(摄像机)位置到采样位置(在世界空间中)的视图矢量被确定,并且然后根据采样位置视图矢量确定折射视图矢量。在一个实施方式中,从视点(摄像机)位置到被考虑的采样点涉及的基元的顶点的矢量被确定,并且然后从视点(摄像机)位置到采样点的矢量通过那些视点到顶点矢量的适当的(例如硬件)内插来确定。视点到顶点矢量在实施方式中在世界空间中被计算。在实施方式中,针对各个顶点,从视点到顶点的矢量被确定。从视点位置到采样点的矢量在实施方式中然后通过视点到顶点矢量的适当的内插来确定,并且然后在实施方式中用于确定折射视图矢量。
在另一实施方式中,从视点(摄像机)位置到被考虑的采样点涉及的基元的顶点的矢量被确定(在世界空间中),并且然后这些矢量各自用于针对各个顶点来计算折射视图矢量。在实施方式中,针对各个顶点,从视点到顶点的矢量被确定并且所对应的折射视图矢量被计算。采样点的折射视图矢量在实施方式中然后通过顶点折射视图矢量的适当的(例如硬件)内插来确定。
其它布置当然将是可能的。
视点到采样点矢量(无论通过从视点到顶点矢量的内插还是以其它方式生成)或视点到顶点矢量可用于视需要而定按照任何方式确定所对应的折射视图矢量。
从视图矢量确定折射视图矢量在实施方式中是通过考虑折射在视图矢量(中的每一个)上(例如,随着它通过所述对象的表面)的效应来执行的。因此,在实施方式中,使用视图矢量来确定折射视图矢量包括确定由于视图矢量在对象的表面处的折射而导致的视图矢量的方向的改变。
折射的效应是为了随着光线从具有第一折射率(例如,n1)的第一介质传递到具有第二不同的折射率(例如,n2)(即其中n1≠n2)的第二介质而(潜在地)更改它的方向。
方向被更改的程度通过斯涅耳定律(Snell’s law)来给出:
其中θ1是从两个介质之间的边界的法线测量的传入光线的入射角,并且θ2是从边界的法线测量的折射光线的折射角。
在本文所描述的技术的实施方式中,折射视图矢量从视图矢量确定,例如当它通过对象的表面时。因此,围绕场景内的至少部分透明的对象的环境在实施方式中对应于“第一介质”,并且第一折射率n1在实施方式中对应于围绕至少部分透明的对象的环境的折射率。周围介质可以被认为是例如空气,并且所以第一折射率将通常(并且在一个实施方式中)等于1(即n1=1)。围绕至少部分透明的对象的环境(“第一介质”)当然可以包括具有相同或不同的折射率的其它材料,诸如水等。
相应地,在实施方式的布置中,至少部分透明的对象对应于“第二介质”,并且所以第二折射率n2在实施方式中对应于至少部分透明的对象的折射率。
至少部分透明的对象可以具有单一均匀的折射率,或者它可以具有例如根据对象内的位置而改变的非均匀的折射率。
周围介质和对象的折射率可按照任何适合且期望的方式(例如,作为一个或更多个单值(例如其中对象和/或介质具有均匀的折射率))被提供和定义。例如,能使用图形纹理来指示(存储)非均匀的(例如在三个维度上变化的)折射率。
在实施方式中,为了从视图矢量确定折射视图矢量,对象的表面在采样位置或顶点处的法线被确定和使用。因此,在实施方式中,过程包括使用对象的表面在采样点或顶点处的法线矢量来确定折射视图矢量。可以视需要而定按照任何方式做这个,但是如将在下面进一步讨论的,在实施方式中,这通过确定并使用采样位置位于上面或者顶点涉及的对象的表面上的基元的法线来做。
在实施方式中然后确定折射视图矢量。可以按照任何适当且期望的方式(例如,基于使用归一化视图矢量(入射矢量)和法线矢量的点积的斯涅耳定律(如上所述)、勾股定理以及折射率之比)做这个。
在实施方式中,预定义“折射”函数用于确定折射视图矢量R:
R=refract(I,N,eta)
其中I是归一化视图或入射矢量,N是归一化法线矢量,eta是折射率的比,eta=n1/n2。
其它布置当然将是可能的。
例如,将能够通过例如使用斯涅耳定律(如上所述)来首先确定视图矢量的入射角θ1(例如,通过确定法线矢量与从视点(摄像机)位置到被考虑的采样点或顶点的视图矢量之间的角度)并且在实施方式中然后确定折射角θ2来确定折射视图矢量。入射角θ1、第一介质的折射率n1(例如,围绕对象的介质的折射率)以及对象的折射率n2可以在斯涅耳定律中用于确定折射角。
然后可以使用折射率θ2例如通过随着视图矢量通过对象的表面而有效地使它旋转来确定折射视图矢量。
因此,折射视图在实施方式中是在实施方式中基本上在与视图矢量相同的一般方向上但是以等于从对象的表面在采样位置或顶点处的法线测量的折射角θ2的角度并且在实施方式中在由法线矢量和视图矢量定义的平面中从所述采样位置或顶点延伸的矢量。
在各种实施方式中,可在实施方式中在确定折射视图矢量时考虑折射的相对更复杂的效应。
因此,例如,在至少部分透明的对象具有非均匀的折射率的情况下,从视图矢量确定折射视图矢量可以包括更复杂的计算,所述计算例如视需要考虑视图矢量随着它通过不同折射率的区域时的路径。
附加地或另选地,可以通过把折射视图矢量制成动画来(近似地)考虑至少部分透明的对象内的改变或运动介质(诸如例如流动水)的效应。可以视需要而定选择动画的特性以例如表示介质随时间的改变。例如,能对折射视图矢量应用正弦变化或某个函数以把它制成动画。这表示用于渲染这些介质的特别简单且高效的技术,例如其中不必直接确定介质中的改变对折射视图矢量的影响。因此,在实施方式中,过程包括把折射视图矢量制成动画(即,随着时间的推移而使它变化(扰动)(例如,并且在实施方式中,在其幅度和/或方向方面)。
附加地或另选地,可通过例如确定多个(稍微)不同的折射视图矢量(例如,每纹理的RGB颜色通道各一个)并且使用折射视图矢量中的每一个来针对这些颜色通道中的每一个对纹理进行采样来考虑色差的效应(在实施方式中按照本文所描述的技术的方式)。
所确定的采样位置的折射视图矢量可以在图形处理流水线的另外级中被“照原样”输出和使用,但是在做这个之前(即必要时)可以被(并且在一个实施方式中被)首先归一化。因此,在实施方式中折射视图矢量是在由法线矢量和视图矢量定义的平面中在由折射角θ2定义的方向上从所述采样位置延伸的单位矢量。
这些过程可由图形处理流水线的任何期望且适合的级或组件来执行。在实施方式中,这些过程由图形处理流水线的顶点着色级来执行,在实施方式中通过该级执行适当的顶点着色程序(顶点着色器)以确定折射视图矢量,并且然后输出该折射视图矢量以供由图形处理流水线的其它级使用。图形处理流水线的片段着色级也将能够执行这些过程中的一些或全部。
可视需要而定确定在包围体上由折射视图矢量交叉的位置。在实施方式中,(在世界空间中)采样位置的折射视图矢量在实施方式中像以上所描述的那样被确定,并且从采样位置起的该矢量的在包围体上的交叉点然后被确定。
折射视图矢量可用于由图形处理流水线的任何期望且适合的级或组件来确定在包围体上由该矢量交叉的位置。在实施方式中,这由图形处理流水线的片段着色级(由片段着色器)来做,在实施方式中通过该级执行适当的片段着色程序(片段着色器)以计算交叉点。片段着色器将使用折射视图矢量和关于包围体的信息作为此过程的输入。
在实施方式中,由折射视图矢量在包围体上交叉的位置由图形处理流水线的片段着色级来确定,在实施方式中通过该级执行可计算交叉点的适当的片段着色程序(片段着色器)。视需要,其它布置(诸如此确定由图形处理流水线的顶点着色级来完成)也将是可能的。
所确定的包围体上的交叉位置可用于确定要用于按照任何适合且期望的方式对表示图形纹理的颜色进行采样的矢量。例如,从采样位置到交叉点的矢量能简单地被用作用于对图形纹理进行采样的矢量。
然而,申请人已经认识到,在参照图形纹理对应于的体积内的参照位置(例如中心点)定义图形纹理的情况下,那么简单地使用从所关注采样位置到包围体上的交叉点的矢量可能不总是正确地对图形纹理进行采样。因此,在实施方式中,采样过程涉及说明(补偿)参照可以不对应于被考虑的采样位置的参照点定义纹理的事实。
可视需要而定执行此补偿,但是在实施方式中,从定义纹理相对于的参照位置到所确定的包围体上的交叉点的矢量被确定,并且然后该矢量用于对颜色指示纹理进行采样。即使采样位置不对应于定义纹理相对于的参照位置,这也将确保纹理中的正确位置被采样。它实际上对折射视图矢量应用“局部”校正。
换句话说,所确定的包围体上的交叉位置用于确定从纹理参照位置(例如中心点)到所确定的交叉点的矢量,并且然后从参照位置到所确定的交叉点的矢量用于对颜色指示纹理进行采样。
然后应该使用所确定的“采样”矢量来适当地对颜色指示纹理进行采样,以检索所期望的颜色。应该使用所确定的采样矢量来对颜色指示纹理的至少(RGB)颜色通道进行采样以检索颜色。
在纹理也包括一个或更多个附加数据通道(例如α通道)(如以上所讨论的)的情况下,那么也可以对附加通道中的一个或更多个(例如α通道)进行采样。附加数据通道(例如α通道)例如在对颜色进行采样时应该(并且在实施方式中)使用所确定的采样矢量来采样。
可按照任何期望且适合的方式对颜色指示纹理进行采样。例如,视需要,可在对纹理进行采样时使用适当的滤波(内插)过程,诸如线性滤波。类似地,在颜色指示纹理作为一组贴图(mipmap)被提供的情况下,采样过程在实施方式中被配置为例如(并且在实施方式中)使用三线性滤波来对贴图进行滤波(内插)以提供经采样的纹理值。
在纹理形式为一组贴图的情况下,采样过程在实施方式中也包括确定应该对颜色指示纹理进行采样的一个或多个贴图级别(细节的级别)(并且然后针对颜色指示纹理对如此确定的贴图级别进行采样)。
要使用的贴图级别(细节的级别)在实施方式中是基于从被考虑的采样点到折射视图矢量的在包围体上的交叉位置的距离(从被考虑的采样点到折射视图矢量的在包围体上的交叉位置的矢量的长度)而确定的。
其它布置当然将是可能的。
这些过程可再次由图形处理流水线的任何期望且适合的级或组件来执行。在实施方式中它们由图形处理流水线的片段着色级(片段着色器)来执行,在实施方式中通过执行适当的片段着色程序。视需要,它们也或者替代地可以至少部分地由图形处理流水线的适当的纹理映射级来执行。
一旦已经对纹理进行了采样,然后就可视需要而定(例如,在确定被考虑的采样点的颜色的例如常规计算中)使用针对包围体的表面采样的颜色。
可视需要而定使用针对采样点采样的颜色以模拟采样点处的折射的效应。所确定的颜色在实施方式中在确定要用于采样位置的所输出的渲染颜色时被使用。因此,从纹理采样的颜色在实施方式中被用于所述采样位置。
因此,在实施方式中,本文所描述的技术的方法还包括在渲染采样位置的输出版本时使用(并且本文所描述的技术的图形处理流水线还被配置为使用)针对采样位置所确定的颜色。在特定实施方式中,所确定的颜色用于表示将在采样位置处通过对象可见的(折射)场景的部分。
所确定的颜色可以被“照原样”使用,即作为通过渲染过程针对所述采样位置而确定并输出的最终颜色(例如,作为针对所述采样位置而显示的最终颜色)。另选地,所确定的颜色可以与针对所述采样位置而确定的并且/或者例如由一个或更多个其它级在渲染过程中修改的一个或更多个其它颜色组合(例如混合)。
因此,例如,在一个特定实施方式中,所确定的颜色(即其表示将在采样位置处通过对象可见的(折射)场景的部分)与至少部分透明的对象在所述采样位置处的颜色组合(混合)。附加地或另选地,可以对所述采样位置应用一个或更多个另外的图形效应,例如,以修改采样位置的颜色,诸如照明效应、反射等。
在实施方式中,采样位置的最终输出版本的α值被设定为不透明的(α=1),而不管对象它本身是完全或部分透明的。这帮助确保对象例如连同可以稍后渲染的其它对象和基元一起被适当地处理。
类似地,在也对纹理的一个或更多个附加通道(α通道)进行采样的情况下,可视需要而定使用针对采样点采样的信息来模拟采样点处的折射的效应。
这些过程可再次由图形处理流水线的任何期望且适合的级或组件来执行。在实施方式中它们由图形处理流水线的渲染器来执行,并且在实施方式由图形处理流水线的片段着色级(再者,在实施方式中通过实行执行所期望的渲染计算的适当的片段着色程序)来执行。
能单独地针对采样点执行以上过程的任一个或全部,或者能针对多个采样点的集合执行它们中的一些或全部(这然后将具有针对正被考虑的集合内的采样点执行该过程的效应)。例如,在图形处理流水线对各自表示多个采样位置的集合的片段操作的情况下,能在每片段基础上而不是单独针对片段表示的各个采样点执行本文所描述的技术的过程(并且在实施方式中这是所完成的)。在这种情况下,将因此存在例如针对片段确定的单个颜色,其然后将被用于该片段正用于渲染的各个采样点。
应了解,尽管已经在上面特别参照确定在所述对象的表面上的给定采样点处的颜色描述了本文所描述的技术,然而本文所描述的技术的技术能被并且在实施方式中被用于对象的表面上的多个采样点,并且在实施方式中用于需要在渲染场景时考虑折射的对象的表面上的各个采样点。因此,在实施方式中针对正被考虑的对象的表面上的多个采样点中的每一个重复过程。
将通常(并且在实施方式中)在渲染过程中通过更多的(并且在实施方式中多个)基元中的一个来表示对象的表面。因此,在实施方式中,过程包括(并且流水线被配置为):通过通过以下步骤来渲染表示对象的表面的一个或更多个至少部分透明的基元来渲染至少部分透明的对象:针对基元被渲染好像它是不透明的基元一样的基元执行渲染通道;以及在渲染通道中:针对基元上的至少一个采样位置,按照本文所描述的技术的方式确定要用于表示将在采样位置处通过基元可见的(折射)场景的部分的颜色。在实施方式中针对基元上的各个采样位置并且在实施方式中针对组成被考虑的表面的多个至少部分透明的基元中的每一个重复过程。
在一个实施方式中,单个渲染通道(即本文所描述的技术的渲染通道)用于确定通过所述对象的表面的折射的效应。
尽管单个渲染通道可以视需要而定被用于任何至少部分透明的对象,然而申请人已经发现,这在例如至少部分透明的对象包括“实心”非中空对象(例如,使得视图矢量将随着它通过并且被对象折射而仅与对象交互一次)的情况下是特别适当且有用的。因此,在实施方式中,在对象包括“实心”对象的情况下,那么在实施方式中用于确定折射的效应的过程包括单通道过程。此单个渲染通道在实施方式中渲染对象的前表面和后表面二者。
在这些实施方式中,至少部分透明的对象的至少部分透明的区域中的全部在实施方式中在渲染通道中被处理为不透明的(并且在实施方式中,针对对象的至少部分透明的采样位置中的全部的颜色是通过按照本文所描述的技术的方式对颜色指示纹理进行采样来确定的)。
在另一实施方式中,一个或更多个附加渲染通道可以用于渲染所述对象。在一个这样的实施方式中,当渲染至少部分透明的对象时,在实施方式中对象的一些(而非全部)在第一渲染通道(其在实施方式中对应于以上所讨论的本文所描述的技术的渲染通道)中被渲染,并且然后对象的剩余部分中的一些或全部在第二渲染通道中被渲染。
再者,尽管两个或更多个渲染通道可以视需要而定被用于任何至少部分透明的对象(诸如“实心”对象),然而申请人已经发现,这在例如至少部分透明的对象不同于(非)“实心”对象例如是由被具有不同折射率(例如,使得视图矢量将随着它通过并且被对象折射而与对象交互不止一次)的介质分开的多个(例如两个或更多个)部分组成的对象(例如中空对象、诸如玻璃的凹面对象等)的情况下是特别适当且有用的。因此,在实施方式中,在对象包括不同于(非)“实心”对象的情况下,那么过程在实施方式中包括一个或更多个附加渲染通道(即,总共两个或更多个渲染通道)。
在一个这样的实施方式中,对象的后表面(或“背面”)即对象的离场景的视点(摄像机)位置最远的表面在第一渲染通道中被渲染,并且然后对象的其它部分(例如对象的相对地更靠近场景的视点(摄像机)位置的部分,诸如对象的前表面(或“前面”))在第二渲染通道中被渲染。
对象的后表面在实施方式中在第一渲染通道中被处理为不透明的。因此,所述过程在实施方式中包括针对对象的后表面执行第一渲染通道,在该第一渲染通道中后表面被渲染,好像它是不透明的一样;并且在第一渲染通道中:针对至少一个采样位置,确定要用于按照以上所讨论的本文所描述的技术的方式表示将在采样位置处通过对象可见的(折射)场景的部分的颜色。在第一渲染通道中对象的除后表面以外的部分(即前表面)在实施方式中未被渲染,即,在实施方式中被从渲染中“剔除”。因此在针对对象的第一渲染通道中,前面剔除(culling)在实施方式中被启用。
在第二渲染通道中,对象的除后表面以外的部分(即对象的前表面)在实施方式中然后被渲染,在实施方式中而无需渲染后表面,即对象的后表面在实施方式中被从渲染中“剔除”。因此在针对对象的第二渲染通道中,背面剔除在实施方式中被启用。
第二渲染通道在实施方式中在为对象的(前)表面上的采样位置确定颜色值时使用第一渲染通道的结果。
在实施方式中第一渲染通道的结果与第二渲染通道的结果混合(阿尔法混合)。可视需要而定选择做这个的方式。例如,可视需要而定选择混合操作的类型和混合因子(例如,组合结果的相对比例)。
因此,在实施方式中,在第二渲染通道中,对象的前表面在实施方式中被例如按照常规方式(即在实施方式中通过将前表面处理为部分透明的或透明的(照原样))渲染。
可视需要而定选择从第二渲染通道输出的采样位置的最终颜色的透明度(α值)。恒定透明度(α值)可以被定义并用于整个对象,或者可以定义并使用跨越对象变化的透明度(α值)。非恒定透明度(α值)能被例如存储在图形纹理中。
在一个实施方式中,可以例如在第二渲染通道中考虑在对象的前表面处由于折射率的改变而导致的折射的效应。例如,可以在第二渲染通道中将本文所描述的技术的技术应用于前表面。然而,申请人已经发现,可通常在无需显式地考虑这个的情况下实现折射的适当的描绘,并且此外这可减小将另外需要的处理、存储器和带宽资源的量。因此,在实施方式中例如在第二渲染通道中不考虑在对象的前表面处由于折射率的改变而导致的折射的效应。
应了解在这些实施方式中,至少透明的对象的一些(而非全部)在实施方式中被处理为不透明的(并且针对被处理为不透明的对象的部分的采样位置的颜色在实施方式中是通过按照本文所描述的技术的方式对颜色指示纹理进行采样来确定的)。
其它过程当然将是可能的。
不管用于确定折射的效应的渲染通道的数量如何,一个或更多个附加渲染通道可以视需要被例如用于其它目的。
在实施方式中例如针对被渲染的场景的序列中的多个场景并且在实施方式中针对要渲染的一系列帧中的各个帧重复本文所描述的技术的过程,所述各个帧包括折射可能是相关的一个或更多个至少部分透明的对象。也可以视需要而定并且视需要针对存在于场景中的各个至少部分透明的对象适当地执行它。
本文所描述的技术也延伸到表示场景的包围体的表面的颜色的纹理的生成并且延伸到纹理本身。例如,它可以是纹理将被单独地和/或提前生成(和存储),并且然后,例如,被提供给图形处理器以供使用。本文所描述的技术延伸到这些活动,以及延伸到用于在被渲染的场景的包围体内渲染折射的颜色指示纹理的使用。
因此,本文所描述的技术的另一实施方式包括一种生成用于当渲染场景以供输出时在图形处理***中使用的纹理的方法,在该场景中表示要渲染的所述场景的全部或部分的体积的包围体被定义并且在所述包围体内存在一个至少部分透明的对象,该方法包括:
通过以下步骤来生成包括纹理纹元的阵列以供当在所述场景中渲染所述至少部分透明的对象时使用的图形纹理:
设定所述纹理中的纹元值,使得它们各自存储在从将对所述纹理进行采样相对于的参照位置起的给定方向上表示所述包围体的所述表面的所述颜色的一个或更多个颜色值,所述参照位置位于所述场景中的所述至少部分透明的对象内;以及
存储表示所述纹理的所述纹元值并且指示将对所述纹理进行采样相对于的所述参照位置的数据。
本文所描述的技术的另一实施方式包括一种用于生成当渲染场景以供输出时在图形处理***中使用的纹理的设备,在该场景中表示要渲染的所述场景的全部或部分的体积的包围体被定义并且在所述包围体内存在一个至少部分透明的对象,该设备包括处理电路,该处理电路被配置为:
通过以下步骤来生成包括纹理纹元的阵列以供当在所述场景中渲染所述至少部分透明的对象时使用的图形纹理:
设定所述纹理中的纹元值,使得它们各自存储在从将对所述纹理进行采样相对于的参照位置起的给定方向上表示所述包围体的所述表面的所述颜色的一个或更多个颜色值,所述参照位置位于所述场景中的所述至少部分透明的对象内;以及
存储表示所述纹理的所述纹元值并且指示将对所述纹理进行采样相对于的所述参照位置的数据。
本文所描述的技术的另一实施方式包括一种用于当渲染场景以供输出时在图形处理***中使用的纹理,在该场景中表示要渲染的所述场景的全部或部分的体积的包围体被定义并且在所述包围体内存在一个至少部分透明的对象,该纹理包括:
纹理纹元的阵列,其中:
所述纹元值被设定为使得它们各自存储在从将对所述纹理进行采样相对于的参照位置起的给定方向上表示所述包围体的所述表面的所述颜色的一个或更多个颜色值,所述参照位置位于所述场景中的所述至少部分透明的对象内。
如本领域技术人员应了解的,本文所描述的技术的这些实施方式酌情可并且在实施方式中确实包括本文所描述的技术的可选特征中的任何一个或更多个或全部。
因此,例如,纹理在实施方式中形式为立方体纹理(立方体贴图)。类似地,在实施方式中,以及在存储一个或更多个颜色值(例如,颜色通道)(例如一个或更多个RGB颜色通道)时,纹理在实施方式中也将附加信息存储例如在一个或更多个附加数据通道中。所述一个或更多个附加通道在实施方式中包括α(透明度)值通道。在实施方式中,例如被存储在附加数据通道(例如α通道)中的附加信息用于指示以下各项中的一个或更多个:将连同所述方向一起使用纹理的包围体的表面的透明度,以及与被渲染的场景有关(诸如关于对象它本身(在所述方向上)(如以上所讨论的))的其它信息或特性。因此用于折射效应的渲染的附加相关信息可以被并且在实施方式中被编码在纹理(的例如α通道)中。
纹理(的颜色值)在实施方式中是通过从纹理的参照位置的视点(从纹理参照位置)渲染包围体的表面的图像来生成的。在实施方式中,当完成这个时,场景内的至少部分透明的对象未被考虑(例如被从渲染中剔除)。设备可以例如包括可做这个的任何适合的处理器,诸如图形处理器、CPU等。
可按照对应的方式(例如在相同的渲染通道中或者使用一个或更多个附加通道)并且在至少部分透明的对象存在或不存在的情况下(酌情)生成附加信息(若存在的话)。
例如,在附加信息指示(编码)不会发生折射的至少部分透明的对象的一个或多个区域(诸如存在一个或更多个孔并且/或者对象是完全不透明的一个或更多个区域)的情况下,那么能例如通过从内部渲染对象并且然后例如针对存在表面的区域将各个纹元的α通道设定为1而针对存在孔的区域设定为0(或者反之亦然)来生成所述信息。
在附加信息指示可通过其看到遥远环境(诸如天空)的包围体的一个或更多个区域的情况下,那么能例如通过在至少部分透明的对象不存在的情况下执行附加渲染通道并且然后例如通过将附加渲染通道的结果与(RGB)渲染通道的结果组合来例如在纹理的α通道中对信息进行编码而生成附加信息。
参照位置应该在存在于场景中的至少部分透明的对象内。在实施方式中,参照位置位于对象的中心处或附近(如以上所讨论的,这然后意味着纹理将有效地表示“如”从对象“看到”的包围体的表面的颜色)。
所生成的纹理在实施方式中被存储例如在适当的便携式存储介质(诸如DVD)上或者在存储器中,以供由图形处理流水线当期望在渲染例如图像时使用纹理时将来使用。
在实施方式中,纹理被存储(编码)为一组贴图(即,各自具有不同级别的细节(分辨率)的原始纹理的多个版本被存储以供使用)。
在实施方式中,纹理被在其要求前面例如“离线”生成(而不是按需且在需要时被“实时地”生成)。这在例如围绕对象的环境是“静态的”即不随时间而改变的情况下是特别有用且适当的。
如以上所讨论的,本文所描述的技术的实施方式的特定优点是因为用于表示颜色值的纹理实际上可以是“静态的”纹理,所以它不必被实时地生成,并且因此可视需要相应地经受一个或更多个非实时优化。因此,在实施方式中,纹理在它已经被生成之后(并且在它被存储以供使用之前)经受一个或更多个处理操作,诸如并且在实施方式中,一个或更多个滤波过程,诸如使一个或更多个卷积滤波器被应用于它。在实施方式中纹理经受下列中的一个或更多个:模糊;亮度处理;对比度处理(例如,增强);锐化等。在实施方式中,纹理经受一个或更多个非实时优化。
在实施方式中,纹理也在它被存储之前被压缩。任何适合的纹理压缩过程可被用于这个。
在其它实施方式中,可以“实时地”(或者在“运行时”中)(例如按需且在需要时)至少部分地生成纹理。这在例如围绕对象的环境是“动态的”即随时间而改变(例如,可以存在在场景中移动的其它对象等)的情况下是特别有用且适当的。实时技术(诸如渲染到纹理)可用于完成这个。
可例如周期性地(例如每帧一次或每组多个帧一次)生成和/或更新纹理。附加地或另选地,可按需且在需要时生成和/或更新纹理。因此,例如,可随着且在围绕对象的环境改变时并且/或者随着且在图像质量的降低抵消了不更新纹理的好处等时生成和/或更新纹理。
类似地,可实时地生成和/或更新整个纹理,或者可实时地生成和/或更新纹理的仅一部分(一些而非全部)。因此,例如,在一个实施方式中,纹理的各个面被实时地单独地生成和/或更新(例如,能每帧或每组多个帧更新纹理的一个面)。
应了解在这些实施方式中,比每帧不太经常地生成和/或更新纹理以及/或者生成和/或更新纹理的不到全部将有利地减小***的处理、存储器和带宽要求。
在实施方式中,以及在生成纹理时,也生成并存储纹理表示(将一起使用)的包围体。此包围体应该并且在实施方式中确实表示将与纹理相结合地使用的要渲染的场景的全部或部分的体积。
在实施方式中定义将与纹理相结合地使用的包围体的数据被与纹理关联地(相关联地)生成和存储。包围体在实施方式中被定义在世界空间中并且在实施方式中与颜色指示纹理对准。再者,视需要,此包围体信息可经受任何期望的后处理操作,诸如压缩。
如以上所讨论的,颜色指示纹理在实施方式中是通过渲染将从纹理的参照位置的视点表示包围体的表面的图像来生成的。这在实施方式中通过(在从纹理的参照位置起的相关方向上)针对包围体上的相应的位置对表面(图像表示表面)上的相应的位置进行采样来做。在此过程中,因为包围体将通常是被定义的实际场景(例如房间)的近似,所以包围体可以不与被定义的场景(例如房间)的表面确切地匹配(在房间的例如墙壁可以是不平坦的或者具有表面粗糙度的情况下)。为了在生成纹理时允许这个实现,针对纹理(针对各个纹元)被采样的表面的点可被并且在实施方式中被允许落在包围体上、在包围体外部或内部(而不是采样点约束于在包围体的壁上)。这将避免在包围体不与场景几何形状确切地匹配的情况下在纹理内引入孔。表面在实施方式中在尽可能靠近包围体上所对应的位置的位置处(在从纹理的参照位置起的相关方向上)被采样,因为采样点离包围体越远,将在使用纹理时特别在进行局部校正时引入的误差越大。因此,包围体在实施方式中被定义为使得它紧密地(在实施方式中尽可能紧密地)和场景(定义场景的表面)匹配,使得可使用接近于(尽可能接近于)包围体的壁的样本来生成纹理。
在实施方式中,多个纹理以及在实施方式中对应的包体是例如为预期可以在执行纹理和场景涉及的应用(例如游戏)时显示的相应的场景和/或对象而生成和存储的。例如,在游戏将包括能包含折射可能相关的至少部分透明的对象的多个场景(诸如房间)的情况下,在实施方式中相应的颜色指示纹理和包围体是针对能开始在玩游戏时显示的各个场景(例如房间)而生成的。纹理和包围体然后可例如与剩余游戏数据存储在一起以供在游戏正被执行时使用。
附加地或另选地,可以生成并存储多个纹理以及在实施方式中对应的包围体,例如场景内的多个至少部分透明的对象中的每一个各一个。
如上所述,本文所描述的技术的实施方式特别适合于考虑在渲染场景时通过至少部分透明的对象的(例如“静态的”环境的)折射的效应。
另一特别有挑战性的渲染情形出现在期望渲染其中对象出现在透明的或半透明的对象后面(即相对于场景的视点(摄像机)位置)或者在透明的或半透明的对象内部的场景时,特别是在对象和/或视点位置中的任何一个或二者正在动态地移动或者改变的情况下。在这种情况下,通过透明的或半透明的对象的折射的效应将会(潜在地)使在透明的或半透明的对象后面或内部的对象的视图失真。
在实施方式中,为了考虑这些效应,针对至少部分透明的对象(“第一”对象)的表面上的采样位置的适当的颜色使用表示至少部分地在第一对象后面和/或在第一对象内的(“第二”)对象的纹理来确定,其中该纹理使用从例如考虑通过第一对象的视图矢量的折射的“折射”视图矢量得到的纹理坐标来采样。
因此,在实施方式中,本文所描述的技术的方法还包括:
当渲染在所述场景中存在至少部分透明的第一对象、和第二对象的场景时,所述第二对象至少部分地在所述第一对象后面和/或在所述第一对象内:
针对所述第一对象的表面上的至少一个采样位置,通过以下步骤来确定要用于表示将在所述采样位置处通过所述第一对象可见的所述第二对象的部分的颜色:
使用从所述场景的视点位置起的视图矢量来确定所述采样位置的折射视图矢量;
使用所述折射视图矢量来确定要用于对表示所述第二对象的图形纹理进行采样的纹理坐标;以及
使用所确定的纹理坐标来对所述图形纹理进行采样以针对所述采样位置确定要用于表示将在所述采样位置处通过所述第一对象可见的所述第二对象的所述部分的颜色。
相应地,在实施方式中本文所描述的技术的图形处理流水线当渲染在所述场景中存在至少部分透明的第一对象、和第二对象(所述第二对象至少部分地在所述第一对象后面和/或在所述第一对象内)的场景时被配置为:
针对所述第一对象的表面上的至少一个采样位置,通过以下步骤来确定要用于表示将在所述采样位置处通过所述第一对象可见的所述第二对象的部分的颜色:
使用从所述场景的视点位置起的视图矢量来确定所述采样位置的折射视图矢量;
使用所述折射视图矢量来确定要用于对表示所述第二对象的图形纹理进行采样的纹理坐标;以及
使用所确定的纹理坐标来对所述图形纹理进行采样以针对所述采样位置确定要用于表示将在所述采样位置处通过所述第一对象可见的所述第二对象的所述部分的颜色。
申请人此外认为这些技术本身是新的且有利的。
因此,本文所描述的技术的另一个实施方式包括一种在渲染场景以供输出时操作图形处理***的方法,该方法包括:
当渲染在所述场景中存在第一至少部分透明的对象、和第二对象的场景时,所述第二对象至少部分地在所述第一对象后面和/或在所述第一对象内:
针对所述第一对象的表面上的至少一个采样位置,通过以下步骤来确定要用于表示将在所述采样位置处通过所述第一对象可见的所述第二对象的部分的颜色:
使用从所述场景的视点位置起的视图矢量来确定所述采样位置的折射视图矢量;
使用所述折射视图矢量来确定要用于对表示所述第二对象的图形纹理进行采样的纹理坐标;以及
使用所确定的纹理坐标来对所述图形纹理进行采样以针对所述采样位置确定要用于表示将在所述采样位置处通过所述第一对象可见的所述第二对象的所述部分的颜色。
本文所描述的技术的另一个实施方式包括一种图形处理流水线,该图形处理流水线包括:
多个处理级,至少包括光栅化输入基元以生成要处理的图形片段的光栅化器,各个图形片段具有与它关联的一个或更多个采样位置,以及处理由所述光栅化器生成的片段以生成输出片段数据的渲染器;
其中所述图形处理流水线当渲染在所述场景中存在第一至少部分透明的对象、和第二对象(所述第二对象至少部分地在所述第一对象后面和/或在所述第一对象内)的场景时被配置为:
针对所述第一对象的表面上的至少一个采样位置,通过以下步骤来确定要用于表示将在所述采样位置处通过所述第一对象可见的所述第二对象的部分的颜色:
使用从所述场景的视点位置起的视图矢量来确定所述采样位置的折射视图矢量;
使用所述折射视图矢量来确定要用于对表示所述第二对象的图形纹理进行采样的纹理坐标;以及
使用所确定的纹理坐标来对所述图形纹理进行采样以针对所述采样位置确定要用于表示将在所述采样位置处通过所述第一对象可见的所述第二对象的所述部分的颜色。
本文所描述的技术的这些另外的实施方式致力于用于在渲染场景以供输出时尤其在被渲染的场景中存在至少一个“第一”至少部分透明的(即不完全不透明的)对象以及存在于所述场景内的至少一个“第二”对象的情形下考虑折射的效应的方法和设备,其中所述第二对象至少部分地在所述第一对象后面(即相对于所述场景的主视点(摄像机)位置)和/或至少部分地在所述第一对象内。在本文所描述的技术的这些另外的实施方式中,为了考虑通过所述第一对象的所述第二对象的折射的效应,针对所述第一对象的所述表面上的采样位置的适当的颜色使用表示所述第二对象的纹理来确定,其中所述纹理使用从例如考虑通过所述第一对象的所述视图矢量的折射的“折射”视图矢量得到的纹理坐标来采样。
如将在下面进一步讨论的,申请人已经认识到,此布置可用于按照特别高效的方式模拟折射的真实世界物理效应。这然后意味着可在实时渲染期间(即在“运行时”)和/或当在图形处理***的处理能力有限的情形下渲染时模拟折射的真实世界物理效应。
本文所描述的技术的这些另外的实施方式可相应地改进渲染质量(并且方便折射的真实世界物理效应的模拟),同时减小图形处理***的处理、存储器、带宽和能力要求,并且可在实时渲染期间(即在“运行时”)和/或当在图形处理***的处理能力更有限的情形下渲染时方便通过场景中的完全或部分透明的对象的折射的真实世界物理效应的模拟。
如本领域技术人员应了解的,本文所描述的技术的这些另外的实施方式酌情可并且在实施方式中确实包括本文所描述的技术的可选特征中的任何一个或更多个或全部。同样地,这些另外的实施方式酌情可与本文所描述的实施方式中的任何一个或更多个或全部组合。
因此,特别地,以上所描述的技术可以用于考虑如通过存在于场景中的至少部分透明“第一”对象看到的环境的折射的效应,同时本文所描述的技术的这些另外的实施方式可以用于考虑如通过至少部分透明的第一对象看到的至少一个“第二”对象的折射的效应,其中第二对象至少部分地在第一对象后面和/或至少部分地在第一对象内。
在本文所描述是技术中考虑的第一至少部分透明的对象应该是(并且在实施方式中是)透明的或半透明的(即不完全不透明的)对象,即使得折射的效应是相关的。对象的全部可以是至少部分透明的,或者对象的仅一部分(一些而非全部)可以是至少部分透明的。
视需要而定,第一对象可以是静态的对象(即,其不在场景中移动或者改变)或动态的对象(即,其随时间而移动和/或改变)。
第一对象可以采取任何适合且期望的形状和/或大小。例如,第一对象的形状可以是平的和/或相对更复杂的,即而不是简单平的(是不平的),例如使得折射的效应将是相对复杂的,例如使得在第一对象后面或者在第一对象内的场景(包括至少第二对象)的视图将由于第一对象而失真。
第一对象可以包括“实心”非中空对象,或者不同于“实心”对象,例如是由被具有不同折射率的介质分开的多个(例如两个或更多个)部分组成的对象,例如中空对象、诸如玻璃的凹面对象等。
在本文所描述的技术中考虑的第二对象可以是存在于被渲染的场景中的任何适合这样的对象。
第二对象应该(并且在实施方式中)通过第一对象至少部分地可见。第二对象在实施方式中是不透明的,但是第二对象也将是可能是部分透明的(即不完全透明的)。
第二对象可以是静态的对象,但是在实施方式中是动态的对象,即在场景中随时间而移动和/或改变(例如被制成动画)的对象。第二对象可以采取任何适合且期望的形状和/或大小。
第二对象应该(并且在实施方式)至少部分地在第一对象后面(即相对于场景的主视点(摄像机)位置(当从场景的主视点(摄像机)位置看时))和/或至少部分地在第一对象内(即当从主视点位置考虑时第二对象在实施方式中至少部分地被第一对象挡住),在实施方式中使得第一对象的至少一个表面存在于主视点(摄像机)位置与第二对象之间的场景中,即使得通过第一对象的第二对象的折射的效应是相关的。第二对象的全部可以在第一对象后面或者在第一对象内,或者第二对象的仅一部分(一些而非全部)可以在第一对象后面和/或在第一对象内。
表示第二对象的图形纹理可采取任何适合且期望的形式。在实施方式中,图形纹理包括二维纹理,例如包括纹元的二维阵列,其中各个纹元可在实施方式中通过一组纹理坐标唯一地标识。
如将在下面更详细地描述的,纹理在实施方式中表示如从在第一对象和/或第二对象(的包围盒)(的例如中心)处端接(即开始或者结束)并且通过场景的主视点位置的“辅助”视点(摄像机)位置看到的第二对象。当与主视点位置相比较时,辅助视点位置可以更靠近或者更远离第一对象和/或第二对象,或者它可以在与主视点位置相同的位置处,在实施方式中只要它保持在在第一对象和/或第二对象(的中心)处端接并且通过主视点位置的矢量上即可。图形纹理在实施方式中表示如当(直接)面对第二对象时从辅助视点看到的第二对象。
因此,应了解在实施方式中,图形纹理表示如从由主视点位置定义的角度看到的但是具有由辅助视点位置定义的尺度(大小)的第二对象。
可以视需要而定选择图形纹理中的第二对象的表示的尺度(大小),例如通过(沿着在第一对象和/或第二对象(的中心)处端接并且通过场景的主视点位置的矢量)将辅助视点位置移动得更靠近或者更远离第一对象和/或第二对象(的中心)。在实施方式中,图形纹理中的第二对象的表示的尺度被固定和/或预定义,在实施方式中通过固定和/或预定义第一对象和/或第二对象(的中心)与辅助视点位置(在世界空间中)之间的距离。
图形纹理应该(并且在实施方式中确实)表示第二对象,好像将看到是第一对象(并且在实施方式中场景中的任何其它对象)不存在,即在实施方式中没有由于折射而引入的任何种类的失真。因此,图形纹理在实施方式中表示(仅)第二对象(在实施方式中如从辅助视点位置看到的)缺少第一对象(并且在实施方式中缺少场景中的任何其它对象)。
图形纹理包括例如表示(仅)整个第二对象(在实施方式中缺少第一对象(并且在实施方式中缺少场景中的任何其它对象))的三维纹理也将是可能的。
纹理应该并且在实施方式中确实存储指示第二对象例如在各种纹元位置处的颜色的一个或更多个颜色值(例如所有三个RGB颜色值)。
纹理能单独存储颜色值(即,仅存储一个或更多个RGB颜色信道)(并且在实施方式中可以是RGB纹理)。另选地,纹理也能存储一个或更多个数据通道,诸如α(透明度)通道(例如,纹理可以是RGBα纹理(并且在实施方式中,这个被完成))。在这种情况下,α(透明度)数据通道可被用于不同目的。例如,RGBα纹理能将要按照本文所描述的技术的方式使用的纹理存储在RGB颜色通道中,并且也将用于其它目的的第二纹理存储在α通道中。这将然后允许相同的纹理被用于不同目的。
在纹理也包括α通道的实施方式中,α通道用于表示第二对象的透明度(即,纹理可以包括透明度(α)通道)。
在纹理也包括透明度通道的实施方式中,透明度通道也被用在本文所描述的技术的方法中,例如作为要在计算折射的效应时与RGB颜色值一起使用的另一个透明度参数。
在本文所描述的技术中,要用于表示将在第一对象的表面上的采样位置处通过第一对象可见的第二对象的部分的颜色通过下述步骤来确定:使用从主视点(摄像机)位置起的视图矢量来确定(需要颜色的)采样位置的折射视图矢量(即,考虑到当视图矢量在所述采样位置处通过第一对象的表面时的折射的效应,从视点(摄像机)位置到第二对象的视图矢量的路径)。
可按照任何适合且期望的方式确定这个。
在一个实施方式中,从主视点(摄像机)位置到采样位置(在世界空间中)的视图矢量被确定,并且然后从采样位置视图矢量确定折射视图矢量。在一个实施方式中,从主视点(摄像机)位置到被考虑的采样点涉及的基元的顶点的矢量被确定,并且然后从主视点(摄像机)位置到采样点的矢量通过那些视点到顶点矢量的适当的(例如硬件)内插来确定。视点到顶点矢量在实施方式中在世界空间中被计算。在实施方式中,针对各个顶点,从视点到顶点的矢量被确定。从视点位置到采样点的矢量在实施方式中然后通过视点到顶点矢量的适当的内插来确定,并且然后在实施方式中用于确定折射视图矢量。
在另一实施方式中,从视点(摄像机)位置到被考虑的采样点涉及的基元的顶点的矢量被确定(在世界空间中),并且然后这些矢量各自用于针对各个顶点来计算折射视图矢量。在实施方式中,针对各个顶点,从视点到顶点的矢量被确定并且所对应的折射视图矢量被计算。采样点的折射视图矢量在实施方式中然后通过顶点折射视图矢量的适当的(例如硬件)内插来确定。
其它布置当然将是可能的。
视点到采样点矢量(无论通过从视点到顶点矢量的内插还是以其它方式生成)或视点到顶点矢量可用于视需要而定按照任何方式确定所对应的折射视图矢量。
从视图矢量确定折射视图矢量在实施方式中是通过考虑折射在视图矢量(中的每一个)上(例如,随着它通过第一对象的表面)的效应来执行的。因此,在实施方式中,使用视图矢量来确定折射视图矢量包括确定由于视图矢量在第一对象的表面处的折射而导致的视图矢量的方向的改变。
折射的效应是为了随着光线从具有第一折射率(例如,n1)的第一介质传递到具有第二不同的折射率(例如,n2)(即其中n1≠n2)的第二介质而(潜在地)更改它的方向。
方向被更改的程度通过斯涅耳定律来给出:
其中θ1是从两个介质之间的边界的法线测量的传入光线的入射角,并且θ2是从边界的法线测量的折射光线的折射角。
在本文所描述的技术的实施方式中,折射视图矢量从视图矢量确定,例如当它通过第一对象的表面时。因此,围绕场景内的第一对象的环境在实施方式中对应于“第一介质”,并且第一折射率n1在实施方式中对应于围绕第一对象的环境的折射率。周围介质可以被认为是例如空气,并且所以第一折射率将通常(并且在一个实施方式中)等于1(即n1=1)。围绕第一对象的环境(“第一介质”)当然可以包括具有相同或不同的折射率的其它材料,诸如水等。
相应地,在实施方式的布置中,第一对象对应于“第二介质”,并且所以第二折射率n2在实施方式中对应于第一对象的折射率。
第一对象可以具有单一均匀的折射率,或者它可以具有例如根据对象内的位置而改变的非均匀的折射率。
周围介质和第一对象的折射率可按照任何适合且期望的方式(例如作为一个或更多个单值(例如其中对象和/或介质具有均匀的折射率))被提供和定义。例如,能使用图形纹理来指示(存储)非均匀的(例如在三个维度上变化)折射率。
在实施方式中,为了从视图矢量确定折射视图矢量,第一对象的表面在采样位置或顶点处的法线被确定和使用。因此,在实施方式中,过程包括使用第一对象的表面在采样点或顶点处的法线矢量来确定折射视图矢量。可以视需要而定按照任何方式做这个,但是如将在下面进一步讨论的,在实施方式中,这通过确定并使用采样位置位于上面或者顶点涉及的第一对象的表面上的基元的法线来做。
可以按照任何适当且期望的方式(例如,基于使用归一化视图矢量(入射矢量)和法线矢量的点积的斯涅耳定律(如上所述)、勾股定理以及折射率之比)确定折射视图矢量。
在实施方式中,预定义“折射”函数用于确定折射视图矢量R:
R=refract(I,N,eta)
其中I是归一化视图或入射矢量,N是归一化法线矢量,eta是折射率的比,eta=n1/n2。
其它布置当然将是可能的。
例如,将能够通过使用斯涅耳定律(如上所述)来首先确定视图矢量的入射角θ1(例如通过确定法线矢量与从主视点(摄像机)位置到被考虑的采样点或顶点的视图矢量之间的角度)并且在实施方式中然后确定折射角θ2来确定折射视图矢量。入射角θ1、第一介质的折射率n1(例如,围绕第一对象的介质的折射率)以及第一对象的折射率n2可以在斯涅耳定律中用于确定折射角。
然后可以使用折射率θ2例如通过随着视图矢量在所述采样位置或顶点处通过第一对象的表面而有效地使它旋转来确定折射视图矢量。
因此,折射视图在实施方式中是在实施方式中基本上在与视图矢量相同的一般方向上但是以等于从第一对象的表面在采样位置或顶点处的法线测量的折射角θ2的角度并且在实施方式中在由法线矢量和视图矢量定义的平面中从所述采样位置或顶点延伸的矢量。
在各种实施方式中,可在实施方式中在确定折射视图矢量时考虑折射的相对更复杂的效应。
因此,例如,在第一对象具有非均匀的折射率的情况下,从视图矢量确定折射视图矢量可以包括更复杂的计算,所述计算例如视需要考虑视图矢量随着它通过不同折射率的区域时的路径。
附加地或另选地,可以通过把折射视图矢量制成动画来(近似地)考虑第一对象内的改变或运动介质(诸如例如流动水)的效应。可以视需要而定选择动画的特性以例如表示介质随时间的改变。例如,能对折射视图矢量应用正弦变化或某个函数以把它制成动画。这表示用于渲染这些介质的特别简单且高效的技术,例如其中不必直接确定介质中的改变对折射视图矢量的影响。因此,在实施方式中,过程包括把折射视图矢量制成动画(即,随着时间的推移而使它变化(扰动)(例如,并且在实施方式中,在其幅度和/或方向方面)。
附加地或另选地,可通过例如确定多个(稍微)不同的折射视图矢量(例如,每纹理的RGB颜色通道各一个)并且使用折射视图矢量中的每一个来针对颜色通道中的每一个对纹理进行采样来考虑色差的效应(在实施方式中按照本文所描述的技术的方式)。
所确定的采样位置的折射视图矢量可以在图形处理流水线的另外级中被“照原样”输出和使用,但是在做这个之前(即必要时)可以被(并且在一个实施方式中被)首先归一化。因此,在实施方式中折射视图矢量是在由法线矢量和视图矢量定义的平面中在由折射角θ2定义的方向上从所述采样位置延伸的单位矢量。
这些过程可由图形处理流水线的任何期望且适合的级或组件来执行。在实施方式中,这些过程由图形处理流水线的顶点着色级来执行,在实施方式中通过该级执行适当的顶点着色程序(顶点着色器)以确定折射视图矢量并且然后输出该折射视图矢量以供由图形处理流水线的其它级使用。图形处理流水线的片段着色级也将能够执行这些过程中的一些或全部。
折射视图矢量可以用于按照任何期望且适合的方式确定要用于对表示第二对象的图形纹理进行采样的纹理坐标。
在实施方式中,此过程包括首先为所述采样位置确定“未修改的”纹理坐标,然后使用折射视图矢量来修改那些纹理坐标(必要时)以达到要用于对图形纹理进行采样的纹理坐标。
未修改的纹理坐标在实施方式中是通过将表示第二对象的图形纹理映射到第一对象的表面上并且然后为所述采样位置确定适当的(未修改的)纹理坐标来确定的。
这可以例如通过将图形纹理映射到第一对象的前表面上或者通过将图形纹理映射到第一对象的后表面上来做。例如取决于第二对象相对于第一对象的位置,可以将纹理映射到第一对象的前表面或后表面上。例如,在实施方式中,纹理在第二对象在第一对象内部的情况下被映射到对象的前表面上。类似地,在实施方式中纹理在第二对象在第一对象后面的情况下被映射到第一对象的前表面和/或后表面上。
当确定未修改的纹理坐标时,可以按照任何适合且期望的方式将图形纹理映射到第一对象的表面上。然而,在实施方式中,纹理被映射到第一对象的(前或后)表面上,好像该纹理被投影到在第一对象内或后面的投影平面上一样(即使用投影纹理映射)。
因此,在实施方式中,定义了在第一对象内部或后面的投影平面。该投影平面在实施方式中与在第一对象和/或第二对象(的包围盒)(的中心)处端接并且通过场景的主视点位置的矢量正交,并且在实施方式中位于由第二对象的位置定义的位置处。
在实施方式中,投影平面位于第一对象(的中心)处。然而,也将能够将投影平面定位在第二对象(的中心)处并且/或者将投影平面移动至相对地更靠近或者远离主视点(摄像机)位置(即沿着在第一对象和/或第二对象(的中心)处端接并且通过场景的主视点位置的矢量),以例如有效地放大或者减小折射效应。
如以上所讨论的,如此确定的未修改的纹理坐标在实施方式中然后在实施方式中使用折射视图矢量来修改(必要时),以达到要用于对图形纹理进行采样的纹理坐标。这在实施方式中通过考虑视图矢量与折射视图矢量之间的差异(若有的话)来做。因此,在实施方式中,确定要用于对表示第二对象的图形纹理进行采样的纹理坐标的步骤包括使用折射视图矢量来修改所确定的未修改的纹理坐标。
在实施方式中,在第二对象的位置处的视图矢量与折射视图矢量之间的差异被确定并且此差异然后用于修改未修改的纹理坐标。这在实施方式中通过确定在投影平面处的视图矢量与折射视图矢量之间的差异来做。
因此,在实施方式中在投影平面上由视图矢量交叉的位置被确定,并且在投影平面上由折射视图矢量交叉的位置在实施方式中也被确定(在实施方式中在世界空间中)。差异矢量在实施方式中然后被确定为视图矢量交叉点与折射视图矢量交叉点之间的矢量(在实施方式中在世界空间中)。
差异矢量在实施方式中然后用于修改纹理坐标(必要时),即以达到要用于针对所述采样位置对表示第二对象的图形纹理进行采样的纹理坐标(即以确定要用于考虑折射的效应表示将在采样位置处通过第一对象可见的第二对象的部分的颜色)。可以按照任何适合且期望的方式完成这个,但是在实施方式中,差异矢量在实施方式中首先被从世界空间变换成定义纹理的空间,然后差异矢量的纹理空间定义在实施方式中被应用于酌情例如通过矢量加法来修改针对所述采样点而确定的未修改的纹理坐标。
其它过程当然将是可能的。
这些过程可再次由图形处理流水线的任何期望且适合的级或组件来执行。在实施方式中,这些过程由图形处理流水线的顶点着色级来执行,在实施方式中通过该级执行适当的顶点着色程序(顶点着色器)以确定要用于对表示第二对象的图形纹理进行采样的纹理坐标,并且然后输出所确定的纹理坐标以供由图形处理流水线的其它级使用。
结果得到的纹理坐标用于对图形纹理进行采样以针对采样位置确定要用于表示将在所述采样位置处通过第一对象可见的第二对象的部分的颜色。
在图形纹理也包括α通道的情况下,那么结果得到的纹理坐标也应该用于(并且在实施方式中用于)对存储在该α通道中的α值进行采样。
因此,应了解在本文所描述的技术的实施方式中,在(在第二对象的位置处)在视图矢量与折射视图矢量之间存在差异的情况下,即,由于通过第一对象的视图矢量的折射,那么用于对表示第二对象的图形纹理进行采样的纹理坐标被适当地修改,使得从纹理采样并且用于所述采样位置的颜色将考虑折射的效应有效地表示将在采样位置处通过第一对象可见的第二对象的部分(并且相应地,在由于通过第一对象的视图矢量的折射的缺少而(在第二对象的位置处)在视图矢量与折射视图矢量之间不存在差异的情况下,那么未修改的纹理坐标在实施方式中未被修改)。如以上所讨论的,这表示用于当对象存在于透明的或半透明的对象后面或内时确定折射的“真实世界”物理效应的特别方便且高效的技术。
可按照任何期望且适合的方式对纹理进行采样。例如,视需要,可在对纹理进行采样时使用适当的滤波(内插)过程,诸如双线性滤波。类似地,在纹理作为一组贴图被提供的情况下,采样过程在实施方式中被配置为例如(并且在实施方式中)使用三线性滤波来对贴图进行滤波(内插)以提供经采样的纹理值。
在纹理形式为一组贴图的情况下,采样过程在实施方式中也包括确定应该对纹理进行采样的一个或多个贴图级别(细节的级别)(并且然后针对纹理对如此确定的贴图级别进行采样)。
其它布置当然将是可能的。
这些过程可再次由图形处理流水线的任何期望且适合的级或组件来执行。在实施方式中它们由图形处理流水线的片段着色级(片段着色器)来执行,在实施方式中通过执行适当的片段着色程序。视需要,它们也或者替代地可以至少部分地由图形处理流水线的适当的纹理映射级来执行。
一旦已经对纹理进行了采样,然后就可视需要而定(例如,在确定被考虑的第一对象的表面上的采样点的颜色的例如常规计算中)使用针对第二对象采样的颜色。
可视需要而定使用针对采样点采样的颜色以模拟采样点处的折射的效应。所确定的颜色在实施方式中在确定要用于采样位置的所输出的渲染颜色时被使用。因此,从纹理采样的颜色在实施方式中被用于所述采样位置。
因此,在实施方式中,本文所描述的技术的方法还包括在渲染采样位置的输出版本时使用(并且本文所描述的技术的图形处理流水线还被配置为使用)针对采样位置所确定的颜色。在特定实施方式中,所确定的颜色用于表示将在采样位置处通过第一对象可见的第二对象的部分。
所确定的颜色可以被“照原样”使用,即作为通过渲染过程针对所述采样位置而确定并输出的最终颜色(例如,作为针对所述采样位置而显示的最终颜色)。另选地,所确定的颜色可以与针对所述采样位置而确定的和/或例如由一个或更多个其它级在渲染过程中修改的一个或更多个其它颜色组合(例如混合)。
因此,例如,在一个特定实施方式中,所确定的颜色(即其表示将在采样位置处通过第一对象可见的第二对象的部分)与第一对象在所述采样位置处的颜色组合(混合)。在实施方式中,通过第一对象的第二对象的可见性应该取决于这里考虑的第一对象的透明度,例如通过在组合(混合)操作中对第一对象使用适当的α值。在实施方式中,第二对象的(相对)可见性随着第一对象的透明度增加而增加,并且反之亦然。
附加地或另选地,可以对所述采样位置应用一个或更多个另外的图形效应,例如,以修改采样位置的颜色,诸如照明效应、反射等。
类似地,在也对纹理的α通道进行采样的情况下,可视需要而定使用针对采样点采样的透明度信息来模拟采样点处的折射的效应。
这些过程可再次由图形处理流水线的任何期望且适合的级或组件来执行。在实施方式中它们由图形处理流水线的渲染器来执行,并且在实施方式由图形处理流水线的片段着色级(再次在实施方式中通过实行执行所期望的渲染计算的适当的片段着色程序)来执行。
如应了解的,情况可以是针对第一对象的表面上的一个或更多个采样位置,第二对象实际上在所述采样位置处通过第一对象不可见。可以在本文所描述的技术的实施方式中通过将表示第二对象的纹理布置为在一个或更多个适当的纹元处没有颜色和/或完全透明的(α=0)颜色例如使得在实施方式中将对来自在以上所描述的组合(混合)操作中表示第二对象的纹理的所述采样位置的颜色不存在贡献来说明这个。
也将能够简单地避免在确定了第二对象在一个或更多个采样位置处通过第一对象不可见的情况下针对第一对象的表面上的一个或更多个采样位置执行本文所描述的技术中的技术。
在实施方式中,第二对象的包围体(例如包围球体或盒)首先用于确定第二对象是否能从当前视点可见,并且在确定了第二对象从当前视点不可见的情况下,省略针对第二对象的进一步处理。
在实施方式中,针对第二对象通过其不可见的第一对象的表面上的一个或更多个采样位置中的一个或更多个,要用于表示将在所述采样位置处通过第一对象可见的场景的部分(即除第二对象以外)的颜色在实施方式中被确定。
可以按照任何适合且期望的方式完成这个,然而此过程在实施方式中使用折射视图矢量以便考虑通过第一对象的折射的效应。在实施方式中,如上所述,使用本文所描述的技术的第一和第二实施方式的技术及其实施方式(即通过对“立方体贴图”进行采样)来完成这个。
也将能够将这些技术用于第二对象针对其可见的第一对象的表面上的采样位置,但是在第二对象是至少部分透明的情况下,能够例如针对在所述采样位置通过第二对象可见的场景的部分确定颜色贡献。在这种情况下,所确定的颜色贡献在实施方式中在以上所描述的组合操作中被组合(混合)。
因此,应了解根据实施方式,(折射)第二对象、在第一对象的表面后面的场景的(折射)部分(除第二对象以外)、第一对象的后表面以及这些的组合(混合)中的任何一个或更多个或全部可以出现(并且被渲染为出现)在第一对象的表面的不同部分上。
能单独地针对采样点执行以上过程的任一个或全部,或者能针对多个采样点的集合执行它们中的一些或全部(这然后将具有针对正被考虑的集合内的采样点执行过程的效应)。例如,在图形处理流水线对各自表示多个采样位置的集合的片段操作的情况下,能在每片段基础上而不是单独针对片段表示的各个采样点执行本文所描述的技术的过程(并且在实施方式中这是所完成的)。在这种情况下,将因此存在例如针对片段确定的单个颜色,其然后将被用于该片段正用于渲染的各个采样点。
应了解,尽管已经在上面参照确定在所述第一对象的表面上的给定采样点处的颜色描述了本文所描述的技术,然而本文所描述的技术的技术能被并且在实施方式中被用于第一对象的表面上的多个采样点,并且在实施方式中用于需要在渲染场景时考虑折射的第一对象的表面上的各个采样点。因此,在实施方式中针对正被考虑的第一对象的表面上的多个采样点中的每一个重复过程。
将通常(并且在实施方式中)在渲染过程中通过更多的(并且在实施方式中多个)基元中的一个来表示第一对象的表面。因此,在实施方式中,所述过程包括(并且流水线被配置为):通过渲染表示第一对象的表面的一个或更多个至少部分透明的基元来渲染第一对象,以及针对一个或更多个基元中的至少一个上的至少一个采样位置,按照本文所描述的技术的方式确定要用于表示将在采样位置处通过基元可见的第二对象的部分的颜色。在实施方式中针对基元上的各个采样位置并且在实施方式中针对组成被考虑的表面的多个至少部分透明的基元中的每一个重复所述过程。
在一个实施方式中,单个渲染通道用于确定通过第一对象的折射的效应(即按照以上所描述的方式)。因此,在实施方式中,确定要用于表示将在采样位置处通过第一对象可见的第二对象的部分的颜色的步骤作为单个渲染通道的一部分被执行。
尽管单个渲染通道可以视需要而定被用于任何至少部分透明的(第一)对象,然而申请人已经发现,这在例如第一对象包括“实心”非中空对象(例如,使得视图矢量将随着它通过并且被对象折射而仅与对象交互一次)的情况下是特别适当且有用的。因此,在实施方式中,在对象包括“实心”对象的情况下,那么在实施方式中用于确定折射的效应的过程包括单通道过程。此单个渲染通道在实施方式中渲染对象的前表面和后表面二者。
在另一实施方式中,一个或更多个附加渲染通道可以用于渲染第一对象。在一个这样的实施方式中,当渲染至少部分透明的第一对象时,在实施方式中第一对象的一些(而非全部)在第一渲染通道中被渲染,并且然后对象的剩余部分中的一些或全部在第二渲染通道(其在实施方式中对应于以上所讨论的本文所描述的技术的渲染通道)中被渲染。
再者,尽管两个或更多个渲染通道可以视需要而定被用于任何至少部分透明的对象(诸如“实心”对象),然而申请人已经发现,这在例如至部分少透明的第二对象不同于(不是)“实心”对象例如是由被具有不同折射率(例如,使得视图矢量将随着它通过并且被对象折射而与对象交互不止一次)的介质分开的多个(例如两个或更多个)部分组成的对象(例如中空对象、诸如玻璃的凹面对象等)的情况下并且在第二对象在第一对象内部的实施方式中是特别适当且有用的。因此,在对象包括不同于(不是)“实心”对象的实施方式中,并且在第二对象在第一对象内部的实施方式中,那么过程在实施方式中包括一个或更多个附加渲染通道(即,总共两个或更多个渲染通道)。
在一个这样的实施方式中,对象的后表面(或“背面”)即对象的离场景的主视点(摄像机)位置最远(并且在实施方式中在第二对象后面)的表面在所述第一渲染通道中被渲染,并且然后对象的其它部分(例如第一对象的相对地更靠近场景的视点(摄像机)位置的部分,诸如在实施方式中在第二对象前面的第一对象的前表面(或“前面”))在第二渲染通道中被渲染。
在第一渲染通道中第一对象的除后表面以外的部分(即前表面)在实施方式中未被渲染,即在实施方式中被从渲染中“剔除”。因此在针对第一对象的第一渲染通道中,前面剔除在实施方式中被启用。
在第一渲染通道中,可以按照常规方式渲染对象的后表面。然而,也将能够例如考虑通过后表面的折射的效应。在实施方式中,如上所述,使用本文所描述的技术的第一和第二实施方式的技术及其实施方式(即通过对“立方体贴图”进行采样)来做这个。
在第二渲染通道中,第一对象的除后表面以外的部分(即对象的前表面)在实施方式中然后被渲染(即按照本文所描述的技术的方式),在实施方式中无需渲染后表面,即,对象的后表面在实施方式中被从渲染中“剔除”。因此在针对对象的第二渲染通道中,背面剔除在实施方式中被启用。
第二渲染通道在实施方式中在为对象的(前)表面上的采样位置确定颜色值时使用第一渲染通道的结果。在实施方式中第一渲染通道的结果例如在以上所描述的组合(混合)操作中与第二渲染通道的结果混合(阿尔法混合)。可视需要而定选择做这个的方式。例如,可视需要而定选择混合操作的类型和混合因子(例如,组合结果的相对比例)。
可视需要而定选择从第二渲染通道输出的采样位置的最终颜色的透明度(α值)。恒定透明度(α值)可以被定义且用于整个对象,或者可以定义并使用跨越对象变化的透明度(α值)。非恒定透明度(α值)能被存储例如在图形纹理中。
其它过程当然将是可能的。
不管用于确定折射的效应的渲染通道的数量如何,一个或更多个附加渲染通道可以视需要被例如用于其它目的。
尽管已经在上面特别参照确定由第一透明的或半透明的对象在第一对象后面和/或在第一对象内部的第二对象的视图上引起的折射的效应描述了本文所描述的技术,然而可并且在实施方式中在多个第二对象在一个或更多个第一对象后面和/或在一个或更多个第一对象内部的情形下使用本文所描述的技术的技术。在这种情况下,按照本文所描述的技术的方式,单个图形纹理能表示多个第二对象并且/或者能提供并使用多个图形纹理,所述多个图形纹理例如各自表示多个第二对象中的一个或更多个。
相应地,能使用本文所描述的技术的技术来渲染多个透明的或半透明的第一对象。
也将能够使用本文所描述的技术的技术来考虑并应用递归折射(recursiverefraction)。例如,能考虑通过一个或更多个第二对象的折射的效应,例如以引入二次、三次(等)折射效应。能例如通过对第一对象和一个或更多个第二对象(等)应用本文所描述的技术的方法来完成这个。在此实施方式中,应该在实施方式中按照取决于各个对象的位置的次序(例如并且在实施方式中(相对于主视点位置)从最后面的对象开始并且以最前面的对象结束)准备纹理。
在实施方式中针对被渲染的场景的序列中的多个场景例如并且在实施方式中针对要渲染的一系列帧中的各个帧重复本文所描述的技术的过程,所述各个帧包括折射可能是相关的一个或更多个至少部分透明的对象。也可以视需要而定并且视需要针对存在于场景中的各个至少部分透明的对象适当地执行它。
本文所描述的技术也延伸到表示第二对象的纹理的生成并且延伸到纹理它本身。例如,它可以是纹理将被单独地和/或提前生成(和存储),并且然后,例如,提供给图形处理器以供使用。本文所描述的技术延伸到这些活动,以及到用于像以上所描述的那样渲染折射的纹理的使用。
因此,本文所描述的技术的另一实施方式包括一种生成当渲染场景以供输出时在图形处理***中使用的纹理的方法,其中在所述场景中存在第一至少部分透明的对象、和第二对象,所述第二对象至少部分地在所述第一对象后面和/或在所述第一对象内,该方法包括:
通过以下步骤来生成包括纹理纹元的阵列以供当从主视点位置渲染所述场景时使用的图形纹理:
设定所述纹理中的纹元值,使得它们各自存储表示如从辅助视点位置看到的所述第二对象的所述颜色的一个或更多个颜色值,所述辅助视点位置位于在所述第一对象和/或所述第二对象处端接并且通过所述主视点位置的矢量上;以及
存储表示所述纹理的所述纹元值的数据。
本文所描述的技术的另一实施方式包括一种用于生成当渲染场景以供输出时在图形处理***中使用的纹理的设备,其中在所述场景中存在至少部分透明的第一对象、和第二对象,所述第二对象至少部分地在所述第一对象后面和/或在所述第一对象内,该设备包括处理电路,该处理电路被配置为:
通过以下步骤来生成包括纹理纹元的阵列以供当从主视点位置渲染所述场景时使用的图形纹理:
设定所述纹理中的纹元值,使得它们各自存储表示如从辅助视点位置看到的所述第二对象的所述颜色的一个或更多个颜色值,所述辅助视点位置位于在所述第一对象和/或所述第二对象处端接并且通过所述主视点位置的矢量上;以及
存储表示所述纹理的所述纹元值的数据。
本文所描述的技术的另一实施方式包括一种当从主视点位置渲染场景以供输出时在图形处理***中使用的纹理,其中在所述场景中存在至少部分透明的第一对象、和第二对象,所述第二对象至少部分地在所述第一对象后面和/或在所述第一对象内,该纹理包括:
纹理纹元的阵列,其中:
所述纹元值被设定为使得它们各自存储表示如从辅助视点位置看到的所述第二对象的颜色的一个或更多个颜色值,所述辅助视点位置位于在所述第一对象和/或所述第二对象处端接并且通过所述主视点位置的矢量上。
如本领域技术人员应了解的,本文所描述的技术的这些实施方式酌情可并且在实施方式中确实包括本文所描述的技术的可选特征中的任何一个或更多个或全部。
因此,例如,纹理在实施方式中形式为二维纹理贴图。类似地,在实施方式中,以及在存储一个或更多个颜色值通道(例如一个或更多个RGB颜色通道)时,纹理在实施方式中也存储根据将与纹理一起使用的第二对象的透明度设定其值的α(透明度)值通道。例如与渲染过程相关的其它信息也能被存储在纹理(的一个或更多个例如附加通道)中。
纹理在实施方式中是通过从辅助视点位置渲染第二对象的图像来生成的,同时在实施方式中用于做这个的“辅助摄像机”(直接)面对第二对象。在实施方式中,场景内的第一对象(以及在实施方式中场景中的任何其它对象)在做这个时未被考虑(例如被从渲染中剔除)。如以上所讨论的,这然后意味着纹理将有效地表示(仅)“如”从辅助视点位置“看到”的第二对象。设备可以例如包括可做这个的任何适合的处理器,诸如图形处理器、CPU等。
辅助视点位置可以位于在第一对象和/或第二对象(的包围盒)处端接(即开始或者结束)并且通过主视点位置的矢量上的任何位置处。因此,当与主视点位置相比较时,辅助视点位置可以更靠近或者更远离第一对象和/或第二对象,或者它可以在与主视点位置相同的位置处,在实施方式中只要它保持在在第一对象和/或第二对象(的包围盒)处端接并且通过主视点位置的矢量上即可。
矢量可以在第一对象或第二对象处的任何点处端接(开始或者结束)。在实施方式中,矢量在第二对象在第一对象内部的情况下在第二对象处端接。在另一实施方式中,矢量在第二对象在第一对象后面并且/或者正在移动或者可能在第一对象后面移动(例如正在通过或者可以在第一对象后面通过)的情况下在第一对象处端接。在一个实施方式中,在第二对象从其在第一对象内部或后面的位置移动的情况下,那么矢量在第一对象处端接。
矢量端接的位置应该(并且在实施方式中)与投影平面的位置一致。在一个实施方式中,矢量在图形纹理表示仅单个第二对象的情况下在第二对象处端接。在此实施方式中投影平面在实施方式中集中于第二对象上。在另一实施方式中,矢量在图形纹理表示多个第二对象的情况下在第一对象(的中心)处端接。在此实施方式中,投影平面在实施方式中集中于第一对象上。
矢量在实施方式中在第一对象或第二对象的中心处端接,但是可以视需要而定并酌情使用第一或第二对象内的任何其它位置。在一个实施方式中,矢量在第一对象的覆盖第二对象的部分(例如第一对象的包含或者挡住第二对象的部分)(的中心)处端接。在一个实施方式中,例如在第一对象和/或第二对象包括凹面对象的情况下,矢量可以不在第一或第二对象内端接。在这种情况下,矢量应该(并且在实施方式中确实)在对象的包围盒处端接。
在实施方式中,矢量在第一对象的包围盒的中心处端接。
可以视需要而定选择第一对象和/或第二对象(的中心)与辅助视点位置之间的距离。在实施方式中,(在世界空间中)第一对象和/或第二对象(的中心)与辅助视点位置之间的距离被固定和/或预定义。如以上所讨论的,这有效地意味着将固定和/或预定义图形纹理中的第二对象的表示的尺度。
所生成的纹理在实施方式中被存储例如在适当的便携式存储介质(诸如DVD)上或者在存储器中,以供由图形处理流水线当期望在渲染例如图像时使用纹理时将来使用。
在实施方式中,纹理被存储(编码)为一组贴图(即,各自具有不同级别的细节(分辨率)的原始纹理的多个版本被存储以供使用)。
在一个实施方式中,可以针对第二对象生成(并使用)单个图形纹理。这在例如第二对象和/或场景的主视点(摄像机)位置将是“静态的”即将不随时间而改变的情况下是特别适当的。
然而,在实施方式中,针对第二对象生成多个纹理。
在一个这样的实施方式中,针对第二对象在实施方式中生成多个纹理以供在从多个不同的主视点位置渲染场景时使用。在此实施方式中,多个纹理中的每一个在实施方式中被生成以便从场景的多个不同的主视点(摄像机)位置(在实施方式中按照以上所讨论的方式)表示第二对象。在实施方式中针对场景的所有可能的不同的主视点(摄像机)位置生成一个或更多个纹理。这然后方便本文所描述的技术的技术被用于场景的多个不同的主视点(摄像机)位置(并且在实施方式中用于场景的所有可能的不同的主视点(摄像机)位置)。
可以生成并存储对象的这样的多个纹理,例如,作为适合的3D(体积)纹理。
附加地或另选地,可以针对第二对象生成各自在不同的时刻表示第二对象的多个纹理。在实施方式中做这个以便允许在第二对象随时间而改变时(例如在第二对象是“动态的”和/或动画对象的情况下)使用本文所描述的技术的技术。
在实施方式中,纹理可以在其要求前面例如“离线”生成(而不是按需且在需要时被“实时地”生成)。
在此实施方式中,在多个纹理在其要求前面被生成的情况下,那么在实施方式中当纹理是使用所需要的(例如按照如以上所讨论的本文所描述的技术的方式)时,作出关于应该使用多个纹理中的哪一个的确定。可以例如基于场景的主视点(摄像机)位置和/或基于场景的当前时间(例如,基于第二对象的动画的当前时间)做这个。
因此,在实施方式中,本文所描述的技术的方法还包括例如并且在实施方式中基于场景的当前主视点(摄像机)位置和/或基于场景的当前时间来确定(并且流水线被配置为确定)要使用多个(预生成的)纹理中的哪一个来确定要用于表示将通过第一对象可见的第二对象的部分的颜色。如此确定的纹理在实施方式中然后用于按照本文所描述的技术的方式确定要用于表示将通过第一对象可见的第二对象的部分的颜色。
本文所描述的技术的这些实施方式的特定优点是因为用于表示第二对象的纹理实际上可以是“静态的”纹理,所以它不必被实时地生成,并且因此可视需要相应地经受一个或更多个非实时优化。因此,在实施方式中,纹理中的一个或更多个在它已经被生成之后(并且在它被存储以供使用之前)经受一个或更多个处理操作,诸如并且在实施方式中,一个或更多个滤波过程,诸如使一个或更多个卷积滤波器被应用于它。在实施方式中纹理中的一个或更多个经受下列中的一个或更多个:模糊;亮度处理;对比度处理(例如,增强);锐化等。在实施方式中,纹理中的一个或更多个经受一个或更多个非实时优化。
在实施方式中,纹理中的一个或更多个也在它被存储之前被压缩。任何适合的纹理压缩过程可被用于这个。
在实施方式中,可以针对预期可以在执行纹理涉及的应用(例如游戏)时显示的一个或更多个对象来生成并存储多个纹理。纹理然后可例如与剩余游戏数据存储在一起以供在游戏正被执行时使用。
在这些实施方式中,可“实时地”(或者在“运行时”中)(例如,按需且在需要时)生成纹理。这在例如第二对象是“动态的”即随时间而改变(例如被制成动画等)的情况下和/或在主视点(摄像机)位置随时间而改变的情况下是特别有用且适当的。实时技术(诸如渲染到纹理)在实施方式中用于做这个。
因此,本文所描述的技术的方法在实施方式中还包括(并且流水线在实施方式中被配置为)当渲染场景时:生成要用于确定要用于表示将通过第一对象可见的第二对象的部分的颜色的纹理。可以在与纹理将被使用的相同的(例如第二)渲染帧或通道中或者在另一渲染帧或通道中生成该纹理。
在实施方式中,可周期性地(例如每帧一次或者每组多个帧一次)生成和/或更新纹理。
附加地或另选地,可按需且在需要时生成和/或更新纹理。因此,例如,可随着并且在第二对象改变时和/或随着并且在主视点(摄像机)位置改变时以及/或者随着并且在图像质量的降低抵消了不更新纹理的好处等时生成和/或更新纹理。
因此,在实施方式中,当渲染场景时,例如基于场景的主视点(摄像机)位置(例如取决于该位置是否已经改变)和/或基于场景的当前时间(例如基于第二对象的动画的当前时间)作出关于是否应该生成(新)纹理(和/或是否应该更新现有纹理)的确定。
因此,在实施方式中,本文所描述的技术的方法还包括在实施方式中基于场景的当前主视点(摄像机)位置和/或基于场景的当前时间来确定(并且流水线被配置为确定)是否需要(新)纹理以用于确定要用于表示将通过第一对象可见的第二对象的部分的颜色。
在实施方式中,当(如果)确定了需要(新)纹理时则在实施方式中按照如以上所讨论的方式(即通过从辅助视点位置渲染第二对象的图像)生成(新)纹理(并且/或者更新现有纹理)。所生成(和/或更新)的纹理在实施方式中然后用于按照本文所描述的技术的方式确定要用于表示将通过第一对象可见的第二对象的部分的颜色。
应了解在这些实施方式中,比每帧不太经常地生成和/或更新纹理将有利地减小***的处理、存储器和带宽要求。
在这些实施方式中,当主视点(摄像机)位置改变时,那么在实施方式中辅助视点(摄像机)位置(即从该位置起第二对象在实施方式中被渲染以生成纹理)也改变,在实施方式中使得它保持在在第一对象和/或第二对象处端接并且通过主视点位置的矢量上,并且在实施方式中使得辅助摄像机保持面对第一对象和/或第二对象(的中心)。另外,当这个发生时,第一对象和/或第二对象(的中心)与辅助视点位置之间的距离在实施方式中不改变。如应了解的,这然后意味着纹理将总是像从主视点位置看到的那样有效地并且在实施方式中按恒定尺度(大小)表示第二对象(缺少第一对象),使得可按照本文所描述的技术的方式适当地使用它。
在本实施方式中,只有当将需要它们以供使用时(例如,在实施方式中只有当第二对象将从主视点(摄像机)位置通过第一对象可见时)才生成一个或更多个纹理。因此,在实施方式中,作出关于情况是否将是这样的确定。可以例如使用围绕第二对象的适当大小的包围体(例如盒或球体)来做这个,例如以确定该包围盒或球体是否落在主视点(摄像机)视见体内。当(如果)确定了包围盒或球体不落在主视点视见体内时,那么在实施方式中纹理的生成被禁用。可以视需要和适当性而定例如每帧或不到每帧等作出此确定。
在其它实施方式中,也能生成纹理以便考虑递归折射(如以上所讨论的),例如通过考虑通过一个或更多个第二对象的折射的效应来按照递归方式生成纹理,在实施方式中(相对于主视点位置)从最后面的对象开始并且以最前面的对象结束。
尽管已经在生成并使用表示第二对象的一个或更多个二维纹理方面描述了以上实施方式,然而在其它实施方式中可以生成并使用一个或更多个三维纹理。如应了解的,单个三维纹理可以用于从多个(所有可能的)不同的视点表示第二对象。
能在任何适合且期望的图形处理***和流水线中并且与任何适合且期望的图形处理***和流水线一起使用本文所描述的技术。
本文所描述的技术特别适合于与区块渲染器(基于区块的图形处理***)一起使用。因此,在实施方式中,图形处理流水线是基于区块的图形处理流水线。
图形处理流水线的光栅化器将生成要渲染的图形片段以针对所期望的图形输出(诸如要显示的帧)的采样点生成渲染图形数据。由光栅化器生成的各个图形片段使图形输出的一组采样点与它关联并且将用于为与片段关联的该组采样点中的采样点中的一个或更多个采样点生成渲染图形数据。
光栅化器可以被配置成生成用于按照任何期望的且适合的方式渲染的片段。它将接收例如要光栅化的基元,对照采样点位置的集合来测试那些基元,并且因此生成表示基元的片段。
渲染器应该处理由光栅化器生成的片段以为片段表示的(覆盖的)采样点生成渲染片段数据。这些渲染过程可以包括例如片段着色、混合、纹理映射等。在实施方式中渲染器形式为可编程片段着色器或者包括可编程片段着色器。
图形处理流水线也可以包含图形处理流水线可以包含的任何其它适合且期望的处理级,诸如早期深度(或早期深度和模板)测试器、后期深度(或深度和模板)测试器、混合器、一个或多个区块缓冲器、写出单元等。
图形处理流水线在实施方式中也包括一个或多个存储器和/或存储器装置并且/或者与一个或多个存储器和/或存储器装置通信,所述存储器和/或存储器装置存储本文所描述的数据,诸如透明度指示纹理、场景包围体等,并且/或者存储用于执行本文所描述的过程的软件。图形处理流水线也可以与主机处理器和/或与用于基于由图形处理流水线生成的数据来显示图像的显示器通信。
图形处理流水线在实施方式中包括可用于存储纹理采样确定过程所需要的数据和所确定的纹理值的至少本地存储器,诸如一个或多个(片上)缓冲器和/或寄存器。在存在情况下,区块缓冲器可视需要被用于此目的。视需要,图形处理流水线可在实施方式中也缓存采样的纹理值以供将来使用。
本文所描述的技术可被用于图形处理流水线可以用于生成的所有形式的输出,诸如显示帧、渲染到纹理输出等。
在实施方式中,在单个图形处理平台上执行本文所描述的技术的各种功能,所述单个图形处理平台生成并输出例如被写入到显示装置的帧缓冲器的已渲染片段数据。
可在任何适合的***(诸如基于适合地配置的微处理器的***)中实现本文所描述的技术。在实施方式中,本文所描述的技术被实现在基于计算机和/或微处理器的***中。
可按照任何期望且适合的方式执行本文所描述的技术的各种功能。例如,本文所描述的技术的功能可视需要而定用硬件或软件加以实现。因此,例如,除非另外指示,否则本文所描述的技术的各种功能元件和“手段”可以包括可操作来执行各种功能等的一个或多个适合的处理器、一个或多个控制器、功能单元、电路、处理逻辑、微处理器布置等,诸如可被编程来按照所期望的方式操作的适当地专用的硬件元件和/或处理电路和/或可编程硬件元件和/或处理电路。
在这里也应该注意,如本领域技术人员应了解的,可以在给定处理器上并行地复制和/或执行本文所描述的技术的各种功能等。同样地,视需要,各种处理级可以共享处理电路等。
此外,可以将本文所描述的技术的处理级中的任何一个或更多个或全部具体实现为处理级电路,例如形式为一个或更多个固定功能单元(硬件)(处理电路)和/或形式为可被编程为执行所期望的操作的可编程处理电路。同样地,本文所描述的技术的处理级和处理级电路中的任何一个或更多个可以作为单独的电路元件被提供给其它处理级或处理级电路中的任何一个或更多个,并且/或者处理级和处理级电路中的任何一个或更多个或全部可以至少部分地由共享处理电路形成。
经历执行以上所讨论的特定功能所必需的任何硬件,图形处理***可另外包括图形处理器包括的常用功能单元等中的任何一个或更多个或全部。
本领域技术人员也应了解,本文所描述的技术的所描述的实施方式中的全部可并且在实施方式中确实酌情包括本文所描述的可选特征中的任何一个或更多个或全部。
可以至少部分地使用软件(例如计算机程序)来实现根据本文所描述的技术的方法。因此将看到,当从另外的实施方式看时本文所描述的技术提供具体地适配为在被安装在数据处理器上时执行本文所描述的方法的计算机软件、包括用于在程序元件在数据处理装置上执行时执行本文所描述的方法的计算机程序代码部分的计算机程序元件、以及包括被适配为在程序在数据处理***上运行时执行本文所描述的一个或多个方法的所有步骤的代码的计算机程序。数据处理器可以是微处理器***、可编程FPGA(现场可编程门阵列)等。
本文所描述的技术也延伸到包括这样的软件的计算机软件载体,所述软件当用于操作图形处理器时,包括数据处理器的渲染器或微处理器***与所述数据处理器相结合地使所述处理器、渲染器或***执行本文所描述的技术的方法的步骤。这样的计算机软件载体可以是诸如ROM芯片、CD ROM、RAM、闪速存储器或磁盘的物理存储介质,或者可能是诸如电线上的电子信号、光学信号或诸如到卫星的无线电信号等的信号。
还应了解,并非本文所描述的技术的方法的所有步骤需要通过计算机软件来执行,并且因此从更广泛的实施方式本文所描述的技术提供计算机软件以及安装在计算机软件载体上以用于执行本文所陈述的方法的步骤中的至少一个的这样的软件。
本文所描述的技术可以因此适当地被具体实现为计算机程序产品以用于与计算机***一起使用。这样的实施方式可以包括固定在有形非暂时性介质上的一系列计算机可读指令,所述有形非暂时性介质诸如计算机可读介质,例如,磁碟、CD-ROM、ROM、RAM、闪速存储器或硬盘。它也能包括经由调制解调器或其它接口装置、通过有形介质(包括但不限于光学或模拟通信线路)或者无形地使用无线技术(包括但不限于微波、红外线或其它传输技术)可发送到计算机***的一系列计算机可读指令。该系列计算机可读指令具体实现本文先前所描述的功能性中的全部或一部分。
本领域技术人员应了解,这样的计算机可读指令可用许多编程语言加以编写以用于与许多计算机架构或操作***一起使用。此外,这些指令可以使用目前的或将来的包括但不限于半导体、磁或光学的任何存储器技术存储,或者使用目前的或将来的包括但不限于光学、红外线或微波的任何通信技术来发送。设想了这样的计算机程序产品可以作为可移动介质随着所附打印或电子文档(例如,收缩包装软件)而分发,例如随着计算机***预先加载在***ROM或固定磁盘上,或者通过网络(例如,因特网或万维网)从服务器或电子布告板分发。
现在将在用于显示的计算机图形的处理的背景下对本文所描述的技术的实施方式进行描述。
当计算机图形图像将被显示时,它通常首先被定义为一系列基元(多边形),这些基元然后进而被划分(光栅化)成用于图形渲染的图形片段。在正常图形渲染操作期间,渲染器将修改与各个片段关联的(例如)颜色(红、绿和蓝,RGB)以及透明度(阿尔法,α)数据,使得可正确地显示片段。一旦片段已经完全遍历了渲染器,那么它们关联的数据值就被存储在存储器中,准备好输出以得到显示。
图1示意性地示出了可以根据本文所描述的技术操作的图形处理流水线1。图形处理流水线1是具有完全可编程GPGPU上下文的区块延迟渲染器,例如部分地经由DirectCompute、OpenCL、CUDA等执行的渲染器。
当图1所示的图形处理流水线1是基于区块的渲染器时,它将因此产生渲染输出数据阵列的区块,诸如要生成的输出帧。
(在基于区块的渲染中,不是像在立即模式渲染中那样一下子有效地处理整个渲染输出(例如,帧),而是渲染输出(例如,要显示的帧)被划分成多个较小的子区域,通常被称为“区块”。各个区块(子区域)被单独地(通常一个接一个地)渲染,并且已渲染区块(子区域)然后被重组以提供完整的渲染输出,例如,显示帧。在这些布置中,渲染输出通常被划分成规则大小和形状的子区域(区块)(其通常例如是正方形或矩形),但这是不必要的。各个区块对应于相应的一组屏幕空间采样位置。)
渲染输出数据阵列通常可以是意在供在显示装置(诸如屏幕或打印机)上显示使用的输出帧,但是也可以例如包括意在后期渲染通道(也被称为“渲染到纹理”输出)中使用的中间数据等。
图1示出了图形处理流水线1的与本实施方式的操作相关的主要元件和流水线级。如本领域技术人员应了解的,可以存在图1中未例示的图形处理流水线的其它元件。在这里也应该注意,图1仅是示意的,并且例如,即使它们在图1中被作为单独的级示意性地示出,在实践中所示出的功能单元和流水线级也可以共享有效的硬件电路。也应了解,如图1所示的图形处理流水线的级、元件和单元等中的每一个可以视需要而定被实现并且因此将包括例如用于执行必要操作和功能的适当的电路和/或处理逻辑等。
图1示意性地示出了在用于输入到光栅化过程的图形基元(多边形)2已经被生成之后的流水线级。因此,这时图形数据(顶点数据)已经历片段前端操作8,诸如变换操作(未示出)、顶点着色、内插以及用来响应于提供给图形处理器的命令和顶点数据而建立要渲染的基元的基元建立级(未示出)。
如图1所示,图形处理流水线1的这个部分包括许多级,包括光栅化级3、早期Z(深度)和模板测试级4、形式为片段着色级6的渲染器、后期Z(深度)和模板测试级7、混合级9、区块缓冲器10以及下采样和写出(多重采样解析)级13。
图形处理流水线1的光栅化级3操作来将组成渲染输出(例如要显示的帧)的基元光栅化成单独的图形片段以用于处理。为了做这个,光栅化器3接收用于渲染的图形基元2,将基元光栅化为采样点并且生成具有用于渲染基元的适当的位置(表示适当的采样位置)的图形片段。
由光栅化器生成的片段然后被向前发送到流水线的其余部分以用于处理。
早期Z/模板级4对它从光栅化器3接收到的片段执行Z(深度)测试,以看是否可在此级处丢弃(剔除)任何片段。为了做这个,它将从光栅化器3发出的片段(与之关联)的深度值与已经被渲染的片段的深度值(这些深度值被存储在作为区块缓冲器10的一部分的深度(Z)缓冲器中)相比较以确定新片段是否将被已经被渲染的片段挡住(与否)。同时,执行早期模板测试。
通过片段早期Z和模板测试级4的片段然后被发送到片段着色级6。片段着色级6对通过早期Z和模板测试的片段执行适当的片段处理操作,以便处理片段来生成适当的渲染片段数据。
此片段处理可以包括任何适合且期望的片段着色过程,诸如对片段执行片段着色器程序、对片段应用纹理、对片段应用雾化或其它操作等,以生成适当的片段数据。在本实施方式中,片段着色级6形式为着色器流水线(可编程片段着色器),但是视需要,其它布置(诸如固定功能片段着色单元的使用或者代替其)将是可能的。
然后存在“后期”片段Z和模板测试级7,其尤其对经着色的片段执行流水线深度测试的结束以确定是否将实际上在最终图像中看到渲染片段。此深度测试使用片段的存储在区块缓冲器10中的Z缓冲器中的位置的Z缓冲器值来通过将从片段着色级6发出的片段(与之关联)的深度值与已经被渲染的(如存储在深度缓冲器中的)片段的深度值相比较来确定新片段的片段数据是否应该替换已经被渲染的片段的片段数据。此后期片段深度和模板测试级7也对片段执行任何必要的“后期”阿尔法和/或模板测试。
通过后期片段测试级7的片段然后在混合器9中经受(视需要)任何必要的与已经存储在区块缓冲器10中的片段的混合操作。在此级处也执行对片段必需的任何其它剩余的操作,诸如抖动等(未示出)。
最后,(混合的)输出片段数据(值)被写入区块缓冲器10,从那里它们例如可被输出到帧缓冲器以用于显示。用于输出片段的深度值也被适当地写入到区块缓冲器10内的Z缓冲器。(区块缓冲器将存储分别针对缓冲器表示的各个采样位置(本质上针对正被处理的区块的各个采样位置)来存储适当的颜色等值或Z值的颜色和深度缓冲。)这些缓冲器存储表示总体渲染输出(例如要显示的图像)的一部分(一区块)的片段数据的阵列,其中在缓冲器中的样本值的相应的集合对应于总体渲染输出的相应的像素(例如,样本值的各个2x2集合可以对应于输出像素,其中正在使用4倍多重采样)。
区块缓冲器作为位于图形处理流水线(芯片)上(本地的)RAM的一部分被提供。
来自区块缓冲器10的数据被输入到下采样(多重采样解析)写出单元13,并且因此输出(写回)到外部存储器输出缓冲器,诸如显示装置(未示出)的帧缓冲器。(显示装置能包括例如含有像素的阵列的显示器,诸如计算机监视器或打印机。)
在本实施方式中,下采样和写出单元13将存储在区块缓冲器10中的片段数据下采样至用于输出缓冲器(装置)的适当分辨率(即使得与输出装置的像素对应的像素数据的阵列被生成),以生成用于输出到输出缓冲器的输出值(像素)。
一旦渲染输出的区块已经被处理并且其数据被导出到主存储器(例如到主存储器(未示出)中的帧缓冲器)以供存储,下一个区块就然后被处理,依此类推,直到足够的区块已经被处理以生成整个渲染输出(例如要显示的帧(图像))为止。然后针对下一个渲染输出(例如帧)等重复所述过程。
用于图形处理流水线1的其它布置当然将是可能的。
上文描述了图1所示的图形处理***的操作的特定特征。现在将描述图1所示的图形处理***的操作的允许根据本文所描述的技术的实施方式模拟被渲染的图像中的折射的效应的另外的特征。
本实施方式操作来模拟通过场景的定义体积内的至少部分透明的对象的折射的效应。
图2例示了这个并且示出了形式为在世界空间中定义的表示被渲染的场景内的体积的包围盒的示例性包围体20。在本实施方式中假定了包围体20对应于整个场景并且表示例如房间,但是其它布置当然将是可能的。
如可在图2中看到的,假定了在场景中存在折射相关的至少部分透明的对象21。在所例示的实施方式中,对象21包括玻璃棋子。
为了按照本文所描述的技术的方式方便操作,在本实施方式中存储至少表示包围体20的表面的颜色的RGB颜色值的与包围体20的表面对应的立方体纹理被生成。
这通过从将定义立方体纹理相对于的参照位置22(在图2中示出)将排除对象21的场景渲染到立方体纹理来做。在本实施方式中,参照位置22在对象21的中心处。(立方体纹理将在立方体纹理表示的体积(因此场景的包围体)内相对于参照位置22(在图2中示出)被定义,并且将通过根据该参照位置确定采样值(采样位置)所需要的方向被采样。)。
立方体纹理是通过渲染将从纹理的参照位置22的视点表示包围体20的表面的图像来生成的。为了做这个场景的表面(图像表示表面)上的相应的位置针对包围体上的相应的位置被采样(在从纹理的参照位置22起的相关方向上)。在此过程中,当包围体将通常是实际场景的近似并且所以可以不确切地与被定义的场景(例如房间)的表面匹配时,表面的针对纹理(针对各个纹元)被采样的点不需要确切地落在包围体20的壁上,而是可在包围体上、外部或内部。此立方体纹理生成过程的输出然后是具有RGB颜色通道的立方体纹理,所述RGB颜色通道表示立方体纹理在包围体的表面上的相应的位置处涉及的场景的包围体的表面的颜色。
立方体纹理也将能够存储α(透明度)通道,其然后可用于存储供渲染过程使用的其它信息。例如,α通道能用于指示包围体20的透明度,并且/或者用于存储例如与对象它本身的或另外被渲染的场景的一个或多个特性有关的其它信息。
附加信息能指示(编码)不会发生折射的至少部分透明的对象的一个或多个区域,诸如存在一个或更多个孔并且/或者对象是完全不透明的一个或更多个区域,并且此信息能用于确定是否应用折射效应。附加地或另选地,附加信息能指示可通过其看到遥远环境(诸如天空)的包围体的一个或更多个区域,并且该信息能用于按照方便的方式应用例如“天空盒”纹理。
可与RGB通道同时(即在相同的渲染通道中)或者使用一个或更多个附加通道并且在至少部分透明的对象存在或不存在的情况下(酌情)生成被存储在α通道中的此附加数据。
例如,在附加信息指示(编码)不会发生折射的至少部分透明的对象的一个或多个区域(诸如存在一个或更多个孔并且/或者对象是完全不透明的一个或更多个区域)的情况下,那么能通过从内部渲染对象并且然后针对存在表面的区域将各个纹元的α通道设定为1而针对存在孔的区域设定为0(或者反之亦然)来生成该信息。
在附加信息指示可通过其看到遥远环境(诸如天空)的包围体的一个或更多个区域的情况下,那么能通过在至少部分透明的对象不存在的情况下执行附加渲染通道并且然后通过将附加渲染通道的结果与(RGB)渲染通道的结果组合在纹理的α通道中对信息进行编码来生成附加信息。
一旦已经生成立方体纹理,它就可以可选地经受各种处理效应和优化,诸如模糊、伽玛校正、亮度和/或对比度增强等。
此优化处理是可能的,因为每当需要所述场景时可重新使用立方体纹理,并且在场景是“静态的”(即不随时间而改变)的情况下不需要在使用中动态地再生它,并且所以可使用将不适合于立方体纹理的实时生成的非实时优化。
此外,可压缩所生成的(并且视需要后处理的)立方体纹理。再者,这是可能的,因为不需要实时地生成立方体纹理。任何适合的纹理压缩方案可用于压缩立方体纹理,诸如例如自适应可缩放纹理压缩(ASTC)(例如,如GB 2491687中所描述的)、爱立信纹理压缩(ETC)等。
可按需要而定并且使用任何适合的处理***来执行立方体纹理的立方体纹理生成和任何后处理/压缩。在实施方式中立方体纹理被“离线”生成和存储,然后提供给图形处理流水线以供在需要它时使用。
现在将参照图2至图8描述立方体纹理确定通过场景内的至少部分透明的对象21的折射的效应的使用。
图3至图7示意性地示出了过程的主要步骤。
本实施方式操作来针对被渲染的对象21的表面上的相应的采样点来确定要用于使用立方体纹理来表示将在采样位置处通过对象可见的场景的部分的颜色。基本上,随着在对象21上的场景的各个基元被渲染,针对该基元的各个采样点,图3示意性地示出的过程被执行来确定要用于表示将在所述采样位置处通过对象可见的折射场景的部分的颜色。
因此图3示出了针对给定采样点23的过程。针对将被按照本实施方式的方式处理的各个采样点重复此过程。
如图3所示,本实施方式的过程包括渲染通道31。
在渲染通道31中渲染的对象21或对象21的一部分在渲染通道31中被处理为不透明的(而不像完全或部分透明的一样,它实际上就是完全或部分透明的)。这然后方便纹理的使用并且确保采样位置的颜色将从图形纹理确定并且将不经受与来自可以在该对象后面但是由于折射的效应而在所述采样位置处实际上不可见的对象的颜色值的任何混合。
渲染通道31的过程在图形处理流水线的片段前端操作8的顶点着色级中开始(步骤33)。如图4所示,顶点着色程序被启动并且前面剔除被启用(步骤41)。从视点(摄像机)位置25到所述采样位置23位于上面的基元的顶点的视图矢量然后被确定(步骤42)。
在从视点(摄像机)位置25起的视图矢量24上随着该视图矢量在所述采样位置23处通过对象21的表面的折射的效应然后被确定,也就是说,折射视图矢量26被确定(步骤43)。
在本实施方式中,这通过确定在顶点视图矢量中的每一个上随着它们通过对象21的表面的折射的效应以确定折射顶点视图矢量并且然后对那些折射顶点视图矢量进行内插以为所述采样位置得到折射视图矢量26来做。如图8所示,折射的效应将随着视图矢量24从具有第一折射率n1的围绕对象的介质通过到具有第二不同的折射率n2的对象21而(潜在地)更改视图矢量24的方向。此效应通过斯涅耳定律(如以上所给出的)来描述,据此可使用从表面的法线27测量的视图矢量24的入射角θ1以及对象的折射率n2和围绕对象的环境的折射率n1来计算从所述采样点23位于上面的表面的法线27测量的折射视图矢量26的折射角θ2。
因此,步骤43的过程使用所确定的视图矢量、采样点23位于上面的表面(即基元)的法线矢量27以及对象的折射率37n2和围绕对象的环境的折射率n1作为其输入。折射视图矢量26然后被输出到片段着色器6(步骤44)。
因此,渲染通道31中的顶点着色器的结果是折射视图矢量26,其在本实施方式中是归一化矢量并且所以相当于折射方向(步骤34)。过程在片段着色器中继续(步骤35)。
如图5所示,在启动片段着色器程序(步骤51)之后,第一步骤将对折射视图矢量26应用“局部校正”以确保立方体纹理内的正确位置被采样(步骤52)。这是需要的,因为如可从图2看到的,例如,对立方体纹理进行采样所根据(相对于)的参照位置22可以不(并且通常将不)对应于被考虑的采样位置23,使得简单地取折射视图矢量26并且使用那个来从立方体纹理的参照位置22采样将不对立方体纹理的正确部分进行采样。
为了应用此“局部校正”,如图2所示,在折射视图矢量26的包围体20的表面上的交叉点28被确定,并且然后从定义立方体纹理相对于的参照位置22到包围体20上的交叉点28的矢量29被确定,并且该矢量29然后用于对立方体纹理进行采样。
立方体纹理在与交叉位置28对应的位置处被采样以至少确定包围体20的表面在那点处的颜色(即,RGB颜色值)(步骤53)。可使用任何期望的纹理采样(滤波)过程(诸如双线性和/或三线性滤波(例如在立方体纹理形式为贴图的情况下))来对立方体纹理进行采样。滤波可以例如由图形处理流水线的纹理模块(级)来提供。这然后给出指示将在采样位置23处通过对象可见的场景的部分的颜色。
然后可视需要而定(并且按需要)例如在适当的计算中使用此输出颜色,以为所述采样位置23确定最终输出颜色。
在所例示的实施方式中,经采样的输出颜色可可选地与对象21表面的颜色和/或所采样的来自照明计算的一个或多个其它颜色组合(步骤54)。可可选地通过将颜色值乘以透明度因子(步骤55)来控制最终颜色值,例如以表示并控制通过对象21的环境的可见性。可视需要而定提供此透明度因子,例如作为单个值或者作为一组值(例如在纹理中)。
当几何形状被渲染为不透明的时,所述采样位置的输出(最终)α值被设定为不透明的(α=1)(步骤56)。这然后确保在对象的表面上的采样位置将被处理为不透明的,例如如果另一对象被渲染在它前面。
在立方体纹理存储附加信息(例如在其α通道中)(诸如透明度信息)或与被渲染的场景有关的其它信息或特性的情况下,那么该信息也应该被采用并且用作控制或者影响渲染过程的适当的输入。
最终颜色值(步骤57)然后被输出到帧缓冲器(区块缓冲器10)(步骤36)。
如图3所示,片段着色器操作(步骤35)的输入包括在步骤55中使用的透明度因子38、环境立方体贴图39以及定义包围体20的信息40,包括包围***置40a及其最小和最大范围40b。
针对将被渲染的所有基元(并且然后针对下一个帧(在适当情况下)等)对采样点重复以上过程。
在本实施方式中,在对象包括“实心”非中空对象的情况下使用以上所描述的形式的单个渲染通道31。
然而,如图6所示,在适当情况下或者视需要,可以紧跟第一渲染通道31之后附加地执行可选的第二渲染通道32。
在本实施方式中,当渲染诸如玻璃等的中空或凹面对象时附加地使用第二渲染通道32。在这种情况下,在第一渲染通道31中渲染仅对象的后表面(或“背面”)(即离视点(摄像机)位置25最远的对象21的表面(基元)(例如,使其法线远离视点位置25定向的基元))(如上所述),并且然后在第二渲染通道32中渲染仅对象21的前表面(或“前面”)(基元)(例如,使其法线朝向视点位置25定向的基元)。
在第二渲染通道32中,可以利用Z勾销(write off)按照常规方式即通过将前表面处理为部分透明的或透明的(照原样)来渲染对象的前表面。
第二渲染通道32的结果然后与第一渲染通道31的结果阿尔法混合(步骤64)。
应了解,这表示用于渲染这些“中空”对象的特别方便且高效的技术。
其它过程当然将是可能的。例如,可以在第二渲染通道32中充分地考虑在对象的前表面处由于折射率的改变而导致的折射的效应。
如图6所示,在本实施方式中这可以通过执行第二顶点着色通道61以便例如按照第一顶点着色通道33的方式但是在背面剔除启用的情况下为对象的前表面确定折射方向62来实现。过程在片段着色器中继续(步骤63)。
如图7所示,在启动片段着色器程序(步骤71)之后,第一步骤将对折射视图矢量应用“局部校正”以确保立方体纹理内的正确位置被采样(步骤72)。
立方体纹理被采样以至少确定包围体20的表面在那点处的颜色(即,RGB颜色值)(步骤73)。然后可视需要而定(并且按需要)例如在适当的计算中使用此输出颜色,以为所述采样位置确定最终输出颜色。
在所例示的实施方式中,经采样的输出颜色可可选地与对象21表面的颜色和/或来自照明计算的一个或多个其它颜色组合(步骤74)。
如图6所示,可以按照与第一通道透明度因子38对应的方式定义并且在第二片段着色通道63中使用第二通道透明度因子65。
最终颜色值然后被输出(步骤75)并且然后与第一渲染通道31的结果阿尔法混合(步骤64)。
视需要,对本文所描述的技术的上述实施方式的各种修改、添加和替换将是可能的。
在实施方式中,颜色指示纹理(因此立方体纹理)被以贴图的形式存储(即其中各自具有不同级别的细节(分辨率)的原始纹理数据阵列的多个版本被存储以供使用)。在这种情况下,各个较低分辨率贴图级别在实施方式中是前一个较高分辨率贴图级别的缩减(在实施方式中按照2的因子进行缩减)表示。
在这种情况下,纹理采样过程在实施方式中也确定要在哪一个贴图级别或哪些贴图级别(细节的级别)下对颜色指示纹理进行采样。要使用的贴图级别(细节的级别)在实施方式中基于从被考虑的采样点到折射视图矢量的在包围体上的交叉位置的距离来选择。其它布置当然将是可能的。
尽管已经参照“静态的”纹理贴图(立方体纹理)的使用描述了以上实施方式,然而在各种另外的实施方式中,纹理贴图可以是“动态的”,即它可以随时间而改变。这在围绕对象的环境是“动态的”即随时间而改变(可以存在例如在场景中移动的其它对象等)的情况下是特别有用且适当的(而相反地在围绕对象的环境是静态的情况下,那么静态的纹理贴图的使用可以是优选的)。
在本实施方式中,可以通过渲染到纹理来实时地生成和/或更新纹理。
可周期性地(例如每帧一次或者每组多个帧一次或者按需且在需要时)生成和/或更新纹理。因此,例如,可随着且在围绕对象的环境改变时并且/或者随着且在图像质量的降低抵消了不更新纹理的好处等时生成和/或更新纹理。
类似地,可实时地生成和/或更新整个纹理,或者可实时地生成和/或更新纹理的仅一部分(一些而非全部)。例如,可实时地单独地生成和/或更新纹理的各个面(例如,能每帧或者每组多个帧更新纹理的一个面)。
比每帧不太经常地生成和/或更新纹理以及/或者生成和/或更新纹理的不到全部将有利地减小***的处理、存储器和带宽要求。
在各种实施方式中,可在确定折射视图矢量时考虑折射的相对更复杂的效应。
因此,例如,在至少部分透明的对象具有非均匀的折射率的情况下,从视图矢量确定折射视图矢量可以包括更复杂的计算,所述计算例如视需要考虑视图矢量随着它通过不同折射率的区域时的路径。
可以通过把折射视图矢量制成动画来(近似地)考虑至少部分透明的对象内的改变或运动介质(诸如例如流动水)的效应。可以视需要选择动画的特性以例如表示介质随时间的改变。这表示用于渲染这些介质的特别简单且高效的技术,例如其中不必直接确定介质中的改变对折射视图矢量的影响。
可通过例如确定多个(稍微)不同的折射视图矢量(例如,每纹理的RGB颜色通道各一个)并且使用折射视图矢量中的每一个来针对颜色通道中的每一个对纹理进行采样来考虑色差的效应。
如可从上文看到的,本文所描述的技术至少在其实施方式中提供用于模拟折射的“真实世界”物理效应的有效且带宽高效的机制,其同现有技术对比,可将“静态的”纹理贴图用于确定折射的效应,而不是必须出于该目的使用(并且不变地再生)“动态的”纹理贴图。这然后允许按照带宽且处理高效的方式实现物理上基于更高质量的效应。
这至少在本文所描述的技术的实施方式中通过定义指示要渲染的场景内的包围体的表面的颜色的纹理贴图并且然后对纹理贴图进行采样以确定要用于表示将在对象的表面上的采样位置处通过对象可见的折射场景的部分的颜色来实现。
以上实施方式描述了用于通过场景的定义体积内的至少部分透明的对象来模拟例如环境的折射的效应的方法。
现在将关于图9至图13描述操作来模拟通过场景内的至少部分透明的第一对象的折射的效应的另外的实施方式,其中第二对象存在于第一对象内部。
可以与以上实施方式相结合地使用这些另外的实施方式。因此,例如,以上关于图2至图8所描述的技术可以用于考虑如通过至少部分透明的“第一”对象看到的周围环境的折射的效应,同时这些另外的实施方式可以用于考虑如通过至少部分透明的第一对象看到的至少一个“第二”对象的折射的效应,其中第二对象至少部分地在第一对象后面和/或至少部分地在第一对象内。
图9示意性地示出了这些另外的实施方式的过程的主要步骤。
如图9所示,本实施方式的过程包括第一渲染通道80,后面是第二渲染通道90。在本实施方式中,第一渲染通道80被执行以便模拟通过至少部分透明的第一对象的后表面(或“背面”)即第一对象的离场景的主视点(摄像机)位置最远的表面(基元)(例如使其法线远离视点位置定向的基元)的折射的效应,并且第二渲染通道90被执行以便模拟通过第一对象的前表面(或“前面”)(基元)即第一对象的最接近于场景的主视点位置的表面(例如使其法线朝向视点位置定向的基元)的折射的效应。
因此,第一渲染通道80考虑周围环境与第一对象的后表面之间的折射的效应(例如而无需考虑第二对象),并且第二渲染通道90考虑第一对象的前表面与环境之间的折射的效应(并且因此必须考虑第二对象)。
图2、图4和图5例示了第一渲染通道80中的过程。
如图2所示,在本实施方式中形式为包围盒的包围体20被定义在表示被渲染的场景内的体积的世界空间中。在本实施方式中假定了包围体20对应于整个场景并且表示例如房间,但是其它布置当然将是可能的。
如可在图2中看到的,在场景中存在一个至少部分透明的第一对象21。在所例示的实施方式中,第一对象21包括玻璃棋子。在本实施方式中,第二对象存在于第一对象21内部,但是这在第一渲染通道中未被考虑并且所以未示出在图2中。
在本实施方式中存储表示包围体20的表面的颜色的至少RGB颜色值的与包围体20的表面对应的立方体纹理被生成。
这通过从将定义立方体纹理相对于的参照位置22(在图2中示出)将排除第一对象21和第二对象的场景渲染到立方体纹理来做。在本实施方式中,参照位置22在第一对象21的中心处。(立方体纹理将在立方体纹理表示的体积(因此场景的包围体)内相对于参照位置22(在图2中示出)被定义,并且将通过根据该参照位置确定采样值(采样位置)所需要的方向被采样。)
立方体纹理是通过渲染将从纹理的参照位置22的视点表示包围体20的表面的图像来生成的。为了做这个场景的表面(图像表示表面)上的相应的位置针对包围体上的相应的位置被采样(在从纹理的参照位置22起的相关方向上)。在此过程中,当包围体将通常是实际场景的近似并且所以可以不确切地与被定义的场景(例如房间)的表面匹配时,表面的针对纹理(针对各个纹元)被采样的点不需要确切地落在包围体20的壁上,而是可在包围体上、外部或内部。此立方体纹理生成过程的输出然后是具有RGB颜色通道的立方体纹理,所述RGB颜色通道表示立方体纹理在包围体的表面上的相应的位置处涉及的场景的包围体的表面的颜色。
立方体纹理也将能够存储α(透明度)通道,其然后可用于存储供渲染过程使用的其它信息。α通道能用于指示包围体20的透明度,并且/或者用于存储例如与对象它本身的或另外被渲染的场景的一个或多个特性有关的其它信息。可与RGB通道同时(即在相同的渲染通道中)或者使用一个或更多个附加通道并且在至少部分透明的对象存在或不存在的情况下(适当地)生成被存储在α通道中的此附加数据。
一旦已经生成立方体纹理,它就可以可选地经受各种处理效应和优化,诸如模糊、伽玛校正、亮度和/或对比度增强等。
此优化处理是可能的,因为每当需要所述场景时可重新使用立方体纹理,并且在场景是“静态的”(即不随时间而改变)的情况下不需要在使用中动态地再生它,并且所以可使用将不适合于立方体纹理的实时生成的非实时优化。
此外,可压缩所生成的(并且按需要后处理的)立方体纹理。再者,这是可能的,因为不需要实时地生成立方体纹理。任何适合的纹理压缩方案可用于压缩立方体纹理,诸如例如自适应可缩放纹理压缩(ASTC)(例如,如GB 2491687中所描述的)、爱立信纹理压缩(ETC)等。
可按需要而定并且使用任何适合的处理***来执行立方体纹理的立方体纹理生成和任何后处理/压缩。在实施方式中立方体纹理被“离线”生成和存储,然后提供给图形处理流水线以供在需要它时使用。
现在将描述在第一渲染通道中使用立方体纹理来确定通过场景内的至少部分透明的第一对象21的后表面的折射的效应。
图4和图5示意性地示出了过程的主要步骤。
本实施方式操作来在第一渲染通道120中针对被渲染的第一对象21的后表面上的相应的采样点来确定要用于使用立方体纹理来表示将在采样位置处通过对象可见的场景的部分的颜色。基本上,随着在第一对象21上的后表面上的场景的各个基元被渲染,针对该基元的各个采样点,图4和图5示意性地示出的过程被执行来确定要用于表示将在所述采样位置处通过对象可见的折射场景的部分的颜色。
因此图4和图5示出了针对给定采样点23的过程。针对将被按照本实施方式的方式处理的各个采样点重复此过程。
在第一渲染通道120中渲染的第一对象21的后表面在第一渲染通道120中被处理为不透明的(而不像完全或部分透明的一样,它实际上就是完全或部分透明的)。这然后方便纹理的使用并且确保采样位置的颜色将从图形纹理确定并且将不经受与来自可以在该对象后面但是由于折射的效应而在所述采样位置处实际上不可见的对象的颜色值的任何混合。
第一渲染通道80的过程在图形处理流水线的片段前端操作8的顶点着色级中开始(步骤81)。如图4所示,顶点着色程序被启动并且前面剔除被启用(步骤41)。从视点(摄像机)位置25到所述采样位置23位于上面的基元的顶点的视图矢量然后被确定(步骤42)。
在从视点(摄像机)位置25起的视图矢量24上随着该视图矢量在所述采样位置23处通过对象21的表面的折射的效应然后被确定,也就是说,折射视图矢量26被确定(步骤43)。
在本实施方式中,这通过确定在顶点视图矢量中的每一个上随着它们通过对象21的表面的折射的效应以确定折射顶点视图矢量并且然后对那些折射顶点视图矢量进行内插以为所述采样位置得到折射视图矢量26来做。
如图8所示,折射的效应将随着视图矢量24在具有第一折射率n1的围绕对象的介质与具有第二不同的折射率n2的对象21之间通过而(潜在地)更改视图矢量24的方向。此效应通过斯涅耳定律(如以上所给出的)来描述,据此可使用从表面的法线27测量的视图矢量24的入射角θ1以及对象的折射率n2和围绕对象的环境的折射率n1来计算从所述采样点23位于上面的表面的法线27测量的折射视图矢量26的折射角θ2。
因此,步骤43的过程使用所确定的视图矢量、采样点23位于上面的表面(即基元)的法线矢量27以及对象的折射率n2和围绕对象的环境的折射率n1作为其输入。折射视图矢量26然后被输出到片段着色器6(步骤44)。
因此,第一通道80中的顶点着色器的结果是折射视图矢量26,其在本实施方式中是归一化矢量并且所以相当于折射方向(步骤82)。过程在片段着色器中继续(步骤83)。
如图5所示,在启动片段着色器程序(步骤51)之后,第一步骤将对折射视图矢量26应用“局部校正”以确保立方体纹理内的正确位置被采样(步骤52)。这是需要的,因为如可从图2看到的,例如,对立方体纹理进行采样所根据(相对于)的参照位置22可以不(并且通常将不)对应于被考虑的采样位置23,使得简单地取折射视图矢量26并且使用那来从立方体纹理的参照位置22采样将不对立方体纹理的正确部分进行采样。
为了应用此“局部校正”,如图2所示,在折射视图矢量26的包围体20的表面上的交叉点28被确定,并且然后从定义立方体纹理相对于的参照位置22到包围体20上的交叉点28的矢量29被确定,并且该矢量29然后用于对立方体纹理进行采样。
立方体纹理在与交叉位置28对应的位置处被采样以至少确定包围体20的表面在那点处的颜色(即,RGB颜色值)(步骤53)。可使用任何期望的纹理采样(滤波)过程(诸如双线性和/或三线性滤波(例如在立方体纹理形式为贴图的情况下))来对立方体纹理进行采样。滤波可以例如由图形处理流水线的纹理模块(级)来提供。这然后给出指示将在采样位置23处通过第一对象21的后表面可见的场景的部分的颜色。然后可视需要而定(并且按需要)例如在适当的计算中使用此输出颜色,以为所述采样位置23确定最终输出颜色。
在所例示的实施方式中,经采样的输出颜色可可选地与对象21表面的颜色和/或来自照明计算的一个或多个其它颜色组合(步骤54)。可可选地通过将颜色值乘以透明度因子(步骤55)来控制最终颜色值,例如以表示并控制通过对象21的环境的可见性。可视需要而定提供此透明度因子,例如作为单个值或者作为一组值(例如在纹理中)。
当第一对象21的后表面被渲染为不透明的时,所述采样位置的输出α值被设定为不透明的(α=1)(步骤56)。这然后确保在对象21的后表面上的采样位置将例如在该过程的另外级中被处理为不透明的。
在立方体纹理存储附加信息(例如在其α通道中)(诸如透明度信息)或与场景有关的其它信息的情况下,那么该信息也应该被采样并且用作控制或者影响渲染过程的适当的输入。
第一渲染过程(步骤57)的最终颜色值然后被输出到帧缓冲器(区块缓冲器10)(步骤84)。
如图9所示,片段着色器操作(步骤83)的输入包括在步骤55中使用的透明度因子86、环境立方体贴图87以及定义包围体20的信息,包括包围***置88及其最小和最大范围89。
针对将被渲染的所有基元(并且然后针对下一个帧(在适当情况下)等)对采样点重复以上过程。
如图9所示,紧跟在第一渲染通道80之后执行第一对象21的前表面被渲染的第二渲染通道90。
图10、图11、图12和图13例示了第二渲染通道30中的过程。
如可在图10中看到的,在本实施方式中,第二对象101存在于至少部分透明的第一对象21内部。在所例示的实施方式中,第二对象101是动画蝴蝶。
本实施方式操作来在第二渲染通道90中针对(相对于场景的主视点位置104)被渲染的第一对象21的前表面上的相应的采样点来确定要用于使用表示第二对象的纹理来表示将在采样位置处通过第一对象21可见的第二对象101的部分的颜色。
为了做这个,存储表示第二对象101的颜色的RGB颜色值的一个或更多个二维纹理被生成。视需要,纹理也可以存储其值对应于第二对象101的透明度或某个其它信息的α(透明度)值通道。
在本实施方式中,一个或更多个纹理周期性地(例如每帧一次或者每组多个帧一次或者按需且在需要时)使用渲染到纹理来“实时地”(即在“运行时”)生成。可随着且在第二对象101改变时或者随着且在主视点(摄像机)位置104改变时以及/或者随着且在图像质量的降低抵消了不更新纹理的好处等时生成或者更新一个或更多个纹理。
如图10所示,各个纹理是通过从辅助视点位置102将第二对象101的图像渲染到纹理来生成的,同时用于做这个的“辅助摄像机”CB直接面对第二对象101。此渲染操作例如通过适当地掩盖辅助摄像机CB的视图来排除第一对象21和任何其它对象。
辅助视点位置102位于在第一对象21的中心处端接(开始或者结束)并且通过场景的主视点位置104的矢量103上的位置处。如可在图10中看到的,当场景的主视点位置104改变时,那么辅助视点位置102也改变,使得它保持在在第一对象21处端接并且通过主视点位置104的矢量103上,并且使得辅助摄像机CB保持面对第一对象21的中心(而不管主摄像机CM的位置或定向如何)。第一对象21的中心与辅助视点位置102之间的距离x也保持在固定的预定义距离上。可更改该固定的预定义距离x以缩放第二对象101的大小。
如应了解的,这然后意味着所生成的纹理将像从不存在第一对象21的主视点位置104看到的那样并且以恒定和预定义尺度有效地表示第二对象101。纹理将根据主视点位置104而改变,并且所以将在三个维度上有效地表示第二对象101。纹理因此可被认为是“全息纹理”。
尽管在实施方式中矢量103在第一对象21的中心处端接(开始或者结束)(并且这将是特别适当的,例如在第二对象在第一对象后面并且/或者正在移动或者可以在第一对象后面移动的情况下和/或在图形纹理表示多个第二对象的情况下),它也能视需要而定在第一对象41中的任何任意点处端接,或者实际上在第二对象101内。在一个实施方式中,矢量在第二对象在第一对象内部的情况下和/或在图形纹理仅表示单个第二对象的情况下在第二对象处端接。此外,矢量103不需要在第一或第二对象内部端接,例如在对象包括凹面或其它对象的情况下。因此,矢量103也能被定义为在对象的包围盒处端接。
在本实施方式中,只有当将需要表示第二对象101的一个或更多个纹理以供使用时(例如,只有当第二对象将从主视点(摄像机)位置通过第一对象可见时)才生成它们。围绕第二对象的适当大小的包围盒或球体可以用于确定第二对象的包围盒或球体是否落在主视点(摄像机)视见体内,同时纹理的生成然后被酌情启用或者禁用。可以例如每帧或不到每帧等作出此确定。
也将能够生成在其要求前面例如“离线”生成表示第二对象101的一个或更多个纹理(而不是按需且在需要它时被“实时地”生成)。能生成多个这样的纹理,其各自表示来自多个不同的可能的主视点位置和/或在动画序列中的不同时间的第二对象101。然后能例如基于场景的主视点位置104和/或基于场景的当前时间等来确定应该在渲染场景时使用多个纹理中的哪一个。
另选地,能生成并使用表示一个或更多个第二对象的一个或更多个三维纹理。单个三维纹理能用于从多个(例如所有可能的)不同的视点表示第二对象。
一旦已经生成(或者确定)表示第二对象101的纹理,然后就在第二渲染通道90中使用它。
图12和图13示出了第二渲染通道80的主要步骤。基本上,随着在第一对象21上的前表面上的场景的各个基元被渲染,针对该基元的各个采样点,图12和图13示意性地示出的过程被执行来确定要用于表示将在所述采样位置处通过第一对象21可见的折射场景的部分的颜色。
因此图12和图13示出了针对给定采样点的过程。针对将被按照本实施方式的方式处理的各个采样点重复此过程。
在第二渲染通道90中,前表面被利用Z勾销处理为部分透明的或透明的(照原样)。
第二渲染通道90的过程在图形处理流水线的片段前端操作8的顶点着色级中开始(步骤91)。顶点着色程序被启动并且背面剔除被启用(步骤121)。
针对被考虑的各个采样位置,表示第二对象101的纹理的适当的“未修改的”纹理坐标被确定(步骤122)。
这通过将表示第二对象101的图形纹理映射到第一对象21的前表面好像纹理被投影到第一对象处的平面上(即使用投影纹理映射)并且然后为各个采样位置确定适当的(未修改的)纹理坐标来做。投影平面111和第一对象101与主视点位置104之间的矢量103正交,并且在第一对象21的中心处位于第一对象21内部。也将能够将投影平面定位在第二对象(的中心)处和/或将投影平面111移动至相对地更靠近或者更远离主视点(摄像机)位置104,以例如有效地放大或者减小折射效应。
针对在第一对象21的表面上的各个采样点112,折射视图矢量113被计算(步骤123)。这通过首先确定从视点(摄像机)位置104到所述采样位置112位于上面的基元的顶点的视图矢量、然后确定在视图矢量上随着视图矢量通过对象21的表面的折射的效应、并且然后对折射顶点视图矢量进行内插以达到采样位置的折射视图矢量114(例如按照与以上所讨论的方式对应的方式)来做。
接下来,采样点112与沿着视图矢量114和折射视图矢量113的投影平面111之间的矢量被确定(步骤124和125)。在投影平面111上由视图矢量114交叉的位置115以及在投影平面111上由折射视图矢量113交叉的位置116然后用于确定差异矢量117(即,在世界空间中的视图矢量交叉点115与折射视图矢量交叉点116之间的矢量117)(步骤126)。
差异矢量117然后被从世界空间变换成定义纹理的空间(步骤127),并且然后差异矢量的纹理空间定义用于修改未修改的纹理坐标以为所述采样位置112获得要用于对表示第二对象101的纹理进行采样的纹理坐标(步骤128)。
这些纹理坐标然后由顶点着色级输出(步骤129),并且用作片段着色器的输入(步骤93)。折射视图矢量的方向也可以由顶点着色级输出(步骤92)。
如图9所示,第二顶点着色通道91的输入包括投影平面的法线96a、其位置96b以及用于在世界空间与定义纹理的空间之间变换的矩阵96c。
过程在片段着色器中继续(步骤94)。
如图13所示,在启动片段着色器程序(步骤131)之后,第一步骤将使用由顶点着色级确定的(修改的)纹理坐标来对所生成的“全息”纹理执行纹理窥视,即以确定在所述采样点处的要用于第二对象101的颜色(步骤132)。所确定的颜色然后(在步骤135)用于通过可选地将该颜色与针对采样点(例如根据照明效应等)确定的一个或更多个其它颜色组合来确定所述采样点的“最终”颜色(针对第二渲染通道90)。
如图13所示,针对各个采样点,可以可选地通过使用场景的在第一渲染通道80中使用的立方体贴图来确定来自背景的颜色贡献。这涉及对由顶点着色级输出的折射视图矢量113应用局部校正(步骤133),并且然后使用经局部校正的矢量来对立方体贴图执行查找(步骤134),即如以上所讨论的方式。按照这种方式确定的颜色贡献然后可例如通过对各个颜色使用适当的α值的阿尔法混合在步骤135中与其它颜色组合。
“最终”颜色的α通道可可选地在被输出(步骤137)之前(在步骤136)被修改以说明“全息纹理”的α值。这可用于说明第一对象变得越透明全息纹理应该变得越可见并且反之亦然的事实。
如图9所示,第二片段着色通道94的输入包括“全息纹理”97(纹理表示第二对象101)和透明度因子98。
第二渲染通道90的结果然后与存储在帧缓冲器中的第一渲染通道80的结果阿尔法混合以便达到要用于所述采样位置的最终颜色(步骤95)。可视需要而定控制用于使结果混合的α因子。
如应了解的,此颜色将适当地考虑第一对象21的前表面、第二对象101、第一对象21的后表面和周围环境,同时也考虑折射的效应。这表示用于渲染在内部具有另一对象的至少部分透明的对象的特别方便且高效的技术。
视需要,对本文所描述的技术的上述实施方式的各种修改、添加和替换将是可能的。
在一个实施方式中,第二对象相对于场景的主视点(摄像机)位置(当从场景的主视点(摄像机)位置看时)可以在第一对象后面(而不一定在第一对象内部)。
在一个实施方式中,多个第二对象可以在一个或更多个第一对象后面和/或在一个或更多个第一对象内部。在这种情况下,单个图形纹理能表示多个第二对象并且/或者能提供和使用多个图形纹理,所述多个图形纹理例如按照本文所描述的技术的方式各自表示所述多个第二对象中的一个或更多个。
在一个实施方式中,本文所描述的技术的技术可以用于考虑并应用递归折射。例如,能考虑通过一个或更多个第二对象的折射的效应,例如以引入二次、三次(等)折射效应。这能例如通过对第一对象和一个或更多个第二对象(等)应用本文所描述的技术的方法来做。在这种情况下,应该在实施方式中按照取决于各个对象的位置的次序(例如,(相对于主视点位置)从最后面的对象开始并且以最前面的对象结束)准备纹理。
在一个实施方式中,如果确定了围绕第二对象101的包围盒或球体未落在主视点视见体内例如使得第二对象101将不可见,则可禁用表示第二对象的纹理的生成。可例如每帧或不到每帧等做这个。
在实施方式中,颜色指示纹理(因此立方体纹理)和/或表示第二对象的纹理被以贴图的形式存储(即其中各自具有不同级别的细节(分辨率)的原始纹理数据阵列的多个版本被存储以供使用)。在这种情况下,各个较低分辨率贴图级别在实施方式中是前一个较高分辨率贴图级别的缩减(在实施方式中按照2的因子进行缩减)表示。在这种情况下,纹理采样过程在实施方式中也确定要在哪一个贴图级别或哪些贴图级别(细节的级别)下对颜色指示纹理进行采样。
尽管已经参照场景的“壁”的“静态的”立方体纹理或贴图的使用描述了以上实施方式,然而在各种另外的实施方式中,立方体纹理可以是“动态的”,即它可以随时间而改变。可实时地(或在“运行时”中)(例如按需且在需要它时)至少部分地生成或者更新纹理。这在围绕对象的环境是“动态的”即随时间而改变(可以存在例如在场景中移动的其它对象等)的情况下是特别有用且适当的(而相反地在围绕对象的环境是静态的情况下,那么静态纹理贴图的使用可以是优选的)。
在本实施方式中,可以通过渲染到纹理来实时地生成和/或更新纹理。
可周期性地(例如每帧一次或者每组多个帧一次或者按需且在需要它时)生成和/或更新纹理。因此,例如,可随着且在围绕对象的环境改变时并且/或者随着且在图像质量的降低抵消了不更新纹理的好处等时生成和/或更新纹理。
类似地,可实时地生成和/或更新整个纹理,或者可实时地生成和/或更新纹理的仅一部分(一些而非全部)。例如,可实时地单独地生成和/或更新纹理的各个面(例如,能每帧或者每组多个帧更新纹理的一个面)。
比每帧不太经常地生成和/或更新纹理以及/或者生成和/或更新纹理的不到全部将有利地减小***的处理、存储器和带宽要求。
在各种实施方式中,可在第一渲染通道80和第二渲染通道90中的一个或两个中在确定折射视图矢量时考虑折射的相对更复杂的效应。
因此,例如,在至少部分透明的对象41具有非均匀的折射率的情况下,从视图矢量确定折射视图矢量可以包括更复杂的计算,所述计算例如视需要考虑视图矢量随着它通过不同折射率的区域时的路径。
可以通过把折射视图矢量制成动画(例如,并且在实施方式中,通过随时间(例如从帧到帧)改变其方向和/或幅度)来(近似地)考虑至少部分透明的对象21内的改变或运动介质(诸如例如流动水)的效应。可以视需要而定选择动画的特性以例如表示介质随时间的改变。这表示用于渲染这些介质的特别简单且高效的技术,例如其中不必直接确定介质中的改变对折射视图矢量的影响。
可通过例如确定多个(稍微)不同的折射视图矢量(例如,每纹理的RGB颜色通道各一个)并且按照实施方式的方式使用折射视图矢量中的每一个来考虑色差的效应。
尽管已经在第二对象101在第一对象21内部方面描述了以上实施方式,然而本文所描述的技术的技术也能适用于第二对象101在至少部分透明的第一对象21后面的情形。
如可从上文看到的,本文所描述的技术至少在其实施方式中提供用于模拟折射的“真实世界”物理效应的有效且带宽高效的机制,其允许按照带宽且处理高效的方式实现物理上基于更高质量的效应。
这至少在本文所描述的技术的实施方式中通过对使用折射视图矢量来表示在至少部分透明的第一对象内部或后面的第二对象的纹理进行采样以确定要用于表示将在第一对象的表面上的采样位置处通过第一对象可见的第二对象的部分的颜色来实现。
已经出于例示和描述的目的呈现了上述详细描述。它不旨在为详尽的,或者将本技术限于所公开的精确形式。鉴于以上教导许多修改和变化是可能的。所描述的实施方式被选取以便最好地说明本技术的原理及其实际应用,以因此使得本领域技术人员能够在各种实施方式中并且按如适于所设想的特定用途的各种修改最好地利用本技术。范围旨在由随附权利要求书来限定。
Claims (67)
1.一种在渲染场景以供输出时操作图形处理***的方法,其中,表示要渲染的所述场景的全部或部分的体积的包围体被定义,该方法包括:
当在所述场景中渲染在所述包围体内的至少部分透明的对象时:
针对所述对象的一些或全部执行渲染通道,其中,所述对象被渲染,好像它是不透明的对象一样;以及
在所述渲染通道中:
针对所述对象的表面上的至少一个采样位置,通过以下步骤来确定要用于表示将在所述采样位置处通过所述对象可见的所述场景的所述部分的颜色:
使用从针对所述场景的视点位置起的视图矢量来确定针对所述采样位置的折射视图矢量;
确定由所述折射视图矢量在所述包围体上交叉的位置;
使用所述交叉位置来确定要用于对表示所述场景中的所述包围体的所述表面的所述颜色的图形纹理进行采样的矢量;以及
使用所确定的矢量来对所述图形纹理进行采样以针对所述采样位置确定要用于表示将在所述采样位置处通过所述对象可见的所述场景的所述部分的颜色。
2.根据权利要求1所述的方法,其中,表示所述包围体的所述表面的所述颜色的所述纹理包括针对围绕所述纹理包含的所述体积内的参照位置的表面上的点来指示并存储针对各个点的一个或更多个颜色值的纹理,其中,然后基于从针对所述纹理的所述参照位置起的方向对所述纹理进行采样。
3.根据权利要求1或2所述的方法,其中,使用所述包围体上的所确定的交叉位置来确定要用于对表示图形纹理的所述颜色进行采样的所述矢量的步骤包括:
使用所述包围体上的所确定的交叉位置来确定从定义所述纹理所相对于的参照位置到所确定的交叉点的矢量;并且
所述方法还包括:
然后使用从所述参照位置到所确定的交叉点的所确定的矢量来对所述颜色指示纹理进行采样。
4.根据权利要求2或3所述的方法,其中,所述参照位置位于所述至少部分透明的对象内。
5.根据前述权利要求中的任一项所述的方法,其中:
使用所述视图矢量来确定所述折射视图矢量包括确定由于所述视图矢量在所述对象的所述表面处的折射而导致的所述视图矢量的方向的改变。
6.根据前述权利要求中的任一项所述的方法,所述方法还包括将所述折射视图矢量制成动画。
7.根据前述权利要求中的任一项所述的方法,所述方法还包括针对多个不同的颜色中的每一个来确定多个不同的折射视图矢量。
8.根据前述权利要求中的任一项所述的方法,其中,所述图形纹理包括存储供在渲染所述场景时使用的附加信息的一个或更多个通道;并且其中所述方法包括在所述渲染通道中:
对所述图形纹理的所述一个或更多个通道中的一个或更多个进行采样以确定附加信息;以及
使用所述附加信息来控制或者影响所述渲染通道。
9.根据前述权利要求中的任一项所述的方法,其中:
针对所述对象的一些或全部执行所述渲染通道包括针对所述对象的后表面执行所述渲染通道;并且其中所述方法还包括:
针对所述对象的前表面执行附加渲染通道;以及
使所述附加渲染通道的结果与所述渲染通道的结果混合。
10.根据前述权利要求中的任一项所述的方法,所述方法还包括:
当渲染其中存在第二对象和至少部分透明的第一对象的场景时,其中所述第二对象至少部分地在所述第一对象后面和/或在所述第一对象内:
针对所述第一对象的表面上的至少一个采样位置,通过以下步骤来确定要用于表示将在所述采样位置处通过所述第一对象可见的所述第二对象的所述部分的颜色:
使用从所述场景的视点位置起的视图矢量来确定所述采样位置的折射视图矢量;
使用所述折射视图矢量来确定要用于对表示所述第二对象的图形纹理进行采样的纹理坐标;以及
使用所确定的纹理坐标来对所述图形纹理进行采样以针对所述采样位置确定要用于表示将在所述采样位置处通过所述第一对象可见的所述第二对象的所述部分的颜色。
11.一种生成用于当渲染场景以供输出时在图形处理***中使用的纹理的方法,其中,表示要渲染的所述场景的全部或部分的体积的包围体被定义并且在所述包围体内存在至少部分透明的对象,该方法包括:
通过以下步骤来生成包括纹理纹元的阵列以供当在所述场景中渲染所述至少部分透明的对象时使用的图形纹理:
设定所述纹理中的纹元值,使得它们各自存储在从将对所述纹理进行采样所相对于的参照位置起的给定方向上表示所述包围体的所述表面的所述颜色的一个或更多个颜色值,所述参照位置位于所述场景中的所述至少部分透明的对象内;以及
存储表示所述纹理的所述纹元值并且指示将对所述纹理进行采样所相对于的所述参照位置的数据。
12.根据权利要求11所述的方法,所述方法还包括使所述纹理在所述纹理已经被生成之后经受一个或更多个处理操作。
13.根据前述权利要求中的任一项所述的方法,所述方法还包括存储附加信息以供当在所述纹理的一个或更多个通道中渲染所述场景时使用。
14.根据前述权利要求中的任一项所述的方法,所述方法还包括在渲染所述场景以供输出时至少部分地生成和/或更新所述纹理。
15.根据前述权利要求中的任一项所述的方法,其中,所述包围体形式为包围盒。
16.根据前述权利要求中的任一项所述的方法,其中,所述纹理是立方体纹理。
17.一种图形处理流水线,该图形处理流水线包括:
多个处理级,至少包括:光栅化输入基元以生成要处理的图形片段的光栅化器,各个图形片段具有与它关联的一个或更多个采样位置;以及处理由所述光栅化器生成的片段以生成输出片段数据的渲染器;
其中,所述图形处理流水线当渲染其中定义有表示要渲染的场景的全部或部分的体积的包围体的所述场景以供输出时被配置为:
当在所述场景中渲染在所述包围体内的至少部分透明的对象时:
针对所述对象的一些或全部执行渲染通道,其中,所述对象被渲染,好像它是不透明的对象一样;以及
在所述渲染通道中:
针对所述对象的表面上的至少一个采样位置,通过以下步骤来确定要用于表示将在所述采样位置处通过所述对象可见的所述场景的所述部分的颜色:
使用从针对所述场景的视点位置起的视图矢量来确定针对所述采样位置的折射视图矢量;
确定由所述折射视图矢量在所述包围体上交叉的位置;
使用所述交叉位置来确定要用于对表示所述场景中的所述包围体的所述表面的所述颜色的图形纹理进行采样的矢量;以及
使用所确定的矢量来对所述图形纹理进行采样以针对所述采样位置确定要用于表示将在所述采样位置处通过所述对象可见的所述场景的所述部分的颜色。
18.根据权利要求17所述的流水线,其中,表示所述包围体的所述表面的所述颜色的所述纹理包括针对围绕所述纹理包含的所述体积内的参照位置的表面上的点来指示并存储针对各个点的一个或更多个颜色值的纹理,其中,然后基于从针对所述纹理的所述参照位置起的方向对所述纹理进行采样。
19.根据权利要求17或18所述的流水线,其中,所述流水线被配置为:
通过使用所述包围体上的所确定的交叉位置来确定从定义所述纹理所相对于的参照位置到所确定的交叉点的矢量,来使用所述包围体上的所确定的交叉位置来确定要用于对表示图形纹理的所述颜色进行采样的所述矢量;并且
然后使用从所述参照位置到所确定的交叉点的所确定的矢量来对所述颜色指示纹理进行采样。
20.根据权利要求18或19所述的流水线,其中,所述参照位置位于所述至少部分透明的对象内。
21.根据权利要求17至20中的任一项所述的流水线,其中,所述流水线被配置为:
通过确定由于所述视图矢量在所述对象的所述表面处的折射而导致的所述视图矢量的方向的改变来使用所述视图矢量来确定所述折射视图矢量。
22.根据权利要求17至21中的任一项所述的流水线,其中,所述流水线被配置为将所述折射视图矢量制成动画。
23.根据权利要求17至22中的任一项所述的流水线,其中,所述流水线被配置为针对多个不同的颜色中的每一个来确定多个不同的折射视图矢量。
24.根据权利要求17至23中的任一项所述的流水线,其中,所述图形纹理包括存储供在渲染所述场景时使用的附加信息的一个或更多个通道;并且其中所述流水线被配置为在所述渲染通道中:
对所述图形纹理的所述一个或更多个通道中的一个或更多个进行采样以确定附加信息;并且
使用所述附加信息来控制或者影响所述渲染通道。
25.根据权利要求17至24中的任一项所述的流水线,其中,所述流水线被配置为:
针对所述对象的后表面执行所述渲染通道;
针对所述对象的前表面执行附加渲染通道;以及
使所述附加渲染通道的结果与所述渲染通道的结果混合。
26.根据权利要求17至25中的任一项所述的流水线,其中,所述流水线被配置为,当渲染其中存在第二对象和至少部分透明的第一对象的场景时,其中所述第二对象至少部分地在所述第一对象后面和/或在所述第一对象内:
针对所述第一对象的表面上的至少一个采样位置,通过以下步骤来确定要用于表示将在所述采样位置处通过所述第一对象可见的所述第二对象的所述部分的颜色:
使用从针对所述场景的视点位置起的视图矢量来确定针对所述采样位置的折射视图矢量;
使用所述折射视图矢量来确定要用于对表示所述第二对象的图形纹理进行采样的纹理坐标;以及
使用所确定的纹理坐标来对所述图形纹理进行采样以针对所述采样位置确定要用于表示将在所述采样位置处通过所述第一对象可见的所述第二对象的所述部分的颜色。
27.一种用于生成当渲染场景以供输出时在图形处理***中使用的纹理的设备,其中,表示要渲染的所述场景的全部或部分的体积的包围体被定义并且在所述包围体内存在至少部分透明的对象,该设备包括处理电路,该处理电路被配置为:
通过以下步骤来生成包括纹理纹元的阵列以供当在所述场景中渲染所述至少部分透明的对象时使用的图形纹理:
设定所述纹理中的纹元值,使得它们各自存储在从将对所述纹理进行采样所相对于的参照位置起的给定方向上表示所述包围体的所述表面的所述颜色的一个或更多个颜色值,所述参照位置位于所述场景中的所述至少部分透明的对象内;以及
存储表示所述纹理的所述纹元值并且指示将对所述纹理进行采样所相对于的所述参照位置的数据。
28.根据权利要求27所述的设备,其中,所述处理电路被配置为:
使所述纹理在它已经被生成之后经受一个或更多个处理操作。
29.根据权利要求17至28中的任一项所述的流水线或设备,其中,所述纹理存储附加信息以供当在所述纹理的一个或更多个通道中渲染所述场景时使用。
30.根据权利要求17至29中的任一项所述的流水线或设备,其中,所述流水线或处理电路被配置为:
在渲染所述场景以供输出时至少部分地生成和/或更新所述纹理。
31.根据权利要求17至30中的任一项所述的流水线或设备,其中,所述包围体形式为包围盒。
32.根据权利要求17至31中的任一项所述的流水线或设备,其中,所述纹理是立方体纹理。
33.一种用于当渲染场景以供输出时在图形处理***中使用的纹理,其中,表示要渲染的所述场景的全部或部分的体积的包围体被定义并且在所述包围体内存在至少部分透明的对象,该纹理包括:
纹理纹元的阵列,其中:
所述纹元值被设定为使得它们各自存储在从将对所述纹理进行采样所相对于的参照位置起的给定方向上表示所述包围体的所述表面的所述颜色的一个或更多个颜色值,所述参照位置位于所述场景中的所述至少部分透明的对象内。
34.一种当渲染场景以供输出时操作图形处理***的方法,该方法包括:
当渲染其中存在第二对象和至少部分透明的第一对象的场景时,其中所述第二对象至少部分地在所述第一对象后面和/或在所述第一对象内:
针对所述第一对象的表面上的至少一个采样位置,通过以下步骤来确定要用于表示将在所述采样位置处通过所述第一对象可见的所述第二对象的部分的颜色:
使用从针对所述场景的主视点位置起的视图矢量来确定针对所述采样位置的折射视图矢量;
使用所述折射视图矢量来确定要用于对表示所述第二对象的图形纹理进行采样的纹理坐标;以及
使用所确定的纹理坐标来对所述图形纹理进行采样以针对所述采样位置确定要用于表示将在所述采样位置处通过所述第一对象可见的所述第二对象的所述部分的颜色。
35.根据权利要求34所述的方法,其中,表示所述第二对象的所述图形纹理表示如从辅助视点位置看到的所述第二对象,所述辅助视点位置位于在所述第一对象和/或所述第二对象处端接并且通过所述主视点位置的矢量上。
36.根据权利要求34或35所述的方法,其中,使用从针对所述场景的所述主视点位置到所述采样位置的所述视图矢量来确定所述折射视图矢量的步骤包括确定由于所述视图矢量在所述第一对象的所述表面处的折射而导致的所述视图矢量的方向的改变。
37.根据权利要求34、35或36所述的方法,其中,使用所述折射视图矢量来确定要用于对表示所述第二对象的所述图形纹理进行采样的所述纹理坐标的步骤包括:
将表示所述第二对象的所述图形纹理映射到所述第一对象的所述表面上并且确定针对所述采样位置的第一纹理坐标;以及然后
使用所述折射视图矢量来修改所确定的第一纹理坐标以达到要用于对所述图形纹理进行采样的所述纹理坐标。
38.根据权利要求37所述的方法,其中,将表示所述第二对象的所述图形纹理映射到所述第一对象的所述表面上的步骤包括将所述纹理映射到所述第一对象的所述表面上,好像所述纹理被投影到所述第一对象内部或后面的平面上一样。
39.根据权利要求37或38所述的方法,其中,使用所述折射视图矢量来修改所确定的第一纹理坐标以达到要用于对所述图形纹理进行采样的所述纹理坐标的步骤包括:
确定所述视图矢量与所述折射视图矢量之间的差异;以及
使用所确定的差异来修改所确定的第一纹理坐标。
40.根据权利要求34至39中的任一项所述的方法,所述方法还包括确定要用于表示所述场景的除将在所述采样位置处通过所述第一对象可见的所述第二对象以外的部分的颜色。
41.根据权利要求34至40中的任一项所述的方法,所述方法还包括:
当渲染其中定义有表示要渲染的场景的全部或部分的体积的包围体的所述场景以供输出时:
当在所述场景中渲染在所述包围体内的所述至少部分透明的对象时:
针对所述对象的一些或全部执行渲染通道,其中所述对象被渲染,好像它是不透明的对象一样;以及
在所述渲染通道中:
针对所述对象的表面上的至少一个采样位置,通过以下步骤来确定要用于表示将在所述采样位置处通过所述对象可见的所述场景的所述部分的颜色:
使用从针对所述场景的视点位置起的视图矢量来确定针对所述采样位置的折射视图矢量;
确定由所述折射视图矢量在所述包围体上交叉的位置;
使用所述交叉位置来确定要用于对表示所述场景中的所述包围体的所述表面的所述颜色的图形纹理进行采样的矢量;以及
使用所确定的矢量来对所述图形纹理进行采样以针对所述采样位置确定要用于表示将在所述采样位置处通过所述对象可见的所述场景的所述部分的颜色。
42.根据权利要求34至41中的任一项所述的方法,所述方法还包括:
当渲染所述场景时:
基于针对所述场景的当前主视点位置和/或基于针对所述场景的当前时间来确定要使用所述多个图形纹理中的哪一个来确定要用来表示将通过所述第一对象可见的所述第二对象的所述部分的所述颜色。
43.根据权利要求34至42中的任一项所述的方法,所述方法还包括:
当渲染所述场景时:
基于针对所述场景的当前主视点位置和/或基于针对所述场景的当前时间来确定是否应该生成表示所述第二对象的图形纹理;并且
当确定了应该生成表示所述第二对象的纹理时,生成表示所述第二对象的图形纹理。
44.根据权利要求34至43中的任一项所述的方法,所述方法还包括生成表示所述第二对象的所述图形纹理。
45.一种生成当渲染场景以供输出时在图形处理***中使用的纹理的方法,其中,在所述场景中存在第二对象和至少部分透明的第一对象,所述第二对象至少部分地在所述第一对象后面和/或在所述第一对象内,该方法包括:
通过以下步骤来生成包括纹理纹元的阵列以供当从主视点位置渲染所述场景时使用的图形纹理:
设定所述纹理中的纹元值,使得它们各自存储表示如从辅助视点位置看到的所述第二对象的所述颜色的一个或更多个颜色值,所述辅助视点位置位于在所述第一对象和/或所述第二对象处端接并且通过所述主视点位置的矢量上;以及
存储表示所述纹理的所述纹元值的数据。
46.根据权利要求43、44或45所述的方法,所述方法还包括:
生成表示所述第二对象的多个图形纹理,其中所述多个图形纹理中的每一个从针对所述场景的多个不同的主视点位置中的一个和/或在针对所述场景的不同时刻表示所述第二对象。
47.根据权利要求34至46中的任一项所述的方法,其中,在所述场景中存在多个第二对象,并且其中所述图形纹理表示所述多个第二对象。
48.一种图形处理流水线,该图形处理流水线包括:
多个处理级,至少包括:光栅化输入基元以生成要处理的图形片段的光栅化器,各个图形片段具有与它关联的一个或更多个采样位置;以及处理由所述光栅化器生成的片段以生成输出片段数据的渲染器;
其中,所述图形处理流水线当渲染其中存在第二对象和至少部分透明的第一对象的场景时,其中所述第二对象至少部分地在所述第一对象后面和/或在所述第一对象内,被配置为:
针对所述第一对象的表面上的至少一个采样位置,通过以下步骤来确定要用于表示将在所述采样位置处通过所述第一对象可见的所述第二对象的部分的颜色:
使用从针对所述场景的主视点位置起的视图矢量来确定针对所述采样位置的折射视图矢量;
使用所述折射视图矢量来确定要用于对表示所述第二对象的图形纹理进行采样的纹理坐标;以及
使用所确定的纹理坐标来对所述图形纹理进行采样以针对所述采样位置确定要用于表示将在所述采样位置处通过所述第一对象可见的所述第二对象的所述部分的颜色。
49.根据权利要求48所述的流水线,其中,表示所述第二对象的所述图形纹理表示如从辅助视点位置看到的所述第二对象,所述辅助视点位置位于在所述第一对象和/或所述第二对象处端接并且通过所述主视点位置的矢量上。
50.根据权利要求48或49所述的流水线,其中,所述流水线被配置为:
通过确定由于所述视图矢量在所述第一对象的所述表面处的折射而导致的所述视图矢量的方向的改变,来使用从针对所述场景的所述主视点位置到所述采样位置的所述视图矢量来确定所述折射视图矢量。
51.根据权利要求48、49或50所述的流水线,其中,所述流水线被配置为通过以下步骤来使用所述折射视图矢量来确定要用于对表示所述第二对象的所述图形纹理进行采样的所述纹理坐标:
将表示所述第二对象的所述图形纹理映射到所述第一对象的所述表面上并且确定针对所述采样位置的第一纹理坐标;以及然后
使用所述折射视图矢量来修改所确定的第一纹理坐标以达到要用于对所述图形纹理进行采样的所述纹理坐标。
52.根据权利要求51所述的流水线,其中,所述流水线被配置为通过将表示所述第二对象的所述图形纹理映射到所述第一对象的所述表面上,好像所述纹理被投影到所述第一对象内部或后面的平面上一样,来将所述纹理映射到所述第一对象的所述表面上。
53.根据权利要求51或52所述的流水线,其中,所述流水线被配置为通过以下步骤来使用所述折射视图矢量来修改所确定的第一纹理坐标以达到要用于对所述图形纹理进行采样的所述纹理坐标:
确定所述视图矢量与所述折射视图矢量之间的差异;以及
使用所确定的差异来修改所确定的第一纹理坐标。
54.根据权利要求48至53中的任一项所述的流水线,其中,所述流水线还被配置为:
确定要用于表示所述场景的除将在所述采样位置处通过所述第一对象可见的所述第二对象以外的部分的颜色。
55.根据权利要求48至54中的任一项所述的流水线,其中,所述图形处理流水线当渲染其中定义有表示要渲染的场景的全部或部分的体积的包围体的所述场景以供输出时被配置为:
当在所述场景中渲染在所述包围体内的至少部分透明的对象或所述至少部分透明的对象时:
针对所述对象的一些或全部执行渲染通道,其中所述对象被渲染,好像它是不透明的对象一样;以及
在所述渲染通道中:
针对所述对象的表面上的至少一个采样位置,通过以下步骤来确定要用于表示将在所述采样位置处通过所述对象可见的所述场景的所述部分的颜色:
使用从针对所述场景的视点位置起的视图矢量来确定针对所述采样位置的折射视图矢量;
确定由所述折射视图矢量在所述包围体上交叉的位置;
使用所述交叉位置来确定要用于对表示所述场景中的所述包围体的所述表面的所述颜色的图形纹理进行采样的矢量;以及
使用所确定的矢量来对所述图形纹理进行采样以针对所述采样位置确定要用于表示将在所述采样位置处通过所述对象可见的所述场景的所述部分的颜色。
56.根据权利要求48至55中的任一项所述的流水线,其中,所述流水线还被配置为:
当渲染所述场景时:
基于针对所述场景的当前主视点位置和/或基于针对所述场景的当前时间来确定要使用所述多个图形纹理中的哪一个来确定要用来表示将通过所述第一对象可见的所述第二对象的所述部分的所述颜色。
57.根据权利要求48至56中的任一项所述的流水线,其中,所述流水线还被配置为:
当渲染所述场景时:
基于针对所述场景的当前主视点位置和/或针对所述场景的当前时间来确定是否应该生成表示所述第二对象的图形纹理;并且
当确定了应该生成表示所述第二对象的纹理时,生成表示所述第二对象的图形纹理。
58.根据权利要求48至57中的任一项所述的流水线,其中,所述流水线还被配置为:
生成表示所述第二对象的所述图形纹理。
59.一种用于生成当渲染场景以供输出时在图形处理***中使用的纹理的设备,其中,在所述场景中存在第二对象和至少部分透明的第一对象,所述第二对象至少部分地在所述第一对象后面和/或在所述第一对象内,该设备包括处理电路,该处理电路被配置为:
通过以下步骤来生成包括纹理纹元的阵列以供当从主视点位置渲染所述场景时使用的图形纹理:
设定所述纹理中的纹元值,使得它们各自存储表示如从辅助视点位置看到的所述第二对象的所述颜色的一个或更多个颜色值,所述辅助视点位置位于在所述第一对象和/或所述第二对象处端接并且通过所述主视点位置的矢量上;以及
存储表示所述纹理的所述纹元值的数据。
60.根据权利要求57、58或59所述的流水线或设备,其中,所述流水线或设备还被配置为:
生成表示所述第二对象的多个图形纹理,其中所述多个图形纹理中的每一个从针对所述场景的多个不同的主视点位置中的一个和/或在针对所述场景的不同时刻表示所述第二对象。
61.根据权利要求48至60中的任一项所述的流水线或设备,其中,在所述场景中存在多个第二对象,并且其中所述图形纹理表示所述多个第二对象。
62.一种用于当从主视点位置渲染场景以供输出时在图形处理***中使用的纹理,其中,在所述场景中存在第二对象和至少部分透明的第一对象,所述第二对象至少部分地在所述第一对象后面和/或在所述第一对象内,该纹理包括:
纹理纹元的阵列,其中:
所述纹元值被设定为使得它们各自存储表示如从辅助视点位置看到的所述第二对象的所述颜色的一个或更多个颜色值,所述辅助视点位置位于在所述第一对象和/或所述第二对象处端接并且通过所述主视点位置的矢量上。
63.一种包括软件代码的计算机程序,该软件代码被适配为当在数据处理***上运行所述程序时执行根据权利要求1至16中的任一项或权利要求34至47中的任一项所述的方法。
64.一种操作大体上如在本文中参照附图中的任一个所描述的图形处理***的方法。
65.一种生成在大体上如在本文中参照附图中的任一个所描述的图形处理***中使用的纹理的方法。
66.一种大体上如在本文中参照附图中的任一个所描述的图形处理流水线。
67.一种用于生成在大体上如在本文中参照附图中的任一个所描述的图形处理***中使用的纹理的设备。
Applications Claiming Priority (5)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
GB1503391.3 | 2015-02-27 | ||
GB1503386.3A GB2535791B (en) | 2015-02-27 | 2015-02-27 | Graphics processing systems |
GB1503386.3 | 2015-02-27 | ||
GB1503391.3A GB2535792B (en) | 2015-02-27 | 2015-02-27 | Graphic processing systems |
PCT/GB2016/050498 WO2016135498A1 (en) | 2015-02-27 | 2016-02-26 | Graphics processing systems |
Publications (2)
Publication Number | Publication Date |
---|---|
CN107430784A true CN107430784A (zh) | 2017-12-01 |
CN107430784B CN107430784B (zh) | 2021-04-16 |
Family
ID=55451508
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201680012554.0A Active CN107430784B (zh) | 2015-02-27 | 2016-02-26 | 图形处理*** |
Country Status (3)
Country | Link |
---|---|
US (1) | US10614619B2 (zh) |
CN (1) | CN107430784B (zh) |
WO (1) | WO2016135498A1 (zh) |
Cited By (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
WO2023231215A1 (zh) * | 2022-06-01 | 2023-12-07 | 合众新能源汽车股份有限公司 | 一种场景渲染方法、装置、电子设备及存储介质 |
Families Citing this family (12)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
GB2528655B (en) | 2014-07-24 | 2020-10-07 | Advanced Risc Mach Ltd | Graphics Processing Systems |
GB2541928B (en) | 2015-09-04 | 2018-01-31 | Advanced Risc Mach Ltd | Graphics processing systems |
GB2543766B (en) | 2015-10-26 | 2018-02-14 | Advanced Risc Mach Ltd | Graphics processing systems |
KR102625773B1 (ko) | 2017-01-04 | 2024-01-17 | 삼성전자주식회사 | 뷰 벡터별 다른 렌더링 품질을 갖는 영상을 생성하는 전자 장치 |
CN108460823B (zh) * | 2018-02-11 | 2022-10-11 | 浙江科澜信息技术有限公司 | 一种渲染三维场景模型的显示方法及*** |
US11138800B1 (en) | 2018-10-31 | 2021-10-05 | Facebook Technologies, Llc | Optimizations to reduce multi-channel ray casting for color sampling |
CN111145358B (zh) * | 2018-11-02 | 2024-02-23 | 北京微播视界科技有限公司 | 图像处理方法、装置、硬件装置 |
CN109754452B (zh) * | 2018-12-28 | 2022-12-27 | 北京达佳互联信息技术有限公司 | 图像渲染的处理方法、装置、电子设备及存储介质 |
US10970913B2 (en) | 2019-02-21 | 2021-04-06 | Electronic Arts Inc. | Systems and methods for texture-space ray tracing of transparent and translucent objects |
JP7001719B2 (ja) * | 2020-01-29 | 2022-02-04 | グリー株式会社 | コンピュータプログラム、サーバ装置、端末装置、及び方法 |
KR20220154780A (ko) * | 2020-03-17 | 2022-11-22 | 인터디지털 씨이 페이튼트 홀딩스, 에스에이에스 | 3d 환경에서의 실시간 광선 추적을 위한 시스템 및 방법 |
CN113487747B (zh) * | 2021-06-25 | 2024-03-29 | 山东齐鲁数通科技有限公司 | 一种模型处理方法、装置、终端及存储介质 |
Citations (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN1677444A (zh) * | 2005-02-01 | 2005-10-05 | 珠海金山软件股份有限公司 | 一种实时三维图像处理装置 |
US7412362B2 (en) * | 2005-05-18 | 2008-08-12 | Microsoft Corporation | River modeling |
CN101441774A (zh) * | 2008-12-26 | 2009-05-27 | 北京航空航天大学 | 基于图像映射空间的动态场景实时双面折射绘制方法 |
Family Cites Families (31)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US5870097A (en) | 1995-08-04 | 1999-02-09 | Microsoft Corporation | Method and system for improving shadowing in a graphics rendering system |
IL127314A0 (en) | 1998-11-27 | 1999-09-22 | Algotec Systems Ltd | A method for forming a perspective rendering from a voxel space |
RU2001124858A (ru) | 1999-02-19 | 2003-09-10 | Сони Компьютер Энтертейнмент Инк. (Jp) | Система и способ рефракционного отображения |
US6784882B1 (en) | 1999-09-10 | 2004-08-31 | Sony Computer Entertainment Inc. | Methods and apparatus for rendering an image including portions seen through one or more objects of the image |
US6690372B2 (en) | 2000-05-31 | 2004-02-10 | Nvidia Corporation | System, method and article of manufacture for shadow mapping |
US6999080B1 (en) * | 2000-11-30 | 2006-02-14 | Microsoft Corporation | System, method, and computer program product for general environment mapping |
US6791563B2 (en) | 2001-09-18 | 2004-09-14 | Bentley Systems, Incorporated | System, method and computer program product for global rendering |
US6876362B1 (en) | 2002-07-10 | 2005-04-05 | Nvidia Corporation | Omnidirectional shadow texture mapping |
US7301538B2 (en) | 2003-08-18 | 2007-11-27 | Fovia, Inc. | Method and system for adaptive direct volume rendering |
US7212206B2 (en) | 2003-08-20 | 2007-05-01 | Sony Computer Entertainment Inc. | Method and apparatus for self shadowing and self interreflection light capture |
US7196711B2 (en) | 2003-10-31 | 2007-03-27 | Microsoft Corporation | View dependent displacement mapping |
US7538766B2 (en) | 2005-06-08 | 2009-05-26 | Microsoft Corporation | Pre-computed shadow fields |
US20070139408A1 (en) * | 2005-12-19 | 2007-06-21 | Nokia Corporation | Reflective image objects |
US8773433B1 (en) | 2006-04-12 | 2014-07-08 | Pixar | Component-based lighting |
US7755626B2 (en) | 2006-05-03 | 2010-07-13 | Sony Computer Entertainment Inc. | Cone-culled soft shadows |
NO324930B1 (no) | 2006-06-13 | 2008-01-07 | Sinvent As | Anordning og fremgangsmate for beregning av rasterdata |
US7928993B2 (en) | 2006-07-28 | 2011-04-19 | Intel Corporation | Real-time multi-resolution 3D collision detection using cube-maps |
US7675518B1 (en) | 2006-09-05 | 2010-03-09 | Adobe Systems, Incorporated | System and method for generating image shadows with ray-coherent integration of extruded transparency maps |
US7884819B2 (en) * | 2006-09-27 | 2011-02-08 | International Business Machines Corporation | Pixel color accumulation in a ray tracing image processing system |
GB2465791A (en) | 2008-11-28 | 2010-06-02 | Sony Corp | Rendering shadows in augmented reality scenes |
US8325186B2 (en) | 2009-05-21 | 2012-12-04 | Sony Computer Entertainment America Llc | Method and apparatus for rendering shadows |
JP2011138445A (ja) | 2009-12-29 | 2011-07-14 | Kaadeikku Corporation:Kk | 透明物体表示回路 |
JP5827007B2 (ja) | 2010-10-15 | 2015-12-02 | 任天堂株式会社 | ゲームプログラム、画像処理装置、画像処理システム、および画像処理方法 |
CA2737575A1 (en) | 2011-04-18 | 2012-10-18 | Calgary Scientific Inc. | Configurable depth-of-field raycaster for medical imaging |
US9280848B1 (en) | 2011-10-24 | 2016-03-08 | Disney Enterprises Inc. | Rendering images with volumetric shadows using rectified height maps for independence in processing camera rays |
US9842424B2 (en) | 2014-02-10 | 2017-12-12 | Pixar | Volume rendering using adaptive buckets |
KR102175162B1 (ko) | 2014-03-24 | 2020-11-05 | 삼성전자주식회사 | 볼륨 렌더링 장치 및 그 동작방법 |
GB2525636B (en) | 2014-04-30 | 2020-08-19 | Geomerics Ltd | Graphics processing systems |
GB2528655B (en) | 2014-07-24 | 2020-10-07 | Advanced Risc Mach Ltd | Graphics Processing Systems |
GB2541928B (en) | 2015-09-04 | 2018-01-31 | Advanced Risc Mach Ltd | Graphics processing systems |
GB2543766B (en) | 2015-10-26 | 2018-02-14 | Advanced Risc Mach Ltd | Graphics processing systems |
-
2016
- 2016-02-26 US US15/551,846 patent/US10614619B2/en active Active
- 2016-02-26 CN CN201680012554.0A patent/CN107430784B/zh active Active
- 2016-02-26 WO PCT/GB2016/050498 patent/WO2016135498A1/en active Application Filing
Patent Citations (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN1677444A (zh) * | 2005-02-01 | 2005-10-05 | 珠海金山软件股份有限公司 | 一种实时三维图像处理装置 |
US7412362B2 (en) * | 2005-05-18 | 2008-08-12 | Microsoft Corporation | River modeling |
CN101441774A (zh) * | 2008-12-26 | 2009-05-27 | 北京航空航天大学 | 基于图像映射空间的动态场景实时双面折射绘制方法 |
Non-Patent Citations (1)
Title |
---|
CHRIS WYMAN: "邻近几何的交互式图像空间折射", 《GRAPHITE "05: PROCEEDINGS OF THE 3RD INTERNATIONAL CONFERENCE ON COMPUTER GRAPHICS AND INTERACTIVE TECHNIQUES IN AUSTRALASIA AND SOUTH EAST ASIA》 * |
Cited By (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
WO2023231215A1 (zh) * | 2022-06-01 | 2023-12-07 | 合众新能源汽车股份有限公司 | 一种场景渲染方法、装置、电子设备及存储介质 |
Also Published As
Publication number | Publication date |
---|---|
WO2016135498A1 (en) | 2016-09-01 |
US20180033191A1 (en) | 2018-02-01 |
CN107430784B (zh) | 2021-04-16 |
US10614619B2 (en) | 2020-04-07 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN107430784A (zh) | 图形处理*** | |
Mildenhall et al. | Nerf: Representing scenes as neural radiance fields for view synthesis | |
CN111508052B (zh) | 三维网格体的渲染方法和装置 | |
US10636213B2 (en) | Graphics processing systems | |
CN107452048A (zh) | 全局光照的计算方法及装置 | |
CN107392988A (zh) | 利用投影几何失真用于以可变采样率渲染的***、方法和计算机程序产品 | |
US7274365B1 (en) | Graphical processing of object perimeter information | |
CN106537459B (zh) | 图形处理***、操作该***的方法和计算机可读存储介质 | |
CN110291563A (zh) | 图形处理中的多个着色器进程 | |
CN110383337A (zh) | 可变速率着色 | |
CN106504310B (zh) | 操作图形处理***的方法、图形处理单元、介质 | |
CN105046736A (zh) | 图形处理*** | |
CN101533522B (zh) | 用于处理计算机图形的方法和设备 | |
CN111047506B (zh) | 环境图生成和孔填充 | |
CN110400367A (zh) | 降低渲染延迟的***和方法 | |
GB2420679A (en) | Rasterisation, storage, downsampling and rendering of graphical primitive data | |
CN110390711A (zh) | 基于分层光线投影的计算机图形 | |
US11276150B2 (en) | Environment map generation and hole filling | |
Widmer et al. | An adaptive acceleration structure for screen-space ray tracing | |
WO2017137772A1 (en) | Graphics processing systems | |
Kim | Caustics using screen-space photon mapping | |
WO2023220807A1 (en) | Light field offset rendering | |
GB2535792A (en) | Graphic processing systems | |
Dietrich | Elevation maps | |
Thaler et al. | Deferred rendering |
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 |