毛发运动合成器系统和用于毛发/皮毛流水线的优化技术的制作方法

文档序号:6440442阅读:284来源:国知局
专利名称:毛发运动合成器系统和用于毛发/皮毛流水线的优化技术的制作方法
技术领域
本发明涉及皮毛的数字创建。更具体地,本发明涉及动物模型上的皮毛覆盖层 (fur coat)的逼真特写和远处外观的数字创建。
背景技术
在计算机图形中对可信的哺乳动物进行建模、动画制作(animate)和呈递 (render)的许多挑战之一是制作看起来逼真的皮毛。真实的皮毛覆盖层由覆盖皮肤的数十万个体的圆柱毛发构成,并且执行诸如对抗寒冷和捕食者的保护之类的生活机能。在动物之间或者在个体动物的身体上,这些毛发的外观和结构在长度、厚度、形状、色彩、定向和底层/表层构成方面十分不同。另外,皮毛不是静态的,而是作为下层皮肤和肌肉的运动结果以及由于诸如风和水之类的外部影响而运动或分裂。一些用于皮毛创建的现有计算机图形技术已经实现了令人信服的光滑皮毛的外观;但是,这些技术并未考虑真实皮毛经常在身体的某些区域(例如颈部周围)分裂。另外,现有的方法并未考虑湿皮毛的毛发簇集在一起从而引起与干燥皮毛相比显著不同的样子的情况。此外,在毛发因被喷洒水而变得越来越湿时对毛发的仿真处理仍未被解决。

发明内容
本发明的系统和方法提供了用于对诸如动物之类的表面几何模型上的逼真皮毛覆盖层进行数字表示和生成的灵活技术。在一个实施例中,提供了一种对表面上的皮毛进行布置、调整和梳理的创新技术。在一个实施例中,表面块(surface patch)边界上的皮毛的连续性被维护。另外,在一个实施例中,提供了一种用于仿真湿皮毛的创新方法。在该方法中,静态簇集和动画簇集(animated clumping)可被应用于表面上的区域。在一个实施例中,提供了一种用于对表面上沿着皮毛轨迹的毛发进行对称或单侧分裂的方法。以上处理可被迭代地应用,以生成皮毛的各层,例如底层和表层。


本发明的目的、特征和优点将从以下详细描述中变得清楚,其中图Ia和Ib是根据本发明的教导而运行的系统的实施例的简化框图。图2是根据本发明的教导的皮毛生成处理的一个实施例的流程图。图3a是对定义三维动物模型的皮肤的一组参数表面的图示。图3b是示出静态和动画梳理处理的一个实施例的简化流程图。图3c和3d是示出梳理处理的一个实施例的示例。图4是示出用于调整控制毛发以在表面边界处去除视觉不连续性的处理的一个实施例的流程图。图5是示出用于布置毛发的处理的一个实施例的流程图。图6示出在表面上所定义的子块的一个示例。图7a示出一根控制毛发的控制顶点的示例。图7b示出用于计算控制毛发重量的示例。图7c示出根据本发明一实施例的教导的用于计算最终毛发的定向的内插处理的示例。图7d是计算最终毛发的定向的一个实施例的简化流程图。图8是示出用于执行静态簇集的处理的一个实施例的流程图。图9示出不同的簇集百分比和簇集率值的示例。图IOa示出经梳理的皮毛覆盖层的呈递帧,且图IObUOc和IOd示出动画的从干到湿的皮毛序列的一个实施例的快照。图11是示出用于动画的区域簇集的处理的一个实施例的流程图。图12a是示出用于毛发分裂的处理的一个实施例的流程图。图12b示出毛发的对称和单侧分裂的示例。图12c、12d、12e和12f示出分裂效果的示例。图13a、13b和13c示出底层和表层的视觉效果。图14是示出遮挡(shading)处理的一个实施例的流程图。图15是与图Ib的流水线类似但包括另外的不同功能的毛发/皮毛流水线的一个实施例的框图。图16a和16b是示出沿着控制毛发利用可能的变化对控制毛发进行簇集的图。图17是示出根据本发明一实施例的用于实现填充体积功能的处理1700的流程图。图18a 18c是不出定义表面和相关体积的辩子形状的生成(图18a)、利用随机布置的控制毛发对这些体积的填充(图18b)以及从控制毛发对最终毛发股的内插(图 18c)的图。图19a 19c是示出具有相同的控制毛发的变形表面的侧视图的图,这些侧视图分别示出不同类型的内插技术。图20a 20c是示出波浪、编织和风效果的图。图21是示出根据本发明一实施例的用于实现几何例示(geometric instancing) 的处理的流程图。图22a和22b是示出几何例示的一个示例的图。
图23是示出根据本发明一实施例的将静态节点连接到动画节点和完成的控制节点以提供毛发运动合成器系统的简单图的图。图24是示出利用混合节点的处理的图。图25a和25b是分别示出旋转混合和位置混合的图。图26是示出混合球的图。图27示出包括动态解算器节点(solver node)的动态节点图。图28a和28b是示出对体积节点的使用的图。图29是示出超级毛发节点处理过程的流程图。图30a和30b是分别示出局部空间和世界空间中的超级毛发操作的图。图31是示出具有内球面和外球面两者的混合球的图。图32是示出用于在各种仿真缓存之间进行混合的级联节点图的图。图33是示出用于实现依赖于视图的画面空间优化的技术的图。图34是不出毛囊根位置和被变换至规格化设备坐标(NDC)系统的毛发的图。图35是示出在NDC空间中代理毛发从第一帧到第二帧所移动的距离的图。图36是示出利用画面空间大小量度在毛发数、时间和存储器方面对未经优化的值和经优化的值的并排比较的表。图37是示出利用画面空间速度方法的另一比较的表。图38是示出未经优化和经优化的毛发数、时间和存储器值的表。图39是示出用于实现毛发子块优化的处理的流程图。图40是示出对毛发子块优化的使用的简化示例的图。图41是示出被建模(其中,利用草和/或树对毛发进行了几何例示)并且利用子块优化技术的草地风景的图。图42是示出缓存状态文件的示例的图。图43是示出用于实现毛发缓存的处理的流程图。图44是示出利用毛发缓存来呈递完全覆盖皮毛的角色所实现的时间节省的表。图45是示出根据本发明一实施例的包括效果模块的先前描述的毛发/皮毛流水线的一个实施例的框图,其中该效果模块还包括允许可重新排序的多种可例示的效果的效果流水线。图46是示出根据本发明一实施例的用于实现可重新排序的多种可例示的效果的处理的流程图,这多种效果可通过效果模块来实现。图47是根据本发明一实施例的提供可重新排序的多种可例示的效果的示例的框图,这些效果通过毛发/皮毛流水线的效果模块的效果流水线而被应用于最终毛发。图48是示出根据本发明一实施例的进一步包括例示模块和例示毛发数据库的毛发/皮毛流水线的框图。图49是示出根据本发明一实施例的可由例示模块在标准RAM存储器(例如, 存储器内的例示)或者例示毛发数据库中的一者或两者上实现的迭代样式(iterator pattern)的框图。图50是根据本发明一实施例的可存储在例示毛发数据库中的信息类型的示例。
具体实施例方式方法和装置提供了用于在诸如计算机生成的动物上的表面上对皮毛的数字生成的创新技术。图Ia是根据本发明的教导而运行的一个实施例的简化框图。计算机系统10 包括中央处理单元(CPU) 15、存储器25和输入/输出20,它们可耦合到诸如盘驱动器或其他设备之类的存储设备。该系统还可以包括键盘40或其他用户输入设备以及显示器35,显示器35可用于显示用户界面以及根据本发明的教导对皮毛的最终呈递。在一个实施例中,存储器25存储指令,这些指令在被CPU 15执行时执行这里所描述的处理。或者,可以经由存储装置30或者诸如用户输入40之类的其他输入端来接收指令。这里所描述的处理可由诸如系统10之类的系统经由软件来执行,或者经由硬件或硬件和软件两者的组合来执行。在图Ib中不出一替代实施例。输入被定义一表面的表面定义模块50所接收,以下将会说明,该表面定义待呈递的对象的表面和控制毛发。模块55调整控制毛发以提供诸如梳理和表面边界上的无缝毛发之类的功能。内插模块60利用控制毛发在表面上进行内插。毛发簇集和分裂模块65通过提供毛发的簇集和分裂来增强对象的逼真视觉化。呈递模块70呈递毛发并向毛发提供遮挡、背光和阴影效果,并且模块75显示具有毛发表面的对象的最终输出。图2是根据本发明的教导在生成皮毛覆盖层的过程中所涉及的步骤的流程图。在步骤200,定义包含毛发的表面的几何形状。在一个实施例中,可以使用三维几何形状对皮肤(例如,动物皮肤)进行建模,随后在该皮肤上生成皮毛覆盖层。如图3a所示,几何形状通常被定义为一组相连的参数表面,经常称为表面块。可用本领域技术人员已知的许多方式来生成这些块。在一个实施例中,使用NURBS表面块。返回来参考图2,在步骤210,控制毛发被布置到这些表面块上,从而每根控制毛发被建模为由用户指定数目的控制顶点所定义的参数曲线,例如NURBS曲线。以下将会讨论到,由用户给出毛发的全局密度值以确定实际毛发的数目以及它们在表面块上的位置。 每根毛发还具有许多属性,例如长度、宽度、波纹度、不透明度,并且缺省地指向其在表面上的位置处的表面法线方向。在本实施例中,对控制毛发执行许多操作,并基于控制毛发和其他信息来生成最终毛发。但是,应当认识到,可以对最终毛发而非控制毛发来执行诸如这里所描述的梳理等的这些步骤。可以采用许多不同的方法来生成控制毛发。一种简单的算法在每个NURBS块上的 U方向上布置将相等间隔的X根毛发并在V方向上布置y根毛发(其中X和y由用户指定)。 或者,利用弧长(arc-length)来相等地布置这x和y根毛发。这将引起块上的更均匀分布。 但是,其并未实现控制毛发不同大小的块上的均衡分布3和7根毛发被布置在所有选中的块上,而不管其大小。因此,在一替代实施例中,对控制毛发的生成考虑了 NURBS块的面积以确定每个块的X和y。在一个实施例中,用户指定每单位面积z根毛发。另外在一个实施例中,可以在表面上个体地或者沿着曲线来布置控制毛发以进行更细微的控制。例如,可以生成沿着动物耳朵的清晰边缘的额外控制毛发,以确保最终生成的皮毛的正确排列。返回来参考图2,一旦生成了控制毛发,则在步骤210,在表面边界处调整控制毛发。由于控制毛发被布置在每个表面块中,因此位于表面块的边界上的控制毛发可能未与相邻表面块上的控制毛发对准;这可能引起沿着表面边界的毛发的可视不连续性。为了解决该潜在问题,表面边界上的控制毛发被调整。通过图4的流程图示出了用于调整控制毛发的处理的一个实施例。在步骤400,在相邻块之间构建缝。每条缝标识沿着表面块的相应边界(例如,整个边缘、T结或者拐角)的相邻表面。在步骤405,针对每个表面块,边界被遍历,步骤410。 在步骤412,每根控制毛发被检查。在步骤415,如果发现边界毛发,则在步骤420,由相应缝所标识的相邻块被检查以查看相邻块上是否存在相应毛发。在一个实施例中,如果毛发在离边界毛发的小的预定距离内,则该毛发是相应的。该距离可用参数U、V或者绝对空间来指定。在一个实施例中,预定距离可以是相对小的距离以使得毛发视觉上看起来在同一位置。如果存在相应的控制毛发,则在步骤425,通过将控制毛发中的一者或两者的位置和定向分别修改为公共位置和定向,来将边界毛发和相应毛发对准。在一个实施例中,相邻表面块的相应毛发被对齐到沿着边界的边界毛发的位置。在一个实施例中,如果相邻表面块没有相应毛发,则在步骤445,在相邻块上插入一根毛发并将其对准。该处理针对沿着每个表面块中的每个边界的每根边界毛发而继续步骤430、435和440,直到所有的编解码发都被对准为止。返回来参考图2,在步骤215之后,在一个实施例中,控制毛发已被布置在定义动物或其他对象模型的表面上,并且控制毛发的指向沿着其在表面位置上的位置处的表面法线。在步骤220,毛发被梳理以获得希望的、经修整的干燥皮毛外观。可以使用许多不同的梳理处理。但是,在本实施例中,静态和动画梳理处理被应用于控制毛发。静态和动画梳理的组合提供了低计算成本和有效的视觉效果。在替代实施例中,静态或动画梳理可被单独使用,并产生有益的视觉结果。可以针对不同的镜头(shot)对相同的控制毛发使用梳理处理,以例如提供皮毛的经修整的外观和稍微有些凌乱的外观。将参考图3b来描述一个实施例。在一个实施例中,如果毛发在对象(例如动物) 的动画制作期间未“主动地”运动,则应用静态梳理。应当注意,由于每根毛发是由表面法线、在毛发根部处的du和dv所定义的局部坐标系中表示的,因此经静态梳理的毛发将在下层表面被变形或动画制作时“被动地”运动。梳理是通过梳理方向曲线、弯曲程度和毛发曲率的规范来实现的,并且每条梳理方向曲线都具有降落(fall-off)。在步骤325,创建一条或多条梳理方向曲线。这些曲线指示出方向适用的控制毛发将被梳理。由图3c和3d示出一个示例。图3c示出了许多未经梳理的控制毛发。图3d示出了示例性的梳理方向曲线365及其方向。经梳理的毛发也在图3d中示出。图3d示出了一条梳理方向曲线。但是,实现多条不同的曲线也是常见的,每条曲线对应于表面的不同区域。因此,在步骤330,针对每条曲线,分配一根或多根控制毛发,以使得所分布的毛发根据相应的梳理方向曲线而被梳理。另外,在步骤335,针对每条曲线,定义弯曲、曲率和沉降(fallout)参数。弯曲参数定义控制毛发与表面有多接近。曲率参数指示出毛发的形状。例如,零曲率值可以指示出毛发是竖直向上的,并且最大值(例如,I)可以指示出毛发从根部到末梢在紧绷的弧上弯曲的。
沉降值指示出一区域,在该区域之外,控制毛发离梳理方向曲线越远,该曲线就越降低其影响。在一些实施例中,沉降区域被指定为覆盖相对大的面积,以使得所有控制毛发受到相等影响并且不发生沉降。在其他实施例中,希望在控制毛发和梳理方向曲线之间的距离越远,就越降低梳理效果。在步骤340,根据每根控制毛发被分配给的梳理方向曲线以及弯曲、曲率和沉降参数对每根控制毛发进行处理。处理结果在图3d中示出,其中在梳理方向曲线365的方向上梳理了毛发。另外,根据所定义的弯曲和曲率参数对毛发进行弯曲。在本示例中,沉降参数定义整个表面以使得所有的毛发受到相等的影响并且不出现沉降。如上所述,也可以应用动画梳理(步骤345)。使用本领域中已知的关键帧制作 (key framing)在某些巾贞处所指定的处理改变之间进行内插,以提供改变之间的光滑转变。 因此,例如,弯曲、曲率和沉降参数可被指定为在某些帧处改变。然后在帧期间,关键帧制作处理的执行在指定的帧改变之间转变。该技术可用于仿真影响毛发外观的各种条件,例如风。因此,通过在回放期间的每个帧处对参数进行关键帧制作并执行梳理计算,毛发可被制成动画。梳理处理还可以包括简单的毛发/表面冲突模型处理,其中由于梳理处理而与下层表面相交的毛发被推回表面之上。例如由于将弯曲参数设置为大的值,毛发被旋转为与下层表面相交。该处理包括确定毛发/表面相交的迭代算法。例如,该处理执行定义控制毛发的曲线(例如,NURBS曲线)的连续控制顶点与表面的线段交叉检查。如果控制顶点c到了表面之下,则毛发被朝着来自前一非交叉顶点的表面法线向回旋转,使得c刚好足以离开表面。旋转量足够大以使得毛发旋转回表面之上达本申请所指定的小量。因此,受梳理影响的向量的顶点被朝着表面法线旋转,以使得向量在表面之上。在一替代实施例中,通过使控制毛发的每个控制顶点成为粒子并应用类似于重力或外力的动态效果,梳理可被制成动画。诸如从加拿大多伦多市的Silicon Graphics, Inc. 的分部Alias I Wavefront可得的Maya之类的软件可用于执行该功能。一旦控制毛发被标识和处理(例如,调整、梳理),就从控制毛发生成每个块的最终毛发(图2的步骤223)。如上所述,在一个实施例中,首先沿着表面边界来调整控制毛发。在一替代实施例中,可以单独应用梳理或者可以结合表面边界调整处理的应用来应用梳理以控制毛发。通过图5的流程图示出了用于将毛发布置在块上的一种示例性处理。在该实施例中,在两组步骤中从控制毛发生成最终毛发。首先,计算静态毛发特征,例如最终毛发的布置(u、v位置)。该步骤可被执行一次。第二组步骤可被针对动画中的每个帧来执行,并且提供依赖于帧的毛发特征。在步骤505,在将在其上生成毛发的对象的表面上标识子块。图6示出了用于将最终毛发布置在定义下层皮肤的表面上的一个实施例。在本实施例中,按照表面的(U,V) 参数值来确定每根最终毛发的根位置。这些值是从总的(对所有表面是全局的)密度输入值dmax (每平方单位面积的毛发数)和一组规格化的每个表面块的局部密度值(从O到I 的值范围;缺省值可以是I)来计算的,它们被以相等间隔的可变分辨率栅格布置在表面上 (例如,128X128个点)。
在一个实施例中,该处理使毛发数独立于该栅格的分辨率并独立于表面块大小以在不同规模的表面上提供无缝的密度。为了讨论,假定所指定的输入密度值(dmax)是 10根毛发/单位平方面积,并且如图6所示,在表面上以相等间隔的点来布置局部密度值 (例如,分别是O. 4、0. 5、0. 6、0. 6根毛发)。这些点定义待处理的表面的子块(图5的步骤 505)。当这些相等间隔的点被遍历(步骤510)时,相邻点之间的(U,V)空间面积可通过由两个多边形(更具体地,三角形(al和a2))定义的面积来近似,并且每个三角形毛发单元的每平方单位面积的毛发数被从其顶点处的值平均出(步骤520)。在一个实施例中,这是根据下式确定的HairUnit (每平方单位面积的毛发数)=dmaxXVavg,其中dmax表示指定的输入密度值,且Vavg表示从其顶点处的值所确定的每个三角形的平均局部密度值。对于所定义的示例,这使得分别对于左上和右下的三角形可得IOX (O. 4+0. 5+0. 6)/3 = 5和 IOX (O. 4+0. 6+0. 6)/3 = 5. 333根毛发/平方单位面积。在步骤525,从子块(al和a2)的实际近似面积和每单位面积的毛发数来确定布置在当前子块上的毛发总数。在一个实施例中,每单位面积的毛发总数是根据下式确定的HairTotal (每单位面积的毛发总数)=AXHairUnit,其中A表示子块的实际近似面积。例如,如果值O. 4用于面积al并且O. 3用于面积a2(为了讨论而假定的),则 O. 4X5+0. 3X5. 333 = 3. 5999 是布置在由(ui, vi)、(ui, vi+1)、(ui+1, v+1)和(ui+1, vi) 所定义的子块中的毛发总数。在步骤530,布置最终毛发。由于优选的是不布置小数的毛发,因此根据均匀生成的在
中的随机数是大于或小于小数部分(O. 5999),布置3或4根毛发。这3或4根毛发被随机布置在u[ui,ui+l]中并随机布置在v[vi,vi+l]中。该处理然后返回来进行步骤510,对由接下来的四个相等间隔的点所定义的子块进行处理。每根最终毛发包含多个控制顶点。每根控制毛发的根位置(第一控制顶点)是按照下层表面的(u,v)值来指定的。每根毛发的其余控制顶点是在原点被指定在毛发根位置处并且轴在表面法线、du和dv方向上的已知局部坐标系中定义的。在一个实施例中,每根毛发是沿着表面法线而定向的,并且控制顶点的坐标是通过将每根毛发的长度细分成n-1 个相等部分而生成的,其中η是每根毛发的控制顶点的数目。在图7a中示出一个示例,其中利用η = 4在表面730上定义毛发725。根是顶点720并且其余顶点是705、710和715。一旦根位置被计算出,围住每根最终毛发的控制毛发(在一个实施例中为三根) 就被确定。在一个实施例中,二维的Delaunay三角测量(本领域已知,因此这里不对其进行进一步讨论)由每个表面块的控制毛发的(u,v)位置构成。之所以选择这种三角测量是因为其通过将外接圆最小化并将三角形的最小角最大化来创建“比例适当的”三角形。一旦Delaunay三角测量被构建,就确定每根最终毛发所落入了哪个三角形。形成特定三角形的三根控制毛发的索引被分配给落入该三角形的毛发。然后计算三根控制毛发(cl、c2、c3)中的每一根在最终毛发(h)上所具有的权重 (wl、w2、w3)。这可以利用中心坐标(本领域已知,因此这里不对其进行进一步讨论)来完成,并且在图7b中示出,其中“A”表示三角形726 (Cl、c2、c3)的面积。这些权重用于如下说明地从控制毛发来内插最终毛发。对于动画中的一个对象而言,每根最终毛发的上述信息(即,(u,v)位置、3根围住的控制毛发以及每根控制毛发的权重)仅可被生成一次。该信息在这里被称为静态信息。相比之下,对每根最终毛发的定向的计算可在动画的每帧处完成。这种定向是通过参考图 7c和7d所说明的内插处理,从控制毛发的定向及其相应的权重来确定的。在步骤756,针对每根最终毛发(h),相应的三根控制毛发(Cl、c2、c3)被转换到所利用的表面块空间(在一个实施例中是块坐标系)中。在步骤758,计算控制顶点(例如782、783)之间的控制毛发向量(例如vll、vl2、vl3)。可以使用各种技术来计算控制毛发向量;在一个实施例中,向量被相等地分布在控制顶点之间。控制毛发向量然后被规格化 (例如nvll、nv12、nvl3)。在步骤760,三根控制毛发的相应控制毛发向量被内插并被乘以针对最终毛发计算的三个所确定权重。在一个实施例中,例如,一个控制毛发向量是根据下式确定的ivl = nvll Xwl+nv21 Xw2+nv31 Xw3 ;其中ivl表示最终毛发的经内插和加权的控制毛发向量表示,nvll、nv21和nv31表示规格化的控制向量,并且wl、w2和w3表示用于规格化的控制向量的相应权重。在步骤762,得到的向量的大小被调整为最终毛发长度 (sivl、siv2、siv3)。一旦经大小调整向量被确定,就在步骤764,从经大小调整的向量来计算最终毛发的控制顶点(786、788、790、792)。如图2所示,步骤225、230、235和245是可选的,并且对于产生经修整的干燥皮毛覆盖层而言不是必要的。步骤225和230被应用于湿皮毛的生成。当皮毛由于水的表面张力或凝聚而变湿时,可能发生毛发的簇集。效果是相邻毛发(一束毛发)的末梢趋于朝同一点下沉,从而创建了一种锥形的“超级毛发”或者圆形簇。以下将会描述,步骤225是针对在固定的预定区域中生成毛发簇的静态区域簇集而执行的。步骤230是针对动画的区域簇集而执行的,即,当簇集区域在模型上移动以例如仿真水或雨点的喷流击打皮毛并使其越来越湿。在两种情况下,提供可被变动的参数以实现各种程度的从干到湿的皮毛外观。步骤235被用来生成干燥的皮毛簇集或分裂。根据特定应用,步骤225、230和235中的所有或一些步骤可被执行。另外,根据应用可对步骤225、230和235进行优先级排序,以使得在较高优先级的步骤中所调整的毛发在其他步骤中不被调整。或者,依赖于特定应用,效果可以是累积的或者选择性累积的。在步骤225,静态区域簇集被执行。参考图8描述了该处理的一个实施例。为了讨论,每个簇的中心毛发被称为簇中心毛发,并且该簇中被吸引到该簇中心毛发的所有其他成员毛发在这里被称为簇毛发。在一个实施例中,存在四个簇集输入参数簇密度、簇大小、簇集百分比和簇集率。 与毛发密度参数类似,簇密度指定每平方面积应当生成多少簇。这里所描述的处理将簇密度转换成有簇中心毛发所定义的簇的实际数目、依赖于每个表面块的大小的簇中心毛发的数目。结果,一些现有的毛发被变成簇中心毛发。簇大小定义簇的面积。在一个实施例中,簇大小是在世界空间中定义的,世界空间是用户关于对象的大小而通常参考的空间。在一个实施例中,簇密度的优先级高于簇大小, 使得如果存在许多簇并且多数簇重叠,则簇大小无法被维护,这是因为簇毛发可能仅是一个簇的成员。如果簇密度和大小都小,则簇之间的许多毛发将不被簇集。参考图8,为了确定每根最终毛发的簇成员关系(即,每根毛发属于什么簇(若有的话)),在每根簇中心毛发的位置处,具有指定簇大小的簇被转换成参数表面空间的u半径和V半径分量(步骤800)。在步骤805、810,每根毛发被评估以判断其是否落在相应的簇中心毛发的U、V半径分量内。如果毛发不在U、V半径分量内,则毛发不是簇毛发(步骤
10815),并且处理继续到下一毛发(步骤830)。如果毛发在U、V半径分量内,则在步骤820, 利用该毛发来参考簇中心毛发的索引。另外,簇集率和簇集百分比被分配(步骤825)。考虑许多变化。可以引入簇大小噪声参数以在簇大小中产生随机变化。用于簇大小的特征(纹理)图可由用户创建和指定,每个表面块一个,以提供对在步骤805、810所使用的半径的局部控制。在该实施例中,针对表面上的(U,V)处的特定簇(簇中心毛发),全局簇大小输入参数与用于该表面的簇大小特征图中相应的规格化(s,t)值相乘。此外,可以提供静态簇区域特征图以将簇集限制到表面块的指定区域,而非整个模型。在一个实施例中,簇集百分比和簇集率值被分配给每根簇毛发(步骤825)。在一个实施例中,两者的值在
范围之间,并且随后用于对簇毛发重定向(步骤835),这将在以下描述。簇集百分比指定每根簇毛发的簇集程度。例如,值O表示毛发根本未被簇集,SP, 像是“干燥”毛发。值I表示毛发被完全吸引到其簇中心毛发,即,毛发的末梢(其远端控制顶点)与簇中心毛发的末梢在同一位置。簇集率定义簇毛发与其相应的簇中心毛发簇集得有多紧凑。例如,值O表示簇毛发从根部到末梢被逐渐线性地吸引到其簇中心毛发。更接近I的簇集率值表示更接近根部的毛发控制顶点比更接近末梢的毛发控制顶点相比被成比例地更多地吸引到相应的簇中心毛发顶点,这产生更紧凑的簇。在图9中给出簇集百分比和簇集率的不同值的示例。在步骤835,每根簇毛发的控制顶点(除根部顶点之外)被从在步骤200、210、 215,220和223所确定的簇毛发的干燥的经梳理的位置朝着相应的簇中心毛发顶点重定向。在一个实施例中,该处理是在每帧处执行的。在一个实施例中,控制顶点(CV)的数目的缺省值是3 (4减去根部顶点),并且当前控制顶点的索引i的范围在I 3。在一个实施例中,如下确定重定向clumpHairCV[i] = clumpHairCV[i] +deltaX (clumpCenterHairCV[i]-clumpH airCV[i]), delta = clumpPercentX (fract+cIumpRateX (1-fract));其中 fract = i/ number Of CVs ; clumpHairCV [i]表不族毛发顶点;clumpCenterHairCV [i]表不相应的族中心毛发顶点;i表示对当前控制定点的索引;numberOfCVs表示簇毛发的控制顶点的数目; clumpPercent表示簇集百分比;以及clumpRate表示簇集率。可以通过与以上关于簇大小而描述的特征图类似的特征图来局部地控制簇集百分比和簇集率参数两者。这两个值也可以随着时间而被变动或改变以提供对从干到湿再到干的皮毛外观的连续控制。这由图10a、10b、10c和IOd示出,这些图示出了从来自变动的簇集百分比和簇集率序列的四帧。在图IOa的图中,簇集百分比和簇集率都为零并且可以表示干燥的经梳理的毛发。在图IOb的图中,簇集百分比为O. 7且簇集率为0,这产生稍微有些湿的外观。在图IOc的图中,簇集百分比为I. O且簇集率为O. 3,这产生湿的外观。在图IOd的图中,簇集百分比和簇集率都为1.0,这产生非常湿的外观。希望存在动画的区域簇集以仿真水或雨点的喷流击打皮毛并使其越来越湿。在图 2的步骤230,执行动画的簇集。在一个实施例中,在动画系统中定义动画的簇集区域。参考图11描述该处理的一个实施例。在一个实施例中,由击打表面块的粒子来定义簇集区域。其他实施例可以使用用于生成动画的簇集区域的替代技术。在步骤1100,对所有的毛发执行全局静态区域簇集处理。该步骤标识出簇集区域和相应的簇中心毛发和簇毛发。如以下所说明的,在动画的簇集处理中使用该信息。在一个实施例中,所使用的全局静态区域簇集是以上针对静态区域簇集所描述的全局静态区域簇集。在步骤1102,定义生成粒子的一个或多个发射器。利用发射器来生成粒子是本领域已知的,这里不进行详细讨论。在一个实施例中,发射器粒子的生成速率和在表面上的扩散速率。在步骤1105,在每帧处,针对击打表面的所生成的每个粒子,粒子所击打的表面块被标识出(步骤1110)。在一个实施例中,在先前帧中生成的粒子被运载经过随后的帧,以使得粒子是累积的。针对击打表面块的每个粒子(包括在先前帧中生成的那些离子),在(U,V)位置处的块上创建圆形的动画的簇集区域(步骤1115),该(u,v)位置的簇集百分比、簇集率和动画的簇集区域半径是由在粒子击打表面的帧处执行的创建表达式所确定的,以使得当粒子在此时(即,在该帧处)击打表面时,簇集百分比可被设置为零并且半径可被定义为或许可由随机噪声值来调整的指定值。因此,可以定义该表达式来提供所希望的“潮湿”效果。以上讨论的簇大小类似,所定义的圆形簇集区域的半径被转换为相应的U半径和 V半径。在每帧处所执行的运行时间表达式定义簇集百分比和簇集率,从而确定皮毛多快地 “变”湿和“变”得多湿。例如,一个运行时间表达式可以是MIN(FrameNumberXO. 1,I),以使得随着帧号的增大,毛发变得越来越湿。簇的每根簇中心毛发(在步骤1100确定)然后被评估以判断其是否落在动画的簇集区域内(步骤1120)。为了判断簇是否落在动画的簇集区域内,在每帧处,检查簇的簇中心毛发和动画的簇集区域的中心之间的(u,v)距离是否在动画的簇集区域的(u,v)半径参数内。针对位于重叠的动画簇集区域中的簇,增加了簇集百分比和簇集率的值,从而产生更湿的皮毛。如果簇中心毛发在动画的簇集区域内(步骤1125),则相应的簇被标上变动的簇集标记,以使得簇毛发随后被重定向来反映动画的簇集效果。或者,簇的每根簇毛发可以具有一变动的簇集标记,该簇集标记在相应的簇中心毛发被确定为在动画的簇集区域内的情况下被设置。另外,变动的簇集率值和变动的簇集百分比值根据运行时间表达式而被分配给被标识出在动画的簇集区域内的簇毛发。在一个实施例中,动画的簇集区域内的每个簇的簇集百分比和簇集率的值在每帧处被替换为动画的簇集区域的相应值。因为动画的簇集区域可以远大于簇,所以动画的簇集区域可以包含若干个体簇。针对每个粒子(步骤 1145),每个簇被评估(步骤1140)。应当注意,动画的簇集区域可以骑跨表面块边界。例如,动画的簇集区域的中心可以位于一个表面块上,但该区域可以位于一个或多个其他块上。由于动画的簇集区域通常被定义并因此与包含动画的簇集区域的中心(即,粒子击打的位置)的表面相关联,因此骑跨相邻块的簇集区域的一些部分可被忽视(overlook)。这可能导致最终毛发的簇集的不连续性。在一个实施例中,解决了该潜在问题。每当新的粒子击打表面并且(U,V)半径超过该表面的边界时,针对影响相邻块的动画的簇集区域,生成另外的(U,v)中心和(u,v)半径。因此,例如,如果簇集区域覆盖两个相邻块的一些部分,则为每个相邻块生成相应的(U,V)中心和半径,以提供另外的动画簇集区域用于步骤1120 1140的评估。在步骤1150,针对每帧,在动画的簇集区域内的簇的簇毛发被重定向。因此,如果簇毛发在动画的簇集区域内,则簇毛发被选择性地调整。在一个实施例中,簇集被限制为每帧处的动画簇集区域,以使得在动画簇集区域之外的簇的最终毛发通常被制作为“干燥”毛发。在步骤1155,如果更多帧将被处理,则处理在步骤1105再次继续。因此,在多帧上执行动画的簇集处理以提供动画效果。返回来参考图2,步骤235可被应用,以通过在下层皮肤(表面)上沿着某些线 (皮毛轨迹或者分裂线)来分裂经修整的皮毛覆盖层来生成毛发分裂或者干燥毛发聚集的效果。如下所述,该处理可以包括两种毛发分裂对称的和单侧的。在对称分裂中,皮毛轨迹的两侧上的毛发朝着该轨迹分裂,而在单侧分裂中,轨迹一侧上的毛发从轨迹向外分裂。在个实施例中,在动趣系统中将皮毛轨迹指定为表面上的曲线。每条轨迹具有半径、针对对称和单侧分裂的分裂百分比和分裂率以及针对单侧分裂的另外的分裂向量。 所生成的最终信息被输出到分裂文件中,随后分裂文件被访问以重定向受影响的毛发。由图12a示出了毛发分裂技术的一个实施例。在步骤1200,定义皮毛轨迹。可以与簇类似地通过定义(u,v)分裂半径来定义皮毛轨迹。在步骤1205,计算分裂线毛发(位于由针对皮毛轨迹所定义的曲线来定义的皮毛轨迹曲线上或者与其非常接近的毛发)。利用分裂线毛发和分裂半径,在步骤1215、1220,每根毛发都被评估以判断毛发在对称分裂的情况下是否位于分裂线的两侧上的(U,V)分裂半径内,或者在单侧分裂的情况下是否位于由分裂向量所指定的一侧(分裂向量侧)。针对由半径所指定的空间内的每根毛发(这里称为分裂毛发),相应的分裂线毛发(皮毛轨迹上的毛发)然后被确定为与其最接近的毛发。毛发被标注为分裂线毛发、具有对其相应分裂线毛发的索引的分裂毛发或者不位于分裂所指定的区域内的正常毛发。应当注意,对于单侧分裂的实例,现在每根分裂毛发在分裂向量的方向上被“离开”其相应的分裂线毛发而重定向,而非“朝着”分裂线毛发。在图12b中示出对称和单侧分裂的示例。分裂毛发被相对于其相应的分裂线毛发而重定向(步骤237)。对于对称分裂,该处理与早先讨论的针对簇毛发所执行的处理类似。但是,对于分裂毛发,使用分裂百分比和分裂率来代替用于簇毛发的簇集百分比和簇集率。对于单侧分裂,与被吸引到分裂线毛发相反,根据分裂百分比和分裂率参数来避开(repel)分裂毛发。由图12c、12d、12e和12f示出分裂效果。图12c示出具有分裂线毛发1252和1254 的对象1250。图12d示出对称分裂在对象上产生的效果。图12e和12f示出沿着分裂线毛发1256 1270的单侧分裂。在图2的步骤245,对是否将对处理执行多次作出决定。多数有皮毛的动物的覆盖层由毛发的较细、较薄和较短层(称为底层)加上较长和较厚毛发的表层构成。步骤245 示出执行两次(或多次)处理的能力,从而步骤210、215、220和223 (并且可选地,225、230 和235)被执行多于一次,每次产生一组不同的毛发。这些组或层然后在呈递时被处理和组合(步骤250)。通过参考图13a、13b和13c可以看到效果。图13a是根据本发明的教导而生成的底层的表不。图13b代表对表层的表不,且图13c代表由底层和表层的构成的组合图像。如步骤250所示,由其控制顶点所代表的簇集毛发被呈递为一系列的二维图像以创建逼真的干和湿毛发外观。在一个实施例中,该处理用于从特定观察点的角度将三维毛发几何形状投射到二维图像平面上。为了快速且高效地呈递大量毛发,每根毛发的几何模型可被保持为简单的。如上所述,毛发由具有预定数目的控制顶点(在一个实施例中,缺省为四个)的参数曲线来表
/Jn ο在一个实施例中,处理采用已知的呈递技术来制作由相应控制顶点所描述的毛发。在一替代实施例中,增加定制的模块来逼真地“遮挡”毛发。这可以通过在毛发上或者沿着毛发的每个点处分配色彩强度来实现,其中沿着毛发的点可被定义为构成毛发的像素。在呈递毛发期间,为每根毛发添加宽度以将其变换成窄条带,该窄条带的定向总是朝着相机或者观察点。遮挡处理适当地遮挡这些条带基元以更逼真地将其呈现为细毛发。在图14的流程图中给出遮挡处理的一个实施例。在步骤1400,每根毛发被处理。 在步骤1405,针对每根毛发,在毛发基底处的表面法线被与毛发上的当前点处的法线向量混合,以获得毛发上的当前点处的遮挡法线。在一个实施例中,毛发被呈递为显示器上一系列的点或像素。因此,当前点是表现毛发的像素之一。在沿着毛发的多个点处可以应用遮挡处理。在一个实施例中,这些向量中的每一个向量对混合所贡献的量是基于毛发上的当前点处的正切向量与毛发基底处的表面法线向量之间的角度的。该角度越小,表面发现对遮挡法线的贡献就越多。在步骤1410,利用毛发上的当前点处的遮挡法线来确定该点处的毛发强度。在一个实施例中,使用Lambertian模型来计算这些强度。使用该方法提供了以下好处允许用户在皮毛被添加时照亮下层皮肤表面并接收可预测的结果。该方法考虑了个体毛发之间的遮挡差异和沿着每根毛发长度的遮挡的差异。为了在皮毛覆盖层上获得逼真的阴影,使用阴影图。对阴影图的使用在本领域中是已知的,这里不进行进一步讨论。但是,将毛发加入到阴影图中可能产生若干不合需要的副作用。一个问题是由于皮毛自身阴影而引起被照亮的皮毛上的暗拖影。暗拖影在被照亮的皮毛上看起来是错误的,因为正常情况下,光从皮肤和毛发反射以防止被照亮的皮毛上的黑暗阴影。为了将暗拖影效果最小化,在一个实施例中,基于某些标准来缩短用于阴影图的毛发(步骤1415)。例如,毛发的长度和密度可以指示出缩短毛发的百分比。通过选择性地缩短用于阴影图的毛发,毛发自身阴影效果被最小化,同时仍然在明暗界线上产生分裂的阴影以使得光能够落在皮毛上。以类似的方式实现背光对位于有皮毛对象后方的每个灯使用阴影图,并在阴影图程度处理中基于密度和长度再次缩短毛发。在一个实施例中,用于毛发的照明模型还允许每个灯控制其漫反射离开角度。因此,在有皮毛的对象的直接后方的灯可以围绕对象。利用这些照明控制以及阴影图,实现了合理的背光效果。在一个实施例中,对簇集毛发的遮挡被修改。在一个实施例中,毛发遮挡的两个方面可被修改。首先,增大皮毛上的光谱量。其次,在遮挡模型中考虑簇集。在几何上,如早先所说明的,以簇方式对皮毛进行建模以仿真当皮毛变湿时所时间发生的情况。在该遮挡模型中,针对每根毛发并针对每个灯,确定毛发所位于的簇的一侧相对于灯的位置,并且基于毛发所位于的一侧来使毛发变暗或变亮。因此,在与灯相面对的簇的一侧上的毛发比背向灯的簇上的毛发更亮。其他实施例本发明的其他实施例涉及添加到图Ib的动物皮毛和人类毛发流水线的其他特征。具体而言,这些添加到流水线的其他特征涉及为数字角色产生各种式样化的图像逼真的皮毛和毛发外观。现在参考图15,图15是与先前描述的图Ib的流水线类似但包括另外的不同功能的毛发/皮毛流水线1500的框图。与之前相同,由表面定义模块1550来接收输入。如前所述,表面定义模块1550定义待呈递的对象的表面和控制毛发。此外,如前所述,控制毛发调整模块1555调整控制毛发以提供诸如梳理和表面边界上的无缝毛发之类的功能。除了先前描述的图Ib的流水线之外,向毛发/皮毛流水线1500增加了毛发运动合成器模块1557,以提供对不同毛发动画的编辑和组合,这将在下文中详细描述。如前所述,内插模块1560可用于利用控制毛发在表面上进行内插。另外,效果模块1565可被用作毛发/皮毛流水线1500的一部分,以向毛发和皮毛提供诸如簇集、分裂、波浪效果、编织效果等的各种效果,这将在下文中更详细地描述。此外,毛发/皮毛流水线1500可以利用优化模块1567,以提供用于改善呈递时间的方法,这将在下文中更详细地描述。在毛发/皮毛流水线1500中可以利用遮挡、背光和阴影模块1570以向毛发/皮毛提供遮挡、背光和阴影效果,并且可以利用显示模块1575以呈递和显示具有毛发/皮毛表面的对象的最终输出,如前所述。此外,如先前参考图Ia所描述的,应当认识到毛发/皮毛流水线1500可用计算机将系统实现,该计算机系统具有中央处理单元(CPU)、存储器、输入/输出(I/O)等,它们可耦合到诸如盘驱动器或其他设备之类的存储设备。此外,该计算机系统可以包括键盘或其他用户输入设备以及显示器,该显示器可用于显示用户界面以及根据本发明的实施例对毛发/皮毛的呈递。具体而言,本发明的实施例涉及由先前描述的图15的流水线1500所实现的技术, 其涉及诸如以下各项专用的梳理工具、不同的最终毛发内插算法以及除了呈递每根最终毛发之外还执行可定制的每根毛发计算的通用应用程序接口(API)。其他技术涉及用于编辑和组合不同的毛发动画的方法和系统,这里称为毛发运动合成器(HMC),以及用于改善呈递时间的毛发优化策略。在一个实施例中,HMC可由毛发/皮毛流水线1500的毛发运动合成器模块1557实现,并且优化策略可由毛发/皮毛流水线1500的优化模块1567实现。数字动物、人和虚构的生物在越来越多地加入到电影中,既包括有真实动作的也包括计算机制作的。为了使得它们可信,这些角色中的许多角色需要有说服力的毛发或皮毛。在质量最重要的制作环境中,用于生成毛发的流水线不仅必须工作,而且需要是实用、 耐用、灵活、高效和强大的。
这里描述的是如下的工具和技术这些工具和技术辅助创建特定毛发和皮毛外观以满足总监可能为特定演出和其角色选择的样子和表情。描述了解决方案,这些解决方案使得可以生成令人信服的动物皮毛,制作可信的人类毛发,并精密地匹配真实演员的毛发。这里描述的是对图Ib的毛发/皮毛呈递流水线的改进,这解决并改善了数字毛发创建处理中最复杂和耗时的领域中的三项外观显影(梳理),毛发动画和镜头,以及呈递大量的毛发。应当注意,当在几何上对毛发建模时,出现与人类毛发有关的问题,这些问题稍微不同于动物皮毛的那些问题。具体而言,更长的人类毛发需要复杂得多的梳理和动画工具。 对于动物皮毛而言,呈递阶段需要被优化,因为与人类的大约100,000到150,000相比,存在数百万的个体毛发股。这里将会描述,由毛发/皮毛流水线1500所采用的技术涉及制作各种发型,从短的动物皮毛到长的人类毛发。具体而言,毛发/皮毛流水线1500包括诸如以下的特征用于对毛发进行建模、动画制作和呈递的工具;允许任意的少量控制毛发来定义基本梳理和动画特征;以及用于从这些控制毛发来内插最终的经呈递的毛发股的技术。应当注意,传统的3D动画软件(例如从AUTODESK可得的MAYA)可用于提供传统的查看功能。另外,从PIXAR可得的RENDERMAN软件可用于帮助呈递最终毛发。这些软件包是计算机图形领域公知的。在下文中描述由毛发/皮毛流水线实现的其他梳理和控制毛发编辑工具。例如, 在一个实施例中,附接到控制毛发的基本引导链可用在前向或反向运动模式中,以定义控制毛发的形状同时大致维护其长度。也可以在世界空间或局部空间中向其他选中的控制毛发应用相同的变形。此外,可以利用直观切割工具,其中用户可以在正视图中草拟出曲线, 该曲线然后用于计算与选中的控制毛发的相交,并且在这些点处对它们进行切割。在一个特定实施例中,公开了允许选中的控制毛发以受控方式被簇集在一起的梳理工具。参考图16a和16b,图16a和16b是示出沿着控制毛发利用可能的变化对控制毛发进行簇集的图。如图16a所示,第一组控制毛发1602和第二组控制毛发1604被示出为从生物1606的头部而在发现方向上延伸。簇轮廓窗口 1610包括可由用户定义的簇轮廓曲线 1611,该曲线是由毛发/皮毛流水线1500的控制毛发调整模块1555实现的,并且可被应用于第一组控制毛发1602以使得控制毛发以变形的控制毛发1615的方式变形,从而使得它们接近可由用户定义的簇轮廓1611,这在图16b中可看出。填充体积技术在一个实施例中,毛发/皮毛流水线1500的表面定义模块1550可用于生成定义表面和相关体积的形状。控制毛发模块1555可用于利用控制毛发来填充体积,并且内插模块1560可用于从控制毛发来内插最终的毛发股。将在以下更详细地描述这些技术。具体而言,填充体积工具可用于利用随机布置的控制毛发来快速地填充所围住的表面。这在生成毛发以填充“毛发体积”的过程中可以是有用的,以描述角色的粗略毛发外观,“毛发体积”例如是定义建模者经常提供的马尾辫的体积。参考图17,图17是示出用于实现填充体积功能的处理1700的流程图。如图17所示,在框1710,生成定义表面和相关体积的形状。例如,这可以利用毛发/皮毛流水线1500的表面定义模块1550来实现。接下来,体积被填充有随机布置的控制毛发(框1720)。例如,这可以利用毛发/皮毛流水线1500的控制毛发调整模块1555来实现。最后,从控制毛发股来内插最终毛发股(框1730)。例如,这可以利用毛发/皮毛流水线1500的内插模块 1560来实现。此外,在图18a 18c中可以看到对此的示例,其中辫子被建模者简单地表示为表面,然后填充有毛发。具体而言,图18a 18c示出了定义表面和相关体积的辫子形状的生成(图18a)、利用随机布置的控制毛发对这些体积的填充(图18b)以及从控制毛发对最终毛发股的内插(图18c)。如图18a所示,首先,生成三个经编织的圆柱1802、1804和1806,每个圆柱都定义形状和相关体积。接下来,如图18b所示,利用填充体积功能来分别生成控制毛发1810、 1812和1816。最后,在图18c中可见,最终的毛发辫子1820、1822和1826被从控制毛发所内插并被呈递。利用与以下描述的算法类似的内插算法,可以从现有的控制毛发来自动内插另外的控制毛发,并且也可以从现有的毛发股来自动内插最终毛发股。另外,新插入的控制毛发的形状可在选中的现有控制毛发之间被混合。在一个实施例中,毛发/皮毛流水线1500可以基于不同的坐标方案,利用不同的算法从控制毛发来内插最终毛发股以及从现有的控制毛发来内插其他的控制毛发(例如, 利用内插模块1560)。可以参考图19a 19c来看到这种内插技术的一个示例。在图19a 19c中可见, 利用相同的控制毛发来示出变形的表面1900的侧视图。通过利用该内插技术,在不同的应用中可将控制毛发的数目保持为较小。例如,图19a示出了在“世界空间”坐标框架中从控制毛发1902来内插最终毛发股1904的第一内插方法,其中最终毛发股1904不会自动跟随表面变形。这对于不应当跟随表面(皮肤)变形的长发型或植物而言是有用的。图19b示出了在“局部空间”坐标框架中从控制毛发1902来内插最终毛发股1904 的第二内插方法。在“局部空间”方案中,最终毛发股1904自动跟随表面变形。这对于较短的毛发或皮毛而言是更自然的。最后,图19c示出了从控制毛发来内插最终毛发股1904的第三内插方法,其中最终毛发股1904仍然在有所影响的控制毛发1902的凸起外壳(convex hull)中。该方案例如对于从弯曲的头皮的顶部或侧方落下的长的未簇集的人类毛发是有用的。应当注意,在局部和世界空间模式中,所内插的最终毛发股1904可能显得长于控制毛发1902,而在凸起外壳模式中并非如此。此外,可以利用毛发/皮毛流水线1500(例如,利用效果模块1565)来实现最终毛发股的分级簇集能力。最终毛发可能属于由用户直接布置的手工簇,或者属于由过程生成的自动和小型簇。自动簇毛发可能发生在手工簇之内或之外,而小型簇毛发可能仅存在于手工或自动簇中。这些技术可被应用于湿毛发外观并用于定制干毛发的束的外观。毛发/皮毛流水线1500另一特性在于例如通过毛发/皮毛流水线1500的效果模块1565,可以实现诸如波浪、编织(在毛发根部周围旋转)、缩短末梢和风之类的许多效果或参数。在控制毛发之间的内插之后,这些效果可被直接应用于最终毛发。
这些波浪、编制和风效果的示例在图20a 20c中示出。在图20a 20c的各种情况中,控制毛发2002被示出为指向竖直上方。例如,图20a未示出最终毛发2004上的任何效果。图20b示出某种波浪和编制效果被应用于最终毛发2004。最后,图20c示出风效果被应用于最终毛发2004。此外,在簇集之前或之后,效果可被选择性地应用于不同的毛发“类型”,例如手工簇成员毛发或者未簇集的毛发。另外,可以结合具有可能不同组的控制毛发的多个最终毛发层来使用独立的毛发参数或效果。对于动物皮毛,底层和表层可被这样生成,并且复杂的人类毛发可被分裂成若干不同的层,例如基底、分离层和绒毛。几何例示本发明的另一实施例涉及任意的几何例示。任意的几何例示提供一特征,该特征对毛发/皮毛流水线1500的能力进行杠杆作用以对最终所呈递的毛发基元(如先前所述) 的式样或外观进行实例化、动画制作和控制。在这点上,可以结合毛发呈递功能来提供通用应用程序接口(API),以使得应用开发者可以从毛发系统获得每个毛囊的信息,并利用其他操作来替代毛发的呈递。例如,在一个实施例中,毛发流水线1500可用于基于至少一根毛发相对于表面的毛发位置来生成用户选中的几何形状。表面定义模块1550可用于定义表面。显示模块1575 可用于处理用户选中的几何形状,并在表面上的毛发位置处呈递用户选中的几何形状来代替至少一根毛发。具体而言,提供进入到毛发/皮毛流水线1500中的钩(例如在显示和呈递模块 1575处)以允许用户略过(override)所呈递的几何形状,而不是输出最终所呈递的基元的毛囊,并且呈递另一几何形状而不是呈递毛发。因此,可以生成具有刺的人头,而不是利用毛发来填充例如人头。或者可以填充充满花、草或树的区域,而不是充满毛发的区域。此外,应当注意,当试图设计特定的风景时,实例化完全相同的对象(例如,花或者树)并不好,这是因为所有的花或者树将是相同的。因此,在呈递时可以对不同种类的基元进行建模和实例化,以替代每根最终毛发。可以使用毛囊来表示变形的轴,而不是完全放弃最终的毛发形状,在该轴周围,可以根据毛发的形状来使所例示的几何形状变形。这样,先前所描述的与呈递毛发有关的所有各种效果(例如,簇集、分裂、波浪、编织、风等)的所有优点可用在呈递另一选中的几何形状(例如,花、树等)。现在参考图21,图21是示出根据本发明一实施例的用于实现几何例示的处理 2100的流程图。在框2105,判断毛发/皮毛流水线1500是否进入了呈递阶段。如果判断结果为否,则处理结束(块2110)。但是,如果已进入呈递阶段,则在框2115,判断用户是否决定略过毛发呈递操作,而是利用几何例示功能。如果判断结果为否,则处理在框2120处结束。另一方面,如果用户决定了略过毛发呈递处理并且改为利用几何例示功能,则在框2125,毛囊信息被获得。接下来,在框2130,基于用户选中的几何形状,表面上的毛囊被改为填充有用户选中的结合形状(即,并非毛发/皮毛)。然后,在框2135,先前为毛发所确定的毛发形状被应用以使用户选中的几何形状变形。在图22a和22b可看到对此的一个示例。如图22a所示,所示出的多根毛发2210在表面2212上被呈递。每根毛发2210具有毛囊信息(例如,其在表面2212上的相对位置),以及与其相关联的轴向变形框架(例如,定义毛发的形状)和关于诸如曲线、弯曲、旋转、扭绞等的形状特征(如先前所述)的有关控制信息。但是,利用本发明的实施例,如图22b所示,用户可以决定呈递另一几何对象(例如,花),而非毛发。例如,可以从三个建模的花的集合中随机选择花并通过相应最终毛发的形状来使花变形。如图22b所示,所示出的多个花2220、2222和2224利用相同的毛囊信息和相同的形状信息来替代毛发。应当认识到,花是仅被作为示例而给出的,实际上可以使用任何几何形状来代替毛发形状。因此,利用毛发/皮毛流水线1500可以对新的几何形状进行例示和变形,从而提供呈递任何类型的几何形状的强大且独特的方式。毛发运动合成器系统当在制作背景下处理毛发动画和动态仿真时,经常出现对组合不同运动结果的需要。如果毛发的一部分在一次仿真中是完美的,但毛发的其余部分在另一次仿真中看起来更好,则与合计出适当的设置以使得毛发的全部以希望的方式运动相比,更容易选择每次仿真的那些部分是希望保持的。在下文中将会描述,在一个实施例中,毛发运动合成器提供一种系统和方法,该系统和方法允许用户通过建立节点和操作的网络来组合并修改各种控制毛发动画。例如,在一个实施例中,毛发/皮毛流水线1500的毛发运动合成器模块1557可用于实现毛发运动合成器。例如,在一个实施例中,毛发流水线1500利用表面定义模块1550来定义表面和控制毛发,并且毛发运动合成器模块1557将与控制毛发和表面相关联的不同控制毛发曲线形状组合。具体而言,毛发运动合成器模块1557生成定义静态控制毛发曲线形状的静态节点;生成定义动画控制毛发曲线形状的动画节点;并且将静态节点的静态控制毛发曲线形状与动画节点的动画控制毛发曲线形状组合,以产生用于控制毛发的复合控制毛发曲线形状。节点图基本内容在一个实施例中,毛发运动合成器(HMC)是节点的受指导的非循环图,其中节点可以表示动画或者应用于动画的操作。节点之间的连接表示动画的控制毛发曲线形状的数据流。简单节点为角色或对象创建HMC装置通常假设存在控制毛发的现有静态梳理,用作基础。 HMC装置通常需要两个节点静态节点(包含控制毛发曲线的初始的非动画的形状)和控制节点(表示最终结果——节点图的输出)。表示控制毛发曲线形状的其他节点可被插入到图中。这些其他节点可被称为动画节点。参考图23,图23是示出连接到动画节点2304和完成的控制节点2306的静态节点 2302的简单图。在图23中可见,动画节点2304的输入是来自静态节点2302的静态的经梳理的形状。用户可以通过由动画控制节点2304所提供的控制毛发曲线的动画集合来应用拧动和关键帧,以使静态形状偏移,从而产生控制节点2306的最终的经梳理的毛发结果。混合节点
可以利用混合节点来合成特征。混合节点可被定义为采用两个输入并将其组合在一起以形成单个输出的操作节点。例如,来自每个输入的控制毛发曲线可被旋转地混合在一起(以维护曲线长度)或者在位置上混合在一起(用于线性混合)。另外,可以使用用于混合节点的混合因子参数来控制各个输入应当被使用多少。 例如,值O表示表示完全使用输入节点A,并且值I表示完全使用输入节点B ;其中,对于之间的所有值,混合节点提供对输入节点A和B的控制毛发曲线形状的光滑内插。现在参考图24,图24是示出利用混合节点2403的处理的图。也可以同时参考图 25a和25b,图25a和25b分别示出旋转混合和位置混合。具体而言,图24示出混合节点 2403,混合节点2403对来自静态节点2402和动画节点2404的输入进行混合以获得控制节点2406的复合输入形状。在该示例中,混合节点具有O. 5的混合因子。更具体而言,在图25a中可见,当具有O. 5的混合因子的混合节点2403选择旋转混合时,基于输入的静态控制毛发2520和动画控制毛发2530而获得复合的控制毛发2510。 旋转混合的优点在于其保持了得到的控制毛发的长度。在图25b中可见,当具有O. 5的混合因子的混合节点2403选择位置混合时,基于输入的静态控制毛发2560和动画控制毛发2570而获得复合的控制毛发2555。位置混合的优点在于得到的控制毛发形状比利用旋转混合的更可预测。缺省情况下,混合节点2403可以将同一混合值应用于每条输入控制毛发曲线的所有控制顶点(CV)。针对每个CV的控制,用户可以建立指定在每个CV出使用什么混合因子值的函数曲线。例如,这可用于使得基底CV运动来自第一输入,并且末梢CV运动来自第二输入。通常,即使在使用每个CV的函数曲线时,同一混合因子也被应用于输入的每条控制毛发曲线。为了指定每根毛发的混合值,用户可以利用标识出三维空间中的区域的混合球。 混合球可由分别具有内部和外部混合因子值的两个通信球面构成。如果内部值是O且外部值是I,则内球面内的所有控制毛发曲线将从第一输入获得它们的动画,并且外球面外的所有控制毛发曲线将从第二输入获得它们的值,之间具有光滑内插。在图26中示出了这种类型的混合球2600的示例。实质上,混合球2600用于对混合节点的效果局部化。在图26中可见,混合球2600包括内球面2602和外球面2604。此外,图26示出了在将动画控制毛发2607与输入的静态控制毛发2608混合后混合球2600 的效果(经由内球面2602和外球面2604),并且还示出复合的输出控制毛发2610。动态解算器应当认识到,除了指定典型的仿真设置(严格性、阻尼等等)之外,大量的初始努力都是指定作为输入而馈送到解算器的良好目标形状(例如,用户可能希望控制毛发曲线 “命中”的关键姿势(key posture))。但是最终,多数时间被花费在处理一次或多次仿真的结果上。由于动态求解处理本身经常是耗时的并且在直接用户控制之外,因此将为了获得所希望的结果而需要运行的仿真的数目最小化是重要的。例如,在一个实施例中,MAYA毛发动态解算器可用于毛发仿真。但是,应当注意到, 先前描述的HMC系统是不知道动态解算器的。实质上,解算器看起来是节点图中的单个节
参考图27,图27示出包括动态解算器节点(由解算器节点2706和动态节点2708 表示)的动态装置。初始静态梳理节点2702通过将被用作目标的动画节点2704而连接到解算器2706,但最终结果在动态仿真节点2708的输出和目标之间被混合(通过混合节点 2712)。控制节点2710是复合的输出。缺省情况下,混合被设置为O以100%是动态的。但是,为了快速使得毛发更硬(常见的艺术要求),混合可被逐渐增大以混合回静态目标,而不运行新的仿真。依赖于所使用的设置和场景的复杂性,动态仿真可能花费很长时间,使得它们经常可在RENDERFARM上运行以释放用户的计算机来进行其他工作。为了适应于此,可利用连接到控制节点2710的缓存输出(cache-out)节点2720来每当有节点连接到其时写入到存储设备中。如将要描述的,随后可以利用缓存输入文件来读回缓存输出文件。应当认识到, 缓存输出节点可应用于系统的任何节点。此外,应当认识到,存储设备可以是硬盘驱动器或者任何其他类型的存储设备。体积节点通常,尤其对于计算机图形特征产品而言,由动画部门在某些关键姿势处对代表毛发的代理表面进行建模和关键帧制作,以表示毛发应当在给定的镜头中如何移动。例如,角色的马尾辫可由凸出的管状体积来近似。为了提供该功能,可以利用体积节点,该体积节点在效果上将控制毛发曲线绑定以使得它们跟随一个或多个体积的动画。 体积节点的另一种用途可以是使动态仿真的结果偏移以产生希望的结果。在这种情况下, 使用手动体积(hand-animated volume)是不切实际的,因为手动体积不会自动跟随动态控制毛发。相反,可以使用提供其自己体积的体积节点,其中其自己的体积可被随时内建在将被变形的控制毛发曲线的凸起外壳中。用户然后可以修改体积以使动画偏移。这与修改个体毛发的控制顶点相比简单得多。图28a是示出围绕控制毛发曲线2802的自动生成的圆柱形体积节点2804的图。 图28b是示出在用户已利用体积节点2804编辑了控制毛发曲线之后被偏移的控制毛发曲线2810的图。在图28a和28b中可见,可以通过体积节点2804来容易地修改控制毛发 2802,如经修改的控制毛发曲线2810所示。超级毛发节点超级毛发节点通过利用简化的代理几何形状来对毛发动画进行整形或偏移而提供与体积节点类似的机制。但是,这种情况下的代理几何形状是附接到表面的曲线,与所有其他毛发一样。超级毛发节点可用于控制在用于对静态毛发整形的梳理阶段和在用于改变动画毛发的镜头中控制多根控制毛发。在一个实施例中,超级毛发节点可以具有两种操作模式绝对的和相对的。在绝对模式中,超级毛发节点使用单条控制曲线来指示出控制毛发的精确形状和动画。用户可以利用权重参数来选择仅部分地应用效果,权重参数的值在O和I之间变化。超级毛发节点还具有在世界空间中匹配控制曲线的形状或者在每条控制毛发曲线的局部空间中应用变形的选项。参考图29,图29是示出超级毛发节点处理过程2900的流程图。在框2910,用户选择超级毛发节点。在框2915,用户选择是利用绝对模式还是相对模式。如果绝对模式被选择,则在框2920可以选择权重参数,并在框2925可以选择世界或局部空间。在框2930,
21控制曲线被应用于控制毛发。另一方面,如果在过程2900期间,相对模式被选择,则用户同样选择权重参数(框 2940)并选择世界或局部空间(框2945)。但是在相对模式中,控制曲线和基础曲线都被应用(框2950)于控制毛发。在相对模式中,使用控制曲线和基础曲线两者,并且仅将两者之间的差应用于控制毛发曲线。当修改已经具有一些进入的动画的控制毛发时,通常使用这种方法。应当注意,如果控制曲线和基础曲线完全匹配,则超级毛发节点没有效果。当创建超级毛发节点时,控制曲线和基础曲线缺省地被竖直向上创建。为了使动画毛发偏移,两条曲线可以选择性地采用控制毛发的平均形状。于是从这里开始对控制曲线进行拧动要直观得多。简要参考图30a和30b,分别示出局部空间和世界空间中的超级毛发操作。在图 30a和30b中可见,初始控制曲线形状3000从表面沿着法线竖直延伸,并且得到的控制毛发 3010被整形以匹配控制曲线3020。在绝对和相对这两种模式中超级毛发的效果被均匀地应用于所有被驱动的毛发。 对于局部化的控制,可在控制曲线周围定义影响区域。包括内球面和外球面(如前所述)的混合球可用于定义超级毛发在何处具有效果以及超级毛发具有多少效果,如图31所示。具体而言,图31是示出具有内球面3112和外球面3114两者的混合球3110以及混合球3110对控制曲线3120和控制毛发3130的效果的图。内部和外部权重都与每个相应的球面3112和3114相关联,并且超级毛发3120和控制毛发3130的效果被内插在其间。作为影响区域的实际应用,超级毛发3120可用于伪造冲突,例如通过以下方式而在皮毛一部分上的手摩擦使控制曲线在表面上滑动以跟随手的运动并在其运动时向下挤压毛发。毛发运动合成的示例性用途以下讨论的是毛发运动合成器(HMC)的能力和通用性的一些示例。改善单次仿真结果对于真实动作和计算机图形特征两者,视觉效果产品都趋于严重面向艺术。来自初始毛发镜头回顾的最常用要素之一是使动态仿真与艺术上批准的外观更接近地匹配。这可能需要使仿真更严格以去除额外的或者无规律的运动,或者使其以更好的方式匹配关键帧制作的目标动画。通常,仿真可以产生物理上逼真的结果,但不一定是所希望的外观。与通过设法微调动态参数而依赖于物理上精确的解算器并一再启动新的仿真相比,利用先前参考图24、 25、26、27和31所描述的混合节点功能经常可以更容易地“合成”一些静态或目标动画。如所描述的,混合因子可被设置或变动以保留动态仿真中被发现是视觉上合意的量。多次仿真结果之间的混合如前所述,仿真结果很少“现成(out of the box) ”地提供完美的所希望的外观。 利用变化的输入参数集,一次仿真可能给出良好的起动,但另一仿真可能提供更好的结束外观,并且又一仿真可能在某些关键时刻是更有表现力的。找出能提供所有这三者的组合的统一参数集通常是不可能的。但是,利用如前所述的毛发运动合成器(HMC)的特征,级联图可被容易地建立以在各种仿真缓存之间进行混合,如图32所示。在图32中可见,三个毛发缓存3200、3202和3204各自分别是通过动画节点3210、 3212和3214来处理的。毛发缓存3200和3202还通过混合节点3220而被组合,并且还通过动画节点3222在混合节点3230处与毛发缓存3204进一步混合。然后通过动画节点3240来处理该经混合的输出,并在混合节点3245处将其与静态节点3248混合,并且在控制节点3250处呈递最终的处理输出。应当认识到,混合值可以是经关键帧制作的,以选取每个缓存的最合意的各部分。混合也可用于非动态缓存文件。对于具有短皮毛的角色而言,具有两种静态梳理可能是实际的一种“正常”梳理,一种与朝着表面被紧密下压的毛发相冲突的“冲突”梳理。然后,不是在诸如手或道具逆着皮毛摩擦的镜头中仿真所有与皮毛的相交,而是可以利用跟随冲突对象的混合球来仅仅将毛发与那些区域中的先前冲突的梳理向混合。除了其混合能力之外,毛发运动合成器(HMC)系统可用于纠正特定镜头中的问题。例如,这经常发生在经常引起不好结果的两种情形之一使得静态的经梳理的目标毛发刺入角色皮肤的动画问题,以及诸如错过的冲突之类的小仿真差错。在这些情况下,毛发的一般运动是完全可接受的,并且纠正问题所需的全部都可以通过利用先前讨论的体积偏移节点或超级毛发节点来完成。这比重新运行仿真直到满意为止要快得多。优化技术如先前参考图15所讨论的,本发明的实施例还涉及可由毛发/皮毛流水线1500 的优化模块1567实现的优化技术。具体而言,这里讨论了用于改善毛发/皮毛流水线1500 的可用性和呈递速度的三种特定优化技术。第一种优化技术涉及依赖于画面空间量度对最终毛囊的剔除(cull)的细微控制。这里称为依赖于视图的画面空间优化技术。这里公开的第二种优化方法涉及毛发/皮毛流水线1500的以下能力基于毛发子块来选择性地生成并呈递可见的毛囊。这里称为毛发子块优化技术。此外,由毛发/皮毛流水线1500实现的第三种优化技术涉及毛发缓存以减少呈递时间并改善照明工作的周转时间。这里称为毛发缓存技术。依赖于视图的画面空间优化如所公知的,以最大的毛发密度来呈递完全覆盖有皮毛的生物通常花费很长时间,利用大量计算能力,并且利用大量存储器。尽管可以手工调节毛发密度以基于每个镜头来优化毛发密度,但是乏味且容易出错的处理。根据本发明的一个实施例,由毛发/皮毛流水线1500的优化模块1567实现的依赖于试图的画面空间优化技术可以通过利用在画面空间中测量的连续量度来实现,这些连续量度给出了对毛发参数(例如,呈递时的毛发密度和毛发宽度)的设置的细微控制。此外,可以通过用户定义的函数曲线来定制优化参数的行为。在一个实施例中,表面定义模块1550可用于定义表面,并且优化模块1567可用于判断毛发是否将在表面上被呈递。具体而言,优化模块1567可用于确定毛发的大小量度; 将第一密度曲线应用于为毛发所确定的大小量度,以生成密度倍数值;并且基于密度倍数值,判断毛发是否应当被呈递。优化参数的连续量度和可定制性在该方法中提供了很大灵活性,并且不受与对预定值的离散选择相关联的约束。在本发明的一个实施例中,优化参数(将在下文中讨论)涉及毛发密度和毛发宽度参数。但是,应当认识到,其他类型的与毛发有关的参数也可被优化。在该实施例中,毛发画面空间优化基于画面上的每根个体毛发(画面空间大小量度)和毛发在画面上移动的速度(画面空间速度量度)来确定所呈递的毛发的减少量。两种量度被针对每根毛发而计算,并且然后被传送回用户指定的函数曲线,该函数曲线指定了毛发是否应当被呈递。通过利用定制的函数曲线,在每个镜头的基础上可以定制角色的毛发,并且从而给予了艺术家很大灵活性来确定从角色剔除多少毛发。参考图33,图33是示出用于实现依赖于视图的画面空间优化的技术的图。在图 33中可见,依赖于视图的画面空间优化3300被分成两个阶段。第一阶段是量度生成阶段 3310,并且第二阶段是量度到参数映射阶段3320。具体而言,每个毛囊3308被馈送到量度生成阶段3310中。具体而言,每个毛囊3308被馈送到量度生成阶段3310中,并且另外参考图34, 每根毛发3410的每个毛囊根位置3402在量度生成阶段3310中被变换成规格化设备坐标 (NDC)框架,以生成替代原始毛发的代理毛发3405。更具体而言,在量度生成阶段3310中,每根毛发的NDC根位置3402用于测量不同的量度,这些不同的量度提供另外的信息以决定在呈递时如何控制每根毛发的参数。在该实施例中,在量度生成阶段3310中利用两种不同的量度——大小量度3312 和速度量度3314。但是,应当认识到,也可以利用各种其他不同量度。画面空间大小量度 3312用于计算在NDC空间中代理毛发3405的长度。代理毛发3405是从毛囊根位置3402竖直向上生长的单位长度毛发。因为与最终毛发相比,代理毛发3405更容易进行计算处理, 所以利用代理毛发3405而非原始的最终毛发3410。这是因为尤其在毛发最终被剔除的情况下,与最终毛发相关联的毛发内插和效果操作在计算上是非常密集的。另一原因在于离相机相等距离但高度不同的所有毛发应当被同样对待。通过这样做,保留了具有大的毛发长度变化的外观,但一旦优化被应用,在这种情况下忽略代理毛发可能引起秃点或不同的外观。画面空间速度量度3314计算在NDC空间中毛囊的根部从当前帧到下一帧所移动的距离。简要参考图35,图35是示出在NDC空间中代理毛发3506的根部3502从时间t处的第一帧3510到时间t+Ι处的第二帧3520所移动的距离的图。之所以选择该量度是因为运动严重模糊的对象不需要完全的毛发密度来达到相同的外观。返回来参考图33,在大小量度3312和速度量度3314在量度生成阶段3310中被确定之后,这些值被传送到量度到参数映射阶段3320。针对每个参数,操作者将相应的函数曲线应用于每个量度值。在该示例中,密度曲线3324和3326分别被应用于大小量度3312和速度量度3314(例如,密度与大小和速度的关系),并且宽度曲线3330和3332被分别应用于大小量度3312和速度量度3314(例如,宽度与大小和速度的关系)。各个结果中的每一个然后被相乘以得出最终的参数倍数值。在该示例中,确定可被传送到呈递功能3360上的密度倍数值3340和宽度倍数值3350。应当注意,在密度倍数的情况下,用户定义的函数曲线3324和3326被约束为在范围
中的映射量度值。同样在
之间相应变化的最终结果(密度倍数值3340)然后用于判断最终毛发是否在呈递模块3360处被呈递。在一个示例中,这可以通过生成范围
中的随机数来实现;如果该数低于最终结果,则毛发被绘制。否则,毛发被剔除。对于宽度倍数,用户定义的函数曲线3330和3332被约束为任何非负实数,因此最终结果也是非负实数。该最终结果(宽度倍数3350)然后乘以当前毛发的宽度参数并被传送到呈递模块3360。应当注意,因为当对象(例如,具有毛发的角色)从前台移动到后台时毛发数不再是静态的,所以可能发生弹出(popping)。为了减轻这种行为,已经进行了经验性测试,测试显示,结合这些优化技术使毛囊渐弱可将这种效果最小化。鉴于此,可以强制每个毛囊首先经过可见性确定,并且如果确定是不可见的,则可以通过线性地减小毛发的不透明度值来减小毛发的不透明度。应当认识到,通过利用以上定义的技术,所生成或呈递的毛发数可被减少密度倍数值,并且其余毛发的宽度可被增大宽度倍数值。因此,通过利用速度和大小量度以及四条函数曲线,这些优化技术确定了是否剔除毛发以及将其宽度调整多少。具体而言,将这些技术用于完全覆盖有皮毛的生物可以使得显著节省处理和存储器。这是因为如果生物不是画面上的特写或者在画面上快速移动,则这些技术允许呈递少于最初设计的生物所具有的所有毛发而没有大的视觉差异,但呈递时间和存储器要求被显著改善。参考图36,图36示出了表3600,表3600给出了在各帧处利用画面空间大小量度对毛发数、时间和存储器方面的未经优化的值和毛发数、时间和存储器方面的经优化的值的并排比较。以分和秒列出呈递时间(“时间”),并且以兆字节给出存储器使用率(“存储器”)。在表3600所示的该测试中,由皮毛的角色从帧10处的特写位置移动到帧100处的远离相机处。该示例中所使用的函数曲线是变化迅速的,因为实际毛发数从帧10处原始毛发数的78%变为帧100处的I %。在表3600中可见,呈递时间和存储器使用率都显著改善。应当注意,依赖于视图的画面空间优化技术在以下意义上是灵活的函数曲线可以被容易地调整以微调优化,使得角色在任何距离都看起来良好并且存储器和呈递时间接收尽可能地高。参考图37,图37是示出利用画面空间速度方法的另一比较的表3700(与表3600 类似)。在该示例中,角色非常快速地在画面上闪动(shot move)并且被呈递有运动模糊。 选择了画面空间速度为高的帧。应当注意,角色的毛发量被减少为19%。该技术示出了针对快速移动镜头在呈递时间和存储器方面的动态节省,在表3700中可见。此外,在大小和速度量度两者被彼此结合地利用的情况下执行了测试。具体而言, 参考图38,图38是示出未经优化和经优化的毛发数、时间和存储器值的表3800 (与表3600 和3700类似)。在该示例中,角色被呈递有从远溯的帧101处到十分接近的帧270处的运动模糊。在表3800的值中可见,两种量度彼此很好地工作并节省了呈递时间和存储器,并且还被示出为未牺牲视觉质量。毛发子块优化毛发/皮毛流水线1500的优化模块1567所实现的另一种优化技术涉及毛发子块优化。一般而言,在基于并非所有毛发总是对相机可见的事实来呈递大量毛发的过程中,这种优化是有用的。利用优化模块1567的毛发流水线1500可以通过首先不生成不可见的基元来节省呈递时间,而不是生成所有的毛发并允许显示模块1575在呈递期间执行可见性剔除。具体而言,这些技术的一些方面可由优化模块1567结合显示模块1575来实现。在一个实施例中,表面定义模块1550可用于定义表面,并且优化模块1567可用于为一组毛发创建限制盒;判断限制盒是否可见;并且如果限制盒可见,则与该可见的限制盒相关联的毛发在表面上被呈递。一般而言,可以为待呈递的初始的一组毛发创建限制盒,然后可以在呈递之前测试该限制盒的可见性。如果限制盒是可见的,则将毛发基元在空间上分成四个子群,并且为每个子群创建新的限制盒并再次测试每个子群的可见性。如果限制盒被确定为不可见,则对该毛发群不执行进一步的细分并且不对其进行呈递。在递归地细分所有可见毛发群达预定次数之后,每个群的毛发基元然后被发送到显示模块1575以在该点进行呈递。参考图39,图39是示出用于实现毛发子块优化的处理3900的流程图。在图39中可见,在框3910,为初始的一组毛发创建限制盒。接下来,在框3915,判断用于该初始的一组毛发的限制盒是否可见。如果判断结果为否,则处理3900结束(框3920)。例如,可按近似相等的关系在空间上划分子群。但是,如果限制盒或者限制盒的一部分对于该初始的一组毛发是可见的,则限制盒在空间上被分成子群(框3925)。例如,可按近似相等的关系在空间上划分子群。此外,为每个子群创建限制盒(框3930)。还可以参考图40,图40是示出毛发子块优化的简化示例的图。在图40中可见, 示出了第一帧4002,其中用于初始的一组毛发的限制盒4010位于帧的右侧。可以看到,用于初始的一组毛发的限制盒4010是可见的,以使得其是可见的并且如帧4004所示,限制盒 4010然后在空间上被分成子群或子群限制盒4012。返回到图39的处理3900,在框3935,判断这些子群限制盒是否可见。如果判断结果为否,则在框3940,处理结束。但是如果这些子群限制盒是可见的,则判断是否满足预定数目的细分(框3945)。如果判断结果为否,则子群被进一步划分并且被递归地细分预定次数。假定满足了预定数目,则在框3950,子群限制盒的毛发基元被呈递。具体而言,参考图40,在帧4006处可见,最左边的两个子群限制盒4014被确定为不可见(并且用阴影线标识),而最右边的两个盒是不可见的。因此,与最左边的两个可见子群限制盒4014相关联的毛发被转送,而与最右边的两个不可见子群限制盒相关联的毛发被放弃。应当认识到,这可被递归地实现预定次数。此外,由于先前参考几何例示实施例所讨论的毛发/皮毛流水线1500的灵活性, 环境建模者可以利用毛发子块优化的各方面以将其扩展到其他计算机图形用途,例如呈递大的草地风景。通过逐镜头地利用毛发子块优化实施例的实施例,可能仅需要呈递整个风景的一小部分,从而节省了大量处理和存储器。但是,应当认识到,通过利用先前描述的几何例示实施例,任何用户选中的或者随机生成的几何对象都可以被呈递,代替具有或者没有相关毛发参数(弯曲、旋转、风等)和与毛发相关联的轴向变形参数的毛发。例如,为了定义风景,可以利用如下的单个限制盒来发起处理该单个限制盒围绕定义整个风景的块。然后可以利用更小的限制盒将该块细分成四个不相交的象限,如前所述。对于被剔除的限制盒,不进行进一步处理,但对于继续被处理的限制盒,将进行进一步的细分,直到达到用户定义的停止标准为止。也可以利用另外的停止标准,例如与子块维度的参数长度和参数纹理空间有关的参数限制和细分深度。
利用先前描述的、参考图39和40讨论的应用于风景的毛发子块优化技术,利用两千五百万根毛发对单个大的草地风景进行了建模,其中毛发在几何上被例示为草和/或树。但如图41的帧中所示,利用毛发子块优化技术实际上仅生成和呈递了几百根的草。在没有该优化的情况下,呈递所有的草将会需要大得多的处理量和存储器使用率。毛发缓存优化在照明阶段,照明专家通常对已被动画和布局部门批准的镜头进行工作。通常需要做的是确定灯的数目和布置并创建实现所希望的外观需要的照明条件的类型。具体而言,在照明阶段期间,画面的所有元素已被最终确定,包括所有的毛发参数。因此,可以缓存输出并再次使用毛发几何形状和毛发参数以获得显著的处理和存储器节省。在一个实施例中,优化模块1567结合遮挡和背光模块1570可用于实现这里所描述的根据毛发缓存实施例的技术。为了实现该技术,可以创建和/或确认缓存毛发状态文件,并且可以保存毛发参数的状态(因为这些参数将被呈递)。例如,这些毛发参数可被保存为缓存毛发状态文件中的未排序的毛发参数列表。在一个实施例中,照明模块1570可用于为镜头在照明阶段中产生照明效果,并且优化模块1567可用于判断是否存在包括毛发参数的缓存毛发状态文件;以及判断缓存毛发状态文件是否包括将在镜头中使用的匹配毛发参数,并且如果是这样的话,来自缓存毛发状态文件的毛发参数值被用在照明阶段中。参考图42,示出了包括毛发状态参数4202、4204、4206等的列表的缓存毛发状态文件4200的示例。如果缓存毛发状态文件4200并不存在或者包含不同于当前呈递状态的参数值,则新的一组值可被保存到缓存毛发状态文件4200中(即,作为毛发状态参数4202、 4204、4206等)。然后可以利用该新的或者更新的缓存毛发状态文件4200。但是,如果缓存毛发状态文件4200已经与当前呈递状态相匹配,则原始的缓存毛发状态文件4200可被使用。参考图43,图43是示出用于实现毛发缓存的处理4300的流程图。在框4302,判断是否存在缓存毛发状态文件4200。如果判断结果为否,则创建新的缓存毛发状态文件 4200(框4304)。然后,在框4306,保存新的缓存毛发状态文件4200。但是,如果存在缓存状态文件,则在框4310,判断缓存毛发状态文件4200是否包括将用于呈递的相同参数。如果是这样的话,则处理移动到将被描述的框4320。否则,在框 4306,不同的毛发状态参数被保存到缓存毛发状态文件4200。利用具有相同参数的缓存毛发状态文件或者具有不同参数的缓存毛发状态文件中任一个新的缓存毛发状态文件,处理移动到框4320,在框4320,判断是否存在正确的文件钥匙。在缓存确认、缓存生成和缓存呈递之前,用排他性的文件锁将每个呈递和缓存确认处理锁住。因此,需要存在正确的钥匙以使得缓存毛发状态文件可用于照明阶段中。这是因为在点亮器(lighter)对镜头进行工作时通常多个处理被用来生成最终的呈递帧。如果不存在正确的文件钥匙,则处理在框4340结束,并且缓存毛发状态文件4200 被删除。但是,如果缓存毛发状态文件4200被正确地开锁,则在框4350,缓存文件可用于照明阶段。在一个实施例中,物理的缓存毛发状态文件可被表示为RENDERMAN文件。这是在不丢失普遍性的情况下完成的,因为其仅仅对生成毛发几何形状所需的数据点和参数进行了编码。另外,经压缩的RENDERMAN文件可被用作表示缓存文件的空间节省技术。因此,先前描述的处理4300判断缓存毛发状态文件4200是有效的还是无效的。如果不存在缓存毛发状态文件缓存毛发状态文件或者在缓存文件中所发现的基元与将要呈递的毛发基元不匹配,则缓存毛发状态文件一般被确定为无效。具体而言,为了确定后一种情况,可能要求每个缓存毛发状态文件首先包含生成其所使用的毛发呈递设置。因此,如果呈递设置匹配,则认为缓存毛发状态文件是有效的。另一方面,如果发现缓存毛发状态文件是无效的,则正确的毛发参数被馈送并存储到缓存毛发状态文件,如前所述。通常,在第一次时,缓存是无效的,因此需要被生成(缓存生成和使用)。由于允许一旦另一处理器生成了缓存就立即使用该缓存的连续化(serialization),因此这里可以发现有所节省。这单独将呈递时间削减了 69%。当不同的处理在使用同一缓存文件时,可以实现进一步的节省。应当注意,点亮器通常保持多次再呈递并且实际的时间节省通常被倍增。现在参考图44,图44示出了一个表,其中示出了点亮器通过利用先前描述的技术来呈递完全覆盖有皮毛的角色可以实现的时间节省。在图44中可见,示出了在没有缓存的情况下的呈递时间、用于进行呈递的缓存的生成和使用时间以及利用现有的缓存的呈递时间。可以看到,实现了显著的时间节省。多种可例示的效果参考图45,图45是示出先前描述的包括效果模块1565的毛发/皮毛流水线1500 的一个实施例的框图,其中效果模块1565还包括允许可重新排序的多种可例示的效果的效果流水线4510。在一个实施例中,毛发/皮毛流水线1500的表面定义模块1550可用于定义表面。 内插模块1560可用于基于至少一根控制毛发在表面上内插至少一根最终毛发。此外,效果模块1565可另外包括效果流水线4510,效果流水线4510用于以预定的顺序向最终毛发应用多种效果,以生成可由显示模块1575最终呈递的经修改的最终毛发。如先前详细所述,毛发/皮毛流水线1500基于输入可以首先在表面定义模块1550 处定义表面。此外,如前所述,控制毛发调整模块1555可以定义并调整控制毛发以帮助提供诸如簇集、分裂以及其他先前所述功能之类的功能。毛发运动合成器模块1557可以设在毛发/皮毛流水线1500中,用于编辑和组合不同的毛发动画。如前所述的内插模块1560 可用于基于控制毛发在表面上内插最终毛发。另外,如前所述,效果模块1565可向最终毛发和皮毛提供各种效果,例如簇集、分裂、波浪效果、编织效果、风效果等等。另外,根据本发明的一个实施例,效果模块1565可以包括效果工厂4504和效果流水线4510。如稍后将更详细描述的,使用效果工厂4504和效果流水线4510允许各种先前描述的效果(例如,簇集、分裂、波浪、编织、风等)被以任何顺序应用并且还可以利用不同参数来多次应用同一效果。先前描述的效果中的每一个通常包括与给定效果相关联的参数,以提供将被应用于毛发的效果的某个参数量(例如,毛发簇集到控制毛发的程度、应用于毛发的编织量等)。这样,更逼真的毛发式样可被以高保真度的方式正确地建模。通过利用效果流水线4510,用户通过用户输入可以指定什么类型的效果应当被应
28用于从内插模块1560接收到的最终毛发以及这些效果应当以什么顺序应用。例如,这可以通过利用生成可扩展标记语言(XML)文件或者包括该信息的其他合适类型的文件的用户接口来实现。该XML文件然后可被传送到效果工厂4505上。效果工厂4505然后制造用户所指定的所有效果(例如,簇集、分裂、波浪、编织、 风等),应用针对用户所选择的每种效果而选择的各种参数值,应用用户所选择的效果的排序,并且以用户定义的顺序用用户定义的多个不同效果来填充效果流水线4510。此外,应当认识到,用户可以选择将同一效果应用多次,这多次具有不同参数值。图46是示出根据本发明一实施例的用于实现可重新排序的多种可例示效果的处理4600的流程图,这多种效果可通过效果模块1565来实现。在框4605,用户通过输入来定义将应用于最终毛发的效果的类型。接下来,用户通过用户输入来定义效果被应用于最终毛发的顺序(框4610)。用户可以按用户所希望的任何顺序,来选择多种不同的效果和多种类似的效果(对于每个效果具有相同或不同参数值),以及其组合。具体而言,可以利用先前描述的簇集、分裂、波浪、编织和风效果及其他先前描述的效果,以及本领域技术人员通常知道的其他类型的效果。此外,如前所述,为了完成该操作,可以通过利用用户接口来接受用户输入,该用户接口然后可以生成包括该信息以供处理的XML文件或其他合适类型的文件。基于该信息,效果模块1565的效果工厂4505以用户所选择的顺序来创建用户所指定的这类效果(框4615),并利用所希望的效果来填充效果流水线4510 (框4620)。所希望的效果然后被应用于最终毛发(框4625),使得最终毛发因而被修改,并且经修改的最终毛发被传送到毛发/皮毛流水线1500的优化模块1567 (框4630)、遮挡和阴影模块1570等并最终传送到显示模块1575,在显示模块1575,经修改的最终毛发被呈递(框4640)。应当认识到,在毛发/皮毛流水线中可以利用另外的或者不同的模块。参考图47,示出了根据本发明一实施例的提供可重新排序的多种可例示的效果的示例的框图,这些效果通过毛发/皮毛流水线的效果模块的效果流水线4510而被应用于最终毛发。在图47中可见,来自内插模块的最终毛发4705被转发到效果模块,更具体地,转发到效果模块的效果流水线4510。包括用于效果的参数值和来自用户接口的排序信息在内的用户定义的效果被传送到效果工厂4505上。该信息可被处理并存储为XML文件。效果工厂4505制造用户所指定的所有多种不同类型的效果和排序,并利用效果来填充效果流水线4510。在该示例中,第一效果(例如,波浪)4722与第二效果(例如,簇集)4724以及各种中间效果相结合,并最终与最后的效果(例如,编织)4726相结合。所有这些效果被应用于最终毛发4705以生成经修改的最终毛发4730。应当认识到,先前描述的波浪、簇集和编织效果仅仅是示例性的。因此,利用用户所请求的所有所希望的效果来填充效果流水线4510,并且通过效果流水线4510来处理来自内插模块的所有最终经内插毛发4705以生成经修改的最终毛发 4730。一旦通过效果流水线4510处理了最终毛发,然后就将经修改的最终毛发4730移交给优化模块、遮挡和阴影模块并最终移交给显示模块以供呈递。
例示毛发数据库参考图48,图48是示出根据本发明一实施例的进一步包括例示模块4802和例示毛发数据库4804的毛发/皮毛流水线1500的框图。结合例示毛发数据库4804来使用例示模块4802允许大量的毛发或者对象被例示。在一个实施例中,毛发/皮毛流水线1500的表面定义模块1550可用于定义表面。 例示模块4802用于对毛发进行例示。例示毛发数据库4804耦合到例示模块4802并且用于存储毛发数据。如将要描述的,例示模块4802从例示毛发数据库4804检索毛发数据以允许大量的毛发被有效地例示。显示模块1575(在内插、效果、优化等之后)用于相对于表面来显示所例示的毛发。图形呈递过程中利用的典型计算机仅仅具有有限量的随机存取存储器(RAM)可专用于表示最终毛发以供呈递,使得可被例示以供呈递的来自RAM的毛发数相当有限。但是,通过结合存储毛发信息的例示毛发数据库4804来利用例示模块4802,发现可以容易地满足对巨大毛发数的产生要求以及诸如草地呈递之类的其他应用。通过结合存储毛发信息的例示毛发数据库4804来利用例示模块4802,用于产生包括数百万毛发(及以上)中的毛发数的大量毛发的可缩放性(scalability)是可实现的。例示模块数据库可被存储在一种类型的存储器中,该存储器允许相对大规模的存储,例如硬盘驱动器、磁盘驱动器、网络驱动器、光学驱动器等,或者允许相对大规模的存储的任何其他类型的存储设备。毛发是根据先前描述的毛发/皮毛流水线1500生成的,毛发/皮毛流水线1500包括表面定义1550、控制毛发定义和调整1555等。在该流水线中,例示模块4802耦合到例示毛发数据库4804,并布置在内插模块1560之前。例示模块4802可用于从存储大量毛发数据的例示毛发数据库4804中检索相对大量的毛发数据以供例示。这样,例示模块4802可以有效并高效地生成巨大数目的毛发。通过将例示模块4802和例示毛发数据库4804布置在内插模块1560之前,诸如毛囊位置、控制毛发权重和簇成员关系之类的静态毛发信息可在内插和效果被应用之前被存储在例示毛发数据库4804中。通过这样做,包括标准的存储器内(基于RAM)的实例化在内的不同表示策略可被单独使用,或者结合例示毛发数据库4804来使用。或者,例示毛发数据库4804可被单独使用。实际上,例示模块4802的例示毛发数据库4804可用作对经由例示毛发数据库4804的标准的存储器内(基于RAM)例示的代理。应当认识到,通过利用例示毛发数据库4804,直接处理大量数据集的嵌入式数据库技术可被用于毛发实例化和生成。照此,通过结合例示毛发数据库4804来利用例示模块4802,提供了用于表示最终毛发的高度可缩放技术,使得巨大数目的毛发可被有效且高效地例示。实际上,例示毛发数据库4804非常顺从于用于对大量最终毛发集例示的迭代样式。图49是示出可由例示模块4802在标准RAM存储器(例如,存储器内的例示)或者例示毛发数据库4804中的一者或两者上实现的迭代样式4920的框图。基于迭代样式4920 的存储器内例示4922可用于在不需要大量毛发时对来自存储器(例如RAM)的最终毛发实例化。但是,对于更大的毛发实例化任务(即,要求大的数据集),数据可被存储在例示毛发数据库4804。迭代样式4920可被应用于例示毛发数据库4804以基于例示毛发数据库中的用户输入(例如,所定义的局部区域、密度图、毛发的总体密度等)在表面上对大量毛发(或者其他形状,例如草、杂草、树等)实例化。应当认识到,依赖于任务,可以使用RAM存储器4922,可以使用例示毛发数据库4804,或者可以使用这两者。如将要描述的,基于迭代样式,可从例示毛发数据库4804中容易地搜索和收集包括毛发位置、控制毛发权重和簇成员关系在内的毛发属性。这允许高的定制程度。例如,针对某个区域内的所有毛发或者针对所有簇集中心毛发等来询问例示毛发数据库4804是容易的。参考图50,图50是根据本发明一实施例的可存储在例示毛发数据库4804中的信息类型的示例。在一种实现方式中,例示毛发数据库4804可以包括毛发I N的数据。对于每根毛发I N(由行表示),以下信息可按列形式包括在数据库中囊位置5010、可变数目的控制毛发权重参数I N(5020、5022)以及给定毛发的簇成员关系5030。关于簇成员关系值5030,这可以是簇成员毛发的簇中心毛发的行索引、非簇成员毛发的空值或者簇中心毛发的负值。利用包括先前描述的为最终毛发存储的数据类型的先前描述的例示毛发数据库 4804,例示毛发数据库4804允许巨大数目的毛发被有效且高效地例示。此外,例示毛发数据库4804非常顺从于用于基于输入标准来收缩和例示大的最终集的迭代样式。使用例示毛发数据库允许大量的毛发以利用标准的存储器内的基于RAM的例示所不可能有的方式被有效地处理和例示。此后,通过内插模块1560、效果模块1565等可以应用动态效果,并且可以在毛发 /皮毛流水线1500的显示模块1575处最终显示毛发(或者如前所述的其他形状——例如草、杂草、树等)。在本说明书中,给出了许多具体细节。但是,应当理解,本发明的实施例可在没有这些具体细节的情况下实施。在其他实例中,公知的电路、结构、软件处理和技术未被示出, 以免模糊对本说明书的理解。本发明的各种实施例的部件可用硬件、软件、固件、微码或者其组合来实现。当用软件、固件或者微码实现时,本发明的实施例的元件是用于执行必要任务的代码或者代码段。代码段可以表示过程、功能、子程序、程序、例程、子例程、模块、软件包、类或者指令、数据结构或程序语句的任何组合。代码段可通过传送和/或接收信息、数据、自变量、参数或者存储器内容而耦合到另一代码段或者硬件电路。信息、自变量、参数、数据等可经由任何适当的手段而被传送、转发或者发送,这些手段包括存储器共享、消息传送、令牌传送、网络传输等。程序或代码段可被存储在处理器可读的介质中,或者通过传输介质由体现为载波的计算机数据信号或者由载波所调制的信号而发送。“处理器可读或可访问的介质”或者“机器可读或可访问的介质”可以包括任何能够存储、传输或者转移信息的介质。机器可访问的介质的示例包括电子电路、半导体存储器设备、只读存储器(ROM)、闪存、可擦除 ROM(EROM)、软盘、紧致盘(CD-ROM)、光盘、硬盘、光纤介质、射频(RF)链路等等。计算机数据信号可以包括任何可以在诸如电子网络信道、光纤、空气、电磁、RF链路等的传输介质上传播的信号。代码段可被经由诸如因特网、内联网等的计算机网络而下载。机器可访问的介质可被体现为制造物品。机器可访问的介质可以包括数据,这些数据在被机器访问时,使机器执行以下描述的操作。这里的术语“数据”指的是为了机器可读目的而被编码的任何类型信息。因此,其可以包括程序、代码、数据、文件等。更具体而言,本发明的实施例的全部或者一部分可通过软件实现。软件可以具有彼此耦合的若干模块。一个软件模块耦合到另一个模块以接收变量、参数、自变量、指针等, 和/或生成或传送结果、更新的变量、指针等。软件模块也可以是与运行在平台上的操作系统交互的软件驱动器或者接口。软件模块也可以是用于配置、设置、初始化、发送和接收去往和来自硬件设备的数据的硬件驱动器。尽管按照若干实施例描述了本发明,但是本领域技术人员将会认识到,本发明不限于所描述的实施例,而是可以在所附权利要求的精神和范围内,在进行修改和变更的情况下来实施。因此,这种描述被认为是说明性而非限制性的。
权利要求
1.一种用于生成毛发的毛发流水线,包括表面定义模块,用于定义表面;以及优化模块,用于判断是否将在所述表面上呈递毛发,所述优化模块用于为所述毛发确定大小量度;将第一密度曲线应用于为所述毛发确定的大小量度以生成密度倍数值;以及基于所述密度倍数值,判断是否呈递所述毛发。
2.如权利要求I所述的毛发流水线,其中,所述密度倍数值被进一步与随机数相比较以判断是否呈递所述毛发。
3.如权利要求I所述的毛发流水线,其中,为所述毛发确定大小量度的步骤包括计算所述毛发在规格化设备坐标(NDC)空间中的长度。
4.如权利要求I所述的毛发流水线,其中,第一宽度曲线被应用于所述毛发的大小量度以调整所述毛发的宽度。
5.如权利要求I所述的毛发流水线,其中,所述优化模块还基于所述毛发的毛发根位置从第一帧到第二帧所移动的距离来确定速度空间量度。
6.如权利要求5所述的毛发流水线,其中,第二密度曲线被应用于所述毛发的速度空间量度以生成所述密度倍数值。
7.如权利要求6所述的毛发流水线,其中,第一宽度曲线被应用于所述毛发的大小量度并且第二宽度曲线被应用于所述毛发的速度空间量度,以生成宽度倍数值来调整所述毛发的宽度。
8.一种用于判断毛发是否将被呈递的方法,包括为毛发确定大小量度;将第一密度曲线应用于为所述毛发确定的大小量度以生成密度倍数值;以及基于所述密度倍数值来判断是否呈递所述毛发。
9.如权利要求8所述的方法,还包括将所述密度倍数值与随机数相比较以判断是否呈递所述毛发。
10.如权利要求8所述的方法,其中,为所述毛发确定大小量度的步骤包括计算所述毛发在规格化设备坐标(NDC)空间中的长度。
11.如权利要求8所述的方法,还包括将第一宽度曲线应用于所述毛发的大小量度以调整所述毛发的宽度。
12.如权利要求8所述的方法,还包括基于所述毛发的毛发根位置从第一帧到第二帧所移动的距离来确定速度空间量度。
13.如权利要求12所述的方法,还包括将第二密度曲线应用于所述毛发的速度空间量度以生成所述密度倍数值。
14.如权利要求13所述的方法,还包括将第一宽度曲线应用于所述毛发的大小量度并且将第二宽度曲线应用于所述毛发的速度空间量度,以生成用于调整所述毛发的宽度的宽度倍数值。
全文摘要
本申请涉及毛发运动合成器系统和用于毛发/皮毛流水线的优化技术。毛发流水线利用表面定义模块(50)来定义表面和控制毛发,并且毛发运动合成器模块(55)组合与控制毛发和表面相关联的不同控制毛发曲线形状。具体而言,毛发运动合成器模块生成定义静态控制毛发曲线形状的静态节点;生成定义动画控制毛发曲线形状的动画节点;并且将静态节点的静态控制毛发曲线形状与动画节点的动画控制毛发曲线毛发形状组合,以产生用于控制毛发的复合控制毛发曲线形状。
文档编号G06T13/40GK102592303SQ201110406240
公开日2012年7月18日 申请日期2007年7月24日 优先权日2006年7月24日
发明者克林特·川, 弗兰克斯·查德外恩, 格斯塔弗·梅里彻, 阿明·沃尔特·布朗德林 申请人:索尼株式会社, 索尼电影娱乐公司
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1