用于向计算机图形中的对象添加阴影的方法

文档序号:6348976阅读:208来源:国知局
专利名称:用于向计算机图形中的对象添加阴影的方法
技术领域
本发明涉及计算机图形领域,特别地涉及一种用于在计算机图形中使对象阴影化的快速且简单的方法。
背景技术
在计算机图形领域中,生成由虚拟光源照明的对象的阴影是众所周知的。该特征在通过增强场景中的深度的可感知性来使计算机生成的图像具有真实感的方面起重要作用。换句话说,阴影有助于了解对象具有怎样的深度,以及它们在空间中相对于彼此的位置如何。场景通常定义为多个三维(3D)对象和多个光源。观察者从视点观察场景。观察者有时被称为“相机”。场景被渲染到图像中。在计算机图形领域中,渲染的意思是计算图像。在该上下文中,渲染为计算描绘场景的图像的过程,就像从观察者(相机)的视点观看场景一样。可以通过渲染多个连续的图像并在所述渲染图像之间移动对象和/或观察者/ 相机来创建运动画面或影像。市面上已有通过允许用户在3D位置插入3D对象来构建场景的计算机程序。市面上已有可自动地向3D对象添加阴影的其它计算机程序。例如,存在允许用户指派3D对象的位置、并相对于该位置移动虚拟光源以便于从期望的方向虚拟地照明对象的计算机程序。计算机程序然后可以基于对象的形状以及对象和虚拟光源的相对位置自动地生成对象的阴影。还存在用于生成意图动画制作雪、雨、水、烟等小尺寸粒子形式的多个对象的计算机程序。这种类型的计算机程序有时被称为粒子动画系统。粒子动画系统的一个示例为由 Trapcode AB公司开发的Trapcode Particular 。在粒子动画系统中,用户向一组对象指派规则,以便于不需要单独地定位或定向它们。反过来,计算机基于指派的规则计算它们的位置。在运动画面或影像的情形下,计算机随时间计算该组对象的位置。粒子动画系统因此对如下情况是有用的在创建具有非常多的对象的场景的情况下,且在该情况下单独地定位每个对象是不实际的。通过计算机程序,每个粒子被指派3D位置,并且还可以被指派其它属性,例如速度、方向、旋转速度等。还存在如下粒子动画系统该粒子动画系统允许用户通过指定场景中的一个或若干个光源的3D位置将光源插入到场景中。一些粒子动画系统甚至包括用于将阴影效果添加到包括光源的场景中的功能。然而,在场景中自动地生成对象的逼真阴影的任务是一个复杂的任务,其通常需要非常高的计算能力。已知的提供这种功能的计算机程序使用非常复杂并使得图像渲染很慢、特别是对于具有多个对象的场景渲染很慢的方法,或者使用产生不令人满意结果使得渲染的图像看上去不逼真的方法。因此,存在对用于使计算机生成的场景中的对象逼真地阴影化的快速且简单的方法的期望。

发明内容
本发明的目的是提供一种用于快速且简单地使计算机生成的场景中的对象阴影化的方法。该目的通过向计算机生成的对象自动添加阴影的方法实现,包括以下步骤-基于第一原始对象的3D位置和第一光源的3D位置计算阴影对象的第一3D (三维)位置;以及-将阴影对象在所述第一3D位置处添加到所述场景。通过在基于原始对象和光源的3D位置确定的第一 3D位置处向场景自动地添加单独对象(文中称为阴影对象),可以针对场景的每一原始对象/光源对自动地添加阴影对象,该阴影对象会引起从场景渲染而成的图像的逼真阴影效果。优选地,计算添加阴影对象的第一 3D位置,使得阴影对象从光源的视点看定位在所述第一原始对象的后面,并与第一原始对象隔开一定的偏移距离。即,可以计算第一 3D 位置,使得阴影对象沿着穿过所述第一光源和所述第一原始对象的(假想)直线定位,并且从光源的视点看位于所述第一对象的后面,在该情形下偏移距离为沿着所述直线的、在第一对象和阴影对象之间的距离。通常,通过将对象/光源的“中心点”与单个(X,1, ζ)坐标相关联,场景中的每一个对象和光源被指派3D位置。然后可以基于第一原始对象和光源的已知的(x,y,z)坐标计算假想直线,且可以通过将阴影对象的“中心点”与位于假想直线上并与第一原始对象隔开一定偏移距离的U,1,ζ)坐标相关联来定位阴影对象。以此方式,阴影对象相对于原始对象和光的方向逼真地定位,并且计算第一 3D位置的数学运算变得非常简单,由此降低了将阴影对象插入到场景所需的计算能力。优选地,阴影对象为二维QD)对象,例如圆形、矩形、三角形、五边形或任何其它 2D形状。生成2D形状不需要和生成3D图形一样高的计算能力,并且通过生成圆形或其它不复杂的2D形状形式的阴影对象,计算能力需求被进一步降低,由此允许快速执行该方法,和/或允许通过非高性能的处理单元执行该方法。优选地,二维形状的边缘被模糊化,使得阴影对象朝向其周边“淡出”,从而使得当将场景渲染到图像中时,在阴影对象和阴影对象合成到其上的任何原始对象或背景之间不存在尖锐的边缘。根据本发明的优选实施例,以边缘模糊化的圆形形式生成阴影对象。已发现边缘模糊化的圆形形式的阴影对象产生非常逼真的阴影效果,甚至在原始对象具有其它的非圆形形状的情形下也是如此。该方法可以进一步包括将阴影对象的不透明度设置为一定的不透明值的步骤。并且/或者它可以包括将阴影对象的颜色设置为一定颜色值的步骤。优选地,基于上述的偏移距离计算透明度值和/或颜色值。由此,可以计算不透明度值和/或颜色值,使得当偏移值增加时不透明降低和/或颜色发生变化。这种特征具有如下效果当阴影对象位于远离引起它的原始对象时,阴影对象将变得不突出,这又使得从景象渲染而成的图像具有更逼真的阴影化效果。该方法的更多的有益特征将在下文的详细描述和所附权利要求中进行描述。本发明的另一个目的是提供一种用于快速且简单地使计算机生成的场景中的对象阴影化的计算机程序产品。该目的通过如下设备的计算机程序实现,该设备包括处理单元和图形渲染单元,其能够生成包括至少一个第一原始对象和至少一个第一光源的场景。计算机程序包括计算机可读代码,该计算机可读代码当通过处理单元运行时使得设备执行上述方法。根据本发明的另一方面,提供了一种计算机程序产品。计算机程序产品包括计算机可读介质和存储在计算机可读介质上的计算机可读代码。计算机可读代码为上述计算机程序。计算机可读介质可以为硬磁盘驱动器、光盘只读存储器(⑶ROM)、数字化视频光盘 (DVD)或现有技术已知的任何其它计算机可读介质。根据本发明的又一方面,提供了一种设备,该设备包括计算装置和图形渲染单元, 其能够生成包括至少一个第一原始对象和至少一个第一光源的场景。计算装置适于基于第一原始对象的3D位置和第一光源的3D位置计算阴影对象的第一 3D位置,图形渲染单元适于将阴影对象添加到所述场景的所述3D位置处。计算装置可以为处理单元,例如微处理器等,而图形渲染单元可以例如为图形处理单元(GPU)。本发明用于粒子动画系统时是特别有利的,在这样的粒子动画系统中,大量的小尺寸粒子形式的原始对象的阴影要被加入到场景中。通过简单地将圆一优选地边缘模糊化的圆一从待被添加阴影的粒子偏移一定的偏移距离,并使其从光源的视点看位于粒子的后面,则只需要执行很少的计算。此外,在特定3D位置处画出具有特定半径的圆是非常简单的过程,其不需要执行该方法的设备的处理单元或图形渲染单元执行任何复杂的计算。此外,在创建将计算机生成的效果加入到实景镜头中的任何运动画面或影像的时候,可以有利地使用本发明。在这种情形下,本发明会使计算机生成的图像看起来更加真实、更像实景镜头的自然部分,从而使得效果对于观众变得更加可信。本发明对于增强不包括实景镜头而是纯数字渲染的运动画面或影像的可感知性也是有益的。本发明还可以有利地用作在创建意图模拟真实物理环境的虚拟环境时的工具。例如,建筑师可以在设计房屋时使用本发明;建筑师可以使用本发明来帮助形象化例如在图像、电影或房屋的交互预演(interactive walk-through)中的房屋。本发明添加的阴影将增加空间感知,使得图像看起来更逼真。本发明还可以用于模拟器中,例如用于飞行模拟器或汽车模拟器中。在这种情形下,所提出的用于添加阴影的方法可以帮助飞行员/驾驶员估计在虚拟环境中到对象的距离以及对象相对于彼此的位置。换句话说,本发明可以增强飞行员/驾驶员的空间感知。本发明的另一个示例性应用领域为计算机游戏。大部分现代计算机游戏使用3D 图形。因为本发明呈现了一种用于在3D环境中逼真地添加阴影的非常快速方法,所以它有利于用于诸如计算机游戏的实时应用中,以实现虚拟3D世界的逼真阴影化。本发明还可以用于医学应用中,例如用于可视化诸如器官或分子的复杂3D结构。 为了清晰起见,可以加入阴影化。本发明还有利地用于移动设备的软件应用中,移动设备例如移动电话、个人数字助理(PDA)等。在移动设备中,计算资源通常不足,设备应当执行最小量的计算,以节省能量。本发明非常有益于以快速且省电的方式来渲染逼真地阴影化的图像。


图1示出了示例场景和观察者;图2示出了在根据本发明的原则向图1中所示的场景添加了阴影对象的情况下的场景;图3示出了根据本发明的原则如何相对于相关联的原始对象和光源定位阴影对象的示例;图4示出了如何相对于第一原始对象和从光源的视点看位于第一原始对象的后面的第二原始对象定位第一被照明原始对象的阴影对象的示例;图5和图6示出了根据本发明的方法的效果。图5示出了从只包括原始对象的场景渲染而成的图像,而图6示出了从相同的场景但是根据本发明的原则添加了阴影对象之后渲染而成的图像;图7示出了示例性场景的一部分;图8示出了四幅图,所述四幅图示出了根据本发明如何设置阴影对象的像素的强度值的不同示例;图9示出了根据本发明的计算机程序的示例性图形用户界面;以及图10为示出了根据本发明的实施例的方法的流程图。
具体实施例方式图1示出了包括原始对象2和光源3的场景1,每个原始对象2和光源3具有三维 (3D)位置。观察者4从同样指派了 3D位置的视点观察场景1。在计算机图形领域,观察者 (即,在渲染图像中观察场景的3D位置)有时被视为场景的一部分,而有时则不被视为场景的一部分。下文中,观察者4将不被视为场景1的一部分。替代地,贯穿本文,场景被定义成包括至少一个原始对象2和至少一个光源3的虚拟3D空间。场景1完全地或部分地由运行生成3D场景的计算机程序的计算机生成。原始对象2可以是任何类型的对象。例如,原始对象2可以是描绘任何真实或想象对象(例如狗、人、宇宙飞船,天体等)的3D模型。原始对象2还可以是描绘任何真实或想象对象(例如人脸、星体、信件、圆等的照片或图像)的2D对象。原始对象2还可以是粒子动画系统中的粒子。场景1中的每一个原始对象2和每一个光源3被指派3D位置。原始对象2和光源3可以由计算机用户手动地定位,或者它们可以由计算机自动地或半自动地定位。存在用于指派原始对象2和光源3的3D位置的若干方法,而这些确切的实现方法在本发明的范围之外。可以借助于能够将3D场景中的对象渲染到图像中的任何已知方法渲染场景1的原始对象2。根据本发明的一些方面,存在对对象渲染方法的特定需求;例如可能要求方法对渲染图像中的每个像素指派深度值和/或阿尔法值。当是这种情形时,将会在描述中对此进行清晰的陈述。图2示出了图1中所示场景,其中已根据本发明的示例性实施例添加了阴影。当计算机运行指示计算机执行下文中所述方法步骤的计算机代码时,计算机自动地生成阴影并将阴影添加到场景1。因此应当理解本发明通常实现为计算机程序,当该计算机程序运行在计算机上或者运行在包括处理单元(例如,微处理器)和图形渲染单元(例如,图形处理单元(GPU))的任何其它设备上时,使设备执行所述方法步骤。针对场景1中的每一个原始对象2和每一个光源3,添加作为原始对象2的近似物的新对象5。与特定原始对象2和特定光源3相关联的近似物,即特定的对象/光源对,被指派基于原始对象2的3D位置和光源3的3D位置而计算的3D位置。下文中,原始对象2 的近似物被称为“阴影对象”。当在下文中使用术语“所有对象”时,既指原始对象又指阴影对象;而术语“项”指的是场景的所有项,既包括对象又包括光源。现在参照图3,通过选取原始对象20的3D位置并沿着来自光源30的3D位置的光的方向偏移,计算阴影对象50的3D位置。在下文中称为偏移距离d。ffset的偏移量可以是用户指定的预设参数和/或是可以由计算机基于光源30和原始对象20的位置和/或尺寸而自动计算的参数。还可以基于场景中的其它对象自动地计算该偏移距离,这将在下面进行详细的描述。在本发明的该实施例中,阴影对象50的中心被放置在空间中沿着贯穿原始对象 20的中心和光源30的中心的直线7的一点处,位于与原始对象20隔开一定的偏移距离,且从光源视点看位于原始对象20的后面。在该示例性实施例中,偏移距离被视为定义成从原始对象20的中心到阴影对象50的中心的距离。然而,应当理解还可以以其它方式定义偏移距离,例如将其定义成分别在原始对象20和阴影对象50上的、相距距离最短的点之间的距离。还应当理解可以以各种不同的方式定义原始对象或光源的“中心”。在附图中,为了简单起见,原始对象和光源示出为球体,在该情形下,自然将每个对象/光源的“中心”定义为球体的中心。然而,原始对象或光源可以具有任何给定的2D或3D形状,并且可以根据用于确定哪个点可以被视为2D或3D对象的“中心点”的任何已知原则来计算每一个原始对象或光源的中心点。然而,因为场景的所有项在被添加到场景中时通常被别指派了单一的(x,y,z)坐标形式的3D位置,所以当生成阴影对象50时通常不需要执行计算来确定原始对象20和光源30的中心点。因此,原始对象20和光源30通常已被指派了可以视为其中心点的各自的(x,y,z)坐标。阴影对象50通常以2D形状的形式生成。与生成为3D形状相比,生成2D形状需要较小的计算能力。阴影对象50可以为原始对象20的简单的边缘模糊化的2D近似物。 优选地,阴影形状50以边缘模糊化的圆的形式生成。在该示例性实施例中,原始对象20为球体,边缘模糊化的圆为原始对象20的极好的近似物。然而,已发现边缘模糊化的圆形式的阴影对象50还在场景中的原始对象具有其它形式时也产生渲染图像的非常逼真的阴影化。从图2和图3所示的实施例看出,2D阴影对象5、50通常面向观察者4、40。可以说阴影对象50是通过将原始对象20投影到距离原始对象50给定的偏移距离的假想平面 8而生成的。生成假想平面8以及由此生成的二维阴影对象50以便于总是面向观察者40, 这意味着要选择假想平面8的倾斜度,使得来自观察者40的视线形成投影平面8的法线, 或者至少形成基本上平行于投影平面8的法线的直线。这种类型的图像在计算机图形领域中通常称为“公告牌(billboard)”或“精灵(sprite)”。应当理解不需要额外的计算来使得2D阴影对象50面向观察者40。当在场景中添加2D形状时,该2D形状自动地生成为面向指派给观察者40的位置。可以不同的方式确定阴影对象50的尺寸。根据本发明的一个方面,阴影对象50的尺寸被简单地设置成预定的标准值。根据本发明的另一方面,阴影对象50的尺寸被设置成使得它与原始对象20的尺寸成比例。在这种情形下,原始对象20的尺寸和阴影对象50的尺寸之间的比值常数可以为用户参数。根据本发明的又一方面,可以基于光源30和原始对象20之间的距离计算阴影对象50的尺寸。例如,可以基于该距离确定上述可被用来相对于原始对象20设置阴影对象50的尺寸的比例常数。在这种情形下,比例常数优选地随着距离的减小而增大,使得当光源30和原始对象20之间的距离变小时阴影对象50变大。当该距离增加时,比例常数可以收敛到1,以便给观察者40带来下述印象当光源30发出的光束照到原始对象20上时基本上是平行的。由此,场景IB的阴影化变得更逼真且有助于观察者40估计场景的对象之间的距离。同样,阴影对象50可以经受透视缩放(perspective scaling),意思是阴影对象50的尺寸随着阴影对象50远离观察者40而减小。因此,还可以基于观察者40和阴影对象50之间的距离计算阴影对象50的尺寸,该距离对应于观察者 40看到的场景中的阴影对象50的深度。如上所述,偏移距离,即添加阴影对象50处相距原始对象的距离,可以为预定参数或用户指定参数。然而,还可以基于要被添加阴影对象的原始对象20的已知尺寸通过计算机自动地计算该偏移距离。例如,在图3中示出的情况下,偏移距离被定义为从球形原始对象20的中心到阴影对象50的中心的距离,可以将偏移距离计算成原始对象20的半径加上或乘以合适的值。当计算偏移距离时,通过考虑原始对象20的尺寸,可以确保阴影对象 50定位在后面(从光源视点看)而不在原始对象内部。还可以基于场景中的其它原始对象的尺寸和/或3D位置计算偏移值。图4示出了从光源视点看第二原始对象20B位于第一原始对象20A的后面的场景。在这种情况中, 可以计算偏移距离,使得表示第一原始对象20A的阴影的阴影对象50定位在第一原始对象 20A和第二原始对象20B之间。即,可以基于要被添加阴影对象50的原始对象20A和从光源视点看位于第一原始对象20A后面的另一个原始对象20B之间的距离d。bje。t计算偏移距离d。ffset。优选地,可以计算偏移值,使得第一原始对象20A的阴影对象50定位成尽可能靠近第二对象20B。由此,很可能从观察者的视点看,阴影对象50与第二原始对象20B重叠, 并因此在场景被渲染到图像中时,如观察者40所见那样模拟第一原始对象20A落在第二原始对象20B上的逼真阴影。如上所述,当计算偏移距离时,还可以使用第一原始对象20A和 /或第二原始对象20B的尺寸,以确保阴影对象50定位在它们之间而不定位在它们中的任何一个的“内部”。根据本发明的一个方面,可以基于偏移距离设置阴影对象5、50的颜色和/或不透明度。通常,阴影对象的颜色应该是暗色的,例如黑色、灰色或暗褐色。然而,通过基于阴影对象5、50的偏移距离调节它们的颜色和/或不透明度,可以对位于靠近其相关联的原始对象的阴影对象给定使它比位于距离相关原始对象较远的阴影对象更突出的不透明度和/ 或颜色。这可以例如通过为每个阴影对象指派与其偏移距离成反比的不透明度值来实现。 这种特征使场景的阴影化甚至更加逼真。当渲染从观察者视点观看针对每一原始对象/光源对添加了阴影对象5、50之后的场景1时,所渲染图像将包含阴影。图5示出了从只包括原始对象(月牙形状的对象) 的场景渲染而成的图像,而图6示出在根据本发明的原则添加了阴影对象5、50之后从相同场景渲染而成的图像。在本发明的一个实施例中,以从后到前的顺序执行所有对象的渲染。通过使用任何包括设置每一个像素处的阿尔法值的方法,将原始对象2、20渲染到目标缓存区。如计算机图形领域公知的,目标缓存区为像素构成的矩形,每个像素具有颜色(例如,可以通过指定红色、绿色或蓝色分量来给出颜色)。还可以对每个像素指派阿尔法值;阿尔法值描述该像素的不透明度。当图像针对每个像素包括阿尔法值时,可以说其具有阿尔法通道。根据该实施例,针对阴影对象5、50的每个像素,通过将像素合成到相应的目标缓存区像素并保持目标缓存区像素的阿尔法值不变,渲染阴影对象5、50。该实施例的优点在于原始对象2、20的阿尔法通道保持不变,因此所得到的图像缓存区具有正确的阿尔法通道。这允许所得到的图像缓存区合成到背景(例如影像)中。另一个优点在于当要将阴影对象像合成到目标缓存区像素上时目标缓存区像素具有零阿尔法值(对于所有不与原始对象的像素对应的目标缓存区像素或者不与从观察者视点看来位于阴影对象后面的背景的像素对应的目标缓存区像素而言是这种情况)的目标缓存区像素在阴影对象像素已合成到其上之后仍具有零阿尔法值。换句话说,这种渲染对象的方式确保添加到场景中的阴影对象5、50只有在从观察者的视点看来存在原始对象2、20或在阴影对象5、50后面存在背景的情形下变得可见。 或者,更确切地说,只有从观察者的视点看来与位于阴影对象后面的原始对象重叠的那部分阴影对象5、50在渲染的图像中变得可见。在本发明的另一个实施例中,以从后到前的顺序执行所有对象的渲染。使用任何包括针对每个像素设置阿尔法值和深度值的方法,将原始对象2、20渲染到目标缓存区。如计算机图形中公知的,像素的深度值表示从观察者的视点看的像素的深度。如果坐标系统的原点位于观察者的视点处,且ζ轴沿观察者的正前方向延伸,则像素的深度值为该像素的ζ坐标。包括每个像素的深度值的图像被说成具有深度通道,它还可以被称为深度缓存或ζ缓存。根据该实施例,针对阴影对象的每个像素,通过以下对阴影对象5、50进行渲染-将阴影对象像素的阿尔法值乘以强度值,以及-将阴影对象像素合成到相应的目标缓存区像素上,同时保持目标缓存区像素的阿尔法值不变,强度值为阴影对象像素的深度和相应的目标缓存区像素的深度之间的距离的函数。通过将阴影对象像素的阿尔法值乘以取决于该阴影对象像素的深度和相应的目标缓存区像素的深度之间的距离的强度值,渲染图像中的阴影随着深度淡出,使得靠近观察者的原始对象将不遮蔽离观察者较远的另一个原始对象。这将出现如下结果,在距离增加的情况下强度值降低。下文中,阴影对象像素的深度和相应的目标缓存区像素的深度之间的距离被称为所述像素之间的深度差(DD)距离。现在参照图7,一起示出了第三原始对象20C和在图4中示出的第一原始对象20A 和第二原始对象20B。上述与强度值相乘的效果在于,从观察者的视点看的阴影对象50的与第二原始对象20B重叠的部分将被强烈地描绘出来,因此在渲染图像中比从观察者的视点看的阴影对象50与第三原始对象20C重叠的部分更突出。基本上,该图像渲染方法确保了由阴影对象50引起的在渲染图像中的阴影当落在在深度上接近阴影对象的原始对象上时比落在在深度上远离阴影对象的原始对象上时看起来更“强烈”。这将使得渲染图像中的阴影化看起来更逼真。优选地,如果DD距离超过下文中称为Max_DD_距离的参数给定的特定阈值,则强度值设置为零。Max_DD_距离参数可以是预设参数、用户指定参数或其值由计算机自动计算和设置的参数。这具有以下效果即使原始对象定位成从观察者的视点看位于阴影对象的后面,如果阴影对象和原始对象之间的深度距离足够长,则阴影对象不会影响渲染图像中的原始对象的视觉外观。再次参照图7中示出的场景,这意味着当将场景渲染到图像中时, 如果阴影对象50的所有像素和第三原始对象20C的所有像素之间的深度距离超过Max_DD_ 距离,则阴影对象50将一点也不影响原始对象20C的视觉外观。例如,如果DD距离超过Max_DD_距离,则强度值可以被设置成零,而如果DD距离没有超过Max_DD_距离,则强度值将被设置成Max_DD_距离和DD距离之差除以Max_DD_距离。即,强度值可以定义成如下如果DD距离>Max_DD_距离一强度值=0如果DD距离彡Max_DD_距离一强度值=(Max_DD_距离-DD距离)/Max_DD_距离其中DD距离=目标缓存区像素处的深度-阴影对象像素的深度作为阴影对象像素和相应的目标缓存区像素之间的DD距离的函数的阴影对象像素的强度值的上述定义由图8中的曲线图A示出。在本发明的另一个实施例中,使用与阴影对象像素和相应的目标缓存区像素之间的DD距离相关的另一个参数来执行所有对象的渲染,该参数在下文中称为1^(1(116_00_距离。Middle_DD_距离参数可以是预设参数、用户指定参数或其值由计算机自动地计算和设置的参数。根据该实施例,当DD距离朝向Middle_DD_距离增加时,阴影对象像素的强度值增加,然后当DD距离超过Middle_DD_距离并朝向Max_DD_距离增加时,阴影对象像素的强度值降低。通常,强度值在DD距离等于零时从零开始,并当DD距离超过离时终止于零。作为阴影对象像素和相应的目标缓存区像素之间的DD距离的函数的阴影对象像素的强度值的上述定义由图8中的曲线图B示出。该实施例的优点在于当产生运动画面或影像时,阴影将较少倾向于“popping”。 Popping意思是当对象从另一个对象后面弹出来时的可见伪像。通过使用从零开始、随着 DD距离逼近Middle_DD_距离而逐渐地增加的强度值,阴影对象将逐渐地出现,而不是突然地出现在原始对象的面前。在其它实施例中,阴影对象像素的强度值作为该阴影对象像素和相应的目标缓存区像素之间的DD距离的函数根据平滑的曲线而变化。图8中的曲线图C和D示出了 DD距离的平滑的强度函数的示例。根据本发明的一个方面,计算机程序适于使得通过运行该程序的计算机自动地计算Max_DD_距离和Middle_DD_距离。可以基于阴影对象的尺寸计算Max_DD_距离,以及可以基于Max_DD_距离计算Middle_DD_距离。例如,Max_DD_距离可以被设置成阴影对象的尺寸,而Middle_DD_距离可以被设置成Max_DD_距离的一半。如果作为DD距离的函数的强度值在特定非零DD距离处具有最大值(如图8中的曲线图B和D所示),这将导致阴影在深度上的感知偏移,S卩,朝向或远离渲染图像的观察者的感知偏移。偏移是朝向观察者的深度偏移还是远离观察者的深度偏移,取决于场景中原始对象2、20的深度和光源3、30的深度。因此,当通过这样的函数确定强度值时,可以以补偿渲染图像中的阴影的感知深度的“误差”的方式计算应当添加阴影对象的3D位置。例如, 可以通过根据之前所描述的任何原则确定阴影对象的第一位置来计算阴影对象的位置,然后通过将第一位置加上或减去深度补偿值将阴影粒子在深度上朝向观察者或远离观察者移动,从而将阴影粒子“移动”到最终位置。深度补偿值将因此影响阴影对象的ζ坐标。可以通过用户设置深度补偿值,或者可以通过计算机自动地计算该深度补偿值,例如通过将其简单的设置成Middle_DD_距离。在另一个实施例中,用户可以选择场景1中的光源3、30的子集,子集可以是一个更多个光源,且只有子集中的光源用于根据所述方法生成阴影对象。通过只选择作为子集的最突出的光源,渲染图像将几乎具有好像所有的光源被包括进来的最良好质量。该实施例的优点在于,它减少了必须添加到场景中的阴影对象的数量,这使得该方法更加快速,并且显著地降低了运行计算机程序的设备所需的计算能力。在另一个实施例中,在渲染对象之前,具有深度缓存的背景图像被渲染到目标缓存区。该方法的益处在于背景图像也将被遮蔽。在另一个实施例中,通过使用包括设置每个像素的深度值的任何方法在第一阶段执行原始对象的渲染。例如这可以是图形卡(GPU)所支持的标准渲染函数。使用之前所述方法中的其中一种在第二阶段对阴影对象进行渲染。如果阿尔法通道在目标缓存区中不可用,则所有的像素被假定为完全不透明。然而,这需要深度通道以进行工作。因此,该实施例只应用于利用深度通道的所述方法中。该实施例的益处在于可以使用标准(且通常非常快速的)GPU函数来渲染原始对象。还可以在GPU中使用遮蔽器来执行阴影对象的第二次渲染。遮蔽器为GPU可以(非常快速)执行的一段代码。在这种情形下,遮蔽器将实现所述方法中的其中一个。GPU为专门制造来用于生成计算机图形的芯片或设备。大部分现代PC具有GPU卡。该实施例在计算机游戏中和其它的实时应用中是特别有用的。在本发明的其它实施例中,当对象为复杂3D模型时,例如它是车的3D模型,或人或动物的细节模型时,在生成阴影对象之前,对象可以被分成子对象。可以进行对象的划分,使得当生成阴影对象时,对象的每个主要部分例如手臂成为单独的对象。该实施例的益处在于如果例如人静止地站在场景中,但是移动其手臂,与该手臂相关的阴影对象也将会移动,因此增加了真实感。在本发明的另一个实施例中,当场景中存在非常多的原始对象时,可以在生成阴影对象之前将原始对象进行组合。例如,如果一些原始对象在空间中彼此靠近,则可以在生成阴影对象时将它们视为一个原始对象。该实施例的优点在于将存在较少的阴影对象,因此与对每一个原始对象都添加一个阴影对象(或在原始对象由超过一个的光源进行照明的情况下有多于一个的阴影对象)的情况相比,其向场景添加阴影对象的过程将变得快速且消耗较少的计算能力。如之前所述的,根据本发明的一个方面,与特定原始对象和特定光源相关联的阴影对象被添加到从观察者的视点看位于原始对象的后面,并偏移一定的偏移距离d。ffsrt。无论该初始偏移距离由预定参数、用户指定参数确定,还是基于各种参数计算而来,根据本发明的计算机程序优选地被编程为允许用户在阴影对象50已被添加到场景中之后调节阴影对象50的初始偏移距离。这可以通过例如引入可以由用户调节的滑动控件,和/或用户可以在计算机程序的图形用户界面(GUI)上输入期望偏移距离的文本字段实现。根据本发明的一个方面,用户可以选择针对场景中所有的阴影对象调节偏移距离,或者针对场景中的阴影对象的(一个或更多个)子集调节偏移距离。后者可以通过允许用户例如通过使用计算机鼠标点击来指示场景中的一个或若干个原始对象来实现,然后例如借助于移动滑动控件针对被指示的原始对象的阴影对象调节偏移距离。优选地,计算机程序包括相似的功能以允许用户在阴影对象被添加到场景之后调节阴影对象的尺寸、不透明度、颜色和/或形状。另外,程序可以适于允许用户在阴影对象已被添加到场景之后调节上述Max_DD_距离参数和Middle_DD_距离参数的值。用户可以例如通过上述提出的滑动控件或输入文本字段来调节尺寸、不透明度、颜色、Max_DD_距离和Middle_DD_距离,然而可以例如通过以下方式来调节阴影对象的形状通过从计算机程序的图形用户界面(GUI)呈现给用户的下拉菜单或一组图标中选择几种预定义的形状例如圆形、正方形、矩形、三角形、椭圆形等的其中一个。在一些情形中,如果用户在阴影对象已添加到场景中之后改变阴影对象的尺寸,则理想的是降低阴影对象的不透明度以保持场景中的阴影常数的“值”。因此,根据本发明的一个实施例,计算机适于响应于阴影对象的尺寸的用户指定变化而自动地改变阴影对象的不透明度。根据本发明的又一方面,用户可以在阴影对象已被自动地添加到场景之后,自由地调节阴影对象的偏移距离和/或3D位置。用户可以通过指示阴影对象并在场景上将其移动到期望位置实现上述情况,例如通过使用计算机鼠标将其“拖放”到期望的位置。现在参照图9,示出了根据本发明的计算机程序的示例性图形用户界面(GUI)。 GUI包括图像区域11,图像区域11用于显示从可以由用户生成或下载到计算机程序中的场景渲染而成的图像。这里渲染图像为图6中所示的图像。在左手侧,⑶I包括多个用户控件,所述多个用户控件中的一些由附图标记12至14表示。这些控件允许计算机程序的用户调节不同的参数,这些参数影响阴影对象添加到场景中的方式,并因此影响渲染图像的阴影化。附图标记12表示允许用户改变上述偏移距离的用户控件。该控件在GUI中被命名为“调节距离”。附图标记13和14分别表示允许用户改变场景中的阴影对象的尺寸和透明度的用户控件。用户可以在各用户控件的输入文本字段中输入数字值,或者用户可以点击各用户控件的名字前面的小三角形以显示用于改变参数值的滑动控件。当用户改变参数值时,计算机程序自动地重新生成场景中针对所有原始对象/光源对的阴影对象,并将场景重新渲染到新的图像中,新的图像在图像区域11中显示给用户。图10为示出根据本发明的一个实施例的、用于将阴影对象添加到场景中的一般方法的流程图。在步骤Sl中,选择光源。通过选取被定义成光源的项,可以通过计算机程序自动地选择光源,或者可以例如通过用户使用鼠标点击景象的项手动地选择光源。该方法然后进行到步骤S2。在步骤S2中,选择原始对象。类似于步骤Sl中的光源的选择,可以通过计算机程序自动地选择原始对象,或者可以通过用户手动地选择原始对象。该方法然后进行到步骤S3。在步骤S3中,通过计算机程序基于选定的原始对象的3D位置和选定的光源的3D 位置计算阴影对象的3D位置(或者,通过计算机基于来自计算机程序的指令计算用于对象的3D位置)。当已计算出3D位置时,将阴影对象添加到场景的该位置处。可以根据之前所述原则中的任何一个计算阴影对象的3D位置。该方法然后进行到步骤S4。在步骤S4中,确定是否存在基于当前选定的光源应当被添加阴影对象的多个原始对象。该步骤也可以自动地执行或手动地执行。计算机程序可以例如适于遍历场景中的每个光源的所有原始对象(或反之亦然)。如果存在基于当前选定的光源应当被添加阴影对象的多个原始对象,该方法返回到步骤S2。如果不存在,则该方法进行到步骤S5。在步骤S5中,确定在场景中是否存在多个光源。如果存在多个光源,该方法返回到步骤Si。如果不存在多个光源,该方法进行到步骤S6。在步骤S6中,场景被渲染到从观察者的视点看的图像中。可以以任何现有技术已知的方式执行场景的渲染,然而优选地是,根据之前所述的任何一个原则渲染场景的阴影对象。当图像被渲染后,该方法结束。应当理解的是,可以以任何可想到的方式组合文中所描述的本发明的各种实施例和方面,除非严格地相互矛盾。
权利要求
1.一种用于向计算机生成的场景(1)中的对象自动添加阴影的方法,包括步骤-基于第一原始对象O ;20)的三维(3D)位置和第一光源(3 ;30)的三维位置计算阴影对象(5 ;50)的第一三维位置;以及-将所述阴影对象(5 ;50)在所述第一三维位置处添加到所述场景(1)。
2.根据权利要求1所述的方法,其中,计算所述第一三维位置,使得从所述光源的视点看所述阴影对象(5 ;50)定位在所述第一对象O ;20)的后面,并与所述第一对象O ;20)隔开一定的偏移距离d。ffset。
3.根据权利要求1或2所述的方法,其中,所述阴影对象(5;50)为二维QD)对象。
4.根据权利要求3所述的方法,其中,所述阴影对象(5;50)为边缘模糊化的圆。
5.根据权利要求2至4中任一项所述的方法,进一步包括如下步骤将所述阴影对象 (5 ;50)的不透明度设置成一定的不透明度值和/或将所述阴影对象(5 ;50)的颜色设置成一定的颜色值。
6.根据权利要求5所述的方法,其中,基于所述偏移距离doffset计算所述不透明度值和 /或所述颜色值。
7.根据权利要求2至6中任一项所述的方法,进一步包括将所述阴影对象(5;50)的尺寸设置成一定的尺寸值的步骤。
8.根据权利要求7所述的方法,其中,基于所述第一原始对象O;20)的尺寸计算所述尺寸值。
9.根据权利要求7或8所述的方法,其中,基于所述第一光源(3;30)和所述第一原始对象O ;20)之间的距离计算所述尺寸值。
10.根据权利要求2至9中任一项所述的方法,其中,基于所述第一原始对象O;20)的尺寸计算所述偏移距离d。ffset。
11.根据权利要求2至10中任一项所述的方法,其中,基于从所述光源的视点看定位在所述第一对象O ;20 ;20A)后面的第二对象O0B)的三维位置计算所述偏移距离d。ffset。
12.根据权利要求2至9中任一项所述的方法,其中,所述偏移距离d。ffsrt为预设参数或者为由计算机的用户输入到所述计算机中的用户指定参数。
13.根据前述权利要求中任一项所述的方法,进一步包括如下步骤以从观察者 40)的视点看从后向前的顺序将所述场景⑴渲染到图像中,所述渲染通过以下方式执行 对于所述阴影对象(5;50)的每一个像素,将所述像素合成到相应的目标缓存区像素,并同时保持所述目标缓存区像素的阿尔法值不变。
14.根据权利要求13所述的方法,其中,所述渲染通过以下方式执行对于所述阴影对象(5;50)的每一个像素,将所述阴影对象像素的阿尔法值乘以强度值,并将所述阴影对象像素合成到相应的目标缓存区像素,同时保持所述目标缓存区像素的阿尔法值不变,所述强度值为所述阴影对象像素的深度和所述相应的目标缓存区像素的深度之间的距离的函数,其中所述距离在此称为这些像素之间的深度差DD距离。
15.根据权利要求14所述的方法,其中,如果深度差DD距离超过一定的阈值,则所述强度值被设置成零,所述阈值由在此称为Max_DD_距离的参数给定。
16.根据权利要求15所述的方法,其中如果深度差DD距离>Max_DD_距离,则所述强度值被设置成0 ;如果深度差DD距离彡Max_DD_距离,则所述强度值被设置成(Max_DD_距离-深度差DD距离)/Max_DD_距离.
17.根据前述权利中任一项所述的方法,其中,针对所述场景(1)中的每一对象/光源对重复所有的方法步骤。
18.根据根据前述权利中任一项所述的方法,进一步包括步骤-选取用户生成的参数作为输入参数,所述用户生成的参数表示用户改变偏移距离 d。ffset的期望,和/或所述阴影对象(5 ;50)已被添加到所述第一三维位置之后的不透明度、 颜色和/或形状;-基于所述输入参数计算新的偏移距离d。ffsrt,和/或所述阴影对象(5;50)的新强度值和/或新颜色值和/或新形状;以及-基于所述计算的结果改动和/或改变所述阴影对象(5;50)的属性。
19.根据前述权利要求中任一项所述的方法,其中,所述原始对象为粒子动画系统中的粒子。
20.一种用于如下设备的计算机程序,所述设备包括处理单元和能够生成包括至少一个第一原始对象O ;20)和至少一个第一光源(3 ;30)的场景(1)的图形渲染单元,所述计算机程序包括计算机可读代码,所述计算机可读代码当由所述处理单元运行时,使得所述设备执行根据权利要求1至19中任一项所述的方法。
21.一种计算机程序产品,包括计算机可读介质和存储在所述计算机可读介质中的计算机可读代码,所述计算机可读代码为根据权利要求20所述的计算机程序。
22.—种设备,包括计算装置和能够生成包括至少一个第一原始对象O ;20)和至少一个第一光源(3;30)的场景(1)的图形渲染单元,所述设备适于-基于所述第一原始对象O ;20)的三维位置和所述第一光源(3 ;30)的三维位置计算阴影对象(5 ;50)的第一三维位置;以及-将所述阴影对象(5 ;50)在所述第一三维位置处添加到所述场景(1)。
全文摘要
本发明涉及用于向计算机生成的场景(1)中的对象(2;20)自动添加阴影的方法、计算机程序以及设备。这通过以下来执行基于第一原始对象(2;20)的三维(3D)位置和第一光源(3;30)的3D位置计算阴影对象5(5;50)的第一3D位置;以及将阴影对象(5;50)在所述第一3D位置处添加到所述场景(1)。
文档编号G06T15/60GK102396003SQ201080017465
公开日2012年3月28日 申请日期2010年3月22日 优先权日2009年4月17日
发明者彼得·诺尔比 申请人:设计代码公司
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1