• 
    

    
    

      99热精品在线国产_美女午夜性视频免费_国产精品国产高清国产av_av欧美777_自拍偷自拍亚洲精品老妇_亚洲熟女精品中文字幕_www日本黄色视频网_国产精品野战在线观看

      ?

      淺談三維動(dòng)畫中綁定工具的開發(fā)

      2022-10-08 01:46:32劉德新
      現(xiàn)代電影技術(shù) 2022年8期
      關(guān)鍵詞:命令物體界面

      劉德新

      中影動(dòng)畫產(chǎn)業(yè)有限公司,北京 101400

      三維軟件中的幾何體 (Geometry)是依據(jù)三維空間中不同位置的點(diǎn) (Vertex)組成的。三個(gè)點(diǎn)形成一個(gè)可見面,相對(duì)平滑的表面需要的點(diǎn)少,結(jié)構(gòu)復(fù)雜的表面需要的點(diǎn)多。這些表面最終通過著色系統(tǒng)生成可視化的圖形圖像。在現(xiàn)實(shí)生活中通常稱之為 “三維模型”。動(dòng)畫制作中的資產(chǎn)概念是指包含了模型、材質(zhì)和綁定三種數(shù)據(jù)的綜合型文件,所謂綁定 (Rig),就是在三維軟件中通過對(duì)三維模型添加變形器 (Deform)、骨骼 (Skeleton)、動(dòng)態(tài)模擬(Dynamic)(其中的一部分功能),從而影響模型上局部的點(diǎn)或全部的點(diǎn),使其可以按照綁定師的意圖變成新的形態(tài),再通過控制器 (Controller)鏈接到以上幾種不同的影響方式上,最終達(dá)到通過控制器可以自由地控制模型形態(tài)來完成各種動(dòng)畫動(dòng)作的一系列操作。只有在綁定工作完成后才被視為 “可用的資產(chǎn)”,才會(huì)被批準(zhǔn)上傳給動(dòng)畫部門使用。Maya的綁定文件是一種對(duì)技術(shù)和規(guī)格要求都很嚴(yán)謹(jǐn)?shù)奈募问?有明確的技術(shù)標(biāo)準(zhǔn)來處理以上幾種類型組件間的邏輯關(guān)系,并且提供保護(hù)其綁定組件不被隨意篡改的功能。綁定的內(nèi)容根據(jù)制作難度又可細(xì)分為場(chǎng)景、道具、角色三種情況,是整個(gè)動(dòng)畫工業(yè)中規(guī)范化和自動(dòng)化需求最高的工作。以道具綁定為例,由于每個(gè)道具模型都需要使用同樣的綁定規(guī)格,為了減少重復(fù)勞動(dòng)最大幅度的簡(jiǎn)化道具的綁定工作,是本次筆者著手編寫綁定工具箱的初衷。(下文中提到的綁定工作均默認(rèn)在Maya中進(jìn)行)

      1 根據(jù)綁定的工作內(nèi)容和流程規(guī)范收集基本需求

      1.1 幾何體的命名和綁定文件的層級(jí)結(jié)構(gòu)

      在一個(gè)模型文件中會(huì)包含幾何體 (Geometry)和用于分類和管理這些幾何體的組 (Group)。綁定文件會(huì)在此基礎(chǔ)上將添加其他用途的內(nèi)容,為了方便文件管理和規(guī)范制作標(biāo)準(zhǔn),這些 “組件”通常在命名時(shí)會(huì)使用前綴或者后綴來區(qū)分不同物體的類型,并且會(huì)被放置在某種固定的層級(jí)結(jié)構(gòu) (Hierarchy)中,這就是所謂的 “綁定的規(guī)格”。

      1.2 為復(fù)雜綁定添加更多的控制器

      如果遇上結(jié)構(gòu)復(fù)雜或者運(yùn)動(dòng)復(fù)雜的模型,往往需要添加更多的控制功能。比如汽車的綁定通常會(huì)為車身和四輪添加單獨(dú)的控制器以實(shí)現(xiàn)在顛簸時(shí)每個(gè)部分都可以進(jìn)行單獨(dú)的表演。為方向盤添加控制器時(shí)需要注意控制器和模型的傾斜角度要保持一致。車門、座椅、擋位、后視鏡每個(gè)可以動(dòng)的部分都可能會(huì)在考慮的范圍內(nèi)。從更豐富綁定的功能上來說,還可以在車輛向前或向后運(yùn)動(dòng)時(shí)添加車輪根據(jù)移動(dòng)的距離自行轉(zhuǎn)動(dòng)的功能,甚至是車輛發(fā)生碰撞時(shí)車身出現(xiàn)的凹損變形等。

      每添加一個(gè)控制效果幾乎都需要添加相應(yīng)的控制器,然后與模型匹配中心點(diǎn)和軸向,最后鏈接屬性到模型。控制器一般使用曲線來制作,由于在Maya中提供的曲線類型非常單調(diào),為了動(dòng)畫師在使用綁定文件時(shí)更直觀,綁定師經(jīng)常需要花費(fèi)時(shí)間根據(jù)模型手動(dòng)制作形狀更加貼切的控制器 (方形、立方型、圓形、球形、箭頭指向形等),以及設(shè)置控制器的顏色,也經(jīng)常會(huì)發(fā)生替換更合適的曲線形狀的情況。由于幾乎每個(gè)綁定文件都會(huì)添加很多控制器,因此在控制器方面的需求也是需要進(jìn)行程序化的重點(diǎn)內(nèi)容。

      圖1 汽車模型和控制系統(tǒng)

      1.3 整合常用的綁定命令

      綁定師在使用Maya時(shí)會(huì)根據(jù)自己的工作需求經(jīng)常使用到一些在不同模塊不同菜單里的命令,按照類型來劃分,凍結(jié) (Freeze)、刪除歷史 (Delete History)、中心點(diǎn) (Center Pivot)是第一類。常用變形器比如融合變形 (Blend Shape)、晶格 (Lattice)、簇 (Cluster)、曲線變形 (Wire)是第二類。骨骼相關(guān)的命令是第三類。如果能把這些命令集成在一個(gè)工具面板里,使用起來會(huì)方便得多。最后還有一種特殊類型的命令,以拷貝蒙皮權(quán)重命令(Copy Skin Weights)為例,在兩個(gè)蒙皮物體間拷貝權(quán)重效果通常都是正常的,但是將一個(gè)物體作為基礎(chǔ)向多個(gè)物體同時(shí)拷貝權(quán)重時(shí)則無法正常工作,這時(shí)需要把此類命令用Python改寫成循環(huán)語句才能夠達(dá)到預(yù)期的結(jié)果。

      1.4 簡(jiǎn)化鏈接方式

      Maya中提供的鏈接方式主要有約束 (Constrain)、屬性鏈接 (Attribute Connection)、驅(qū)動(dòng)關(guān)鍵幀 (Set Driven Key)三種。約束命令在Maya中操作簡(jiǎn)單,只要選擇相應(yīng)的物體點(diǎn)擊命令就可以了。但是屬性鏈接的操作會(huì)稍顯復(fù)雜,需要使用屬性鏈接編輯器 (Connection Editor)或者節(jié)點(diǎn)編輯器(Node Editor)來完成操作。對(duì)于物體最外層的移動(dòng)節(jié)點(diǎn) (Transform Node)的鏈接操作來說還是有值得用Python語句優(yōu)化的必要,這樣可以免去打開屬性鏈接編輯器或節(jié)點(diǎn)編輯器的必要。

      1.5 最終化綁定文件

      綁定文件在功能性上制作完成后,為了保護(hù)其不被篡改,可以對(duì)文件中的某些指定內(nèi)容予以鎖定或者隱藏。

      2 制作類道具綁定工具箱的開發(fā)

      2.1 Python程序的架構(gòu)

      Maya的內(nèi)置腳本類型為MEL,此外它也支持C、C++、Python等多種語言類型。

      制作類程序的開發(fā)主要是依托Maya已有的命令和綁定的制作規(guī)范,是功能相對(duì)單純的程序。這種形式的程序?qū)⑺械墓δ?(Function)和界面(UI)編寫在一個(gè)腳本內(nèi),最后通過界面中的按鍵(Button)調(diào)取各自需要的功能 (Function)以達(dá)成既定目標(biāo)。由于幾乎不會(huì)涉及到其他部門和影響整體流水線,編寫和調(diào)整十分靈活,缺點(diǎn)是承載的內(nèi)容有限。

      另一種是為了配合生產(chǎn)線,并且會(huì)涉及到各個(gè)部門間協(xié)同工作的結(jié)構(gòu)復(fù)雜的程序。這種程序可能是Maya內(nèi)部的,也可能是與其他軟件相鏈接的。形式上通常會(huì)把每個(gè)功能寫成單獨(dú)的程序存放在固定的路徑中,然后編寫一個(gè)更大的框架程序來調(diào)用這些子程序。界面程序的按鍵命令會(huì)調(diào)用路徑下單獨(dú)存放的功能程序。在強(qiáng)調(diào)流程的前提下,這種方式更便于程序的管理和維護(hù)。

      2.2 實(shí)現(xiàn)功能 (Function)

      與其說在Maya中使用Python,不如說是在Python編譯器中使用Maya的命令。在使用Maya的腳本編輯器 (Script Editor)中的Python編輯器開始寫作前,需要將Maya的命令導(dǎo)入Python編輯器,以幫助Python理解Maya命令。

      通過整理流程規(guī)范和收集工作中的需求我們已經(jīng)明確了此次需要程序化的工作內(nèi)容,接著我們來逐個(gè)分析,找到適用于編寫它們的Python命令和語法。

      本文 “1.1”創(chuàng)建綁定層級(jí) (Hierarchy)的工作大致可以歸納為以下內(nèi)容:添加一個(gè)立方體形狀的曲線 (Curve)作為主控制器,調(diào)整曲線匹配模型的范圍。添加一些組,修改這些組和曲線的名字。把模型、組、曲線 (此時(shí)已變成控制器)按照綁定規(guī)范放置到適當(dāng)?shù)膶蛹?jí)位置。最后再添加一些基本功能,比如杯子重心的切換 (從杯底到杯子間),為防止模型被誤碰還需要添加控制顯示模式切換的屬性。

      在人工操作的情況下這是一種線性不重復(fù)的工作流。每個(gè)步驟只操作一次,且步驟非常多。當(dāng)換作用Python程序的方式來進(jìn)行描述時(shí)是這樣的:工作類型一:各種和創(chuàng)建相關(guān)的命令,負(fù)責(zé)創(chuàng)建整個(gè)綁定過程中需要的所有必要的組件。如用于基本結(jié)構(gòu)的空組 (Null)、標(biāo)準(zhǔn)比例主控制器線條 (空間比例1∶1∶1的CV曲線)、定位器 (Locator),以及各種運(yùn)算節(jié)點(diǎn) (Node)。也可以將為物體添加自定義屬性 (Add Attribute)看作是一種子級(jí)的創(chuàng)建工作。工作類型二:屬性的獲取 (Get Attribute)和賦予 (Set Attribute),負(fù)責(zé)獲取不同物體中必要屬性的數(shù)據(jù)并將其保存到變量中,在其后的工作中根據(jù)需要將這些變量賦給其他物體的屬性。如通過提取模型體積范圍的數(shù)據(jù)賦予到標(biāo)準(zhǔn)控制器,使控制曲線得以匹配任何模型的體積范圍。工作類型三:負(fù)責(zé)屬性連接 (Connect Attribute),通過控制器將不同物體或者計(jì)算節(jié)點(diǎn)的可用屬性連接起來,最終達(dá)到預(yù)期的可控效果。最后一種工作類型是調(diào)整層級(jí)結(jié)構(gòu)的命令 (Parent),用于將各部件按照既定規(guī)格放置到標(biāo)準(zhǔn)的綁定架構(gòu)中。這樣便實(shí)現(xiàn)了所有的工作目標(biāo)。經(jīng)過考慮還特意增加了Deform Reor和JointReor兩個(gè)按鈕,可以把選中的內(nèi)容快速放置到變形器組或者骨骼組的層級(jí)結(jié)構(gòu)中。

      圖2 右圖的綁定文件在層級(jí)結(jié)構(gòu) (Hierarchy)上發(fā)生的變化

      圖3 鋼琴按鍵批量創(chuàng)建的控制器

      本文 “1.2”提到的控制器一般使用曲線圓環(huán)(NURBSCircle)來制作。鋼琴可以作為一個(gè)既常見又極端的綁定案例,由于無法預(yù)知在動(dòng)畫制作階段具體會(huì)按到哪些琴鍵,為所有的琴鍵都添加控制器是權(quán)宜之計(jì),是重復(fù)勞動(dòng)的典型案例。此時(shí)工作需求進(jìn)一步提升了,從最開始的為單一物體創(chuàng)建控制器變成為很多物體批量創(chuàng)建控制器 (Controller)。對(duì)應(yīng)的方法是使用Python語言的ls命令生產(chǎn)列表來判斷當(dāng)前選擇了的物體,然后通過for循環(huán)語句為列表中的物體依次創(chuàng)建曲線圓環(huán),匹配中心點(diǎn)和軸向,修改圓環(huán)名稱,添加約束到物體。修改控制器顏色 (彩色按鈕)或替換控制器曲線形態(tài) (Replace)的情況是一種對(duì)已有對(duì)象的 “修改”行為。最初的做法只考慮了對(duì)當(dāng)前物體 (Select)進(jìn)行一對(duì)一的修改。為了方便工作也都將程序改寫成批量處理的形式。

      曲線 (Curve)是通過空間中不同位置的點(diǎn)來形成的,控制器曲線是通過程序自定義了曲線上每個(gè)點(diǎn)的位置來實(shí)現(xiàn)的。曲線可以單獨(dú)當(dāng)作控制器來使用,也可以通過Replace按鈕替換到其他的控制器形態(tài)。

      圖4 多種形態(tài)的控制器

      本文 “1.3”中的Maya常用命令整合僅僅是把需要的命令逐個(gè)羅列在程序里即可。為了區(qū)分命令種類,特意把它們分成了上下兩個(gè)部分。本文“1.4”需要實(shí)現(xiàn)的是用第一個(gè)選擇的物體對(duì)第二個(gè)選擇的物體進(jìn)行移動(dòng)旋轉(zhuǎn)縮放三種屬性的鏈接(Connect)或者約束 (Constraint),同樣使用列表命令來判斷選擇的物體,然后對(duì)列表中的兩個(gè)物體需要的屬性進(jìn)行鏈接。此外還使用for循環(huán)語句添加了前文提到的批量拷貝權(quán)重 (Copy Weight)的功能。

      圖5 在Outliner中隱藏掉不想被意外改動(dòng)的內(nèi)容

      本文 “1.5”最終化面板提供兩種鎖定方式,一種是鎖定物體的基礎(chǔ)屬性,一種是最終化鎖定。兩種功能針對(duì)的內(nèi)容是不同的,同樣也提供對(duì)應(yīng)的解鎖功能。需要說明的是為已完成的綁定文件進(jìn)行最終化的需求并不常見,實(shí)現(xiàn)這一功能方式是對(duì)綁定架構(gòu)中已有的且固定的組件名稱進(jìn)行拾取,并將其信息在大綱視圖 (Outliner)內(nèi)進(jìn)行隱藏操作。使得非綁定人員在打開文件后看不到控制器以外的綁定信息,從而達(dá)到保護(hù)綁定文件的作用。

      2.3 可視化界面

      通過以上的介紹可以發(fā)現(xiàn),大部分的程序是以基本的命令和簡(jiǎn)單的邏輯語句來完成編寫的。要注意的是Python語句的特點(diǎn)是每行只能執(zhí)行一個(gè)命令。在Maya中執(zhí)行Python語句只要是格式正確都可以被執(zhí)行。但是為了能夠把這功能性命令通過可視化的界面來執(zhí)行,需要把每個(gè)完整的命令序列封套進(jìn)def函數(shù)并指認(rèn)到特定的按鈕命令中才能被調(diào)用。Maya的Python命令中提供非常豐富的界面編輯類型,通過在Maya幫助文件的命令檢索中查詢Layout一詞,可以得到非常多關(guān)于界面布局的命令,筆者使用的第一個(gè)UI就是基于Maya提供的幫助文件。但是隨著功能的增多,后續(xù)的版本改為了混合型的Layout布局。

      2.4 逐步完善和最終版本的完成

      工具的開發(fā)是一個(gè)循序漸進(jìn)的過程,也許最開始只是單純?yōu)榱藴p少某項(xiàng)重復(fù)勞動(dòng)。作為編程的起點(diǎn),很多Maya用戶會(huì)通過復(fù)制腳本編輯器中已經(jīng)執(zhí)行好的MEL命令,就可以有效地減少重復(fù)工作了。如果能有目的地對(duì)這些程序進(jìn)行篩選并去掉不需要的部分,工作效率會(huì)提高地更多。在Maya中使用Python命令有兩個(gè)基本前提:一是需要專門學(xué)習(xí)Python的編譯方式,二是學(xué)習(xí)Maya幫助文件中的Python命令和借鑒其提供的腳本范例。從單行的命令開始逐步掌握循環(huán)語句 (for語句)、條件語句 (if語句)、函數(shù) (def)等編寫形式。建議把界面看作一個(gè)獨(dú)立的部分去學(xué)習(xí)掌握。筆者在完成最初幾個(gè)小功能的代碼時(shí)完全沒有考慮會(huì)為其編寫界面程序,隨后逐漸開始樂此不疲,幾乎將以往累計(jì)下的所有需求逐個(gè)進(jìn)行了程序化,并最終整合到同一個(gè)腳本中。

      從圖6來看,V01版本中最初的想法只是為了完成需求1.1道具綁定的層級(jí) (Props Puppet Create)和需求1.5綁定文件的最終化 (Props Rigging Finalize)。在V04版本中加入了1.2為物體添加控制器和調(diào)整控制器顏色的功能,由于新按鈕是接在上個(gè)版本的下面,導(dǎo)致這個(gè)版本過于浪費(fèi)界面空間,布局和顏色都是默認(rèn)參數(shù),不夠美觀。第V06版本在界面布局做了較大調(diào)整,選擇了新的Layout布局命令,并重新規(guī)劃了功能分區(qū)。根據(jù)工作需求分為層級(jí)創(chuàng)建 (Hierarchy)、控制器 (Controller)、屬性鏈接 (Connection)、最終化 (Finalize),可以算得上是最終版的雛形了。在V10版本中添加了控制器形態(tài)參考 (ShapeRef)用于創(chuàng)建形態(tài)各異的控制器,并將原來的控制器顏色設(shè)置按鍵 (Color)的字母顯示去掉,改為了以不同色塊形式表現(xiàn)的按鈕,使其更加直觀便于使用。在最終的版本V13里添加了常用的需求1.3的Maya常用命令集合 (Maya Command),隨著經(jīng)驗(yàn)的累積,能力的提升,還添加了以前并沒有考慮過的重新命名工具 (Rename),并按照工作流程和使用習(xí)慣確認(rèn)了最終的布局。

      圖6 不同時(shí)期的版本演變

      2.5 經(jīng)驗(yàn)與收獲

      和所有學(xué)習(xí)Python的初學(xué)者一樣,從在Python編譯器中打出“Hello Python”開始,到在Maya中執(zhí)行第一條Python命令。從390行代碼三個(gè)功能按鍵的V01版本,到最終版976行代碼五十一個(gè)功能按鍵的V13版本?,F(xiàn)在回頭想想,最重要的感受還是工作需求是第一學(xué)習(xí)動(dòng)力,經(jīng)驗(yàn)都是在摸索中實(shí)踐,在實(shí)踐中摸索,慢慢積累而來的。筆者從2019年1月開始接觸各種學(xué)習(xí)資料,5月嘗試寫完了第一個(gè)功能創(chuàng)建綁定層級(jí) (Hierarchy)的基礎(chǔ)部分后,不僅由于工作太忙,自己對(duì)Python的掌握程度也不足以支撐寫下去,綁定工具開發(fā)的事情就戛然而止了。直到10月習(xí)得界面的寫法,11月每周更新一次,12月更新了一次然后又被有限的知識(shí)卡住了。最終在2020年4月更新了6次后完成了功能上的定稿,最后在5月和8月各更新了一次界面??傮w上看花在寫腳本上的時(shí)間只有兩個(gè)多月,但收獲這一成果花費(fèi)將近一年半的時(shí)間。此間,筆者翻閱了大量的Python書籍和網(wǎng)絡(luò)教程,經(jīng)常是一手查資料一手看幫助文件,逐字模仿逐句揣摩。面對(duì)各式各樣的教材,筆者發(fā)現(xiàn)基礎(chǔ)的教材不足以解決當(dāng)前遇到的實(shí)際問題,高級(jí)教材又晦澀難懂,因?yàn)樽陨淼哪芰徒?jīng)驗(yàn)都不足無法將其轉(zhuǎn)化為實(shí)際生產(chǎn)力。最困難的一步是如何將自己豐富的工作經(jīng)驗(yàn)和有限的編程知識(shí)結(jié)合起來,最終寫出可以解決具體需求的工具來。

      3 結(jié)束語

      正所謂 “不積跬步無以至千里”,如果您也像筆者一樣,發(fā)現(xiàn)工作中存在大量的工作都有待被提煉、被規(guī)范,那么就值得花些時(shí)間來學(xué)習(xí)編程語言。此工具箱早已投入到生產(chǎn)當(dāng)中,在不同的項(xiàng)目中發(fā)揮了積極的作用,可以明顯感受到工作效率的極大提升。原本工作中需要幾個(gè)、幾十個(gè)的操作步驟,幾分鐘到幾十分鐘才能完成的工作,現(xiàn)在只需要在綁定工具箱中點(diǎn)擊相應(yīng)的按鈕,很多工作只需要零點(diǎn)幾秒就完成了,真正實(shí)踐了以科學(xué)技術(shù)為第一生產(chǎn),解放生產(chǎn)力,提高生產(chǎn)力。動(dòng)畫行業(yè)的技術(shù)工作在諸多方面都對(duì)流程開發(fā)或者技術(shù)開發(fā)有著龐大的需求,希望有更多的同仁能關(guān)注中國動(dòng)畫工業(yè)的發(fā)展,并能有興趣參與其中,在不同的領(lǐng)域里為業(yè)界提供優(yōu)質(zhì)的解決方案,共同促進(jìn)行業(yè)的發(fā)展。?

      猜你喜歡
      命令物體界面
      只聽主人的命令
      國企黨委前置研究的“四個(gè)界面”
      深刻理解物體的平衡
      我們是怎樣看到物體的
      移防命令下達(dá)后
      基于FANUC PICTURE的虛擬軸坐標(biāo)顯示界面開發(fā)方法研究
      人機(jī)交互界面發(fā)展趨勢(shì)研究
      這是人民的命令
      手機(jī)界面中圖形符號(hào)的發(fā)展趨向
      新聞傳播(2015年11期)2015-07-18 11:15:04
      為什么同一物體在世界各地重量不一樣?
      仙居县| 宜良县| 来安县| 余庆县| 孙吴县| 商丘市| 保靖县| 专栏| 瑞丽市| 孝昌县| 威信县| 高陵县| 禄丰县| 东辽县| 巧家县| 西安市| 辽阳县| 丹棱县| 银川市| 汕头市| 炎陵县| 棋牌| 江达县| 齐河县| 田林县| 历史| 横山县| 昔阳县| 酉阳| 深水埗区| 米林县| 洛川县| 饶河县| 刚察县| 泸水县| 阳东县| 凌云县| 肇东市| 武义县| 团风县| 新民市|