專利名稱:毛發(fā)運動合成器系統(tǒng)和用于毛發(fā)/皮毛流水線的優(yōu)化技術的制作方法
技術領域:
本發(fā)明涉及皮毛的數(shù)字創(chuàng)建。更具體地,本發(fā)明涉及動物模型上的皮毛覆蓋層 (fur coat)的逼真特寫和遠處外觀的數(shù)字創(chuàng)建。
背景技術:
在計算機圖形中對可信的哺乳動物進行建模、動畫制作(animate)和呈遞 (render)的許多挑戰(zhàn)之一是制作看起來逼真的皮毛。真實的皮毛覆蓋層由覆蓋皮膚的數(shù) 十萬個體的圓柱毛發(fā)構成,并且執(zhí)行諸如對抗寒冷和捕食者的保護之類的生活機能。在動 物之間或者在個體動物的身體上,這些毛發(fā)的外觀和結構在長度、厚度、形狀、色彩、定向和 底層/表層構成方面十分不同。另外,皮毛不是靜態(tài)的,而是作為下層皮膚和肌肉的運動結 果以及由于諸如風和水之類的外部影響而運動或分裂。一些用于皮毛創(chuàng)建的現(xiàn)有計算機圖形技術已經(jīng)實現(xiàn)了令人信服的光滑皮毛的外 觀;但是,這些技術并未考慮真實皮毛經(jīng)常在身體的某些區(qū)域(例如頸部周圍)分裂。另 外,現(xiàn)有的方法并未考慮濕皮毛的毛發(fā)簇集在一起從而引起與干燥皮毛相比顯著不同的樣 子的情況。此外,在毛發(fā)因被噴灑水而變得越來越濕時對毛發(fā)的仿真處理仍未被解決。
發(fā)明內(nèi)容
本發(fā)明的系統(tǒng)和方法提供了用于對諸如動物之類的表面幾何模型上的逼真皮毛 覆蓋層進行數(shù)字表示和生成的靈活技術。在一個實施例中,提供了一種對表面上的皮毛進 行布置、調(diào)整和梳理的創(chuàng)新技術。在一個實施例中,表面塊(surface patch)邊界上的皮毛 的連續(xù)性被維護。另外,在一個實施例中,提供了一種用于仿真濕皮毛的創(chuàng)新方法。在該方 法中,靜態(tài)簇集和動畫簇集(animated clumping)可被應用于表面上的區(qū)域。在一個實施 例中,提供了一種用于對表面上沿著皮毛軌跡的毛發(fā)進行對稱或單側分裂的方法。以上處 理可被迭代地應用,以生成皮毛的各層,例如底層和表層。
本發(fā)明的目的、特征和優(yōu)點將從以下詳細描述中變得清楚,其中圖Ia和Ib是根據(jù)本發(fā)明的教導而運行的系統(tǒng)的實施例的簡化框圖。圖2是根據(jù)本發(fā)明的教導的皮毛生成處理的一個實施例的流程圖。圖3a是對定義三維動物模型的皮膚的一組參數(shù)表面的圖示。圖北是示出靜態(tài)和動畫梳理處理的一個實施例的簡化流程圖。圖3c和3d是示出梳理處理的一個實施例的示例。圖4是示出用于調(diào)整控制毛發(fā)以在表面邊界處去除視覺不連續(xù)性的處理的一個實施例的流程圖。圖5是示出用于布置毛發(fā)的處理的一個實施例的流程圖。圖6示出在表面上所定義的子塊的一個示例。圖7a示出一根控制毛發(fā)的控制頂點的示例。圖7b示出用于計算控制毛發(fā)重量的示例。圖7c示出根據(jù)本發(fā)明一實施例的教導的用于計算最終毛發(fā)的定向的內(nèi)插處理的 示例。圖7d是計算最終毛發(fā)的定向的一個實施例的簡化流程圖。圖8是示出用于執(zhí)行靜態(tài)簇集的處理的一個實施例的流程圖。圖9示出不同的簇集百分比和簇集率值的示例。圖IOa示出經(jīng)梳理的皮毛覆蓋層的呈遞幀,且圖IObUOc和IOd示出動畫的從干 到濕的皮毛序列的一個實施例的快照。圖11是示出用于動畫的區(qū)域簇集的處理的一個實施例的流程圖。圖12a是示出用于毛發(fā)分裂的處理的一個實施例的流程圖。圖12b示出毛發(fā)的對稱和單側分裂的示例。圖12c、12d、12e和12f示出分裂效果的示例。圖13a、13b和13c示出底層和表層的視覺效果。圖14是示出遮擋(shading)處理的一個實施例的流程圖。圖15是與圖Ib的流水線類似但包括另外的不同功能的毛發(fā)/皮毛流水線的一個 實施例的框圖。圖16a和16b是示出沿著控制毛發(fā)利用可能的變化對控制毛發(fā)進行簇集的圖。圖17是示出根據(jù)本發(fā)明一實施例的用于實現(xiàn)填充體積功能的處理1700的流程 圖。圖18a 18c是示出定義表面和相關體積的辮子形狀的生成(圖18a)、利用隨 機布置的控制毛發(fā)對這些體積的填充(圖18b)以及從控制毛發(fā)對最終毛發(fā)股的內(nèi)插(圖 18c)的圖。圖19a 19c是示出具有相同的控制毛發(fā)的變形表面的側視圖的圖,這些側視圖 分別示出不同類型的內(nèi)插技術。圖20a 20c是示出波浪、編織和風效果的圖。圖21是示出根據(jù)本發(fā)明一實施例的用于實現(xiàn)幾何例示(geometricinstancing) 的處理的流程圖。圖2 和22b是示出幾何例示的一個示例的圖。圖23是示出根據(jù)本發(fā)明一實施例的將靜態(tài)節(jié)點連接到動畫節(jié)點和完成的控制節(jié) 點以提供毛發(fā)運動合成器系統(tǒng)的簡單圖的圖。圖M是示出利用混合節(jié)點的處理的圖。圖2 和2 是分別示出旋轉混合和位置混合的圖。圖沈是示出混合球的圖。圖27示出包括動態(tài)解算器節(jié)點(solver node)的動態(tài)節(jié)點圖。
圖^a和^b是示出對體積節(jié)點的使用的圖。
圖四是示出超級毛發(fā)節(jié)點處理過程的流程圖。圖30a和30b是分別示出局部空間和世界空間中的超級毛發(fā)操作的圖。圖31是示出具有內(nèi)球面和外球面兩者的混合球的圖。圖32是示出用于在各種仿真緩存之間進行混合的級聯(lián)節(jié)點圖的圖。圖33是示出用于實現(xiàn)依賴于視圖的畫面空間優(yōu)化的技術的圖。圖34是示出毛囊根位置和被變換至規(guī)格化設備坐標(NDC)系統(tǒng)的毛發(fā)的圖。圖35是示出在NDC空間中代理毛發(fā)從第一幀到第二幀所移動的距離的圖。圖36是示出利用畫面空間大小量度在毛發(fā)數(shù)、時間和存儲器方面對未經(jīng)優(yōu)化的 值和經(jīng)優(yōu)化的值的并排比較的表。圖37是示出利用畫面空間速度方法的另一比較的表。圖38是示出未經(jīng)優(yōu)化和經(jīng)優(yōu)化的毛發(fā)數(shù)、時間和存儲器值的表。圖39是示出用于實現(xiàn)毛發(fā)子塊優(yōu)化的處理的流程圖。圖40是示出對毛發(fā)子塊優(yōu)化的使用的簡化示例的圖。圖41是示出被建模(其中,利用草和/或樹對毛發(fā)進行了幾何例示)并且利用子 塊優(yōu)化技術的草地風景的圖。圖42是示出緩存狀態(tài)文件的示例的圖。圖43是示出用于實現(xiàn)毛發(fā)緩存的處理的流程圖。圖44是示出利用毛發(fā)緩存來呈遞完全覆蓋皮毛的角色所實現(xiàn)的時間節(jié)省的表。圖45是示出根據(jù)本發(fā)明一實施例的包括效果模塊的先前描述的毛發(fā)/皮毛流水 線的一個實施例的框圖,其中該效果模塊還包括允許可重新排序的多種可例示的效果的效 果流水線。圖46是示出根據(jù)本發(fā)明一實施例的用于實現(xiàn)可重新排序的多種可例示的效果的 處理的流程圖,這多種效果可通過效果模塊來實現(xiàn)。圖47是根據(jù)本發(fā)明一實施例的提供可重新排序的多種可例示的效果的示例的框 圖,這些效果通過毛發(fā)/皮毛流水線的效果模塊的效果流水線而被應用于最終毛發(fā)。圖48是示出根據(jù)本發(fā)明一實施例的進一步包括例示模塊和例示毛發(fā)數(shù)據(jù)庫的毛 發(fā)/皮毛流水線的框圖。圖49是示出根據(jù)本發(fā)明一實施例的可由例示模塊在標準RAM存儲器(例如, 存儲器內(nèi)的例示)或者例示毛發(fā)數(shù)據(jù)庫中的一者或兩者上實現(xiàn)的迭代樣式(iterator pattern)的框圖。圖50是根據(jù)本發(fā)明一實施例的可存儲在例示毛發(fā)數(shù)據(jù)庫中的信息類型的示例。
具體實施例方式方法和裝置提供了用于在諸如計算機生成的動物上的表面上對皮毛的數(shù)字生成 的創(chuàng)新技術。圖Ia是根據(jù)本發(fā)明的教導而運行的一個實施例的簡化框圖。計算機系統(tǒng)10 包括中央處理單元(CPU) 15、存儲器25和輸入/輸出20,它們可耦合到諸如盤驅動器或其 他設備之類的存儲設備。該系統(tǒng)還可以包括鍵盤40或其他用戶輸入設備以及顯示器35,顯 示器35可用于顯示用戶界面以及根據(jù)本發(fā)明的教導對皮毛的最終呈遞。在一個實施例中,存儲器25存儲指令,這些指令在被CPU 15執(zhí)行時執(zhí)行這里所描述的處理?;蛘撸梢越?jīng)由存儲裝置30或者諸如用戶輸入40之類的其他輸入端來接收指 令。這里所描述的處理可由諸如系統(tǒng)10之類的系統(tǒng)經(jīng)由軟件來執(zhí)行,或者經(jīng)由硬件或硬件 和軟件兩者的組合來執(zhí)行。在圖Ib中示出一替代實施例。輸入被定義一表面的表面定義模塊50所接收,以 下將會說明,該表面定義待呈遞的對象的表面和控制毛發(fā)。模塊55調(diào)整控制毛發(fā)以提供諸 如梳理和表面邊界上的無縫毛發(fā)之類的功能。內(nèi)插模塊60利用控制毛發(fā)在表面上進行內(nèi) 插。毛發(fā)簇集和分裂模塊65通過提供毛發(fā)的簇集和分裂來增強對象的逼真視覺化。呈遞 模塊70呈遞毛發(fā)并向毛發(fā)提供遮擋、背光和陰影效果,并且模塊75顯示具有毛發(fā)表面的對 象的最終輸出。圖2是根據(jù)本發(fā)明的教導在生成皮毛覆蓋層的過程中所涉及的步驟的流程圖。在 步驟200,定義包含毛發(fā)的表面的幾何形狀。在一個實施例中,可以使用三維幾何形狀對皮 膚(例如,動物皮膚)進行建模,隨后在該皮膚上生成皮毛覆蓋層。如圖3a所示,幾何形狀 通常被定義為一組相連的參數(shù)表面,經(jīng)常稱為表面塊??捎帽绢I域技術人員已知的許多方 式來生成這些塊。在一個實施例中,使用NURBS表面塊。返回來參考圖2,在步驟210,控制毛發(fā)被布置到這些表面塊上,從而每根控制毛 發(fā)被建模為由用戶指定數(shù)目的控制頂點所定義的參數(shù)曲線,例如NURBS曲線。以下將會討 論到,由用戶給出毛發(fā)的全局密度值以確定實際毛發(fā)的數(shù)目以及它們在表面塊上的位置。 每根毛發(fā)還具有許多屬性,例如長度、寬度、波紋度、不透明度,并且缺省地指向其在表面上 的位置處的表面法線方向。在本實施例中,對控制毛發(fā)執(zhí)行許多操作,并基于控制毛發(fā)和其他信息來生成最 終毛發(fā)。但是,應當認識到,可以對最終毛發(fā)而非控制毛發(fā)來執(zhí)行諸如這里所描述的梳理等 的這些步驟。可以采用許多不同的方法來生成控制毛發(fā)。一種簡單的算法在每個NURBS塊上的 U方向上布置將相等間隔的X根毛發(fā)并在V方向上布置y根毛發(fā)(其中X和y由用戶指定)。 或者,利用弧長(arc-length)來相等地布置這χ和y根毛發(fā)。這將引起塊上的更均勻分布。 但是,其并未實現(xiàn)控制毛發(fā)不同大小的塊上的均衡分布;χ和y根毛發(fā)被布置在所有選中的 塊上,而不管其大小。因此,在一替代實施例中,對控制毛發(fā)的生成考慮了 NURBS塊的面積 以確定每個塊的χ和y。在一個實施例中,用戶指定每單位面積ζ根毛發(fā)。另外在一個實施 例中,可以在表面上個體地或者沿著曲線來布置控制毛發(fā)以進行更細微的控制。例如,可以 生成沿著動物耳朵的清晰邊緣的額外控制毛發(fā),以確保最終生成的皮毛的正確排列。返回來參考圖2,一旦生成了控制毛發(fā),則在步驟210,在表面邊界處調(diào)整控制毛 發(fā)。由于控制毛發(fā)被布置在每個表面塊中,因此位于表面塊的邊界上的控制毛發(fā)可能未與 相鄰表面塊上的控制毛發(fā)對準;這可能引起沿著表面邊界的毛發(fā)的可視不連續(xù)性。為了解 決該潛在問題,表面邊界上的控制毛發(fā)被調(diào)整。通過圖4的流程圖示出了用于調(diào)整控制毛 發(fā)的處理的一個實施例。在步驟400,在相鄰塊之間構建縫。每條縫標識沿著表面塊的相應邊界(例如,整 個邊緣、T結或者拐角)的相鄰表面。在步驟405,針對每個表面塊,邊界被遍歷,步驟410。 在步驟412,每根控制毛發(fā)被檢查。在步驟415,如果發(fā)現(xiàn)邊界毛發(fā),則在步驟420,由相應縫 所標識的相鄰塊被檢查以查看相鄰塊上是否存在相應毛發(fā)。在一個實施例中,如果毛發(fā)在離邊界毛發(fā)的小的預定距離內(nèi),則該毛發(fā)是相應的。該距離可用參數(shù)U、ν或者絕對空間來 指定。在一個實施例中,預定距離可以是相對小的距離以使得毛發(fā)視覺上看起來在同一位置。如果存在相應的控制毛發(fā),則在步驟425,通過將控制毛發(fā)中的一者或兩者的位置 和定向分別修改為公共位置和定向,來將邊界毛發(fā)和相應毛發(fā)對準。在一個實施例中,相鄰 表面塊的相應毛發(fā)被對齊到沿著邊界的邊界毛發(fā)的位置。在一個實施例中,如果相鄰表面 塊沒有相應毛發(fā),則在步驟445,在相鄰塊上插入一根毛發(fā)并將其對準。該處理針對沿著每 個表面塊中的每個邊界的每根邊界毛發(fā)而繼續(xù)步驟430、435和440,直到所有的編解碼發(fā) 都被對準為止。返回來參考圖2,在步驟215之后,在一個實施例中,控制毛發(fā)已被布置在定義動 物或其他對象模型的表面上,并且控制毛發(fā)的指向沿著其在表面位置上的位置處的表面法 線。在步驟220,毛發(fā)被梳理以獲得希望的、經(jīng)修整的干燥皮毛外觀??梢允褂迷S多不 同的梳理處理。但是,在本實施例中,靜態(tài)和動畫梳理處理被應用于控制毛發(fā)。靜態(tài)和動畫 梳理的組合提供了低計算成本和有效的視覺效果。在替代實施例中,靜態(tài)或動畫梳理可被 單獨使用,并產(chǎn)生有益的視覺結果??梢葬槍Σ煌溺R頭(shot)對相同的控制毛發(fā)使用梳 理處理,以例如提供皮毛的經(jīng)修整的外觀和稍微有些凌亂的外觀。將參考圖北來描述一個實施例。在一個實施例中,如果毛發(fā)在對象(例如動物) 的動畫制作期間未“主動地”運動,則應用靜態(tài)梳理。應當注意,由于每根毛發(fā)是由表面法 線、在毛發(fā)根部處的du和dv所定義的局部坐標系中表示的,因此經(jīng)靜態(tài)梳理的毛發(fā)將在下 層表面被變形或動畫制作時“被動地”運動。梳理是通過梳理方向曲線、彎曲程度和毛發(fā)曲 率的規(guī)范來實現(xiàn)的,并且每條梳理方向曲線都具有降落(fall-off)。在步驟325,創(chuàng)建一條或多條梳理方向曲線。這些曲線指示出方向適用的控制毛發(fā) 將被梳理。由圖3c和3d示出一個示例。圖3c示出了許多未經(jīng)梳理的控制毛發(fā)。圖3d示 出了示例性的梳理方向曲線365及其方向。經(jīng)梳理的毛發(fā)也在圖3d中示出。圖3d示出了一條梳理方向曲線。但是,實現(xiàn)多條不同的曲線也是常見的,每條曲 線對應于表面的不同區(qū)域。因此,在步驟330,針對每條曲線,分配一根或多根控制毛發(fā),以 使得所分布的毛發(fā)根據(jù)相應的梳理方向曲線而被梳理。另外,在步驟335,針對每條曲線,定義彎曲、曲率和沉降(fallout)參數(shù)。彎曲參 數(shù)定義控制毛發(fā)與表面有多接近。曲率參數(shù)指示出毛發(fā)的形狀。例如,零曲率值可以指示 出毛發(fā)是豎直向上的,并且最大值(例如,1)可以指示出毛發(fā)從根部到末梢在緊繃的弧上 彎曲的。沉降值指示出一區(qū)域,在該區(qū)域之外,控制毛發(fā)離梳理方向曲線越遠,該曲線就越 降低其影響。在一些實施例中,沉降區(qū)域被指定為覆蓋相對大的面積,以使得所有控制毛發(fā) 受到相等影響并且不發(fā)生沉降。在其他實施例中,希望在控制毛發(fā)和梳理方向曲線之間的 距離越遠,就越降低梳理效果。在步驟340,根據(jù)每根控制毛發(fā)被分配給的梳理方向曲線以及彎曲、曲率和沉降參 數(shù)對每根控制毛發(fā)進行處理。處理結果在圖3d中示出,其中在梳理方向曲線365的方向上 梳理了毛發(fā)。另外,根據(jù)所定義的彎曲和曲率參數(shù)對毛發(fā)進行彎曲。在本示例中,沉降參數(shù)定義整個表面以使得所有的毛發(fā)受到相等的影響并且不出現(xiàn)沉降。如上所述,也可以應用動畫梳理(步驟345)。使用本領域中已知的關鍵幀制作 (key framing)在某些幀處所指定的處理改變之間進行內(nèi)插,以提供改變之間的光滑轉變。 因此,例如,彎曲、曲率和沉降參數(shù)可被指定為在某些幀處改變。然后在幀期間,關鍵幀制作 處理的執(zhí)行在指定的幀改變之間轉變。該技術可用于仿真影響毛發(fā)外觀的各種條件,例如 風。因此,通過在回放期間的每個幀處對參數(shù)進行關鍵幀制作并執(zhí)行梳理計算,毛發(fā)可被制 成動畫。梳理處理還可以包括簡單的毛發(fā)/表面沖突模型處理,其中由于梳理處理而與下 層表面相交的毛發(fā)被推回表面之上。例如由于將彎曲參數(shù)設置為大的值,毛發(fā)被旋轉為與 下層表面相交。該處理包括確定毛發(fā)/表面相交的迭代算法。例如,該處理執(zhí)行定義控制毛發(fā)的 曲線(例如,NURBS曲線)的連續(xù)控制頂點與表面的線段交叉檢查。如果控制頂點c到了 表面之下,則毛發(fā)被朝著來自前一非交叉頂點的表面法線向回旋轉,使得c剛好足以離開 表面。旋轉量足夠大以使得毛發(fā)旋轉回表面之上達本申請所指定的小量。因此,受梳理影 響的向量的頂點被朝著表面法線旋轉,以使得向量在表面之上。在一替代實施例中,通過使控制毛發(fā)的每個控制頂點成為粒子并應用類似于重力 或外力的動態(tài)效果,梳理可被制成動畫。諸如從加拿大多倫多市的Silicon Graphics, Inc. 的分部Alias I Wavefront可得的Maya之類的軟件可用于執(zhí)行該功能。一旦控制毛發(fā)被標識和處理(例如,調(diào)整、梳理),就從控制毛發(fā)生成每個塊的最 終毛發(fā)(圖2的步驟22 。如上所述,在一個實施例中,首先沿著表面邊界來調(diào)整控制毛 發(fā)。在一替代實施例中,可以單獨應用梳理或者可以結合表面邊界調(diào)整處理的應用來應用 梳理以控制毛發(fā)。通過圖5的流程圖示出了用于將毛發(fā)布置在塊上的一種示例性處理。在該實施例 中,在兩組步驟中從控制毛發(fā)生成最終毛發(fā)。首先,計算靜態(tài)毛發(fā)特征,例如最終毛發(fā)的布 置(u、v位置)。該步驟可被執(zhí)行一次。第二組步驟可被針對動畫中的每個幀來執(zhí)行,并且 提供依賴于幀的毛發(fā)特征。在步驟505,在將在其上生成毛發(fā)的對象的表面上標識子塊。圖6示出了用于將 最終毛發(fā)布置在定義下層皮膚的表面上的一個實施例。在本實施例中,按照表面的(U,ν) 參數(shù)值來確定每根最終毛發(fā)的根位置。這些值是從總的(對所有表面是全局的)密度輸入 值dmax (每平方單位面積的毛發(fā)數(shù))和一組規(guī)格化的每個表面塊的局部密度值(從0到1 的值范圍;缺省值可以是1)來計算的,它們被以相等間隔的可變分辨率柵格布置在表面上 (例如,U8X128個點)。在一個實施例中,該處理使毛發(fā)數(shù)獨立于該柵格的分辨率并獨立于表面塊大小 以在不同規(guī)模的表面上提供無縫的密度。為了討論,假定所指定的輸入密度值(dmax)是 10根毛發(fā)/單位平方面積,并且如圖6所示,在表面上以相等間隔的點來布置局部密度值 (例如,分別是0.4、0.5、0.6、0.6根毛發(fā))。這些點定義待處理的表面的子塊(圖5的步驟 505)。當這些相等間隔的點被遍歷(步驟510)時,相鄰點之間的(u,ν)空間面積可通過由 兩個多邊形(更具體地,三角形(al和a2))定義的面積來近似,并且每個三角形毛發(fā)單元 的每平方單位面積的毛發(fā)數(shù)被從其頂點處的值平均出(步驟520)。在一個實施例中,這是根據(jù)下式確定的=HairUnit (每平方單位面積的毛發(fā)數(shù))=dmaxXVavg,其中dmax表示指 定的輸入密度值,且Vavg表示從其頂點處的值所確定的每個三角形的平均局部密度值。對 于所定義的示例,這使得分別對于左上和右下的三角形可得IOX (0. 4+0. 5+0. 6)/3 = 5和 IOX (0. 4+0. 6+0. 6)/3 = 5. 333根毛發(fā)/平方單位面積。在步驟525,從子塊(&1和&)的實際近似面積和每單位面積的毛發(fā)數(shù)來確定 布置在當前子塊上的毛發(fā)總數(shù)。在一個實施例中,每單位面積的毛發(fā)總數(shù)是根據(jù)下式確 定的=HairTotal (每單位面積的毛發(fā)總數(shù))=AXHairUnit,其中A表示子塊的實際近 似面積。例如,如果值0. 4用于面積al并且0. 3用于面積a2(為了討論而假定的),則 0. 4X5+0. 3X5. 333 = 3. 5999 是布置在由(ui, vi)、(ui, vi+1)、(ui+1, v+1)和(ui+1, vi) 所定義的子塊中的毛發(fā)總數(shù)。在步驟530,布置最終毛發(fā)。由于優(yōu)選的是不布置小數(shù)的毛發(fā),因此根據(jù)均勻生成 的在
中的隨機數(shù)是大于或小于小數(shù)部分(0. 5999),布置3或4根毛發(fā)。這3或4根 毛發(fā)被隨機布置在u[ui,ui+l]中并隨機布置在v[vi,vi+l]中。該處理然后返回來進行步 驟510,對由接下來的四個相等間隔的點所定義的子塊進行處理。每根最終毛發(fā)包含多個控制頂點。每根控制毛發(fā)的根位置(第一控制頂點)是按 照下層表面的(u,v)值來指定的。每根毛發(fā)的其余控制頂點是在原點被指定在毛發(fā)根位置 處并且軸在表面法線、du和dv方向上的已知局部坐標系中定義的。在一個實施例中,每根 毛發(fā)是沿著表面法線而定向的,并且控制頂點的坐標是通過將每根毛發(fā)的長度細分成n-1 個相等部分而生成的,其中η是每根毛發(fā)的控制頂點的數(shù)目。在圖7a中示出一個示例,其 中利用η = 4在表面730上定義毛發(fā)725。根是頂點720并且其余頂點是705、710和715。一旦根位置被計算出,圍住每根最終毛發(fā)的控制毛發(fā)(在一個實施例中為三根) 就被確定。在一個實施例中,二維的Delaimay三角測量(本領域已知,因此這里不對其進 行進一步討論)由每個表面塊的控制毛發(fā)的(u,v)位置構成。之所以選擇這種三角測量是 因為其通過將外接圓最小化并將三角形的最小角最大化來創(chuàng)建“比例適當?shù)摹比切?。?旦Delaimay三角測量被構建,就確定每根最終毛發(fā)所落入了哪個三角形。形成特定三角形 的三根控制毛發(fā)的索引被分配給落入該三角形的毛發(fā)。然后計算三根控制毛發(fā)(cl、c2、c;3)中的每一根在最終毛發(fā)(h)上所具有的權重 (wl、w2、w3)。這可以利用中心坐標(本領域已知,因此這里不對其進行進一步討論)來完 成,并且在圖7b中示出,其中“A”表示三角形726(cl、c2、c3)的面積。這些權重用于如下 說明地從控制毛發(fā)來內(nèi)插最終毛發(fā)。對于動畫中的一個對象而言,每根最終毛發(fā)的上述信息(即,(u, ν)位置、3根圍住 的控制毛發(fā)以及每根控制毛發(fā)的權重)僅可被生成一次。該信息在這里被稱為靜態(tài)信息。 相比之下,對每根最終毛發(fā)的定向的計算可在動畫的每幀處完成。這種定向是通過參考圖 7c和7d所說明的內(nèi)插處理,從控制毛發(fā)的定向及其相應的權重來確定的。在步驟756,針對每根最終毛發(fā)(h),相應的三根控制毛發(fā)(Cl、c2、c3)被轉換到 所利用的表面塊空間(在一個實施例中是塊坐標系)中。在步驟758,計算控制頂點(例 如782、783)之間的控制毛發(fā)向量(例如vll、vl2、vl3)??梢允褂酶鞣N技術來計算控制毛 發(fā)向量;在一個實施例中,向量被相等地分布在控制頂點之間??刂泼l(fā)向量然后被規(guī)格化 (例如nvll、nv12、nv13)。在步驟760,三根控制毛發(fā)的相應控制毛發(fā)向量被內(nèi)插并被乘以針對最終毛發(fā)計算的三個所確定權重。在一個實施例中,例如,一個控制毛發(fā)向量是根據(jù)下 式確定的ivl = nvll Xwl+nv21 Xw2+nv31 Xw3 ;其中ivl表示最終毛發(fā)的經(jīng)內(nèi)插和加權 的控制毛發(fā)向量表示,nvll、nv21和nv31表示規(guī)格化的控制向量,并且wl、w2和w3表示用 于規(guī)格化的控制向量的相應權重。在步驟762,得到的向量的大小被調(diào)整為最終毛發(fā)長度 (sivUsiv2,siv3)。一旦經(jīng)大小調(diào)整向量被確定,就在步驟764,從經(jīng)大小調(diào)整的向量來計 算最終毛發(fā)的控制頂點(786、788、790、792)。如圖2所示,步驟225、230、235和245是可選的,并且對于產(chǎn)生經(jīng)修整的干燥皮毛 覆蓋層而言不是必要的。步驟225和230被應用于濕皮毛的生成。當皮毛由于水的表面張 力或凝聚而變濕時,可能發(fā)生毛發(fā)的簇集。效果是相鄰毛發(fā)(一束毛發(fā))的末梢趨于朝同 一點下沉,從而創(chuàng)建了一種錐形的“超級毛發(fā)”或者圓形簇。以下將會描述,步驟225是針對 在固定的預定區(qū)域中生成毛發(fā)簇的靜態(tài)區(qū)域簇集而執(zhí)行的。步驟230是針對動畫的區(qū)域簇 集而執(zhí)行的,即,當簇集區(qū)域在模型上移動以例如仿真水或雨點的噴流擊打皮毛并使其越 來越濕。在兩種情況下,提供可被變動的參數(shù)以實現(xiàn)各種程度的從干到濕的皮毛外觀。步 驟235被用來生成干燥的皮毛簇集或分裂。根據(jù)特定應用,步驟225、230和235中的所有或一些步驟可被執(zhí)行。另外,根據(jù)應 用可對步驟225、230和235進行優(yōu)先級排序,以使得在較高優(yōu)先級的步驟中所調(diào)整的毛發(fā) 在其他步驟中不被調(diào)整?;蛘撸蕾囉谔囟☉?,效果可以是累積的或者選擇性累積的。在步驟225,靜態(tài)區(qū)域簇集被執(zhí)行。參考圖8描述了該處理的一個實施例。為了討 論,每個簇的中心毛發(fā)被稱為簇中心毛發(fā),并且該簇中被吸引到該簇中心毛發(fā)的所有其他 成員毛發(fā)在這里被稱為簇毛發(fā)。在一個實施例中,存在四個簇集輸入?yún)?shù)簇密度、簇大小、簇集百分比和簇集率。 與毛發(fā)密度參數(shù)類似,簇密度指定每平方面積應當生成多少簇。這里所描述的處理將簇密 度轉換成有簇中心毛發(fā)所定義的簇的實際數(shù)目、依賴于每個表面塊的大小的簇中心毛發(fā)的 數(shù)目。結果,一些現(xiàn)有的毛發(fā)被變成簇中心毛發(fā)。簇大小定義簇的面積。在一個實施例中,簇大小是在世界空間中定義的,世界空間 是用戶關于對象的大小而通常參考的空間。在一個實施例中,簇密度的優(yōu)先級高于簇大小, 使得如果存在許多簇并且多數(shù)簇重疊,則簇大小無法被維護,這是因為簇毛發(fā)可能僅是一 個簇的成員。如果簇密度和大小都小,則簇之間的許多毛發(fā)將不被簇集。參考圖8,為了確定每根最終毛發(fā)的簇成員關系(即,每根毛發(fā)屬于什么簇(若有 的話)),在每根簇中心毛發(fā)的位置處,具有指定簇大小的簇被轉換成參數(shù)表面空間的u半 徑和ν半徑分量(步驟800)。在步驟805、810,每根毛發(fā)被評估以判斷其是否落在相應的 簇中心毛發(fā)的U、ν半徑分量內(nèi)。如果毛發(fā)不在U、ν半徑分量內(nèi),則毛發(fā)不是簇毛發(fā)(步驟 815),并且處理繼續(xù)到下一毛發(fā)(步驟830)。如果毛發(fā)在U、ν半徑分量內(nèi),則在步驟820, 利用該毛發(fā)來參考簇中心毛發(fā)的索引。另外,簇集率和簇集百分比被分配(步驟825)??紤]許多變化??梢砸氪卮笮≡肼晠?shù)以在簇大小中產(chǎn)生隨機變化。用于簇大 小的特征(紋理)圖可由用戶創(chuàng)建和指定,每個表面塊一個,以提供對在步驟805、810所使 用的半徑的局部控制。在該實施例中,針對表面上的(u,ν)處的特定簇(簇中心毛發(fā)),全 局簇大小輸入?yún)?shù)與用于該表面的簇大小特征圖中相應的規(guī)格化(s,t)值相乘。此外,可 以提供靜態(tài)簇區(qū)域特征圖以將簇集限制到表面塊的指定區(qū)域,而非整個模型。
在一個實施例中,簇集百分比和簇集率值被分配給每根簇毛發(fā)(步驟82 。在一 個實施例中,兩者的值在W,l]范圍之間,并且隨后用于對簇毛發(fā)重定向(步驟835),這將 在以下描述。簇集百分比指定每根簇毛發(fā)的簇集程度。例如,值0表示毛發(fā)根本未被簇集,即, 像是“干燥”毛發(fā)。值1表示毛發(fā)被完全吸引到其簇中心毛發(fā),即,毛發(fā)的末梢(其遠端控 制頂點)與簇中心毛發(fā)的末梢在同一位置。簇集率定義簇毛發(fā)與其相應的簇中心毛發(fā)簇集得有多緊湊。例如,值0表示簇毛 發(fā)從根部到末梢被逐漸線性地吸引到其簇中心毛發(fā)。更接近1的簇集率值表示更接近根部 的毛發(fā)控制頂點比更接近末梢的毛發(fā)控制頂點相比被成比例地更多地吸引到相應的簇中 心毛發(fā)頂點,這產(chǎn)生更緊湊的簇。在圖9中給出簇集百分比和簇集率的不同值的示例。在步驟835,每根簇毛發(fā)的控制頂點(除根部頂點之外)被從在步驟200、210、 215,220和223所確定的簇毛發(fā)的干燥的經(jīng)梳理的位置朝著相應的簇中心毛發(fā)頂點重定 向。在一個實施例中,該處理是在每幀處執(zhí)行的。在一個實施例中,控制頂點(CV)的 數(shù)目的缺省值是3 G減去根部頂點),并且當前控制頂點的索引i的范圍在1 3。在一個 實施例中,如下確定重定向clumpHairCV[i] = cIumpHairCV[i]+deltaX (clumpCenterHairCV[i]-clumpH airCV[i]), delta = clumpPercent X (fract+c IumpRate X (1-fract));其中 fract = i/ numberOfCVs ;clumpHairCV[i]表示簇毛發(fā)頂點;clumpCenterHairCV[i]表示相應的簇中 心毛發(fā)頂點;i表示對當前控制定點的索引;numberOfCVs表示簇毛發(fā)的控制頂點的數(shù)目; clumpPercent表示簇集百分比;以及clumpRate表示簇集率??梢酝ㄟ^與以上關于簇大小而描述的特征圖類似的特征圖來局部地控制簇集百 分比和簇集率參數(shù)兩者。這兩個值也可以隨著時間而被變動或改變以提供對從干到濕再到 干的皮毛外觀的連續(xù)控制。這由圖10a、10b、10c和IOd示出,這些圖示出了從來自變動的 簇集百分比和簇集率序列的四幀。在圖IOa的圖中,簇集百分比和簇集率都為零并且可以 表示干燥的經(jīng)梳理的毛發(fā)。在圖IOb的圖中,簇集百分比為0. 7且簇集率為0,這產(chǎn)生稍微 有些濕的外觀。在圖IOc的圖中,簇集百分比為1.0且簇集率為0.3,這產(chǎn)生濕的外觀。在 圖IOd的圖中,簇集百分比和簇集率都為1.0,這產(chǎn)生非常濕的外觀。希望存在動畫的區(qū)域簇集以仿真水或雨點的噴流擊打皮毛并使其越來越濕。在圖 2的步驟230,執(zhí)行動畫的簇集。在一個實施例中,在動畫系統(tǒng)中定義動畫的簇集區(qū)域。參考圖11描述該處理的一個實施例。在一個實施例中,由擊打表面塊的粒子來定 義簇集區(qū)域。其他實施例可以使用用于生成動畫的簇集區(qū)域的替代技術。在步驟1100,對 所有的毛發(fā)執(zhí)行全局靜態(tài)區(qū)域簇集處理。該步驟標識出簇集區(qū)域和相應的簇中心毛發(fā)和簇 毛發(fā)。如以下所說明的,在動畫的簇集處理中使用該信息。在一個實施例中,所使用的全局 靜態(tài)區(qū)域簇集是以上針對靜態(tài)區(qū)域簇集所描述的全局靜態(tài)區(qū)域簇集。在步驟1102,定義生成粒子的一個或多個發(fā)射器。利用發(fā)射器來生成粒子是本領 域已知的,這里不進行詳細討論。在一個實施例中,發(fā)射器粒子的生成速率和在表面上的擴 散速率。在步驟1105,在每幀處,針對擊打表面的所生成的每個粒子,粒子所擊打的表面塊被標識出(步驟1110)。在一個實施例中,在先前幀中生成的粒子被運載經(jīng)過隨后的幀,以 使得粒子是累積的。針對擊打表面塊的每個粒子(包括在先前幀中生成的那些離子),在(u,ν)位置 處的塊上創(chuàng)建圓形的動畫的簇集區(qū)域(步驟1115),該(u,v)位置的簇集百分比、簇集率和 動畫的簇集區(qū)域半徑是由在粒子擊打表面的幀處執(zhí)行的創(chuàng)建表達式所確定的,以使得當粒 子在此時(即,在該幀處)擊打表面時,簇集百分比可被設置為零并且半徑可被定義為或許 可由隨機噪聲值來調(diào)整的指定值。因此,可以定義該表達式來提供所希望的“潮濕”效果。以上討論的簇大小類似,所定義的圓形簇集區(qū)域的半徑被轉換為相應的U半徑和 ν半徑。在每幀處所執(zhí)行的運行時間表達式定義簇集百分比和簇集率,從而確定皮毛多快地 “變”濕和“變”得多濕。例如,一個運行時間表達式可以是MIN(FrameNumberX0. 1,1),以 使得隨著幀號的增大,毛發(fā)變得越來越濕。簇的每根簇中心毛發(fā)(在步驟1100確定)然后被評估以判斷其是否落在動畫的 簇集區(qū)域內(nèi)(步驟1120)。為了判斷簇是否落在動畫的簇集區(qū)域內(nèi),在每幀處,檢查簇的簇 中心毛發(fā)和動畫的簇集區(qū)域的中心之間的(u,v)距離是否在動畫的簇集區(qū)域的(u,v)半徑 參數(shù)內(nèi)。針對位于重疊的動畫簇集區(qū)域中的簇,增加了簇集百分比和簇集率的值,從而產(chǎn)生 更濕的皮毛。如果簇中心毛發(fā)在動畫的簇集區(qū)域內(nèi)(步驟1125),則相應的簇被標上變動的簇 集標記,以使得簇毛發(fā)隨后被重定向來反映動畫的簇集效果?;蛘?,簇的每根簇毛發(fā)可以 具有一變動的簇集標記,該簇集標記在相應的簇中心毛發(fā)被確定為在動畫的簇集區(qū)域內(nèi)的 情況下被設置。另外,變動的簇集率值和變動的簇集百分比值根據(jù)運行時間表達式而被分 配給被標識出在動畫的簇集區(qū)域內(nèi)的簇毛發(fā)。在一個實施例中,動畫的簇集區(qū)域內(nèi)的每個 簇的簇集百分比和簇集率的值在每幀處被替換為動畫的簇集區(qū)域的相應值。因為動畫的 簇集區(qū)域可以遠大于簇,所以動畫的簇集區(qū)域可以包含若干個體簇。針對每個粒子(步驟 1145),每個簇被評估(步驟1140)。應當注意,動畫的簇集區(qū)域可以騎跨表面塊邊界。例如,動畫的簇集區(qū)域的中心可 以位于一個表面塊上,但該區(qū)域可以位于一個或多個其他塊上。由于動畫的簇集區(qū)域通常 被定義并因此與包含動畫的簇集區(qū)域的中心(即,粒子擊打的位置)的表面相關聯(lián),因此騎 跨相鄰塊的簇集區(qū)域的一些部分可被忽視(overlook)。這可能導致最終毛發(fā)的簇集的不連 續(xù)性。在一個實施例中,解決了該潛在問題。每當新的粒子擊打表面并且(u,ν)半徑超 過該表面的邊界時,針對影響相鄰塊的動畫的簇集區(qū)域,生成另外的(U,v)中心和(u,v)半 徑。因此,例如,如果簇集區(qū)域覆蓋兩個相鄰塊的一些部分,則為每個相鄰塊生成相應的(U, V)中心和半徑,以提供另外的動畫簇集區(qū)域用于步驟1120 1140的評估。在步驟1150,針對每幀,在動畫的簇集區(qū)域內(nèi)的簇的簇毛發(fā)被重定向。因此,如果 簇毛發(fā)在動畫的簇集區(qū)域內(nèi),則簇毛發(fā)被選擇性地調(diào)整。在一個實施例中,簇集被限制為每 幀處的動畫簇集區(qū)域,以使得在動畫簇集區(qū)域之外的簇的最終毛發(fā)通常被制作為“干燥”毛 發(fā)。在步驟1155,如果更多幀將被處理,則處理在步驟1105再次繼續(xù)。因此,在多幀上 執(zhí)行動畫的簇集處理以提供動畫效果。
返回來參考圖2,步驟235可被應用,以通過在下層皮膚(表面)上沿著某些線 (皮毛軌跡或者分裂線)來分裂經(jīng)修整的皮毛覆蓋層來生成毛發(fā)分裂或者干燥毛發(fā)聚集的 效果。如下所述,該處理可以包括兩種毛發(fā)分裂對稱的和單側的。在對稱分裂中,皮毛軌 跡的兩側上的毛發(fā)朝著該軌跡分裂,而在單側分裂中,軌跡一側上的毛發(fā)從軌跡向外分裂。在一個實施例中,在動畫系統(tǒng)中將皮毛軌跡指定為表面上的曲線。每條軌跡具有 半徑、針對對稱和單側分裂的分裂百分比和分裂率以及針對單側分裂的另外的分裂向量。 所生成的最終信息被輸出到分裂文件中,隨后分裂文件被訪問以重定向受影響的毛發(fā)。由圖1 示出了毛發(fā)分裂技術的一個實施例。在步驟1200,定義皮毛軌跡??梢?與簇類似地通過定義(u,v)分裂半徑來定義皮毛軌跡。在步驟1205,計算分裂線毛發(fā)(位 于由針對皮毛軌跡所定義的曲線來定義的皮毛軌跡曲線上或者與其非常接近的毛發(fā))。利 用分裂線毛發(fā)和分裂半徑,在步驟1215、1220,每根毛發(fā)都被評估以判斷毛發(fā)在對稱分裂的 情況下是否位于分裂線的兩側上的(u,ν)分裂半徑內(nèi),或者在單側分裂的情況下是否位于 由分裂向量所指定的一側(分裂向量側)。針對由半徑所指定的空間內(nèi)的每根毛發(fā)(這里 稱為分裂毛發(fā)),相應的分裂線毛發(fā)(皮毛軌跡上的毛發(fā))然后被確定為與其最接近的毛 發(fā)。毛發(fā)被標注為分裂線毛發(fā)、具有對其相應分裂線毛發(fā)的索引的分裂毛發(fā)或者不位于分 裂所指定的區(qū)域內(nèi)的正常毛發(fā)。應當注意,對于單側分裂的實例,現(xiàn)在每根分裂毛發(fā)在分裂向量的方向上被“離 開”其相應的分裂線毛發(fā)而重定向,而非“朝著”分裂線毛發(fā)。在圖12b中示出對稱和單側 分裂的示例。分裂毛發(fā)被相對于其相應的分裂線毛發(fā)而重定向(步驟237)。對于對稱分裂,該 處理與早先討論的針對簇毛發(fā)所執(zhí)行的處理類似。但是,對于分裂毛發(fā),使用分裂百分比和 分裂率來代替用于簇毛發(fā)的簇集百分比和簇集率。對于單側分裂,與被吸引到分裂線毛發(fā) 相反,根據(jù)分裂百分比和分裂率參數(shù)來避開(repel)分裂毛發(fā)。由圖12c、12d、12e和12f示出分裂效果。圖12c示出具有分裂線毛發(fā)1252和1254 的對象1250。圖12d示出對稱分裂在對象上產(chǎn)生的效果。圖1 和12f示出沿著分裂線毛 發(fā)1256 1270的單側分裂。在圖2的步驟M5,對是否將對處理執(zhí)行多次作出決定。多數(shù)有皮毛的動物的覆蓋 層由毛發(fā)的較細、較薄和較短層(稱為底層)加上較長和較厚毛發(fā)的表層構成。步驟M5 示出執(zhí)行兩次(或多次)處理的能力,從而步驟210、215、220和223 (并且可選地,225、230 和23 被執(zhí)行多于一次,每次產(chǎn)生一組不同的毛發(fā)。這些組或層然后在呈遞時被處理和組 合(步驟250)。通過參考圖13a、i;3b和13c可以看到效果。圖13a是根據(jù)本發(fā)明的教導而 生成的底層的表示。圖1 代表對表層的表示,且圖13c代表由底層和表層的構成的組合 圖像。如步驟250所示,由其控制頂點所代表的簇集毛發(fā)被呈遞為一系列的二維圖像以 創(chuàng)建逼真的干和濕毛發(fā)外觀。在一個實施例中,該處理用于從特定觀察點的角度將三維毛 發(fā)幾何形狀投射到二維圖像平面上。為了快速且高效地呈遞大量毛發(fā),每根毛發(fā)的幾何模型可被保持為簡單的。如上 所述,毛發(fā)由具有預定數(shù)目的控制頂點(在一個實施例中,缺省為四個)的參數(shù)曲線來表示。
在一個實施例中,處理采用已知的呈遞技術來制作由相應控制頂點所描述的毛 發(fā)。在一替代實施例中,增加定制的模塊來逼真地“遮擋”毛發(fā)。這可以通過在毛發(fā)上或 者沿著毛發(fā)的每個點處分配色彩強度來實現(xiàn),其中沿著毛發(fā)的點可被定義為構成毛發(fā)的像素。在呈遞毛發(fā)期間,為每根毛發(fā)添加寬度以將其變換成窄條帶,該窄條帶的定向總 是朝著相機或者觀察點。遮擋處理適當?shù)卣趽踹@些條帶基元以更逼真地將其呈現(xiàn)為細毛 發(fā)。在圖14的流程圖中給出遮擋處理的一個實施例。在步驟1400,每根毛發(fā)被處理。 在步驟1405,針對每根毛發(fā),在毛發(fā)基底處的表面法線被與毛發(fā)上的當前點處的法線向量 混合,以獲得毛發(fā)上的當前點處的遮擋法線。在一個實施例中,毛發(fā)被呈遞為顯示器上一系 列的點或像素。因此,當前點是表現(xiàn)毛發(fā)的像素之一。在沿著毛發(fā)的多個點處可以應用遮擋處理。在一個實施例中,這些向量中的每一 個向量對混合所貢獻的量是基于毛發(fā)上的當前點處的正切向量與毛發(fā)基底處的表面法線 向量之間的角度的。該角度越小,表面發(fā)現(xiàn)對遮擋法線的貢獻就越多。在步驟1410,利用毛發(fā)上的當前點處的遮擋法線來確定該點處的毛發(fā)強度。在一 個實施例中,使用Lambertian模型來計算這些強度。使用該方法提供了以下好處允許用 戶在皮毛被添加時照亮下層皮膚表面并接收可預測的結果。該方法考慮了個體毛發(fā)之間的 遮擋差異和沿著每根毛發(fā)長度的遮擋的差異。為了在皮毛覆蓋層上獲得逼真的陰影,使用陰影圖。對陰影圖的使用在本領域中 是已知的,這里不進行進一步討論。但是,將毛發(fā)加入到陰影圖中可能產(chǎn)生若干不合需要的 副作用。一個問題是由于皮毛自身陰影而引起被照亮的皮毛上的暗拖影。暗拖影在被照亮 的皮毛上看起來是錯誤的,因為正常情況下,光從皮膚和毛發(fā)反射以防止被照亮的皮毛上 的黑暗陰影。為了將暗拖影效果最小化,在一個實施例中,基于某些標準來縮短用于陰影圖的 毛發(fā)(步驟1415)。例如,毛發(fā)的長度和密度可以指示出縮短毛發(fā)的百分比。通過選擇性地 縮短用于陰影圖的毛發(fā),毛發(fā)自身陰影效果被最小化,同時仍然在明暗界線上產(chǎn)生分裂的 陰影以使得光能夠落在皮毛上。以類似的方式實現(xiàn)背光對位于有皮毛對象后方的每個燈使用陰影圖,并在陰影 圖程度處理中基于密度和長度再次縮短毛發(fā)。在一個實施例中,用于毛發(fā)的照明模型還允 許每個燈控制其漫反射離開角度。因此,在有皮毛的對象的直接后方的燈可以圍繞對象。利 用這些照明控制以及陰影圖,實現(xiàn)了合理的背光效果。在一個實施例中,對簇集毛發(fā)的遮擋被修改。在一個實施例中,毛發(fā)遮擋的兩個方 面可被修改。首先,增大皮毛上的光譜量。其次,在遮擋模型中考慮簇集。在幾何上,如早 先所說明的,以簇方式對皮毛進行建模以仿真當皮毛變濕時所時間發(fā)生的情況。在該遮擋 模型中,針對每根毛發(fā)并針對每個燈,確定毛發(fā)所位于的簇的一側相對于燈的位置,并且基 于毛發(fā)所位于的一側來使毛發(fā)變暗或變亮。因此,在與燈相面對的簇的一側上的毛發(fā)比背 向燈的簇上的毛發(fā)更亮。其他實施例本發(fā)明的其他實施例涉及添加到圖Ib的動物皮毛和人類毛發(fā)流水線的其他特征。具體而言,這些添加到流水線的其他特征涉及為數(shù)字角色產(chǎn)生各種式樣化的圖像逼真 的皮毛和毛發(fā)外觀?,F(xiàn)在參考圖15,圖15是與先前描述的圖Ib的流水線類似但包括另外的不同功能 的毛發(fā)/皮毛流水線1500的框圖。與之前相同,由表面定義模塊1550來接收輸入。如前所述,表面定義模塊1550定 義待呈遞的對象的表面和控制毛發(fā)。此外,如前所述,控制毛發(fā)調(diào)整模塊1555調(diào)整控制毛 發(fā)以提供諸如梳理和表面邊界上的無縫毛發(fā)之類的功能。除了先前描述的圖Ib的流水線之外,向毛發(fā)/皮毛流水線1500增加了毛發(fā)運動 合成器模塊巧57,以提供對不同毛發(fā)動畫的編輯和組合,這將在下文中詳細描述。如前所 述,內(nèi)插模塊1560可用于利用控制毛發(fā)在表面上進行內(nèi)插。另外,效果模塊1565可被用作毛發(fā)/皮毛流水線1500的一部分,以向毛發(fā)和皮毛 提供諸如簇集、分裂、波浪效果、編織效果等的各種效果,這將在下文中更詳細地描述。此 外,毛發(fā)/皮毛流水線1500可以利用優(yōu)化模塊1567,以提供用于改善呈遞時間的方法,這將 在下文中更詳細地描述。在毛發(fā)/皮毛流水線1500中可以利用遮擋、背光和陰影模塊1570以向毛發(fā)/皮 毛提供遮擋、背光和陰影效果,并且可以利用顯示模塊1575以呈遞和顯示具有毛發(fā)/皮毛 表面的對象的最終輸出,如前所述。此外,如先前參考圖Ia所描述的,應當認識到毛發(fā)/皮毛流水線1500可用計算機 將系統(tǒng)實現(xiàn),該計算機系統(tǒng)具有中央處理單元(CPU)、存儲器、輸入/輸出(I/O)等,它們可 耦合到諸如盤驅動器或其他設備之類的存儲設備。此外,該計算機系統(tǒng)可以包括鍵盤或其 他用戶輸入設備以及顯示器,該顯示器可用于顯示用戶界面以及根據(jù)本發(fā)明的實施例對毛 發(fā)/皮毛的呈遞。具體而言,本發(fā)明的實施例涉及由先前描述的圖15的流水線1500所實現(xiàn)的技術, 其涉及諸如以下各項專用的梳理工具、不同的最終毛發(fā)內(nèi)插算法以及除了呈遞每根最終 毛發(fā)之外還執(zhí)行可定制的每根毛發(fā)計算的通用應用程序接口(API)。其他技術涉及用于 編輯和組合不同的毛發(fā)動畫的方法和系統(tǒng),這里稱為毛發(fā)運動合成器(HMC),以及用于改善 呈遞時間的毛發(fā)優(yōu)化策略。在一個實施例中,HMC可由毛發(fā)/皮毛流水線1500的毛發(fā)運動 合成器模塊1557實現(xiàn),并且優(yōu)化策略可由毛發(fā)/皮毛流水線1500的優(yōu)化模塊1567實現(xiàn)。數(shù)字動物、人和虛構的生物在越來越多地加入到電影中,既包括有真實動作的也 包括計算機制作的。為了使得它們可信,這些角色中的許多角色需要有說服力的毛發(fā)或皮 毛。在質(zhì)量最重要的制作環(huán)境中,用于生成毛發(fā)的流水線不僅必須工作,而且需要是實用、 耐用、靈活、高效和強大的。這里描述的是如下的工具和技術這些工具和技術輔助創(chuàng)建特定毛發(fā)和皮毛外觀 以滿足總監(jiān)可能為特定演出和其角色選擇的樣子和表情。描述了解決方案,這些解決方案 使得可以生成令人信服的動物皮毛,制作可信的人類毛發(fā),并精密地匹配真實演員的毛發(fā)。這里描述的是對圖Ib的毛發(fā)/皮毛呈遞流水線的改進,這解決并改善了數(shù)字毛發(fā) 創(chuàng)建處理中最復雜和耗時的領域中的三項外觀顯影(梳理),毛發(fā)動畫和鏡頭,以及呈遞 大量的毛發(fā)。應當注意,當在幾何上對毛發(fā)建模時,出現(xiàn)與人類毛發(fā)有關的問題,這些問題稍微不同于動物皮毛的那些問題。具體而言,更長的人類毛發(fā)需要復雜得多的梳理和動畫工具。 對于動物皮毛而言,呈遞階段需要被優(yōu)化,因為與人類的大約100,000到150,000相比,存 在數(shù)百萬的個體毛發(fā)股。這里將會描述,由毛發(fā)/皮毛流水線1500所采用的技術涉及制作各種發(fā)型,從短 的動物皮毛到長的人類毛發(fā)。具體而言,毛發(fā)/皮毛流水線1500包括諸如以下的特征用 于對毛發(fā)進行建模、動畫制作和呈遞的工具;允許任意的少量控制毛發(fā)來定義基本梳理和 動畫特征;以及用于從這些控制毛發(fā)來內(nèi)插最終的經(jīng)呈遞的毛發(fā)股的技術。應當注意,傳統(tǒng)的3D動畫軟件(例如從AUTODESK可得的MAYA)可用于提供傳統(tǒng) 的查看功能。另外,從PIXAR可得的RENDERMAN軟件可用于幫助呈遞最終毛發(fā)。這些軟件 包是計算機圖形領域公知的。在下文中描述由毛發(fā)/皮毛流水線實現(xiàn)的其他梳理和控制毛發(fā)編輯工具。例如, 在一個實施例中,附接到控制毛發(fā)的基本引導鏈可用在前向或反向運動模式中,以定義控 制毛發(fā)的形狀同時大致維護其長度。也可以在世界空間或局部空間中向其他選中的控制毛 發(fā)應用相同的變形。此外,可以利用直觀切割工具,其中用戶可以在正視圖中草擬出曲線, 該曲線然后用于計算與選中的控制毛發(fā)的相交,并且在這些點處對它們進行切割。在一個特定實施例中,公開了允許選中的控制毛發(fā)以受控方式被簇集在一起的梳 理工具。參考圖16a和16b,圖16a和16b是示出沿著控制毛發(fā)利用可能的變化對控制毛發(fā) 進行簇集的圖。如圖16a所示,第一組控制毛發(fā)1602和第二組控制毛發(fā)1604被示出為從 生物1606的頭部而在發(fā)現(xiàn)方向上延伸。簇輪廓窗口 1610包括可由用戶定義的簇輪廓曲線 1611,該曲線是由毛發(fā)/皮毛流水線1500的控制毛發(fā)調(diào)整模塊1555實現(xiàn)的,并且可被應用 于第一組控制毛發(fā)1602以使得控制毛發(fā)以變形的控制毛發(fā)1615的方式變形,從而使得它 們接近可由用戶定義的簇輪廓1611,這在圖16b中可看出。填充體積技術在一個實施例中,毛發(fā)/皮毛流水線1500的表面定義模塊1550可用于生成定義 表面和相關體積的形狀??刂泼l(fā)模塊1555可用于利用控制毛發(fā)來填充體積,并且內(nèi)插模 塊1560可用于從控制毛發(fā)來內(nèi)插最終的毛發(fā)股。將在以下更詳細地描述這些技術。具體而言,填充體積工具可用于利用隨機布置的控制毛發(fā)來快速地填充所圍住的 表面。這在生成毛發(fā)以填充“毛發(fā)體積”的過程中可以是有用的,以描述角色的粗略毛發(fā)外 觀,“毛發(fā)體積”例如是定義建模者經(jīng)常提供的馬尾辮的體積。參考圖17,圖17是示出用于實現(xiàn)填充體積功能的處理1700的流程圖。如圖17所 示,在框1710,生成定義表面和相關體積的形狀。例如,這可以利用毛發(fā)/皮毛流水線1500 的表面定義模塊1550來實現(xiàn)。接下來,體積被填充有隨機布置的控制毛發(fā)(框1720)。例 如,這可以利用毛發(fā)/皮毛流水線1500的控制毛發(fā)調(diào)整模塊1555來實現(xiàn)。最后,從控制毛 發(fā)股來內(nèi)插最終毛發(fā)股(框1730)。例如,這可以利用毛發(fā)/皮毛流水線1500的內(nèi)插模塊 1560來實現(xiàn)。此外,在圖18a 18c中可以看到對此的示例,其中辮子被建模者簡單地表示為表 面,然后填充有毛發(fā)。具體而言,圖18a 18c示出了定義表面和相關體積的辮子形狀的生 成(圖18a)、利用隨機布置的控制毛發(fā)對這些體積的填充(圖18b)以及從控制毛發(fā)對最終毛發(fā)股的內(nèi)插(圖18c)。如圖18a所示,首先,生成三個經(jīng)編織的圓柱1802、1804和1806,每個圓柱都定義 形狀和相關體積。接下來,如圖18b所示,利用填充體積功能來分別生成控制毛發(fā)1810、 1812和1816。最后,在圖18c中可見,最終的毛發(fā)辮子1820、1822和1擬6被從控制毛發(fā)所 內(nèi)插并被呈遞。利用與以下描述的算法類似的內(nèi)插算法,可以從現(xiàn)有的控制毛發(fā)來自動內(nèi)插另外 的控制毛發(fā),并且也可以從現(xiàn)有的毛發(fā)股來自動內(nèi)插最終毛發(fā)股。另外,新插入的控制毛發(fā) 的形狀可在選中的現(xiàn)有控制毛發(fā)之間被混合。在一個實施例中,毛發(fā)/皮毛流水線1500可以基于不同的坐標方案,利用不同的 算法從控制毛發(fā)來內(nèi)插最終毛發(fā)股以及從現(xiàn)有的控制毛發(fā)來內(nèi)插其他的控制毛發(fā)(例如, 利用內(nèi)插模塊1560)??梢詤⒖紙D19a 19c來看到這種內(nèi)插技術的一個示例。在圖19a 19c中可見, 利用相同的控制毛發(fā)來示出變形的表面1900的側視圖。通過利用該內(nèi)插技術,在不同的應 用中可將控制毛發(fā)的數(shù)目保持為較小。例如,圖19a示出了在“世界空間”坐標框架中從控制毛發(fā)1902來內(nèi)插最終毛發(fā) 股1904的第一內(nèi)插方法,其中最終毛發(fā)股1904不會自動跟隨表面變形。這對于不應當跟 隨表面(皮膚)變形的長發(fā)型或植物而言是有用的。圖19b示出了在“局部空間”坐標框架中從控制毛發(fā)1902來內(nèi)插最終毛發(fā)股1904 的第二內(nèi)插方法。在“局部空間”方案中,最終毛發(fā)股1904自動跟隨表面變形。這對于較 短的毛發(fā)或皮毛而言是更自然的。最后,圖19c示出了從控制毛發(fā)來內(nèi)插最終毛發(fā)股1904的第三內(nèi)插方法,其中最 終毛發(fā)股1904仍然在有所影響的控制毛發(fā)1902的凸起外殼(convex hull)中。該方案例 如對于從彎曲的頭皮的頂部或側方落下的長的未簇集的人類毛發(fā)是有用的。應當注意,在 局部和世界空間模式中,所內(nèi)插的最終毛發(fā)股1904可能顯得長于控制毛發(fā)1902,而在凸起 外殼模式中并非如此。此外,可以利用毛發(fā)/皮毛流水線1500(例如,利用效果模塊1565)來實現(xiàn)最終毛 發(fā)股的分級簇集能力。最終毛發(fā)可能屬于由用戶直接布置的手工簇,或者屬于由過程生成 的自動和小型簇。自動簇毛發(fā)可能發(fā)生在手工簇之內(nèi)或之外,而小型簇毛發(fā)可能僅存在于 手工或自動簇中。這些技術可被應用于濕毛發(fā)外觀并用于定制干毛發(fā)的束的外觀。毛發(fā)/皮毛流水線1500另一特性在于例如通過毛發(fā)/皮毛流水線1500的效果模 塊1565,可以實現(xiàn)諸如波浪、編織(在毛發(fā)根部周圍旋轉)、縮短末梢和風之類的許多效果 或參數(shù)。在控制毛發(fā)之間的內(nèi)插之后,這些效果可被直接應用于最終毛發(fā)。這些波浪、編制和風效果的示例在圖20a 20c中示出。在圖20a 20c的各種 情況中,控制毛發(fā)2002被示出為指向豎直上方。例如,圖20a未示出最終毛發(fā)2004上的任 何效果。圖20b示出某種波浪和編制效果被應用于最終毛發(fā)2004。最后,圖20c示出風效 果被應用于最終毛發(fā)2004。此外,在簇集之前或之后,效果可被選擇性地應用于不同的毛發(fā)“類型”,例如手工 簇成員毛發(fā)或者未簇集的毛發(fā)。另外,可以結合具有可能不同組的控制毛發(fā)的多個最終毛 發(fā)層來使用獨立的毛發(fā)參數(shù)或效果。對于動物皮毛,底層和表層可被這樣生成,并且復雜的人類毛發(fā)可被分裂成若干不同的層,例如基底、分離層和絨毛。幾何例示本發(fā)明的另一實施例涉及任意的幾何例示。任意的幾何例示提供一特征,該特征 對毛發(fā)/皮毛流水線1500的能力進行杠桿作用以對最終所呈遞的毛發(fā)基元(如先前所述) 的式樣或外觀進行實例化、動畫制作和控制。在這點上,可以結合毛發(fā)呈遞功能來提供通用 應用程序接口(API),以使得應用開發(fā)者可以從毛發(fā)系統(tǒng)獲得每個毛囊的信息,并利用其他 操作來替代毛發(fā)的呈遞。例如,在一個實施例中,毛發(fā)流水線1500可用于基于至少一根毛發(fā)相對于表面的 毛發(fā)位置來生成用戶選中的幾何形狀。表面定義模塊1550可用于定義表面。顯示模塊1575 可用于處理用戶選中的幾何形狀,并在表面上的毛發(fā)位置處呈遞用戶選中的幾何形狀來 代替至少一根毛發(fā)。具體而言,提供進入到毛發(fā)/皮毛流水線1500中的鉤(例如在顯示和呈遞模塊 1575處)以允許用戶略過(override)所呈遞的幾何形狀,而不是輸出最終所呈遞的基元的 毛囊,并且呈遞另一幾何形狀而不是呈遞毛發(fā)。因此,可以生成具有刺的人頭,而不是利用 毛發(fā)來填充例如人頭。或者可以填充充滿花、草或樹的區(qū)域,而不是充滿毛發(fā)的區(qū)域。此外,應當注意,當試圖設計特定的風景時,實例化完全相同的對象(例如,花或 者樹)并不好,這是因為所有的花或者樹將是相同的。因此,在呈遞時可以對不同種類的基 元進行建模和實例化,以替代每根最終毛發(fā)??梢允褂妹襾肀硎咀冃蔚妮S,而不是完全放棄最終的毛發(fā)形狀,在該軸周圍,可 以根據(jù)毛發(fā)的形狀來使所例示的幾何形狀變形。這樣,先前所描述的與呈遞毛發(fā)有關的所 有各種效果(例如,簇集、分裂、波浪、編織、風等)的所有優(yōu)點可用在呈遞另一選中的幾何 形狀(例如,花、樹等)。現(xiàn)在參考圖21,圖21是示出根據(jù)本發(fā)明一實施例的用于實現(xiàn)幾何例示的處理 2100的流程圖。在框2105,判斷毛發(fā)/皮毛流水線1500是否進入了呈遞階段。如果判斷 結果為否,則處理結束(塊2110)。但是,如果已進入呈遞階段,則在框2115,判斷用戶是否 決定略過毛發(fā)呈遞操作,而是利用幾何例示功能。如果判斷結果為否,則處理在框2120處結束。另一方面,如果用戶決定了略過毛發(fā)呈遞處理并且改為利用幾何例示功能,則在 框2125,毛囊信息被獲得。接下來,在框2130,基于用戶選中的幾何形狀,表面上的毛囊被 改為填充有用戶選中的結合形狀(即,并非毛發(fā)/皮毛)。然后,在框2135,先前為毛發(fā)所 確定的毛發(fā)形狀被應用以使用戶選中的幾何形狀變形。在圖2 和22b可看到對此的一個示例。如圖2 所示,所示出的多根毛發(fā)2210 在表面2212上被呈遞。每根毛發(fā)2210具有毛囊信息(例如,其在表面2212上的相對位 置),以及與其相關聯(lián)的軸向變形框架(例如,定義毛發(fā)的形狀)和關于諸如曲線、彎曲、旋 轉、扭絞等的形狀特征(如先前所述)的有關控制信息。但是,利用本發(fā)明的實施例,如圖22b所示,用戶可以決定呈遞另一幾何對象(例 如,花),而非毛發(fā)。例如,可以從三個建模的花的集合中隨機選擇花并通過相應最終毛發(fā)的 形狀來使花變形。如圖22b所示,所示出的多個花2220、2222和22M利用相同的毛囊信息和相同的形狀信息來替代毛發(fā)。應當認識到,花是僅被作為示例而給出的,實際上可以使用任何幾何 形狀來代替毛發(fā)形狀。因此,利用毛發(fā)/皮毛流水線1500可以對新的幾何形狀進行例示和 變形,從而提供呈遞任何類型的幾何形狀的強大且獨特的方式。毛發(fā)運動合成器系統(tǒng)當在制作背景下處理毛發(fā)動畫和動態(tài)仿真時,經(jīng)常出現(xiàn)對組合不同運動結果的需 要。如果毛發(fā)的一部分在一次仿真中是完美的,但毛發(fā)的其余部分在另一次仿真中看起來 更好,則與合計出適當?shù)脑O置以使得毛發(fā)的全部以希望的方式運動相比,更容易選擇每次 仿真的那些部分是希望保持的。在下文中將會描述,在一個實施例中,毛發(fā)運動合成器提供一種系統(tǒng)和方法,該系 統(tǒng)和方法允許用戶通過建立節(jié)點和操作的網(wǎng)絡來組合并修改各種控制毛發(fā)動畫。例如,在 一個實施例中,毛發(fā)/皮毛流水線1500的毛發(fā)運動合成器模塊1557可用于實現(xiàn)毛發(fā)運動 合成器。例如,在一個實施例中,毛發(fā)流水線1500利用表面定義模塊1550來定義表面和控 制毛發(fā),并且毛發(fā)運動合成器模塊1557將與控制毛發(fā)和表面相關聯(lián)的不同控制毛發(fā)曲線 形狀組合。具體而言,毛發(fā)運動合成器模塊1557生成定義靜態(tài)控制毛發(fā)曲線形狀的靜態(tài)節(jié) 點;生成定義動畫控制毛發(fā)曲線形狀的動畫節(jié)點;并且將靜態(tài)節(jié)點的靜態(tài)控制毛發(fā)曲線形 狀與動畫節(jié)點的動畫控制毛發(fā)曲線形狀組合,以產(chǎn)生用于控制毛發(fā)的復合控制毛發(fā)曲線形 狀。節(jié)點圖基本內(nèi)容在一個實施例中,毛發(fā)運動合成器(HMC)是節(jié)點的受指導的非循環(huán)圖,其中節(jié)點 可以表示動畫或者應用于動畫的操作。節(jié)點之間的連接表示動畫的控制毛發(fā)曲線形狀的數(shù) 據(jù)流。簡單節(jié)點為角色或對象創(chuàng)建HMC裝置通常假設存在控制毛發(fā)的現(xiàn)有靜態(tài)梳理,用作基礎。 HMC裝置通常需要兩個節(jié)點靜態(tài)節(jié)點(包含控制毛發(fā)曲線的初始的非動畫的形狀)和控 制節(jié)點(表示最終結果——節(jié)點圖的輸出)。表示控制毛發(fā)曲線形狀的其他節(jié)點可被插入 到圖中。這些其他節(jié)點可被稱為動畫節(jié)點。參考圖23,圖23是示出連接到動畫節(jié)點2304和完成的控制節(jié)點2306的靜態(tài)節(jié)點 2302的簡單圖。在圖23中可見,動畫節(jié)點2304的輸入是來自靜態(tài)節(jié)點2302的靜態(tài)的經(jīng)梳 理的形狀。用戶可以通過由動畫控制節(jié)點2304所提供的控制毛發(fā)曲線的動畫集合來應用 擰動和關鍵幀,以使靜態(tài)形狀偏移,從而產(chǎn)生控制節(jié)點2306的最終的經(jīng)梳理的毛發(fā)結果?;旌瞎?jié)點可以利用混合節(jié)點來合成特征。混合節(jié)點可被定義為采用兩個輸入并將其組合在 一起以形成單個輸出的操作節(jié)點。例如,來自每個輸入的控制毛發(fā)曲線可被旋轉地混合在 一起(以維護曲線長度)或者在位置上混合在一起(用于線性混合)。另外,可以使用用于混合節(jié)點的混合因子參數(shù)來控制各個輸入應當被使用多少。 例如,值0表示表示完全使用輸入節(jié)點A,并且值1表示完全使用輸入節(jié)點B ;其中,對于之 間的所有值,混合節(jié)點提供對輸入節(jié)點A和B的控制毛發(fā)曲線形狀的光滑內(nèi)插?,F(xiàn)在參考圖24,圖M是示出利用混合節(jié)點M03的處理的圖。也可以同時參考圖25a和25b,圖2 和2 分別示出旋轉混合和位置混合。具體而言,圖M示出混合節(jié)點 2403,混合節(jié)點M03對來自靜態(tài)節(jié)點M02和動畫節(jié)點M04的輸入進行混合以獲得控制節(jié) 點M06的復合輸入形狀。在該示例中,混合節(jié)點具有0. 5的混合因子。更具體而言,在圖25a中可見,當具有0. 5的混合因子的混合節(jié)點M03選擇旋轉 混合時,基于輸入的靜態(tài)控制毛發(fā)2520和動畫控制毛發(fā)2530而獲得復合的控制毛發(fā)2510。 旋轉混合的優(yōu)點在于其保持了得到的控制毛發(fā)的長度。在圖25b中可見,當具有0. 5的混合因子的混合節(jié)點M03選擇位置混合時,基于 輸入的靜態(tài)控制毛發(fā)2560和動畫控制毛發(fā)2570而獲得復合的控制毛發(fā)2555。位置混合的 優(yōu)點在于得到的控制毛發(fā)形狀比利用旋轉混合的更可預測。缺省情況下,混合節(jié)點M03可以將同一混合值應用于每條輸入控制毛發(fā)曲線的 所有控制頂點(CV)。針對每個CV的控制,用戶可以建立指定在每個CV出使用什么混合因 子值的函數(shù)曲線。例如,這可用于使得基底CV運動來自第一輸入,并且末梢CV運動來自第 二輸入。通常,即使在使用每個CV的函數(shù)曲線時,同一混合因子也被應用于輸入的每條控 制毛發(fā)曲線。為了指定每根毛發(fā)的混合值,用戶可以利用標識出三維空間中的區(qū)域的混合球。 混合球可由分別具有內(nèi)部和外部混合因子值的兩個通信球面構成。如果內(nèi)部值是0且外部 值是1,則內(nèi)球面內(nèi)的所有控制毛發(fā)曲線將從第一輸入獲得它們的動畫,并且外球面外的所 有控制毛發(fā)曲線將從第二輸入獲得它們的值,之間具有光滑內(nèi)插。在圖沈中示出了這種類型的混合球沈00的示例。實質(zhì)上,混合球沈00用于對混 合節(jié)點的效果局部化。在圖26中可見,混合球沈00包括內(nèi)球面沈02和外球面沈04。此 外,圖沈示出了在將動畫控制毛發(fā)沈07與輸入的靜態(tài)控制毛發(fā)沈08混合后混合球沈00 的效果(經(jīng)由內(nèi)球面沈02和外球面沈04),并且還示出復合的輸出控制毛發(fā)沈10。動態(tài)解算器應當認識到,除了指定典型的仿真設置(嚴格性、阻尼等等)之外,大量的初始努 力都是指定作為輸入而饋送到解算器的良好目標形狀(例如,用戶可能希望控制毛發(fā)曲線 “命中”的關鍵姿勢(key posture))。但是最終,多數(shù)時間被花費在處理一次或多次仿真的
結果上。由于動態(tài)求解處理本身經(jīng)常是耗時的并且在直接用戶控制之外,因此將為了獲得 所希望的結果而需要運行的仿真的數(shù)目最小化是重要的。例如,在一個實施例中,MAYA毛發(fā)動態(tài)解算器可用于毛發(fā)仿真。但是,應當注意到, 先前描述的HMC系統(tǒng)是不知道動態(tài)解算器的。實質(zhì)上,解算器看起來是節(jié)點圖中的單個節(jié)
點ο參考圖27,圖27示出包括動態(tài)解算器節(jié)點(由解算器節(jié)點2706和動態(tài)節(jié)點2708 表示)的動態(tài)裝置。初始靜態(tài)梳理節(jié)點2702通過將被用作目標的動畫節(jié)點2704而連接到 解算器2706,但最終結果在動態(tài)仿真節(jié)點2708的輸出和目標之間被混合(通過混合節(jié)點 2712)??刂乒?jié)點2710是復合的輸出。缺省情況下,混合被設置為0以100%是動態(tài)的。但是,為了快速使得毛發(fā)更硬(常 見的藝術要求),混合可被逐漸增大以混合回靜態(tài)目標,而不運行新的仿真。依賴于所使用的設置和場景的復雜性,動態(tài)仿真可能花費很長時間,使得它們經(jīng)
20??稍赗ENDERFARM上運行以釋放用戶的計算機來進行其他工作。為了適應于此,可利用連 接到控制節(jié)點2710的緩存輸出(cache-out)節(jié)點2720來每當有節(jié)點連接到其時寫入到存 儲設備中。如將要描述的,隨后可以利用緩存輸入文件來讀回緩存輸出文件。應當認識到, 緩存輸出節(jié)點可應用于系統(tǒng)的任何節(jié)點。此外,應當認識到,存儲設備可以是硬盤驅動器或 者任何其他類型的存儲設備。體積節(jié)點通常,尤其對于計算機圖形特征產(chǎn)品而言,由動畫部門在某些關鍵姿勢處對代表 毛發(fā)的代理表面進行建模和關鍵幀制作,以表示毛發(fā)應當在給定的鏡頭中如何移動。例如,角色的馬尾辮可由凸出的管狀體積來近似。為了提供該功能,可以利用體積 節(jié)點,該體積節(jié)點在效果上將控制毛發(fā)曲線綁定以使得它們跟隨一個或多個體積的動畫。 體積節(jié)點的另一種用途可以是使動態(tài)仿真的結果偏移以產(chǎn)生希望的結果。在這種情況下, 使用手動體積(hand-animated volume)是不切實際的,因為手動體積不會自動跟隨動態(tài)控 制毛發(fā)。相反,可以使用提供其自己體積的體積節(jié)點,其中其自己的體積可被隨時內(nèi)建在將 被變形的控制毛發(fā)曲線的凸起外殼中。用戶然后可以修改體積以使動畫偏移。這與修改個 體毛發(fā)的控制頂點相比簡單得多。圖28a是示出圍繞控制毛發(fā)曲線觀02的自動生成的圓柱形體積節(jié)點觀04的圖。 圖28b是示出在用戶已利用體積節(jié)點觀04編輯了控制毛發(fā)曲線之后被偏移的控制毛發(fā)曲 線觀10的圖。在圖28a和^b中可見,可以通過體積節(jié)點觀04來容易地修改控制毛發(fā) 觀02,如經(jīng)修改的控制毛發(fā)曲線觀10所示。超級毛發(fā)節(jié)點超級毛發(fā)節(jié)點通過利用簡化的代理幾何形狀來對毛發(fā)動畫進行整形或偏移而提 供與體積節(jié)點類似的機制。但是,這種情況下的代理幾何形狀是附接到表面的曲線,與所有 其他毛發(fā)一樣。超級毛發(fā)節(jié)點可用于控制在用于對靜態(tài)毛發(fā)整形的梳理階段和在用于改變 動畫毛發(fā)的鏡頭中控制多根控制毛發(fā)。在一個實施例中,超級毛發(fā)節(jié)點可以具有兩種操作模式絕對的和相對的。在絕對 模式中,超級毛發(fā)節(jié)點使用單條控制曲線來指示出控制毛發(fā)的精確形狀和動畫。用戶可以 利用權重參數(shù)來選擇僅部分地應用效果,權重參數(shù)的值在0和1之間變化。超級毛發(fā)節(jié)點 還具有在世界空間中匹配控制曲線的形狀或者在每條控制毛發(fā)曲線的局部空間中應用變 形的選項。參考圖29,圖四是示出超級毛發(fā)節(jié)點處理過程四00的流程圖。在框四10,用戶 選擇超級毛發(fā)節(jié)點。在框四15,用戶選擇是利用絕對模式還是相對模式。如果絕對模式被 選擇,則在框四20可以選擇權重參數(shù),并在框四25可以選擇世界或局部空間。在框2930, 控制曲線被應用于控制毛發(fā)。另一方面,如果在過程四00期間,相對模式被選擇,則用戶同樣選擇權重參數(shù)(框 2940)并選擇世界或局部空間(框四45)。但是在相對模式中,控制曲線和基礎曲線都被應 用(框四50)于控制毛發(fā)。在相對模式中,使用控制曲線和基礎曲線兩者,并且僅將兩者之間的差應用于控 制毛發(fā)曲線。當修改已經(jīng)具有一些進入的動畫的控制毛發(fā)時,通常使用這種方法。應當注 意,如果控制曲線和基礎曲線完全匹配,則超級毛發(fā)節(jié)點沒有效果。當創(chuàng)建超級毛發(fā)節(jié)點時,控制曲線和基礎曲線缺省地被豎直向上創(chuàng)建。為了使動畫毛發(fā)偏移,兩條曲線可以選擇 性地采用控制毛發(fā)的平均形狀。于是從這里開始對控制曲線進行擰動要直觀得多。簡要參考圖30a和30b,分別示出局部空間和世界空間中的超級毛發(fā)操作。在圖 30a和30b中可見,初始控制曲線形狀3000從表面沿著法線豎直延伸,并且得到的控制毛發(fā) 3010被整形以匹配控制曲線3020。在絕對和相對這兩種模式中超級毛發(fā)的效果被均勻地應用于所有被驅動的毛發(fā)。 對于局部化的控制,可在控制曲線周圍定義影響區(qū)域。包括內(nèi)球面和外球面(如前所述)的混合球可用于定義超級毛發(fā)在何處具有效果 以及超級毛發(fā)具有多少效果,如圖31所示。具體而言,圖31是示出具有內(nèi)球面3112和外 球面3114兩者的混合球3110以及混合球3110對控制曲線3120和控制毛發(fā)3130的效果 的圖。內(nèi)部和外部權重都與每個相應的球面3112和3114相關聯(lián),并且超級毛發(fā)3120和 控制毛發(fā)3130的效果被內(nèi)插在其間。作為影響區(qū)域的實際應用,超級毛發(fā)3120可用于偽 造沖突,例如通過以下方式而在皮毛一部分上的手摩擦使控制曲線在表面上滑動以跟隨 手的運動并在其運動時向下擠壓毛發(fā)。毛發(fā)運動合成的示例性用途以下討論的是毛發(fā)運動合成器(HMC)的能力和通用性的一些示例。改善單次仿真結果對于真實動作和計算機圖形特征兩者,視覺效果產(chǎn)品都趨于嚴重面向藝術。來自 初始毛發(fā)鏡頭回顧的最常用要素之一是使動態(tài)仿真與藝術上批準的外觀更接近地匹配。這 可能需要使仿真更嚴格以去除額外的或者無規(guī)律的運動,或者使其以更好的方式匹配關鍵 幀制作的目標動畫。通常,仿真可以產(chǎn)生物理上逼真的結果,但不一定是所希望的外觀。與通過設法微 調(diào)動態(tài)參數(shù)而依賴于物理上精確的解算器并一再啟動新的仿真相比,利用先前參考圖對、 25、26、27和31所描述的混合節(jié)點功能經(jīng)??梢愿菀椎亍昂铣伞币恍╈o態(tài)或目標動畫。如 所描述的,混合因子可被設置或變動以保留動態(tài)仿真中被發(fā)現(xiàn)是視覺上合意的量。多次仿真結果之間的混合如前所述,仿真結果很少“現(xiàn)成(out of the box) ”地提供完美的所希望的外觀。 利用變化的輸入?yún)?shù)集,一次仿真可能給出良好的起動,但另一仿真可能提供更好的結束 外觀,并且又一仿真可能在某些關鍵時刻是更有表現(xiàn)力的。找出能提供所有這三者的組合 的統(tǒng)一參數(shù)集通常是不可能的。但是,利用如前所述的毛發(fā)運動合成器(HMC)的特征,級聯(lián)圖可被容易地建立以 在各種仿真緩存之間進行混合,如圖32所示。在圖32中可見,三個毛發(fā)緩存3200、3202和3204各自分別是通過動畫節(jié)點3210、 3212和3214來處理的。毛發(fā)緩存3200和3202還通過混合節(jié)點3220而被組合,并且還通 過動畫節(jié)點3222在混合節(jié)點3230處與毛發(fā)緩存3204進一步混合。然后通過動畫節(jié)點3240來處理該經(jīng)混合的輸出,并在混合節(jié)點3245處將其與靜 態(tài)節(jié)點3248混合,并且在控制節(jié)點3250處呈遞最終的處理輸出。應當認識到,混合值可以 是經(jīng)關鍵幀制作的,以選取每個緩存的最合意的各部分。
混合也可用于非動態(tài)緩存文件。對于具有短皮毛的角色而言,具有兩種靜態(tài)梳理 可能是實際的一種“正?!笔崂?,一種與朝著表面被緊密下壓的毛發(fā)相沖突的“沖突”梳 理。然后,不是在諸如手或道具逆著皮毛摩擦的鏡頭中仿真所有與皮毛的相交,而是可以利 用跟隨沖突對象的混合球來僅僅將毛發(fā)與那些區(qū)域中的先前沖突的梳理向混合。除了其混合能力之外,毛發(fā)運動合成器(HMC)系統(tǒng)可用于糾正特定鏡頭中的問 題。例如,這經(jīng)常發(fā)生在經(jīng)常引起不好結果的兩種情形之一使得靜態(tài)的經(jīng)梳理的目標毛發(fā) 刺入角色皮膚的動畫問題,以及諸如錯過的沖突之類的小仿真差錯。在這些情況下,毛發(fā)的 一般運動是完全可接受的,并且糾正問題所需的全部都可以通過利用先前討論的體積偏移 節(jié)點或超級毛發(fā)節(jié)點來完成。這比重新運行仿真直到滿意為止要快得多。優(yōu)化技術如先前參考圖15所討論的,本發(fā)明的實施例還涉及可由毛發(fā)/皮毛流水線1500 的優(yōu)化模塊1567實現(xiàn)的優(yōu)化技術。具體而言,這里討論了用于改善毛發(fā)/皮毛流水線1500 的可用性和呈遞速度的三種特定優(yōu)化技術。第一種優(yōu)化技術涉及依賴于畫面空間量度對最終毛囊的剔除(cull)的細微控 制。這里稱為依賴于視圖的畫面空間優(yōu)化技術。這里公開的第二種優(yōu)化方法涉及毛發(fā)/皮 毛流水線1500的以下能力基于毛發(fā)子塊來選擇性地生成并呈遞可見的毛囊。這里稱為毛 發(fā)子塊優(yōu)化技術。此外,由毛發(fā)/皮毛流水線1500實現(xiàn)的第三種優(yōu)化技術涉及毛發(fā)緩存以 減少呈遞時間并改善照明工作的周轉時間。這里稱為毛發(fā)緩存技術。依賴于視圖的畫面空間優(yōu)化如所公知的,以最大的毛發(fā)密度來呈遞完全覆蓋有皮毛的生物通?;ㄙM很長時 間,利用大量計算能力,并且利用大量存儲器。盡管可以手工調(diào)節(jié)毛發(fā)密度以基于每個鏡頭 來優(yōu)化毛發(fā)密度,但是乏味且容易出錯的處理。根據(jù)本發(fā)明的一個實施例,由毛發(fā)/皮毛流水線1500的優(yōu)化模塊1567實現(xiàn)的依 賴于試圖的畫面空間優(yōu)化技術可以通過利用在畫面空間中測量的連續(xù)量度來實現(xiàn),這些連 續(xù)量度給出了對毛發(fā)參數(shù)(例如,呈遞時的毛發(fā)密度和毛發(fā)寬度)的設置的細微控制。此 外,可以通過用戶定義的函數(shù)曲線來定制優(yōu)化參數(shù)的行為。在一個實施例中,表面定義模塊1550可用于定義表面,并且優(yōu)化模塊1567可用于 判斷毛發(fā)是否將在表面上被呈遞。具體而言,優(yōu)化模塊1567可用于確定毛發(fā)的大小量度; 將第一密度曲線應用于為毛發(fā)所確定的大小量度,以生成密度倍數(shù)值;并且基于密度倍數(shù) 值,判斷毛發(fā)是否應當被呈遞。優(yōu)化參數(shù)的連續(xù)量度和可定制性在該方法中提供了很大靈活性,并且不受與對預 定值的離散選擇相關聯(lián)的約束。在本發(fā)明的一個實施例中,優(yōu)化參數(shù)(將在下文中討論) 涉及毛發(fā)密度和毛發(fā)寬度參數(shù)。但是,應當認識到,其他類型的與毛發(fā)有關的參數(shù)也可被優(yōu) 化。在該實施例中,毛發(fā)畫面空間優(yōu)化基于畫面上的每根個體毛發(fā)(畫面空間大小量 度)和毛發(fā)在畫面上移動的速度(畫面空間速度量度)來確定所呈遞的毛發(fā)的減少量。兩種量度被針對每根毛發(fā)而計算,并且然后被傳送回用戶指定的函數(shù)曲線,該函 數(shù)曲線指定了毛發(fā)是否應當被呈遞。通過利用定制的函數(shù)曲線,在每個鏡頭的基礎上可以 定制角色的毛發(fā),并且從而給予了藝術家很大靈活性來確定從角色剔除多少毛發(fā)。
23
參考圖33,圖33是示出用于實現(xiàn)依賴于視圖的畫面空間優(yōu)化的技術的圖。在圖 33中可見,依賴于視圖的畫面空間優(yōu)化3300被分成兩個階段。第一階段是量度生成階段 3310,并且第二階段是量度到參數(shù)映射階段3320。具體而言,每個毛囊3308被饋送到量度 生成階段3310中。具體而言,每個毛囊3308被饋送到量度生成階段3310中,并且另外參考圖34, 每根毛發(fā)3410的每個毛囊根位置3402在量度生成階段3310中被變換成規(guī)格化設備坐標 (NDC)框架,以生成替代原始毛發(fā)的代理毛發(fā)3405。更具體而言,在量度生成階段3310中,每根毛發(fā)的NDC根位置3402用于測量不同 的量度,這些不同的量度提供另外的信息以決定在呈遞時如何控制每根毛發(fā)的參數(shù)。在該實施例中,在量度生成階段3310中利用兩種不同的量度——大小量度3312 和速度量度3314。但是,應當認識到,也可以利用各種其他不同量度。畫面空間大小量度 3312用于計算在NDC空間中代理毛發(fā)3405的長度。代理毛發(fā)3405是從毛囊根位置3402豎 直向上生長的單位長度毛發(fā)。因為與最終毛發(fā)相比,代理毛發(fā)3405更容易進行計算處理, 所以利用代理毛發(fā);3405而非原始的最終毛發(fā)3410。這是因為尤其在毛發(fā)最終被剔除的情 況下,與最終毛發(fā)相關聯(lián)的毛發(fā)內(nèi)插和效果操作在計算上是非常密集的。另一原因在于離 相機相等距離但高度不同的所有毛發(fā)應當被同樣對待。通過這樣做,保留了具有大的毛發(fā) 長度變化的外觀,但一旦優(yōu)化被應用,在這種情況下忽略代理毛發(fā)可能引起禿點或不同的 外觀。畫面空間速度量度3314計算在NDC空間中毛囊的根部從當前幀到下一幀所移動 的距離。簡要參考圖35,圖35是示出在NDC空間中代理毛發(fā)3506的根部3502從時間t處 的第一幀3510到時間t+Ι處的第二幀3520所移動的距離的圖。之所以選擇該量度是因為 運動嚴重模糊的對象不需要完全的毛發(fā)密度來達到相同的外觀。返回來參考圖33,在大小量度3312和速度量度3314在量度生成階段3310中被確 定之后,這些值被傳送到量度到參數(shù)映射階段3320。針對每個參數(shù),操作者將相應的函數(shù)曲 線應用于每個量度值。在該示例中,密度曲線33 和33 分別被應用于大小量度3312和 速度量度3314(例如,密度與大小和速度的關系),并且寬度曲線3330和3332被分別應用 于大小量度3312和速度量度3314(例如,寬度與大小和速度的關系)。各個結果中的每一 個然后被相乘以得出最終的參數(shù)倍數(shù)值。在該示例中,確定可被傳送到呈遞功能3360上的 密度倍數(shù)值3340和寬度倍數(shù)值3350。應當注意,在密度倍數(shù)的情況下,用戶定義的函數(shù)曲線33M和33 被約束為在范 圍w,l]中的映射量度值。同樣在
之間相應變化的最終結果(密度倍數(shù)值3340)然 后用于判斷最終毛發(fā)是否在呈遞模塊3360處被呈遞。在一個示例中,這可以通過生成范圍
中的隨機數(shù)來實現(xiàn);如果該數(shù)低于最終結果,則毛發(fā)被繪制。否則,毛發(fā)被剔除。對于寬度倍數(shù),用戶定義的函數(shù)曲線3330和3332被約束為任何非負實數(shù),因此最 終結果也是非負實數(shù)。該最終結果(寬度倍數(shù)3350)然后乘以當前毛發(fā)的寬度參數(shù)并被傳 送到呈遞模塊3360。應當注意,因為當對象(例如,具有毛發(fā)的角色)從前臺移動到后臺時毛發(fā)數(shù)不再 是靜態(tài)的,所以可能發(fā)生彈出(popping)。為了減輕這種行為,已經(jīng)進行了經(jīng)驗性測試,測試 顯示,結合這些優(yōu)化技術使毛囊漸弱可將這種效果最小化。鑒于此,可以強制每個毛囊首先經(jīng)過可見性確定,并且如果確定是不可見的,則可以通過線性地減小毛發(fā)的不透明度值來 減小毛發(fā)的不透明度。應當認識到,通過利用以上定義的技術,所生成或呈遞的毛發(fā)數(shù)可被減少密度倍 數(shù)值,并且其余毛發(fā)的寬度可被增大寬度倍數(shù)值。因此,通過利用速度和大小量度以及四條 函數(shù)曲線,這些優(yōu)化技術確定了是否剔除毛發(fā)以及將其寬度調(diào)整多少。具體而言,將這些技術用于完全覆蓋有皮毛的生物可以使得顯著節(jié)省處理和存儲 器。這是因為如果生物不是畫面上的特寫或者在畫面上快速移動,則這些技術允許呈遞少 于最初設計的生物所具有的所有毛發(fā)而沒有大的視覺差異,但呈遞時間和存儲器要求被顯 著改善。參考圖36,圖36示出了表3600,表3600給出了在各幀處利用畫面空間大小量度 對毛發(fā)數(shù)、時間和存儲器方面的未經(jīng)優(yōu)化的值和毛發(fā)數(shù)、時間和存儲器方面的經(jīng)優(yōu)化的值 的并排比較。以分和秒列出呈遞時間(“時間”),并且以兆字節(jié)給出存儲器使用率(“存儲 器”)。在表3600所示的該測試中,由皮毛的角色從幀10處的特寫位置移動到幀100處的 遠離相機處。該示例中所使用的函數(shù)曲線是變化迅速的,因為實際毛發(fā)數(shù)從幀10處原始毛 發(fā)數(shù)的78%變?yōu)閹?00處的1%。在表3600中可見,呈遞時間和存儲器使用率都顯著改善。應當注意,依賴于視圖的畫面空間優(yōu)化技術在以下意義上是靈活的函數(shù)曲線可 以被容易地調(diào)整以微調(diào)優(yōu)化,使得角色在任何距離都看起來良好并且存儲器和呈遞時間接 收盡可能地高。參考圖37,圖37是示出利用畫面空間速度方法的另一比較的表3700(與表3600 類似)。在該示例中,角色非??焖俚卦诋嬅嫔祥W動(shotmove)并且被呈遞有運動模糊。 選擇了畫面空間速度為高的幀。應當注意,角色的毛發(fā)量被減少為19%。該技術示出了針 對快速移動鏡頭在呈遞時間和存儲器方面的動態(tài)節(jié)省,在表3700中可見。 此外,在大小和速度量度兩者被彼此結合地利用的情況下執(zhí)行了測試。具體而言, 參考圖38,圖38是示出未經(jīng)優(yōu)化和經(jīng)優(yōu)化的毛發(fā)數(shù)、時間和存儲器值的表3800 (與表3600 和3700類似)。在該示例中,角色被呈遞有從遠溯的幀101處到十分接近的幀270處的運 動模糊。在表3800的值中可見,兩種量度彼此很好地工作并節(jié)省了呈遞時間和存儲器,并 且還被示出為未犧牲視覺質(zhì)量。毛發(fā)子塊優(yōu)化毛發(fā)/皮毛流水線1500的優(yōu)化模塊1567所實現(xiàn)的另一種優(yōu)化技術涉及毛發(fā)子塊 優(yōu)化。一般而言,在基于并非所有毛發(fā)總是對相機可見的事實來呈遞大量毛發(fā)的過程中,這 種優(yōu)化是有用的。利用優(yōu)化模塊1567的毛發(fā)流水線1500可以通過首先不生成不可見的基 元來節(jié)省呈遞時間,而不是生成所有的毛發(fā)并允許顯示模塊1575在呈遞期間執(zhí)行可見性 剔除。具體而言,這些技術的一些方面可由優(yōu)化模塊1567結合顯示模塊1575來實現(xiàn)。在一個實施例中,表面定義模塊1550可用于定義表面,并且優(yōu)化模塊1567可用 于為一組毛發(fā)創(chuàng)建限制盒;判斷限制盒是否可見;并且如果限制盒可見,則與該可見的限 制盒相關聯(lián)的毛發(fā)在表面上被呈遞。一般而言,可以為待呈遞的初始的一組毛發(fā)創(chuàng)建限制盒,然后可以在呈遞之前測 試該限制盒的可見性。如果限制盒是可見的,則將毛發(fā)基元在空間上分成四個子群,并且為 每個子群創(chuàng)建新的限制盒并再次測試每個子群的可見性。如果限制盒被確定為不可見,則對該毛發(fā)群不執(zhí)行進一步的細分并且不對其進行呈遞。在遞歸地細分所有可見毛發(fā)群達預 定次數(shù)之后,每個群的毛發(fā)基元然后被發(fā)送到顯示模塊1575以在該點進行呈遞。參考圖39,圖39是示出用于實現(xiàn)毛發(fā)子塊優(yōu)化的處理3900的流程圖。在圖39中 可見,在框3910,為初始的一組毛發(fā)創(chuàng)建限制盒。接下來,在框3915,判斷用于該初始的一 組毛發(fā)的限制盒是否可見。如果判斷結果為否,則處3900結束(框3920)。例如,可按近似 相等的關系在空間上劃分子群。但是,如果限制盒或者限制盒的一部分對于該初始的一組 毛發(fā)是可見的,則限制盒在空間上被分成子群(框3925)。例如,可按近似相等的關系在空 間上劃分子群。此外,為每個子群創(chuàng)建限制盒(框3930)。還可以參考圖40,圖40是示出毛發(fā)子塊優(yōu)化的簡化示例的圖。在圖40中可見, 示出了第一幀4002,其中用于初始的一組毛發(fā)的限制盒4010位于幀的右側??梢钥吹?,用 于初始的一組毛發(fā)的限制盒4010是可見的,以使得其是可見的并且如幀4004所示,限制盒 4010然后在空間上被分成子群或子群限制盒4012。返回到圖39的處3900,在框3935,判斷這些子群限制盒是否可見。如果判斷結果 為否,則在框3940,處理結束。但是如果這些子群限制盒是可見的,則判斷是否滿足預定數(shù) 目的細分(框3945)。如果判斷結果為否,則子群被進一步劃分并且被遞歸地細分預定次 數(shù)。假定滿足了預定數(shù)目,則在框3950,子群限制盒的毛發(fā)基元被呈遞。具體而言,參考圖40,在幀4006處可見,最左邊的兩個子群限制盒4014被確定為 不可見(并且用陰影線標識),而最右邊的兩個盒是不可見的。因此,與最左邊的兩個可見 子群限制盒4014相關聯(lián)的毛發(fā)被轉送,而與最右邊的兩個不可見子群限制盒相關聯(lián)的毛 發(fā)被放棄。應當認識到,這可被遞歸地實現(xiàn)預定次數(shù)。此外,由于先前參考幾何例示實施例所討論的毛發(fā)/皮毛流水線1500的靈活性, 環(huán)境建模者可以利用毛發(fā)子塊優(yōu)化的各方面以將其擴展到其他計算機圖形用途,例如呈遞 大的草地風景。通過逐鏡頭地利用毛發(fā)子塊優(yōu)化實施例的實施例,可能僅需要呈遞整個風 景的一小部分,從而節(jié)省了大量處理和存儲器。但是,應當認識到,通過利用先前描述的幾 何例示實施例,任何用戶選中的或者隨機生成的幾何對象都可以被呈遞,代替具有或者沒 有相關毛發(fā)參數(shù)(彎曲、旋轉、風等)和與毛發(fā)相關聯(lián)的軸向變形參數(shù)的毛發(fā)。例如,為了定義風景,可以利用如下的單個限制盒來發(fā)起處理該單個限制盒圍繞 定義整個風景的塊。然后可以利用更小的限制盒將該塊細分成四個不相交的象限,如前所 述。對于被剔除的限制盒,不進行進一步處理,但對于繼續(xù)被處理的限制盒,將進行進一步 的細分,直到達到用戶定義的停止標準為止。也可以利用另外的停止標準,例如與子塊維度的參數(shù)長度和參數(shù)紋理空間有關的 參數(shù)限制和細分深度。利用先前描述的、參考圖39和40討論的應用于風景的毛發(fā)子塊優(yōu)化技術,利用 兩千五百萬根毛發(fā)對單個大的草地風景進行了建模,其中毛發(fā)在幾何上被例示為草和/或 樹。但如圖41的幀中所示,利用毛發(fā)子塊優(yōu)化技術實際上僅生成和呈遞了幾百根的草。在 沒有該優(yōu)化的情況下,呈遞所有的草將會需要大得多的處理量和存儲器使用率。毛發(fā)緩存優(yōu)化在照明階段,照明專家通常對已被動畫和布局部門批準的鏡頭進行工作。通常需 要做的是確定燈的數(shù)目和布置并創(chuàng)建實現(xiàn)所希望的外觀需要的照明條件的類型。
具體而言,在照明階段期間,畫面的所有元素已被最終確定,包括所有的毛發(fā)參 數(shù)。因此,可以緩存輸出并再次使用毛發(fā)幾何形狀和毛發(fā)參數(shù)以獲得顯著的處理和存儲器 節(jié)省。在一個實施例中,優(yōu)化模塊1567結合遮擋和背光模塊1570可用于實現(xiàn)這里所描述 的根據(jù)毛發(fā)緩存實施例的技術。為了實現(xiàn)該技術,可以創(chuàng)建和/或確認緩存毛發(fā)狀態(tài)文件,并且可以保存毛發(fā)參 數(shù)的狀態(tài)(因為這些參數(shù)將被呈遞)。例如,這些毛發(fā)參數(shù)可被保存為緩存毛發(fā)狀態(tài)文件中 的未排序的毛發(fā)參數(shù)列表。在一個實施例中,照明模塊1570可用于為鏡頭在照明階段中產(chǎn)生照明效果,并且 優(yōu)化模塊1567可用于判斷是否存在包括毛發(fā)參數(shù)的緩存毛發(fā)狀態(tài)文件;以及判斷緩存毛 發(fā)狀態(tài)文件是否包括將在鏡頭中使用的匹配毛發(fā)參數(shù),并且如果是這樣的話,來自緩存毛 發(fā)狀態(tài)文件的毛發(fā)參數(shù)值被用在照明階段中。參考圖42,示出了包括毛發(fā)狀態(tài)參數(shù)4202、4204、4206等的列表的緩存毛發(fā)狀態(tài) 文件4200的示例。如果緩存毛發(fā)狀態(tài)文件4200并不存在或者包含不同于當前呈遞狀態(tài)的 參數(shù)值,則新的一組值可被保存到緩存毛發(fā)狀態(tài)文件4200中(即,作為毛發(fā)狀態(tài)參數(shù)4202、 4204、4206等)。然后可以利用該新的或者更新的緩存毛發(fā)狀態(tài)文件4200。但是,如果緩存 毛發(fā)狀態(tài)文件4200已經(jīng)與當前呈遞狀態(tài)相匹配,則原始的緩存毛發(fā)狀態(tài)文件4200可被使 用。參考圖43,圖43是示出用于實現(xiàn)毛發(fā)緩存的處理4300的流程圖。在框4302,判 斷是否存在緩存毛發(fā)狀態(tài)文件4200。如果判斷結果為否,則創(chuàng)建新的緩存毛發(fā)狀態(tài)文件 4200(框4304)。然后,在框4306,保存新的緩存毛發(fā)狀態(tài)文件4200。但是,如果存在緩存狀態(tài)文件,則在框4310,判斷緩存毛發(fā)狀態(tài)文件4200是否包 括將用于呈遞的相同參數(shù)。如果是這樣的話,則處理移動到將被描述的框4320。否則,在框 4306,不同的毛發(fā)狀態(tài)參數(shù)被保存到緩存毛發(fā)狀態(tài)文件4200。利用具有相同參數(shù)的緩存毛發(fā)狀態(tài)文件或者具有不同參數(shù)的緩存毛發(fā)狀態(tài)文件 中任一個新的緩存毛發(fā)狀態(tài)文件,處理移動到框4320,在框4320,判斷是否存在正確的文 件鑰匙。在緩存確認、緩存生成和緩存呈遞之前,用排他性的文件鎖將每個呈遞和緩存確認 處理鎖住。因此,需要存在正確的鑰匙以使得緩存毛發(fā)狀態(tài)文件可用于照明階段中。這是 因為在點亮器(lighter)對鏡頭進行工作時通常多個處理被用來生成最終的呈遞幀。如果不存在正確的文件鑰匙,則處理在框4340結束,并且緩存毛發(fā)狀態(tài)文件4200 被刪除。但是,如果緩存毛發(fā)狀態(tài)文件4200被正確地開鎖,則在框4350,緩存文件可用于照 明階段。在一個實施例中,物理的緩存毛發(fā)狀態(tài)文件可被表示為RENDERMAN文件。這是在 不丟失普遍性的情況下完成的,因為其僅僅對生成毛發(fā)幾何形狀所需的數(shù)據(jù)點和參數(shù)進行 了編碼。另外,經(jīng)壓縮的RENDERMAN文件可被用作表示緩存文件的空間節(jié)省技術。因此,先前描述的處理4300判斷緩存毛發(fā)狀態(tài)文件4200是有效的還是無效的。如 果不存在緩存毛發(fā)狀態(tài)文件緩存毛發(fā)狀態(tài)文件或者在緩存文件中所發(fā)現(xiàn)的基元與將要呈 遞的毛發(fā)基元不匹配,則緩存毛發(fā)狀態(tài)文件一般被確定為無效。具體而言,為了確定后一種 情況,可能要求每個緩存毛發(fā)狀態(tài)文件首先包含生成其所使用的毛發(fā)呈遞設置。因此,如果呈遞設置匹配,則認為緩存毛發(fā)狀態(tài)文件是有效的。另一方面,如果發(fā)
27現(xiàn)緩存毛發(fā)狀態(tài)文件是無效的,則正確的毛發(fā)參數(shù)被饋送并存儲到緩存毛發(fā)狀態(tài)文件,如 前所述。通常,在第一次時,緩存是無效的,因此需要被生成(緩存生成和使用)。由于允許 一旦另一處理器生成了緩存就立即使用該緩存的連續(xù)化(serialization),因此這里可以 發(fā)現(xiàn)有所節(jié)省。這單獨將呈遞時間削減了 69%。當不同的處理在使用同一緩存文件時,可 以實現(xiàn)進一步的節(jié)省。應當注意,點亮器通常保持多次再呈遞并且實際的時間節(jié)省通常被 倍增?,F(xiàn)在參考圖44,圖44示出了一個表,其中示出了點亮器通過利用先前描述的技術 來呈遞完全覆蓋有皮毛的角色可以實現(xiàn)的時間節(jié)省。在圖44中可見,示出了在沒有緩存的 情況下的呈遞時間、用于進行呈遞的緩存的生成和使用時間以及利用現(xiàn)有的緩存的呈遞時 間。可以看到,實現(xiàn)了顯著的時間節(jié)省。多種可例示的效果參考圖45,圖45是示出先前描述的包括效果模塊1565的毛發(fā)/皮毛流水線1500 的一個實施例的框圖,其中效果模塊1565還包括允許可重新排序的多種可例示的效果的 效果流水線4510。在一個實施例中,毛發(fā)/皮毛流水線1500的表面定義模塊1550可用于定義表面。 內(nèi)插模塊1560可用于基于至少一根控制毛發(fā)在表面上內(nèi)插至少一根最終毛發(fā)。此外,效果 模塊1565可另外包括效果流水線4510,效果流水線4510用于以預定的順序向最終毛發(fā)應 用多種效果,以生成可由顯示模塊1575最終呈遞的經(jīng)修改的最終毛發(fā)。如先前詳細所述,毛發(fā)/皮毛流水線1500基于輸入可以首先在表面定義模塊1550 處定義表面。此外,如前所述,控制毛發(fā)調(diào)整模塊1555可以定義并調(diào)整控制毛發(fā)以幫助提 供諸如簇集、分裂以及其他先前所述功能之類的功能。毛發(fā)運動合成器模塊1557可以設在 毛發(fā)/皮毛流水線1500中,用于編輯和組合不同的毛發(fā)動畫。如前所述的內(nèi)插模塊1560 可用于基于控制毛發(fā)在表面上內(nèi)插最終毛發(fā)。另外,如前所述,效果模塊1565可向最終毛 發(fā)和皮毛提供各種效果,例如簇集、分裂、波浪效果、編織效果、風效果等等。另外,根據(jù)本發(fā)明的一個實施例,效果模塊1565可以包括效果工廠4504和效果流 水線4510。如稍后將更詳細描述的,使用效果工廠4504和效果流水線4510允許各種先前 描述的效果(例如,簇集、分裂、波浪、編織、風等)被以任何順序應用并且還可以利用不同 參數(shù)來多次應用同一效果。先前描述的效果中的每一個通常包括與給定效果相關聯(lián)的參 數(shù),以提供將被應用于毛發(fā)的效果的某個參數(shù)量(例如,毛發(fā)簇集到控制毛發(fā)的程度、應用 于毛發(fā)的編織量等)。這樣,更逼真的毛發(fā)式樣可被以高保真度的方式正確地建模。通過利用效果流水線4510,用戶通過用戶輸入可以指定什么類型的效果應當被應 用于從內(nèi)插模塊1560接收到的最終毛發(fā)以及這些效果應當以什么順序應用。例如,這可以 通過利用生成可擴展標記語言(XML)文件或者包括該信息的其他合適類型的文件的用戶 接口來實現(xiàn)。該XML文件然后可被傳送到效果工廠4505上。效果工廠4505然后制造用戶所指定的所有效果(例如,簇集、分裂、波浪、編織、 風等),應用針對用戶所選擇的每種效果而選擇的各種參數(shù)值,應用用戶所選擇的效果的排 序,并且以用戶定義的順序用用戶定義的多個不同效果來填充效果流水線4510。此外,應當 認識到,用戶可以選擇將同一效果應用多次,這多次具有不同參數(shù)值。
圖46是示出根據(jù)本發(fā)明一實施例的用于實現(xiàn)可重新排序的多種可例示效果的處 理4600的流程圖,這多種效果可通過效果模塊1565來實現(xiàn)。在框4605,用戶通過輸入來定義將應用于最終毛發(fā)的效果的類型。接下來,用戶 通過用戶輸入來定義效果被應用于最終毛發(fā)的順序(框4610)。用戶可以按用戶所希望的 任何順序,來選擇多種不同的效果和多種類似的效果(對于每個效果具有相同或不同參數(shù) 值),以及其組合。具體而言,可以利用先前描述的簇集、分裂、波浪、編織和風效果及其他先前描述 的效果,以及本領域技術人員通常知道的其他類型的效果。此外,如前所述,為了完成該操 作,可以通過利用用戶接口來接受用戶輸入,該用戶接口然后可以生成包括該信息以供處 理的XML文件或其他合適類型的文件?;谠撔畔?,效果模塊1565的效果工廠4505以用戶所選擇的順序來創(chuàng)建用戶所 指定的這類效果(框4615),并利用所希望的效果來填充效果流水線4510 (框4620)。所希 望的效果然后被應用于最終毛發(fā)(框462 ,使得最終毛發(fā)因而被修改,并且經(jīng)修改的最終 毛發(fā)被傳送到毛發(fā)/皮毛流水線1500的優(yōu)化模塊1567 (框4630)、遮擋和陰影模塊1570等 并最終傳送到顯示模塊1575,在顯示模塊1575,經(jīng)修改的最終毛發(fā)被呈遞(框4640)。應當 認識到,在毛發(fā)/皮毛流水線中可以利用另外的或者不同的模塊。參考圖47,示出了根據(jù)本發(fā)明一實施例的提供可重新排序的多種可例示的效果的 示例的框圖,這些效果通過毛發(fā)/皮毛流水線的效果模塊的效果流水線4510而被應用于最 終毛發(fā)。在圖47中可見,來自內(nèi)插模塊的最終毛發(fā)4705被轉發(fā)到效果模塊,更具體地,轉 發(fā)到效果模塊的效果流水線4510。包括用于效果的參數(shù)值和來自用戶接口的排序信息在內(nèi) 的用戶定義的效果被傳送到效果工廠4505上。該信息可被處理并存儲為XML文件。效果 工廠4505制造用戶所指定的所有多種不同類型的效果和排序,并利用效果來填充效果流 水線4510。在該示例中,第一效果(例如,波浪)4722與第二效果(例如,簇集)4724以及各 種中間效果相結合,并最終與最后的效果(例如,編織)47 相結合。所有這些效果被應用 于最終毛發(fā)4705以生成經(jīng)修改的最終毛發(fā)4730。應當認識到,先前描述的波浪、簇集和編 織效果僅僅是示例性的。因此,利用用戶所請求的所有所希望的效果來填充效果流水線4510,并且通過效 果流水線4510來處理來自內(nèi)插模塊的所有最終經(jīng)內(nèi)插毛發(fā)4705以生成經(jīng)修改的最終毛發(fā) 4730。一旦通過效果流水線4510處理了最終毛發(fā),然后就將經(jīng)修改的最終毛發(fā)4730移交 給優(yōu)化模塊、遮擋和陰影模塊并最終移交給顯示模塊以供呈遞。例示毛發(fā)數(shù)據(jù)庫參考圖48,圖48是示出根據(jù)本發(fā)明一實施例的進一步包括例示模塊4802和例示 毛發(fā)數(shù)據(jù)庫4804的毛發(fā)/皮毛流水線1500的框圖。結合例示毛發(fā)數(shù)據(jù)庫4804來使用例 示模塊4802允許大量的毛發(fā)或者對象被例示。在一個實施例中,毛發(fā)/皮毛流水線1500的表面定義模塊1550可用于定義表面。 例示模塊4802用于對毛發(fā)進行例示。例示毛發(fā)數(shù)據(jù)庫4804耦合到例示模塊4802并且用 于存儲毛發(fā)數(shù)據(jù)。如將要描述的,例示模塊4802從例示毛發(fā)數(shù)據(jù)庫4804檢索毛發(fā)數(shù)據(jù)以允許大量的毛發(fā)被有效地例示。顯示模塊1575(在內(nèi)插、效果、優(yōu)化等之后)用于相對于表 面來顯示所例示的毛發(fā)。圖形呈遞過程中利用的典型計算機僅僅具有有限量的隨機存取存儲器(RAM)可 專用于表示最終毛發(fā)以供呈遞,使得可被例示以供呈遞的來自RAM的毛發(fā)數(shù)相當有限。但 是,通過結合存儲毛發(fā)信息的例示毛發(fā)數(shù)據(jù)庫4804來利用例示模塊4802,發(fā)現(xiàn)可以容易地 滿足對巨大毛發(fā)數(shù)的產(chǎn)生要求以及諸如草地呈遞之類的其他應用。通過結合存儲毛發(fā)信息 的例示毛發(fā)數(shù)據(jù)庫4804來利用例示模塊4802,用于產(chǎn)生包括數(shù)百萬毛發(fā)(及以上)中的毛 發(fā)數(shù)的大量毛發(fā)的可縮放性(scalability)是可實現(xiàn)的。例示模塊數(shù)據(jù)庫可被存儲在一種 類型的存儲器中,該存儲器允許相對大規(guī)模的存儲,例如硬盤驅動器、磁盤驅動器、網(wǎng)絡驅 動器、光學驅動器等,或者允許相對大規(guī)模的存儲的任何其他類型的存儲設備。毛發(fā)是根據(jù)先前描述的毛發(fā)/皮毛流水線1500生成的,毛發(fā)/皮毛流水線1500包 括表面定義1550、控制毛發(fā)定義和調(diào)整1555等。在該流水線中,例示模塊4802耦合到例示 毛發(fā)數(shù)據(jù)庫4804,并布置在內(nèi)插模塊1560之前。例示模塊4802可用于從存儲大量毛發(fā)數(shù) 據(jù)的例示毛發(fā)數(shù)據(jù)庫4804中檢索相對大量的毛發(fā)數(shù)據(jù)以供例示。這樣,例示模塊4802可 以有效并高效地生成巨大數(shù)目的毛發(fā)。通過將例示模塊4802和例示毛發(fā)數(shù)據(jù)庫4804布置在內(nèi)插模塊1560之前,諸如毛 囊位置、控制毛發(fā)權重和簇成員關系之類的靜態(tài)毛發(fā)信息可在內(nèi)插和效果被應用之前被存 儲在例示毛發(fā)數(shù)據(jù)庫4804中。通過這樣做,包括標準的存儲器內(nèi)(基于RAM)的實例化在 內(nèi)的不同表示策略可被單獨使用,或者結合例示毛發(fā)數(shù)據(jù)庫4804來使用?;蛘?,例示毛發(fā) 數(shù)據(jù)庫4804可被單獨使用。實際上,例示模塊4802的例示毛發(fā)數(shù)據(jù)庫4804可用作對經(jīng)由 例示毛發(fā)數(shù)據(jù)庫4804的標準的存儲器內(nèi)(基于RAM)例示的代理。應當認識到,通過利用例示毛發(fā)數(shù)據(jù)庫4804,直接處理大量數(shù)據(jù)集的嵌入式數(shù)據(jù) 庫技術可被用于毛發(fā)實例化和生成。照此,通過結合例示毛發(fā)數(shù)據(jù)庫4804來利用例示模 塊4802,提供了用于表示最終毛發(fā)的高度可縮放技術,使得巨大數(shù)目的毛發(fā)可被有效且高 效地例示。實際上,例示毛發(fā)數(shù)據(jù)庫4804非常順從于用于對大量最終毛發(fā)集例示的迭代樣 式。圖49是示出可由例示模塊4802在標準RAM存儲器(例如,存儲器內(nèi)的例示)或者 例示毛發(fā)數(shù)據(jù)庫4804中的一者或兩者上實現(xiàn)的迭代樣式4920的框圖?;诘鷺邮?920 的存儲器內(nèi)例示4922可用于在不需要大量毛發(fā)時對來自存儲器(例如RAM)的最終毛發(fā)實 例化。但是,對于更大的毛發(fā)實例化任務(即,要求大的數(shù)據(jù)集),數(shù)據(jù)可被存儲在例示毛發(fā) 數(shù)據(jù)庫4804。迭代樣式4920可被應用于例示毛發(fā)數(shù)據(jù)庫4804以基于例示毛發(fā)數(shù)據(jù)庫中 的用戶輸入(例如,所定義的局部區(qū)域、密度圖、毛發(fā)的總體密度等)在表面上對大量毛發(fā) (或者其他形狀,例如草、雜草、樹等)實例化。應當認識到,依賴于任務,可以使用RAM存儲 器4922,可以使用例示毛發(fā)數(shù)據(jù)庫4804,或者可以使用這兩者。如將要描述的,基于迭代樣式,可從例示毛發(fā)數(shù)據(jù)庫4804中容易地搜索和收集包 括毛發(fā)位置、控制毛發(fā)權重和簇成員關系在內(nèi)的毛發(fā)屬性。這允許高的定制程度。例如,針 對某個區(qū)域內(nèi)的所有毛發(fā)或者針對所有簇集中心毛發(fā)等來詢問例示毛發(fā)數(shù)據(jù)庫4804是容 易的。參考圖50,圖50是根據(jù)本發(fā)明一實施例的可存儲在例示毛發(fā)數(shù)據(jù)庫4804中的信息類型的示例。在一種實現(xiàn)方式中,例示毛發(fā)數(shù)據(jù)庫4804可以包括毛發(fā)1 N的數(shù)據(jù)。對 于每根毛發(fā)1 N(由行表示),以下信息可按列形式包括在數(shù)據(jù)庫中囊位置5010、可變數(shù) 目的控制毛發(fā)權重參數(shù)1 N(5020、5022)以及給定毛發(fā)的簇成員關系5030。關于簇成員 關系值5030,這可以是簇成員毛發(fā)的簇中心毛發(fā)的行索引、非簇成員毛發(fā)的空值或者簇中 心毛發(fā)的負值。 利用包括先前描述的為最終毛發(fā)存儲的數(shù)據(jù)類型的先前描述的例示毛發(fā)數(shù)據(jù)庫 4804,例示毛發(fā)數(shù)據(jù)庫4804允許巨大數(shù)目的毛發(fā)被有效且高效地例示。此外,例示毛發(fā)數(shù) 據(jù)庫4804非常順從于用于基于輸入標準來收縮和例示大的最終集的迭代樣式。使用例示 毛發(fā)數(shù)據(jù)庫允許大量的毛發(fā)以利用標準的存儲器內(nèi)的基于RAM的例示所不可能有的方式 被有效地處理和例示。此后,通過內(nèi)插模塊1560、效果模塊1565等可以應用動態(tài)效果,并且可以在毛發(fā) /皮毛流水線1500的顯示模塊1575處最終顯示毛發(fā)(或者如前所述的其他形狀——例如 草、雜草、樹等)。在本說明書中,給出了許多具體細節(jié)。但是,應當理解,本發(fā)明的實施例可在沒有 這些具體細節(jié)的情況下實施。在其他實例中,公知的電路、結構、軟件處理和技術未被示出, 以免模糊對本說明書的理解。本發(fā)明的各種實施例的部件可用硬件、軟件、固件、微碼或者其組合來實現(xiàn)。當用 軟件、固件或者微碼實現(xiàn)時,本發(fā)明的實施例的元件是用于執(zhí)行必要任務的代碼或者代碼 段。代碼段可以表示過程、功能、子程序、程序、例程、子例程、模塊、軟件包、類或者指令、數(shù) 據(jù)結構或程序語句的任何組合。代碼段可通過傳送和/或接收信息、數(shù)據(jù)、自變量、參數(shù)或 者存儲器內(nèi)容而耦合到另一代碼段或者硬件電路。信息、自變量、參數(shù)、數(shù)據(jù)等可經(jīng)由任何 適當?shù)氖侄味粋魉?、轉發(fā)或者發(fā)送,這些手段包括存儲器共享、消息傳送、令牌傳送、網(wǎng)絡 傳輸?shù)?。程序或代碼段可被存儲在處理器可讀的介質(zhì)中,或者通過傳輸介質(zhì)由體現(xiàn)為載 波的計算機數(shù)據(jù)信號或者由載波所調(diào)制的信號而發(fā)送?!疤幚砥骺勺x或可訪問的介質(zhì)”或 者“機器可讀或可訪問的介質(zhì)”可以包括任何能夠存儲、傳輸或者轉移信息的介質(zhì)。機器 可訪問的介質(zhì)的示例包括電子電路、半導體存儲器設備、只讀存儲器(ROM)、閃存、可擦除 ROM(EROM)、軟盤、緊致盤(CD-ROM)、光盤、硬盤、光纖介質(zhì)、射頻(RF)鏈路等等。計算機數(shù)據(jù) 信號可以包括任何可以在諸如電子網(wǎng)絡信道、光纖、空氣、電磁、RF鏈路等的傳輸介質(zhì)上傳 播的信號。代碼段可被經(jīng)由諸如因特網(wǎng)、內(nèi)聯(lián)網(wǎng)等的計算機網(wǎng)絡而下載。機器可訪問的介 質(zhì)可被體現(xiàn)為制造物品。機器可訪問的介質(zhì)可以包括數(shù)據(jù),這些數(shù)據(jù)在被機器訪問時,使機 器執(zhí)行以下描述的操作。這里的術語“數(shù)據(jù)”指的是為了機器可讀目的而被編碼的任何類 型信息。因此,其可以包括程序、代碼、數(shù)據(jù)、文件等。更具體而言,本發(fā)明的實施例的全部或者一部分可通過軟件實現(xiàn)。軟件可以具有 彼此耦合的若干模塊。一個軟件模塊耦合到另一個模塊以接收變量、參數(shù)、自變量、指針等, 和/或生成或傳送結果、更新的變量、指針等。軟件模塊也可以是與運行在平臺上的操作系 統(tǒng)交互的軟件驅動器或者接口。軟件模塊也可以是用于配置、設置、初始化、發(fā)送和接收去 往和來自硬件設備的數(shù)據(jù)的硬件驅動器。盡管按照若干實施例描述了本發(fā)明,但是本領域技術人員將會認識到,本發(fā)明不限于所描述的實施 例,而是可以在所附權利要求的精神和范圍內(nèi),在進行修改和變更的情 況下來實施。因此,這種描述被認為是說明性而非限制性的。
權利要求
1.一種用于生成毛發(fā)的毛發(fā)流水線,包括表面定義模塊,用于定義表面;以及優(yōu)化模塊,用于判斷是否將在所述表面上呈遞毛發(fā),所述優(yōu)化模塊用于為所述毛發(fā)確定大小量度;將第一密度曲線應用于為所述毛發(fā)確定的大小量度以生成密度倍數(shù)值;以及基于所述密度倍數(shù)值,判斷是否呈遞所述毛發(fā)。
2.如權利要求1所述的毛發(fā)流水線,其中,所述密度倍數(shù)值被進一步與隨機數(shù)相比較 以判斷是否呈遞所述毛發(fā)。
3.如權利要求1所述的毛發(fā)流水線,其中,為所述毛發(fā)確定大小量度的步驟包括計算 所述毛發(fā)在規(guī)格化設備坐標(NDC)空間中的長度。
4.如權利要求1所述的毛發(fā)流水線,其中,第一寬度曲線被應用于所述毛發(fā)的大小量 度以調(diào)整所述毛發(fā)的寬度。
5.如權利要求1所述的毛發(fā)流水線,其中,所述優(yōu)化模塊還基于所述毛發(fā)的毛發(fā)根位 置從第一幀到第二幀所移動的距離來確定速度空間量度。
6.如權利要求5所述的毛發(fā)流水線,其中,第二密度曲線被應用于所述毛發(fā)的速度空 間量度以生成所述密度倍數(shù)值。
7.如權利要求6所述的毛發(fā)流水線,其中,第一寬度曲線被應用于所述毛發(fā)的大小量 度并且第二寬度曲線被應用于所述毛發(fā)的速度空間量度,以生成寬度倍數(shù)值來調(diào)整所述毛 發(fā)的寬度。
8.一種用于判斷毛發(fā)是否將被呈遞的方法,包括為毛發(fā)確定大小量度;將第一密度曲線應用于為所述毛發(fā)確定的大小量度以生成密度倍數(shù)值;以及基于所述密度倍數(shù)值來判斷是否呈遞所述毛發(fā)。
9.如權利要求8所述的方法,還包括將所述密度倍數(shù)值與隨機數(shù)相比較以判斷是否呈 遞所述毛發(fā)。
10.如權利要求8所述的方法,其中,為所述毛發(fā)確定大小量度的步驟包括計算所述毛 發(fā)在規(guī)格化設備坐標(NDC)空間中的長度。
11.如權利要求8所述的方法,還包括將第一寬度曲線應用于所述毛發(fā)的大小量度以 調(diào)整所述毛發(fā)的寬度。
12.如權利要求8所述的方法,還包括基于所述毛發(fā)的毛發(fā)根位置從第一幀到第二幀 所移動的距離來確定速度空間量度。
13.如權利要求12所述的方法,還包括將第二密度曲線應用于所述毛發(fā)的速度空間量 度以生成所述密度倍數(shù)值。
14.如權利要求13所述的方法,還包括將第一寬度曲線應用于所述毛發(fā)的大小量度并 且將第二寬度曲線應用于所述毛發(fā)的速度空間量度,以生成用于調(diào)整所述毛發(fā)的寬度的寬 度倍數(shù)值。
全文摘要
毛發(fā)流水線利用表面定義模塊(50)來定義表面和控制毛發(fā),并且毛發(fā)運動合成器模塊(55)組合與控制毛發(fā)和表面相關聯(lián)的不同控制毛發(fā)曲線形狀。具體而言,毛發(fā)運動合成器模塊生成定義靜態(tài)控制毛發(fā)曲線形狀的靜態(tài)節(jié)點;生成定義動畫控制毛發(fā)曲線形狀的動畫節(jié)點;并且將靜態(tài)節(jié)點的靜態(tài)控制毛發(fā)曲線形狀與動畫節(jié)點的動畫控制毛發(fā)曲線毛發(fā)形狀組合,以產(chǎn)生用于控制毛發(fā)的復合控制毛發(fā)曲線形狀。
文檔編號G06T13/40GK102096937SQ201110023580
公開日2011年6月15日 申請日期2007年7月24日 優(yōu)先權日2006年7月24日
發(fā)明者克林特·川, 弗蘭克斯·查德外恩, 格斯塔弗·梅里徹, 阿明·沃爾特·布朗德林 申請人:索尼株式會社, 索尼電影娛樂公司