掌桥专利:专业的专利平台
掌桥专利
首页

生成三维对象的显示

文献发布时间:2023-06-19 10:58:46


生成三维对象的显示

技术领域

本公开涉及用于生成三维对象的显示的方法、装置和计算机程序。

背景

存在其中三维对象被计算机生成以供在显示设备上显示的许多应用。这包括例如计算机游戏、计算机绘图和动画包装等等。当前,所生成的三维对象从它们不会并且无法随时间改变或演化的意义上而言通常是静态的。如果三维对象旨在随时间改变或演化,则当前常见的是对不同时间处的三维对象的每次迭代进行预先建模。这实际上产生了三维对象在不同时间处的一组静态图像,这些静态图像随后被依次显示。然而,这是耗时的,因为艺术家或其他内容创建者不得不单独准备每个图像。作为替代方案,计算机可被用来通过程序对三维对象在不同时间处的静态图像建模,但是这往往会导致表观上等同或至少不自然的对象。无论哪种方式,这还意味着潜在大量的数据需要被存储并被发送到例如图形处理器以供显示,该图形处理器随后需要处理该大量的数据,这可能并不总是实际的或者甚至不可行。

概述

提供本概述以便以简化的形式介绍以下在详细描述中进一步描述的概念的选集。本概述并不旨在标识所要求保护的主题的关键特征或必要特征,亦非旨在用于限制所要求保护的主题的范围。所要求保护的主题也不限于解决本文所述的任何或所有缺点的实现。

根据本文公开的第一方面,提供了一种生成三维对象的显示的计算机实现的方法,该方法包括:

生成供显示的三维对象的第一部件,该第一部件至少具有基本界面和第一界面;

在显示设备上显示该第一部件;

使所显示的第一部件改变形状;

生成供显示的该三维对象的第二部件,该第二部件至少具有基本界面;

平移并定向该第二部件以使得当该第二部件被显示在该显示设备上时该第二部件的基本界面与该第一部件的第一界面配合;以及

在该显示设备上显示该第二部件,其中该第二部件的基本界面与该第一部件的第一界面配合。

这使得该第一部件和该第二部件能够无缝地彼此接合,从而给予由各部件形成的最终对象平滑的表观。

第二部件的基本界面通常具有与第一部件的第一界面相同的形状。而且,在一些示例中,生成供显示的三维对象的第二部件包括:设置第二部件的尺寸,以使得第二部件的基本界面在第二部件被显示的时间处与第一部件的第一界面的尺寸相同。这进一步帮助确保第二部件的基本界面与第一部件的第一界面之间的无缝接合。第二部件的基本界面和第一部件的第一界面各自相应的尺寸不必完全相同,并且例如可在容差内相同,使得显示设备的观看者无法察觉任何细微的差异。与此相关的因素将包括例如显示设备的屏幕分辨率(即,被发送到显示设备的图像的屏幕分辨率)。

在一示例中,使所显示的第一部件改变形状造成所显示的第一部件随时间改变形状,以使得所显示的三维对象随时间改变形状。

在一示例中,该方法包括:

使所显示的第一部件进一步改变形状;以及

使所显示的第二部件改变形状;

其中改变该第一部件和该第二部件的形状使得该第二部件的基本界面继续与第一部件的第一界面配合。

在一示例中,该方法包括:

生成供显示的该三维对象的第三部件,该第三部件至少具有基本界面;

在该显示设备上显示该第三部件,所显示的第三部件根据需要被平移和定向以使得该第三部件的基本界面与该第一部件的第二界面或该第二部件的第一界面配合。

其他部件可被类似地生成和显示,其中该其他部件与先前显示的部件配合,可任选地按分层的方式。

在一示例中,对象的每个部件由图形处理器基于相同数据结构来实例化。

这提供了图形处理器的高效使用,因为其减小了必须由图形处理器处理的数据量。其还减小了必须被发送到图形处理器的数据量。

在一示例中,该数据结构包含定义参考部件的形状的数据,该数据结构包含定义在数个不同时间点处对象的各部件的形状相对于参考部件的形状的差异的差异数据。

这进一步提供了图形处理器的高效使用,因为其进一步减小了必须由图形处理器处理的数据量。其还进一步减小了必须被发送到图形处理器的数据量。三维对象的不同部件可基于与该部件正被显示在显示设备上的时间相对应的、与参考部件在形状上的差异来被生成以供显示。

参考部件可例如是全局成熟部件,这是其处于最大尺寸时的部件。在当被显示时旨在随时间生长的对象的情形中,这对应于部件处于其最年长状态的时间。另一方面,在当被显示时旨在随时间收缩或减小尺寸的对象的情形中,这对应于部件处于其最年轻状态的时间。尽管如此,通常,可例如从最年长到最年轻或者从最年轻到最年长地混合而与参考部件无关。

在一示例中,参考部件的形状由多个顶点定义,并且差异数据包括用于每个顶点的平移数据,其中用于每个顶点的平移数据表示在不同时间点处对象的每个部件中的顶点的位置相对于参考部件中的顶点的位置的差异。

平移数据可作为纹理连同定义参考部件的形状的数据一起被发送到图形处理器。

根据本文公开的第二方面,提供了一种在计算机显示器上生成时变资产的计算机实现的方法,该方法包括:

访问存储在电子存储器中的一组规则,其中该规则至少定义基本资产,并评估该规则以生成一组分层命令;

评估分层命令以构造供显示的资产,其中分层命令至少包括定义资产类型的资产命令和实用程序(utility)命令,该实用程序命令是旋转命令和年龄约束中的至少一者,其中该资产类型与变换数据相关联,评估的结果是在时间上分层布置的资产的数个时间切片;以及

通过生成资产的在时间上相继的切片以供显示并在计算机显示器上呈现资产来可视化供显示的资产,每个切片具有用于取决于切片的年龄来使切片变形的变换数据并且经受由年龄约束实用程序命令所施加的任何年龄约束。

在一示例中,基本资产采取手动地设计的网格的形式。

在一示例中,访问、评估和可视化中的至少一者在运行时被运算以在计算机显示器上按时变方式渲染资产。

在一示例中,规则被表示为定义资产的数据符号的线性结构。

在一示例中,规则是根据并行重写系统来被评估的。

在一示例中,变换数据对于资产上的每个分支点而言包括4D位置偏移、用于对准下一资产的四元数,其中4D位置偏移的第四分量相对于毗邻资产偏移每个资产的年龄。

在一示例中,实用程序命令是以下一者或多者的指令:重力、自定义力、随机旋转、顺时针偏航旋转、逆时针偏航旋转、结束分支和防止分支老化。

在一示例中,该方法包括经由统一参数在管理变换数据的材料上设置年龄,由此着色器可相应地从纹理中采样相对变形数据并重定位网格的顶点。

根据本文公开的第三方面,提供了一种计算机系统,包括:

至少一个处理器;

以及包括计算机程序指令的至少一个存储器;

该至少一个存储器和该计算机程序指令被配置成与该至少一个处理器一起使该计算机系统执行生成三维对象的显示的方法,该方法包括:

生成供显示的三维对象的第一部件,该第一部件至少具有基本界面和第一界面;

在显示设备上显示该第一部件;

使所显示的第一部件改变形状;

生成供显示的该三维对象的第二部件,该第二部件至少具有基本界面;

平移并定向该第二部件以使得当该第二部件被显示在该显示设备上时该第二部件的基本界面与该第一部件的第一界面配合;以及

在该显示设备上显示该第二部件,其中该第二部件的基本界面与该第一部件的第一界面配合。

根据本文公开的第四方面,提供了一种计算机系统,包括:

至少一个处理器;

以及包括计算机程序指令的至少一个存储器;

该至少一个存储器和该计算机程序指令被配置成与该至少一个处理器一起使该计算机系统执行在计算机显示器上生成时变资产的方法,该方法包括:

(a)访问存储在电子存储器中的一组规则,其中该规则至少定义基本资产,并评估该规则以生成一组分层命令;

(b)评估分层命令以构造供显示的资产,其中分层命令至少包括定义资产类型的资产命令和实用程序命令,该实用程序命令是旋转命令和年龄约束中的至少一者,其中该资产类型与变换数据相关联,评估的结果是在时间上分层布置的资产的数个时间切片;以及

(c)通过生成资产的在时间上相继的切片以供显示并在计算机显示器上呈现资产来可视化供显示的资产,每个切片具有用于取决于切片的年龄来使切片变形的变换数据并且经受由年龄约束实用程序命令所施加的任何年龄约束。

根据本文公开的第五方面,提供了一种计算机程序,该计算机程序包括一组计算机可读指令,该计算机可读指令在由计算机系统执行时使该计算机系统执行生成三维对象的显示的方法,该方法包括:

生成供显示的三维对象的第一部件,该第一部件至少具有基本界面和第一界面;

在显示设备上显示该第一部件;

使所显示的第一部件改变形状;

生成供显示的该三维对象的第二部件,该第二部件至少具有基本界面;

平移并定向该第二部件以使得当该第二部件被显示在该显示设备上时该第二部件的基本界面与该第一部件的第一界面配合;以及

在该显示设备上显示该第二部件,其中该第二部件的基本界面与该第一部件的第一界面配合。

可以提供存储如上面所描述的计算机程序的非瞬态计算机可读存储介质。

根据本文公开的第六方面,提供了一种计算机程序,该计算机程序包括一组计算机可读指令,该计算机可读指令在由计算机系统执行时使该计算机系统执行在计算机显示器上生成时变资产的方法,该方法包括:

(a)访问存储在电子存储器中的一组规则,其中该规则至少定义基本资产,并评估该规则以生成一组分层命令;

(b)评估分层命令以构造供显示的资产,其中分层命令至少包括定义资产类型的资产命令和实用程序命令,该实用程序命令是旋转命令和年龄约束中的至少一者,其中该资产类型与变换数据相关联,评估的结果是在时间上分层布置的资产的数个时间切片;以及

通过生成资产的在时间上相继的切片以供显示并在计算机显示器上呈现资产来可视化供显示的资产,每个切片具有用于取决于切片的年龄来使切片变形的变换数据并且经受由年龄约束实用程序命令所施加的任何年龄约束。

可以提供存储如上面所描述的计算机程序的非瞬态计算机可读存储介质。

附图简述

为了帮助理解本公开并且为了示出各实施例是如何被付诸实践的,通过示例的方式对附图作出参考,在附图中:

图1示意性地示出了在不同时间点处三维对象的数个部件的示例;

图2示意性地示出了图1的各部件中的两个部件;

图3示意性地示出了图2的各部件的顶点;

图4示意性地示出了用于图1的单个部件的形状中的差异的增量的表示;

图5示意性地示出了用于图1的所有部件的形状中的差异的增量的表示;

图6A至6D示意性地示出了供显示的对象的各部件的增殖和生长的示例;以及

图7A和7B分别示意性地示出了一部件的示例和该部件的界面。

详细描述

在本公开中,术语“通过程序创建”等等可被理解为意指在没有任何用户交互的情况下自动地创建。术语“样式化”可被理解为意指使用一组规则来定义某种样式。例如,在树的情形中,不同样式可对应于不同种类的树,诸如柳树或橡树。作为在洞穴或隧道系统的情形中的另一示例,不同样式可对应于洞穴或隧道的不同基本类型,诸如举例而言,金矿、冰川洞穴、溶洞等。术语“分层”或“树状结构”等等可以被理解为表示重复或分形类型几何结构,包括但不限于树、洞穴网络、或一道闪电。手工创作的网格资产或部件是对由艺术家或其他内容创建者创建的原本将无法通过程序创建的自定义几何结构的引用。这可能例如是树屋的各部件或更复杂的树部件。

本公开描述了用于生成供在显示设备上显示的对象(尤其包括4D分层或树状结构,尽管可以从任何任意网格创建不受传统L系统(由Aristid Lindenmayer于1968年开发,并在下面被进一步讨论)的约束的其他结构)的方法的示例。通过本方法解决的问题在于,使用自定义制作的几何结构区段并确保网格区段按照预期装配在一起而没有任何孔或间隙是一项困难的任务。例如,确保通过程序创建的管在创建树时装配在一起是相对容易的(参见下面对由Aristid Lindenmayer开发的L系统的讨论)。然而,如果需要用带有增加的时间分量的更复杂的自定义几何结构(诸如随时间演化的从树的主干生长开的分支、洞穴系统或灯光效果等)等来创建例如更繁复的对象(诸如树、洞穴系统或其他复杂对象),则通过程序创建这种复杂形状并且随后使用其来创建分层或树状或分支结构而没有孔或接缝不是简单的。在一个实施例中,本方法从手工创作的网格资产或部件通过程序创建样式化的树状或其他分层结构。目的是使自定义几何结构能够以更简单的、通过程序生成的结构的方式被利用,使得能够随着它们在时间上改变来逼真地渲染它们而没有明显的不连续性。

可将示例方法视为拆分成三个相异的操作,这些操作可以在运行时被运算,尽管该方法不限于在运行时操作,而是可被预先“离线”操作。这三个相异的操作可被概括或表征为1)生成结构,2)创建符合该结构的实体,以及3)在需要时更新该实体。

一示例中的唯一结构的生成采取两个相异步骤的形式:评估一组规则以生成一组命令,以及评估那些命令以构造构成最终对象的资产或部件。

在评估规则的第一步骤中,任何分层对象可被泛化成样式。例如,白桦树可被定义为高且修长、有细分支;特定洞穴系统可被定义为是特定类型的洞穴,诸如举例而言,金矿、冰川洞穴、溶洞等。可为其他类型的树或不是树的其他对象或结构提供其他样式。该样式可以由数据符号的线性(其可能是多维的)结构来表示,该数据符号表示例如对象的各部件和实用程序命令。在给定数个级别的情况下使用并行重写系统来评估规则。这将产生定义命令的分层结构的新数据结构。该并行重写系统是Lindenmayer的L系统的改编,并使用类似原理,但被适配成供在该方法中使用。

就此而言,由Aristid Lindenmayer于1968年开发的传统L系统是被开发以对植物发育中的生长过程进行建模的并行重写系统。它们已经在计算机图形学中被适配以生成树的骨架,在这之后其他程序化系统可自动地沿着骨架创建管。使用这些方法,可以通过程序创建具有貌似随机但却自然的表观的树。然而,该系统受到只能使用管的描述的事实的限制。在创建要在计算机设备中通过图形来渲染的对象时确保程序化管装配在一起是相对容易的。然而,扩展L系统以用于产生其他几何结构不是一件容易的事,这限制了可被渲染的图形形状的类型。这在考虑需要对在不同时间处的对象进行建模时尤其具有挑战性。

下一步骤2)评估这些命令获取命令的分层结构并对这些进行处理以创建对象的(诸)最终资产或部件。在该示例中,存在两种类型的命令:资产类型和实用程序类型。在该示例中,资产类型是对四维网格的引用。该引用还伴随用于阴影化对象的相关材料和变换数据(其在使用中通常由硬件处理器(诸如图形处理单元或GPU)或处理软件等等中的着色器(尤其是顶点着色器)使用)。在一示例中,变换数据对于对象的资产或部件上的每个分支点而言包含4D位置偏移、用于对准对象的下一部件的四元数、和其他数据。

在一示例中,实用程序类型是以下各项之一的指令:重力、自定义力、随机旋转、顺时针偏航旋转、逆时针偏航旋转、结束分支和防止分支老化。其他示例包括其中例如植物朝光源生长的向光性、其中部件被迫随风弯曲的风向等。这些指令将要么修改绕先前分支方向的部件旋转,要么在第四(时间)维度上施加约束。在每个命令期间,如果需要的话,对象的资产或部件被相应地创建和变换。在系统已处理所有命令之后,在四个维度中以分层结构组织的对象的数个资产或部件被获得。

第二操作2)创建符合该结构的实体包括生成要接合在一起以形成显示对象的部件或资产。这包括可视化最终对象的时间切片。对于第三操作3)在需要时更新实体,在一示例中,在创建对象的各个个体资产或部件的同时,材料已被创建和指派以处置贯穿时间的可视化。这些材料对已用变换数据编码的纹理输入进行采样。该数据能够使网格变形,并因此通过其第四(时间)维度来表示对象。当使用该系统来创建正生长的树或改变形状的其他结构时,该数据将把网格的所有顶点从其最终的圆柱状态变形为细圆柱,然后变形成锥体,并且最终变形成微小的种子,其中所有顶点塌缩在彼此的顶部上。

通过借助于统一参数在材料上设置年龄,图形处理器或处理软件的顶点着色器从纹理中采样相对变形数据并相应地重定位顶点。每个部件的材料将在第四维度(此处为时间)中被指派一偏移。这将对每个部件的个体年龄或局部时间进行偏移,并提供部件之间的无缝接合,使得由各部件形成的最终对象的表观只是一个平滑网格。现在,通过为整个最终对象设置恒定年龄或时间,并在第四(时间)维度上添加这些局部偏移,结果是奇异的、保形的最终对象。

现在将给出本公开的具体示例的描述。将给出关于生成三维对象的显示的示例,该三维对象改变形状,并且尤其在计算机游戏的上下文中随时间改变形状。在该示例中,生成三维对象的显示是在运行时(即在计算机游戏正在运行时)被执行的。然而,本公开可被用来预先(即,不在运行时)生成随时间改变形状的三维对象的显示。本公开还可在其他应用中被使用,诸如举例而言,计算机绘图软件包。

本文所描述的具体示例具有两个主要阶段。在第一阶段中,内容和相关数据被生成。在第二阶段中,三维对象被生成以供在显示设备上显示,并且所显示的三维对象的形状被使得随时间改变。

将给出本文描述的关于三维对象是树的具体示例。树可以改变形状,该形状可被用来例如表示随时间生长的树。然而,本文描述的原理可被应用于随时间改变形状或表观或者从头开始具有不同形状或表观的其他三维对象。这包括例如其他植被,诸如灌木和植物、叶子、花朵、水果等。可被表示的其他三维对象包括树屋或其他建筑物或结构、洞穴或隧道系统、闪电、类似机器人的动画角色或其他动画角色、生物上的触角、河流、电力线等。在其他示例中,三维对象可能是某些空间的内部,诸如建筑物或洞穴网络的内部。在其他示例中,三维对象可以是颜色或阴影效果的表示,其具有例如以散布亮或暗的脉络的方式在所显示的场景或显示场景内的特定对象上方移动或穿过的表观。作为随时间改变以例如表示正生长的树、随时间而风化的叶子、叶子从成熟的绿色状态变为枯萎且黄色或红色的秋季状态、或者例如随时间而被损坏或腐蚀的对象等的形状或表观的补充或替换,本文所描述的技术可被用来使三维对象或三维对象的部件具有以计算上高效的方式从头开始跨对象和/或在各部件之间有所不同的表观。

在任何情形中,由于三维对象随时间改变或由于某些其他参数而不同,因此可将其视为四维模型。

作为第一阶段的内容创建时期中的第一操作,对象的至少两个部件被创建。这些可以由例如人使用计算机以本身已知的方式来绘制。这两个部件表示对象在不同时间处的一部分的快照。在一些示例中,对象的不止两个部件可被创建。在该阶段创建的大量部件将造成对随时间改变形状的对象的更流畅或无缝表示。另一方面,在该阶段创建的较少数目的部件需要该阶段的较少时间,并且在三维对象正被生成以供显示时还需要较低数据存储能力和较低处理能力。

图1中示意性地解说了这个的示例。这示出了十一个部件10,在该具体示例中,这十一个部件10表示树在十一个不同时间点处的一区段或部分。在其他示例中,当对其他对象或结构进行建模时,这些部件表示其他对象或结构在不同时间点处的一部分。在还有些其他示例中,各部件可表示三维对象的具有跨该对象而有所不同的表观的部件。这些部件10之一随后在三维对象正被生成以供显示时被用作参考部件。在该示例中,参考部件是全局成熟部件,这是其处于最大尺寸时的部件。在当被显示时旨在随时间生长的对象的情形中,这对应于部件处于其最年长状态的时间,并且是图1的最右部的部件10’(也被示出在图1的最上部)。在当被显示时旨在随时间收缩或减小尺寸的对象的情形中,这对应于部件处于其最年轻状态的时间。在其他示例中,不同的中间的部件10可被用作参考部件。

如计算机建模本身已知的那样,每个部件10由数个顶点12定义。在图1的示例中,随着时间的增加从一个部件10行进至另一部件10,顶点12移动远离彼此,这表示部件随时间生长。顶点12相对于彼此的移动定义了部件10的形状如何随时间演化,并且可被用来控制三维对象的变化形状,如将在下面进一步讨论的。可以注意到,在图1的最左部(最年轻)的部件10中,所有顶点12塌缩为单个点,如图中的点所指示。另外,对艺术家或其他内容创建者而言可有可能“手工”创建两个部件(诸如最年轻的部件和最年长的部件),并且随后自动化计算机过程被用来生成任何数目的所需中间部件。

原则上,不同的部件10可按这种格式被有效地用于生成供显示的三维对象。然而,当绘制数个对象(诸如树或其他对象或结构)时,这将对正生成显示的图形处理器等等提出高要求,并且对于许多图形处理器而言可能不可行和/或可能导致卡帧(stutter)且不平滑的生长的表观。

对这进行处置的更高效方式是标识并记录每个部件10相对于参考部件10’的形状中的差异,并将与这些差异有关的数据发送到图形处理器。在一示例中,对于所创建的部件10中的每一者,该部件的每个顶点12相对于参考部件10’中的对应顶点12的(表观)移动被标识。以示例的方式参考图2,这在左侧示出了参考部件10’并在右侧示出了其他部件10之一(在该示例中,其是图1中最左侧(最年轻)的部件10之后的第一部件10,其中所有顶点12塌缩为单个点)。在图2中,指示了参考部件10’中的特定顶点14’和该另一部件10中的对应顶点14。

为了清楚起见,图3示出了参考部件10’中的特定顶点14’和该另一部件10中的对应顶点14,而其他顶点12则被省略。图3示出了参考部件10’中的特定顶点14’有效地沿着向量或“增量”Δ

对于所有顶点12,重复对顶点12在参考部件10’与该另一部件10之间的相对移动的这种标识。这导致对应数目的增量Δ

表1

针对其他部件10中的每一者执行该过程。这导致若干组增量,其可被表示为各行彩色像素。对于其中总共有十一个部件10的情形,这在图5中被示意性地解说。图5示出了用于每个部件10的每个顶点的增量可被表示为像素p

这个的结果是参考部件10’(该参考部件10’由其顶点12的x、y、z位置来定义)以及一组数个差异或增量Δ

作为下一阶段,针对各部件10中的每一者定义至少一个界面。界面10随后在生成供显示的三维对象期间被用来使不同的部件10能够被接合在所显示的对象中。不同的部件10的这种接合需要使得呈现出对用户而言不可见的平滑或无缝接合。对在所显示的图像中被接合的不同的部件10的这种使用提供了使所显示的三维对象能够随时间改变形状的高效方式。在该示例中,这使得树能够通过生长得更大并且可任选地添加新分支、细枝等而显现出随时间生长。在其中三维对象譬如是洞穴或隧道系统的一示例中,这可被用来示出例如随时间生长的洞穴或其他结构。从洞穴或其他结构譬如类似于树会随时间而扩张以生长得更大的意义上说,这种生长可以是“有机的”。这可例如被用来解说随着挖掘或形成新隧道而变得更深的洞穴或隧道系统等。

为了解说这在实践中在显示三维对象期间是如何操作的,对图6A至6D作出参考。该示例是出于解说目的的简单示例,其中每个部件是树干的细分支或一部分。

首先,在显示三维对象期间,使一部件被显示或“增殖”。该第一部件具有其被设置为零的局部时间,并且因此由于这表示序列中的最早时间,所以第一部件实际上是点60

接下来,该第一部件被有效地使得生长得更大。这是通过将部件的局部时间递增一个时间单位(也就是说,通过此时将部件的局部时间设置为1)来达成的。(下面将进一步讨论可如何达成个体部件的生长的示例。)如图6B所示,这导致第一部件生长得更长且更厚,从而(在该示例中)变成细长的棒状部件60

接下来,每个部件的本地时间被递增1。如图6C所示,第一部件已生长得更长且更厚(如60

可以注意到,在该示例中,相同的部件60已基本上被有效地使用三次。然而,部件60是不同的,至少是因为它们表示不同时间切片,即,已被偏移达不同时间量,使得它们具有不同的局部时间偏移。(一般而言,部件60也将由于已被平移为位于不同位置处并且还被旋转而有所不同。)此时在该示例中,可以注意到,由个体部件60、62、64形成的整个对象的“时间”为3个时间单位,而各个个体部件60、62、64的局部时间分别为3、2和1。

这解说了每个新部件如何与先前已在显示设备上显示的部件接合。使部件能够平滑接合的一个重要方面是其中部件彼此接合的界面。为此,当新部件被显示时,新部件上的各个界面以及其所接合到的部件位于空间中并且相对于彼此被定向,以提供平滑的、实际上无缝的接合。为此,每个界面设置有转换信息或数据,其具有两个主要组成,即平移偏移和定向(orientational)偏移。平移偏移使新部件相对于它正连接到的先前部件在所显示的图像中的局部空间中移动。定向偏移使新部件相对于先前部件旋转。一并考虑的话,这使得新部件相对于先前部件处于正确位置和定向中,而与各个部件的实际形状无关,因为各个部件的界面相对于彼此被正确地定位和定向。而且,为了获得“无缝”接合并促成各部件之间在生长或以其他方式改变形状时的平滑转变,在一些示例中正被连接的各个部件的界面被布置为彼此尺寸相同。然而,在其他示例中,正被连接的各个部件的界面可具有不同尺寸,这取决于例如所需的效果或表观。例如,可能期望添加与先前部件相交的部件。作为树的情形中的具体示例,这使得例如能够将水果或叶饰添加到分支上等。界面在其全局成熟状态下的尺寸可被定义为界面的一部分。在一示例中,转换数据还包含界面的法线、切线和副法线,其稍后可被用于运行时系统以施加重力和/或其他力或效果。

进一步讨论这些界面并且现在参考图7A,图7A示出了部件70的示例,每个部件至少具有基本界面72。基本界面72在图7B中更清楚地示出。基本界面72是n边的多边形。多边形通常可以是不规则多边形,尽管在一些示例中,多边形可以是可促进各部件的定向以便连接各部件的规则多边形。多边形的中心O是基本界面72的原点。而且,基本界面72可以是对称的、具有通常可以与多边形的边数n相同或不同的对称级。基本界面72的反向法线

在该示例中,部件70不是端接部件,并因此除了基本界面72之外还具有另一第一界面或主界面76。在该示例中,主界面76是多边形,再次地,其通常是不规则多边形,但是可以是规则多边形。主界面76包含平移偏移和定向偏移。该定向被计算如下。为主界面76导出法线

在该示例中,部件70具有其他界面或副界面78。这使得其他部件能够被接合到第一部件。在该情形中,如可以看到的,副界面78背朝部件70的主体或主干,这使得能够添加其他部件以表示例如树的分支。然而,所添加的其他部件可表示其他项目,诸如举例而言,树屋的组件或被建模的其他对象。其他界面可被提供在部件70上。每个界面由四元数以与主界面76相同的方式定义。

将多边形用于界面72、76、78具有的优点在于:其有效地约束了下一部件可执行的旋转,这意味着下一部件的旋转更可预测,并且下一部件可更容易地与先前部件70对准。

作为生成内容和相关数据的第一阶段中的最终时期,规则被创建或定义,其随后被用于可视化阶段以确定对象的部件的、以及因此作为整体的对象的表观或“样式”。在本示例中,样式表示不同种类或类型的树。在其他示例中,样式可以表示要显示的不同类型的其他对象或结构,诸如不同类型的闪电、灯光效果、洞穴网络、建筑结构等。规则通常是由艺术家或其他内容创建者“手工”生成的。下面将进一步讨论当生成供在显示设备上显示的三维对象时的规则的使用。简而言之,当在本示例中应用时,规则的应用得到了符号集或符号数组,其进而被解读为命令,这些命令进而被评估以生成随后被用来生成供显示的对象的指令,如下文进一步讨论的。

样式定义了要显示的对象的一组特征。每种样式具有“公理”和一组规则。为了帮助理解样式以及公理和规则、以及在此阶段创建的内容,现在将给出对并行重写系统的简要概览。如所提到的,本文示例中所使用的以及下面将更详细讨论的并行重写系统可被视为Lindenmayer的L系统的改编,并且使用专门适配成用于该方法的类似原理。

L系统是使用一组规则和公理的迭代、并行重写系统。将给出对L系统的讨论以解说这一点。此处讨论的符号和其他表示旨在提供该技术的说明性示例。实际上,当在计算机上运行时,详细实现可能有所不同,尽管基本概念相同。

作为简单示例,公理可以是B,并且可能存在诸如以下的规则:

A->B规则1

B->F,A规则2

在并行重写系统的操作期间,首先为符号创建容器,这将在应用规则时被创建。公理(在该说明性示例中为B)被插入容器中。并行重写系统是迭代过程,因此后续步骤将被重复地执行。在每次迭代处,容器中的(诸)符号被检验,并且其中的任何符号根据规则被替换。

因此,在并行重写系统的该说明性示例中,由于起初在容器中的符号是B,因此其根据第二条规则被替换为F,A。现在,第一条规则指定将A替换为B;另外,不存在用于F的规则,因此保持不变。这意味着在下一次迭代处,F,A被替换为f,B。同样地继续下去,在下一次迭代处,F不变,而B被替换为F,A。因此,容器中的符号现在为F,F,A。这持续达指定的迭代次数,并且可通过下面的表2来概括(达五次迭代):

表2

将在下面更详细地讨论如在本示例中使用的将已知L系统适配成用于并行重写,简言之,假定在数次迭代之后,所得符号为F,F,F,F,F,F,F,F,F,F,F,A。在生成供显示的对象期间,符号F被解读为“部件”或“资产”命令,而符号A则不被识别为命令且被简单地忽略。因此,符号的该特定数组将使得对象被构造以供显示,其中该对象包括堆叠在彼此的顶部上的十一个部件。(与图6D所示的示例比较,其具有四个部件。)此外,如上面讨论的使用部件上的界面以及部件的界面的平移和定向使各个部件之间的连接或接合看起来平滑且无接缝。

众所周知,L系统能够处理分支结构,从而能够生成带有分支或枝条的树或植物等的图像。相应地,以上示例是使用一维符号集或符号数组的简单示例,但是在实践中,这可被容易地扩展为二维符号数组,以容适例如分支或其他更复杂或更繁复的结构,无论是用于树还是用于其他被建模的对象或结构。

如所提到的,规则通常由艺术家或内容创建者“手动地”创建或定义,以使得最终对象具有所需样式(即,所需表观),其对于反而具有相同样式的不同对象而言可能不同。在树的示例中,这意味着例如可生成数棵相同类型的树(例如,橡树或柳树等),其各自具有不同的表观。作为譬如洞穴的情形中的另一示例,可使用不同的表观来表示不同类型的洞穴,诸如举例而言,金矿、冰川洞穴、溶洞等。

规则的应用导致符号集或符号数组,其进而被解读为命令,这些命令进而被评估以生成用于在对象正被生成以供显示时的后续使用的指令。存在两种主要类型的命令:部件或资产命令和实用程序命令。

部件命令由上面的说明性示例中的F来符号化。这被用来在一部件在部件分层结构中的当前位置处构造该部件,如上面提到的且如将在下文中进一步讨论的。

实用程序命令充当结构的修改器,即,用以修改正被生成以供显示的对象的某些部分。当对象正被生成以供显示时,实用程序命令被解读为用于在分层结构中的当前点处应用某种预定功能的指令。再次,这将在下面进一步讨论。

下面的表3中概括了实用程序命令的一些示例,可以理解的是,这可被扩展到其他应用:

表3

可以注意到,一些实用程序命令准许指定和应用“加权”。在此处的这些示例的每一者中,准许加权的实用程序命令是导致对象的部件相对于先前部件旋转的命令。作为具体示例,重力可被应用以便使树的分枝随着分支远离树的主干延伸而朝下下垂,并且下垂的量或程度可以由所应用的加权来确定。加权可以在规则中用例如括号来被指定,例如#(0.5)表示自定义力的50%的加权。如果没有指定加权,则默认值1可被假定。

利用可由规则生成的各种不同类型的符号,并且其在对象正被生成以供显示时被解读为命令,复杂的样式可被创建以导致相应复杂的对象。这促成了反而可以具有彼此非常不同的表观的对象的后续程序化生成。为了解说可被创建的样式的可能复杂度,并且无需深入此示例的规则和公理的含义的细节,样式可具有如以下的一组规则:

R=|(5),E,|(5),E,K,|(5),E,|(-5),E,|(-5),E,|(-5),E

C=~,|,R,C

B=~,|(-0.25),#,P,L,O,Y

M=~,|(-0.75),#,B

H=M,H

以及如以下的公理:

~,S,R,B,H,T

在该第一预备阶段或设立阶段之后,三维对象被生成以供在显示设备上显示,并且所显示的三维对象的形状被使得在第二阶段中随时间改变。该第二阶段由根据计算机程序中的指令操作的计算设备执行。如所提到的,这可在例如计算机游戏正在计算设备上运行时的运行时被执行。在其他示例中,这可以在计算设备上在每种情形中作为分开的过程来被执行,诸如用于使用软件绘图包生成艺术作品、用于为电影或影片生成移动图像、用于对图像进行后处理等。此类计算设备具有一个或多个处理器、RAM或其他工作存储器并且可任选地具有持久性存储。三维对象的生成可由例如图形处理器来执行,该图形处理器可由例如图形卡或由作为中央处理单元的一部分提供的集成显卡来提供。计算设备可具有集成的显示设备,或者可将用于显示的图像数据发送到分开的显示设备,或者可以将图像数据发送到存储以供稍后发送到显示设备。

如所提到的,在一示例中,第二阶段可被视为包括三个相异的操作,其可在运行时被运算,但不限于在运行时被运算。在该上下文中,运行时意指要渲染对象以使其在显示屏上可见的时间。

这三个操作可被概括为:

1)生成唯一结构,

2)创建符合该结构的实体,以及

3)当需要时更新该实体

关于第一操作1)生成唯一结构,在一示例中,这采取两个相异步骤的形式:(i)评估规则以及(ii)评估命令。(i)评估规则的目的是要使用并行重写系统技术来生成命令的二维分层数组。(ii)评估命令的目的是要生成对指令的最优缓冲。这些指令包含在下一步骤中使用的最低限度的必要信息,使得不需要进一步的计算来确定在何处放置对象、要放置什么对象、旋转等。例如,指令将通知系统将一件特定的几何结构(例如,要显示的对象的部件)放置在“世界空间”中的特定位置和特定定向中。(该“世界空间”是参考框架,在该参考框架中,世界内的正在显示设备上被建模的所有事物都位于绝对坐标中。)在所有这些指令已被处理之后,这将导致符合先前定义的结构的对象。

现在讨论1)(i)更详细地评估规则,当样式的规则被应用时,系统首先检验所生成的每个符号,以检查它们是否是部件命令。如果符号是部件命令,则系统检查该部件是否包含任何副界面。如果是的话,则根据上面对界面的讨论,系统将这些副界面视为分支。新的符号数组被创建,并且利用副界面中预定义的“附加命令”符号来实例化。原始符号数组随后通过添加“分支符号”来对该分支进行记录。该分支符号是指向新创建的符号数组的指针。这可由下面的示例看出。需要注意,在该示例中,存在多个符号数组,其被索引为0、1、……。

假定具有索引0的第一符号数组包含符号F,A。(再次,要强调的是,出于解说示例的目的,这是简化的示例,并且符号数组实际上将通常会更复杂。)这可以由下面的表4来表示:

表4

如上面提到的,在该说明性示例中,符号F被解读为“部件”命令(并且符号A不被识别为命令并且被简单地忽略)。相应地,检查部件是否包含任何副界面。如果是的话,则用下一索引(此处为索引1)标记的新的符号数组被创建。

现在,对于任何副界面,附加命令被定义。这样做的目的是用作用于并行重写系统中的新分支的新公理。在没有这个的情况下,分支将突然结束而没有任何几何结构。假定用于该副界面的附加命令由符号B来表示。这随后在用于新创建的数组(此处其具有索引1)的公理处被设置。此外,分支符号被插入原始数组(此处其具有索引0)中。令分支符号为{1}。

在该示例中,该规则评估的结果可以由下面的表5来表示:

表5

作为规则评估过程中的选择,机会元素可被引入。即,符号根据规则被替换的机会或概率可被指定为规则的一部分。否则,如果没有指定机会,则符号始终根据规则来被替换。这样做的优点在于,其使得被生成以供显示的对象至少在规则所指定的程度上具有随机的表观,即使该对象被通过程序生成。这进一步帮助生成表观上不完全等同的多个供显示的对象。

这由下面的示例来解说。此处,规则为:

A->B规则1

B(0.8)->F,A规则2

其中遵守规则2的机会是80%。

在该示例中,这意味着80%的机会是符号B将会被替换为F,A,并且20%的机会是符号B将不变。

在1)(i)评估规则完成之后,现在存在一组数组符号。这些符号随后被处理以使得能够1)(ii)评估命令,由此生成随后生成供显示的对象所需的指令。这是通过示例来最简单地解释的。将理解的是,这再次仅仅是说明性示例,并且实际实现在细节上和本文公开的方法可能的复杂度方面实际上将有很大的不同。

在该示例中,符号首先被处理以移除不是命令的所有符号。就此而言,将回想起,一些符号仅在评估规则的过程期间被使用。相应地,符号被检验并且不是命令的任何符号都被移除。

例如,假定下面的符号数组作为评估规则的结果而被生成:

表6

此处的符号A和B被识别为不是命令,并且因此被移除,从而导致本示例中的内容如下:

表7

现在可以评估命令。这是通过首先考虑具有索引0的第一符号数组来执行的。第一符号数组的内容中的符号被按顺序处理。在该示例中,第一命令F被识别为是部件命令。相应地,生成将随后被用来构造部件(即,实例化F的几何结构)的指令。通常,对于部件命令,部件F在其在部件分层结构中的当前位置处被实例化。在该情形中,由于这是正被构造或实例化的第一部件,因此该部件将在此示例中正被生成的整个对象的根或基部处被实例化。而且,由于无其他部件先前已被创建,并且假定整个对象不具有初始旋转,因此该部件将伴随其几何结构在z方向上面朝上且不带旋转来被实例化。但是将领会的是,如果例如需要一些旋转,则可以容易地对这进行修改。

回头参考图7,可以看出,在该示例中,第一符号(现在被视为命令)后跟{1},在此示例中,其是分支命令。因此,系统知晓部件F包含一个副界面。相应地,在该示例中,接下来处理具有在分支命令中引用的索引的符号数组。在该示例中,这是具有索引1的符号数组,因为该分支命令{}包含指针1。

在该示例中,符号数组1具有第一符号D(在该简单的说明性示例中,其是该数组中的仅有符号)。在该示例中,这被识别为部件命令。相应地,生成将被用来构造部件D(即,实例化D的几何结构)的指令。而且,因为这是分支,所以部件D将根据需要来被定位和旋转,以使得其基本界面与部件F(的第一实例)的第一且仅有的副界面对准。

在该示例中,由于符号数组1中没有更多命令,因此过程返回到先前的符号数组(此处为符号数组0),尤其是返回到符号数组0中其先前分支过了的点(在{1}处)。在该示例中,符号数组0中的下一命令是~。在该示例中,这是实用程序命令,在特定示例中,其被用来生成将应用随机旋转的指令。随机旋转被计算以便符合部件F的主界面的对称级。随机旋转此时被存储以供稍后使用。

该过程随后移动至符号数组0中的下一命令。在该示例中,这是S,其是该示例中的另一部件命令。相应地,指令被生成,其使得部件S将与必要的经累积的平移和旋转(在此示例中包括先前计算的随机旋转)一起被生成,以使得部件S的基本界面与部件F的主界面对准,而且,使得其还符合为整个所生成的对象提供的样式。

该过程类似地继续通过符号数组中的其余符号,直至所有符号数组中的所有符号已被处理。在该示例中,这包括F{2},其是部件F的另一实例。

这在该阶段处的结果是一组指令,其随后可被用来生成供显示的对象。可以注意到,这些指令不依赖于彼此,并且通常可按任何顺序来执行。这归因于以下事实:所有变换数据用其最简单的形式来表示,并且不需要更多运算。该数据还与其中对象被放置的世界空间有关。如所提到的,在一示例中,变换数据对于对象的资产或部件上的每个分支点而言包含4D位置偏移、用于对准对象的下一部件的四元数、和其他数据。每个部件继承的所有变换和时间偏移被一起编译,以创建部件在世界空间中的最终变换和时间偏移。

相应地,现在可使用已被创建的指令来生成对象以供显示。在一示例中,这是通过以下来进行的:按顺序执行每个指令,以该特定世界空间变换和时间偏移创建每个部件的几何结构或网格的实例,以及将材料的实例指派给部件。再次提到,该“顺序”通常是无序的,也就是说,指令通常可按任何顺序来执行。

在一示例中,首先,部件是使用指令来被实例化的。作为示例,指令包含以下信息:网格、(诸)材料、平移、旋转和时间偏移。

就此而言并且简言之,材料确定部件的外观。取决于或例如在图形处理器或处理软件等等中所使用的特定着色器,材料定义部件的光泽或反射或哑光程度、部件的颜色和透明度、拼贴信息等。如所提到的,指令通常可按任何顺序来执行。

实例化本身是在图形处理中使用的众所周知的技术。相应地,在此仅讨论本示例与标准实例化技术的主要差异。

在本示例中,当在部件上或为部件实例化材料时,对该材料的引用被存储。材料的数据相对较大,而且,处理材料以创建数据相对而言是处理器密集型的。当相同材料的新实例需要被实例化时,对该材料的引用被注意到,并且可从该存储的引用中实例化该相同材料。这避免了必须创建和存储实际上相同的潜在非常大量的材料:每种材料仅一个实例需要被存储。鉴于场景可以包含大量此类对象(其可以是如上面所讨论的树或其他对象)并且每个对象可以由大量部件形成,因此这尤其有用。

由图形处理器或处理软件等等的着色器从指令中读取每个部件的时间偏移。各部件的可视化或表观可随后根据需要来被调整。

具体而言,在该示例中,用于每个部件的经预运算的数据由着色器来解码。用于每个部件的经预运算的数据被包含在上面讨论的增量编码的纹理数据结构中,并在图5中通过示例被示意性地示出。该纹理数据结构中的增量被解码,并作为用于特定部件的对象空间偏移来应用。此处重要的考虑因素是应该为部件设置的“时间”,使得其以正确的时间和形状(既相对于构成整个对象的其他部件又相对于其他对象)以及在计算机游戏等等的情形中的总游戏运行时间被可视化。

关于时间,首先,在计算机游戏等等的情形中,可能存在“全局时间”,其表示自计算机游戏被启动(例如,由玩家或其他用户)以来所经过的时间。如果该全局时间被用于所有对象,则所有对象将看起来都在同一时间被创建,并且将同时“生长”或以其他方式改变形状。这在一些情形中和/或对于一些对象而言可能是合适的。然而,在其他情形中,对于(至少一些)对象而言看起来在不同时间被创建并且在不同时间“生长”或以其他方式改变形状可能是合宜的。相应地,构成特定对象的部件可被指派全局时间偏移,其导致各部件以及因此该对象在自计算机游戏启动以来经过该全局时间偏移之后开始生长或以其他方式改变形状。作为解说这一点的简单示例,如果对象要在游戏开始之后的120秒处开始生长,则用于该特定对象的所有网格实例被指令来处理120的全局时间偏移值。即,在该示例中,用于作为整体的该特定对象的局部时间可由着色器计算为:

局部时间(对象)=(全局时间-全局时间偏移)

等式1

另外,如上面所讨论,在一示例中,对象的每个个体部件具有其自身的局部时间偏移。这是因为各部件有效地表示不同的时间切片,即已偏移了不同时间量。相应地,用于对象的特定部件的局部时间可由着色器计算为:

局部时间(部件)=(全局时间-全局时间偏移)-局部时间偏移

等式2

遵循上面所述,各对象将根据用于不同对象的全局时间偏移来被创建/可视化以在不同时间处显现,并且还将进一步根据对象的各个个体部件的个体局部时间偏移来生长或以其他方式改变形状。就此而言,根据该示例,对象将以相同速率生长或以其他方式改变形状。在一些情形中,这可能是合宜的。然而,如果期望对象以不同速率生长或以其他方式改变形状,则另一标量变量“生长速度”可被添加。在这样的情形中,用于对象的特定部件的局部时间可由着色器计算为:

局部时间(部件)=((全局时间-全局时间偏移)-局部时间偏移)*生长速度

等式3

使用该方法,在对象生长或以其他方式改变形状时,所有必要的信息需要被传递到实例缓冲器一次并且对于对象的整个生命周期仅传递一次。除了像往常一样从计算设备的CPU或其他主处理器传递全局时间之外,不需要从计算设备的CPU或其他主处理器与图形处理器或处理软件等等进行任何进一步通信以仅仅使对象看起来随时间生长或以其他方式改变形状。在现有技术中,如果对象要改变形状或以其他方式被更新,则计算设备的CPU或其他主处理器通常必须与图形处理器或处理软件进行通信以发送指令,这些指令随后必须由图形处理器处理。CPU与GPU之间的这种通信通常是更新过程的缓慢部分,并且除了全局时间从CPU到GPU的通常传递(其是少量数据)之外在本文所描述的示例中被避免。作为结果,本文描述的示例使得能够平滑、不间断地改变对象的形状,并且不需要对象的任何选择性的更新。

这里参考用于存储数据的数据存储。这可以由单个设备或由多个设备来提供。合适的设备包括例如硬盘和非易失性半导体存储器(例如,固态驱动器或SSD)等。

虽然本文参考附图描述的实施例的至少一些方面包括在处理系统或处理器中执行的计算机过程,但是本发明还扩展到适于使本发明付诸实践的计算机程序,尤其是在载体上或载体中的计算机程序。该程序可以采用非瞬态源代码、目标代码、介于源代码与目标代码之间的代码的形式,诸如以部分编译的形式,或以适合用于实现根据本发明的过程的任何其他非瞬态形式。载体可以是能够承载程序的任何实体或设备。例如,载体可一般包括存储介质,诸如固态驱动器(SSD)或其他基于半导体的RAM;ROM,例如CD ROM或半导体ROM;磁记录介质,例如软盘或硬盘;光学存储设备;等等。

将理解的是,本文中所指的处理器或处理系统或电路系统实际上可以由单个芯片或集成电路或多个芯片或集成电路提供,可任选地提供作为芯片组、专用集成电路(ASIC)、现场可编程门阵列(FPGA)、数字信号处理器(DSP)、图形处理单元(GPU)等,这取决于特定应用。一个或多个芯片可以包括用于体现一个或多个数据处理器、一个或多个数字信号处理器、基带电路系统和射频电路系统中的至少一个或多个的电路系统(以及可能的固件),其可配置以便根据示例性实施例来操作。就此而言,示例性实施例可以至少部分地由存储在(非瞬态)存储器中并且可由处理器或由硬件或由有形存储的软件和硬件(以及有形存储的固件)的组合执行的计算机软件来实现。

本文描述的示例将被理解为本发明的实施例的说明性示例。本发明可被应用于对例如树、建筑物或其他结构、洞穴或隧道系统、闪电、类似机器人的动画角色或其他动画角色、生物上的触角、河流、电力线等进行建模。在其他示例中,所建模的对象可能是某些空间的内部,诸如建筑物或洞穴网络的内部。在其他示例中,所建模的对象可以是颜色或阴影效果的表示,其具有例如以散布亮或暗的脉络的方式在所显示的场景或显示场景内的特定对象上方移动或穿过的表观。设想了进一步的实施例和示例。关于任何一个示例或实施例描述的任何特征可单独使用或与其他特征结合使用。另外,关于任何一个示例或实施例描述的任何特征也可以与示例或实施例中的任何其他示例或实施例的一个或多个特征、或示例或实施例中的任何其他示例或实施例的任何组合结合使用。此外,也可以在权利要求书所定义的本发明的范围内采用在此未描述的等同形式和修改。

相关技术
  • 三维显示中对象的拾取装置及三维显示中对象的拾取方法
  • 生成三维对象的显示
技术分类

06120112752923