• 
    

    
    

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

      Mel語言及其表達式在MAYA動力學特效中的應(yīng)用研究

      2022-08-19 06:18:26謝函邑
      電子測試 2022年15期
      關(guān)鍵詞:發(fā)射器表達式語句

      謝函邑

      (中國船舶第七一三研究所,河南鄭州,450000)

      0 引言

      三維動畫現(xiàn)如今已經(jīng)得到各行各業(yè)的廣泛運用,從傳統(tǒng)的電影特效、電視片頭、游戲等,到如今的教育教學、軍事、醫(yī)療、飛行模擬等各個方面。Maya 作為動畫學界、業(yè)界的必備軟件,集中了最先進的動畫及數(shù)字效果技術(shù),成為電影級別的高端制作軟件代表。作為一個功能很強大的三維動畫軟件,不僅為創(chuàng)作者提供了基本的屬性控制,還提供了高級控制方式—Mel語言(Maya Embedded Language)及表達式,使創(chuàng)作者可以通過Mel語言及表達式進行Maya的基礎(chǔ)操作,如通過執(zhí)行一段Mel腳本創(chuàng)建一個球體模型,也可以完成更為復雜的效果,如通過表達式控制群體動畫中個體之間的運動差異,還可以完成一系列基礎(chǔ)操作的快捷批量處理如通過Mel語言編寫骨骼綁定插件。

      1 MAYA動力學中的MEL語言及其表達式

      動力學是理論力學的分支學科,研究作用于物體的力與物體運動的關(guān)系。Maya中的動力學系統(tǒng)在Dynamics模塊中,該系統(tǒng)主要由粒子、流體、剛體、柔體、毛發(fā)、布料等模塊構(gòu)成。在三維動畫制作的流程中,動力學需要與動畫、燈光、渲染合成等部門緊密的配合(見圖1),綜合運用這些模塊才能制作出逼真的動畫效果。粒子作為動力學特效的最小單位,其顯示、動畫處理、渲染都與常規(guī)的物體有所不同。粒子的出生是通過“發(fā)射”來實現(xiàn)的,所以粒子的動畫制作離不開粒子發(fā)射器的建立。粒子發(fā)射器通常用于創(chuàng)建將在粒子系統(tǒng)內(nèi)運動的粒子。Maya中可以將無數(shù)的粒子組合起來使其形成固定的形態(tài),再通過控制粒子顏色、數(shù)量、空間分布、運動狀態(tài)等屬性模擬現(xiàn)實中的一些自然現(xiàn)象或宏大的場景,如龍卷風、下雪、爆炸、煙花、群組動畫等。這些逼真的效果往往需要大量的粒子組成,通過改變粒子在時間與空間上的屬性形成。因此每個粒子都可以被賦予如質(zhì)量、位置、速度、受力、生命周期、顏色、形狀、空間大小等的各種屬性。

      圖1 三維動畫制作流程圖

      很多常用的三維軟件都提供了內(nèi)嵌腳本語言,可以通過各種算法來實現(xiàn)復雜的動畫效果。Mel語言,就是Maya的嵌入式語言,是Maya使用最方便和控制最靈活的編程接口。在場景中選擇一個物體或顯示一個對話框就是執(zhí)行Mel命令的直接結(jié)果。表達式,即使用Mel語句將屬性動畫化的程序。通常通過創(chuàng)建一系列的關(guān)鍵幀,可以將任何屬性在Maya中做動畫。表達式也可用于將一個屬性做動畫,但不是通過關(guān)鍵幀,而是通過Mel命令定義屬性的值實現(xiàn)。這些Mel命令在每一幀進行求值,然后將結(jié)果存儲在表達式所分配到的屬性中。這種技術(shù)通常稱為過程式動畫,即由程序(Mel命令)而不是由關(guān)鍵幀來控制動畫。表達式可用于創(chuàng)建復雜的動畫,而不涉及或很少涉及手動操作。這是一種將屬性動畫化的強大方法。通常情況下,任何屬性都可由語句進行控制。簡單來說,Mel與表達式的區(qū)別就是Mel是一種語言,基于這種語言,可以完成一件事情,而表達式是使用Mel語句編寫的將屬性動畫化的腳本程序,是根據(jù)時間的變化做一系列事情。因此,Mel語言及表達式作為一種高級粒子控制方式,對于關(guān)鍵幀很難做到的工作,可以輕松完成,通過編寫程序,可以實現(xiàn)想要的效果。例如通過一個模型在三維空間中形成一個矩陣,傳統(tǒng)的復制效率低,速度慢。通過粒子形成矩陣,模型替換粒子的方法效率更高,速度更快。而這里所說的粒子替代是以實體模型來替換粒子,適合做大規(guī)模的群體動畫,比如人群、鳥群、魚群等。被粒子替代的物體(即原始物體)稱為源物體,可以替換多種元素來實現(xiàn)不同的效果,它可以是一個單一的物體(有動畫或沒有動畫的都可以),也可以是不同位置和外形的一系列物體,例如一群幾乎相同的鳥在不同的位置拍動翅膀。以下案例就是通過Mel語言及其表達式控制粒子替代,創(chuàng)造隨機性,來模擬亂箭齊發(fā)的真實景象。

      2 Mel語言及其表達式控制粒子屬性案例分析

      2.1 創(chuàng)建粒子替代

      創(chuàng)建一個體積發(fā)射器,在Particles菜單下單擊Create Emitter后的屬性按鈕,設(shè)置發(fā)射器名稱為fx_base_emitter1,發(fā)射器類型為Volume,比率為50,體積發(fā)射器形狀為Cube。將particle1更名為baseParticle1。調(diào)整Cube粒子發(fā)射器的形狀和角度,再將發(fā)射器fx_base_emitter1的遠離中心調(diào)整為10。沿軸調(diào)整為100,使baseParticle1快速從體積發(fā)射器中向一個方向發(fā)射出去。

      接下來進行粒子實例替代,選擇要作為源物體的arrow再加選baseParticle1,在Particles菜單下選擇Instancer(Replacement)命令,使用默認值即可。通過觀察可以發(fā)現(xiàn),替代物體arrow的尖頭處始終是指向×軸正方向的,那么現(xiàn)在就來調(diào)整一下它的尖頭處的指向。將替代物體arrow的X軸指向粒子的運動方向。選擇baseParticle1打開它的屬性編輯性,為每粒子屬性添加一個directionPP屬性。為directionPP屬性寫入表達式,directionPP=<<1,0,0>> ;因為只需要用替代物體 arrow 的×軸做為指向軸,所以Y軸和Z軸不做操作,值設(shè)置成0即可。打開baseParticle1的Instancer(Gemerty Replacement)卷展欄,設(shè)置實例節(jié)點為instancer1,AimDirection(指向方向)為粒子的速度方向velocity,指向軸為directionPP,意思是用替代物體arrow的Y軸指向粒子的速度方向。(見圖2)

      圖2 修改粒子替代

      2.2 Mel語言及其表達式創(chuàng)建粒子隨機性

      首先是箭打到墻上(物體上)掉落的隨機性。創(chuàng)建一個平面,調(diào)整形狀放到適當位置做為墻面,重命名為wall(見圖3)。選擇baseParticle1和wall,執(zhí)行Make Collide命令,設(shè)置Resilience為0,Friction為1。發(fā)生碰撞后,箭成整齊的水平方向。這時就需要創(chuàng)建粒子碰撞事件,選擇粒子baseParticle1,執(zhí)行粒子碰撞事件編輯器命令,在這里什么設(shè)置也不做,只是要一個什么也沒發(fā)生的碰撞事件,以碰撞事件為條件判斷什么時候箭落下來,什么時候亂箭釘上去。

      圖3 創(chuàng)建一個Poly的Plane

      選擇baseParticle1再加選wall,單擊Particles菜單下的Goal命令,由于粒子(箭)在碰撞前的飛行過程中是不用Goal到wall上的,所以在這里我們需要使用一個if-else語句來判斷goal值,先在Creation下為goalPP創(chuàng)建一個初始值baseParticleShape1.goalPP=0(意思是一開始不受墻壁的吸引);在Runtime before dynamics 下寫入:

      意思是當碰撞還沒產(chǎn)生時(即baseParticle-Shapel.event==0)粒子的goalPP為0,否則當碰撞產(chǎn)生時粒子的goalPP為1。接下來,為其添加新的屬性,選擇baseParticle1添 加 goalU、goalV、collisionU、collisionV四 個 屬性到每粒子屬性中。為goalU、goalV添加表達式,用collisionU、collisionV碰撞一瞬間的UV坐標來指定粒子的goalU、goalV,在Runtime before dynamics 下寫入:

      baseParticleShapel.goalU = baseParticleShapel.collisionU;

      baseParticleShapel.goalV = basePar-ticleShapel.collisionV;

      這樣粒子(箭)就得到它的goalU和goalV值,baseParticleShapel.goalU = baseParticleShapel.collisionU; 和 baseParticleShapel.goalV =baseParticleShape1.collisionV;應(yīng)該寫在碰撞之后的語句中,在碰撞產(chǎn)生時執(zhí)行。

      其次,解決箭打到墻的角度的隨機性。為baseParticle1添加自定義的每粒子屬性aimD,用它作為一個粒子速度/速度方向的變量。為AimD寫入表達式,將粒子還沒有產(chǎn)生碰撞時的速度/速度方向傳遞給Aim D,在Runtime before dynamics下寫入表達式(見圖4)將baseParticleShape1.aimD= baseParticleShape1.velocity;寫入沒有產(chǎn)生碰撞時的語句中,也就是在沒有碰撞之前目標方向為粒子的速度方向,再將AimDirection重新設(shè)置成aimD。

      圖4 添加表達式

      現(xiàn)在亂箭釘?shù)綁ι虾?,還在繼續(xù)旋轉(zhuǎn),這是因為沒有指定旋轉(zhuǎn)是在碰撞前還是在碰撞后,那么將語句最上方的自定義箭旋轉(zhuǎn)的表達式放入到還沒有碰撞時的語句中,讓它在沒有產(chǎn)生碰撞時執(zhí)行(見圖5)

      圖5 改變表達式位置

      最后需要讓某些箭打到墻上后掉落下去,未必非要指定必須哪個箭掉落,隨機便可,使用隨機還可以控制掉落的多少。為baseParticle1添加自定義的float型的每粒子屬性falIPP。為fallPP創(chuàng)建表達式,在Creation下寫入:base ParticleShapel.fallPP=rand(0,1);之后會用這個隨機值做為一個判斷下落的條件。在Runtime before dynamics下寫入表達式(見圖6)。這里的意思是, 如果產(chǎn)生碰撞并且fallPP的隨機時大于0.1時,箭會釘在墻上,執(zhí)行之前的操作。否則替代物體箭的速度方向仍然是粒子的速度方向,再由于重力作用下落。再調(diào)整碰撞參數(shù),Resilience為0.3,Friction為0。將Friction設(shè)置為0可以讓亂箭有一種碰撞時抖動的沖力感覺,而調(diào)整Resilience是為了使箭彈得更遠一些,也是為了表達箭的沖力。

      圖6 添加表達式

      3 結(jié)語

      對基于動力學和粒子系統(tǒng)模擬自然景象進行了研究,總結(jié)出最大實現(xiàn)粒子的可控制性,既不是單純靠粒子發(fā)射器發(fā)射粒子,也不單純用場來干擾粒子,而是粒子系統(tǒng)與Mel表達式結(jié)合。通過Maya中的粒子系統(tǒng)和MEL表達式來模擬自然景象,不僅可以自主編程形成小插件直接利用,還可以后續(xù)升級迭代,更可以在多個客戶端多人同時進行角色或場景的設(shè)計。MEL語言高效的通信和協(xié)同設(shè)計能顯著縮短動畫作品的開發(fā)周期,降低成本,增強動畫作品的個性化、開發(fā)的互動性及共創(chuàng)性。

      猜你喜歡
      發(fā)射器表達式語句
      重點:語句銜接
      一個混合核Hilbert型積分不等式及其算子范數(shù)表達式
      表達式轉(zhuǎn)換及求值探析
      淺析C語言運算符及表達式的教學誤區(qū)
      中國LG6型40毫米半自動榴彈發(fā)射器
      兵器知識(2019年1期)2019-01-23 02:20:44
      2012款漢蘭達車遙控發(fā)射器識別碼注冊方法
      蜘蛛絲發(fā)射器
      精彩語句
      雷電發(fā)射器
      如何搞定語句銜接題
      語文知識(2014年4期)2014-02-28 21:59:52
      湖州市| 汉中市| 荣成市| 安徽省| 民县| 西吉县| 崇阳县| 湟源县| 海盐县| 绥芬河市| 新邵县| 牟定县| 尉犁县| 任丘市| 四子王旗| 高淳县| 青龙| 共和县| 宿州市| 临沭县| 恩平市| 吉木乃县| 贡觉县| 大姚县| 淄博市| 黄龙县| 监利县| 新昌县| 修武县| 湛江市| 新和县| 内江市| 姜堰市| 怀仁县| 沙雅县| 全椒县| 互助| 盐亭县| 丹东市| 炉霍县| 安平县|