高清av三级高清_亚洲欧美日韩电影在线专区_久久精品亚洲一区二区无码_天天欢夜夜爽视丶频精品

暴雪國(guó)際動(dòng)漫教育
  • 暴雪國(guó)際2024招生簡(jiǎn)章
  • 暴雪國(guó)際2024招生簡(jiǎn)章
  • 暴雪國(guó)際2024招生簡(jiǎn)章
  • 暴雪國(guó)際2024招生簡(jiǎn)章
在線咨詢 預(yù)約課程 網(wǎng)上報(bào)名
Maya特效教程

Maya特效教程:Maya用particle的instancer模擬帆船

編輯:Penny來(lái)源:發(fā)布時(shí)間:2010-06-28
1、1instancer 基礎(chǔ)
   要使用instancer必須先要準(zhǔn)備好要替換的物體。這個(gè)物體需要朝向正確的方向,位移值,軸心點(diǎn)等必須歸零,縮放值為1。這樣做以后就不會(huì)發(fā)生不必要的麻煩,產(chǎn)生的結(jié)果才能和你預(yù)想的一樣。
   maya的particle instancer功能是將要替換的物體固定在每個(gè)粒子上,這個(gè)物體并不是復(fù)制到每個(gè)粒子上的,而是用這個(gè)物體的外形替代了每個(gè)粒,所以稱做“instance”。instancer并不會(huì)在場(chǎng)景中增加幾何體。
  
   1.2 軸心和方向
  如果你在用instancer的時(shí)候出現(xiàn)問(wèn)題了,首先檢查:
   1 >.物體的軸心是不是處于原始的軸心上。
   2 >.軸向有沒(méi)有與世界坐標(biāo)的軸向?qū)R。
   3 >.物體的前進(jìn)方向是否對(duì)準(zhǔn)X軸。
   4 >.物體的transform值是否歸0。
  如果沒(méi)有歸零,將方向,位置調(diào)整好,然后freeze transform。
   1.3 帆船的例子
  這個(gè)例子是一只帆船漂動(dòng)在一個(gè)被wave變形的nurbs平面上,粒子被指定了一個(gè)簡(jiǎn)單的表達(dá)式,讓它們沿著U方向前進(jìn)。
  
   1)打開(kāi)1_1instance_sailboat_base.mb這個(gè)場(chǎng)景文件。在這個(gè)文件里,實(shí)際上只有一只船,這么多的船其實(shí)都是粒子,使用instancer做的。船跟著粒子而動(dòng),那么我們?cè)趺磳?duì)準(zhǔn)他們前進(jìn)的方向呢?有兩種方法:
   1 >.使用maya instancer的aimDirection 或者aimPosition功能.
   2 >.使用每個(gè)粒子的運(yùn)行表達(dá)式,改變每個(gè)粒子的速度向量從而改變粒子的旋轉(zhuǎn)值。我來(lái)提供一個(gè) vector2rot.mel 的腳本,用這個(gè)腳本可以幫助我們完成這項(xiàng)操作。讓我們用第一種方法來(lái)調(diào)整船的方向。
   1.選擇這個(gè)粒子節(jié)點(diǎn)(boats_PTL),打開(kāi)屬性編輯器。
   2.增加一個(gè)per-particle的float屬性,名稱為rotationTypePP.在粒子的創(chuàng)建編輯器中輸入rotationTypePP=1。
   3.在粒子屬性中找到instancer欄。點(diǎn)擊RotationType 旁邊的列給框,選擇rotationTypePP。
  
   4.這個(gè)屬性將指定instancer物體的旋轉(zhuǎn)方式(有三種,可以選擇其中的一種)。
   .0(rotation)。如果選擇這個(gè)表示你想直接控制instance的旋轉(zhuǎn),如果不用表達(dá)式,那么將很難控制他,但是這個(gè)選項(xiàng)將會(huì)提供給你更多的控制權(quán)。
   .1(aimDirection)。maya將使用一個(gè)已經(jīng)提供的向量,如果你希望粒子指向他們的worldVelocity那么就選這個(gè)。
   .2(aimPosition)。使用這個(gè)選項(xiàng),你可以使你的粒子指向一個(gè)特定的點(diǎn)。這個(gè)使用起來(lái)可能會(huì)很困難,但是它有很強(qiáng)的可控性。
  你可以讓不同的粒子有不同的旋轉(zhuǎn)方式,讓我們先用aimDirection這種方式來(lái)完成我們的實(shí)例。
   5.單擊aimDirection旁邊的列給框,選擇worldVelocity.重新播放場(chǎng)景,你可以發(fā)現(xiàn),船身都是側(cè)著向前的,這是因?yàn)榇^沒(méi)有指向X軸。在outline中找到sailboat_PLY,現(xiàn)在是隱藏的,將它顯示出來(lái),掉轉(zhuǎn)船頭向X方向,然后freeze transform.重新播放看看不同了吧。
   1.4更深入的一個(gè)實(shí)例。
  我們打開(kāi)下一個(gè)場(chǎng)景,這是一個(gè)更復(fù)雜的帆船場(chǎng)景。
  
  播放場(chǎng)景你會(huì)發(fā)現(xiàn)一部分船看起來(lái)好像不怎么正確.我們將使用pointOnSurface 這個(gè)Mel命令來(lái)得到表面法線的數(shù)據(jù),然后使用這個(gè)向量來(lái)做為船朝上的方向。
   1.打開(kāi)1_2instance_sailboat_base.mb這個(gè)文件。
   2.將rotationTypePP值改為0.(在創(chuàng)建編輯器中改成rotationTypePP=0;).
   3.在粒子屬性的instancer一欄中設(shè)置rotation為rotationPP(如果沒(méi)有這個(gè)屬性就自己填加上)。設(shè)置aimdirection為none.
   4.我們現(xiàn)在需要修改粒子的rotation屬性,我們將創(chuàng)建一些表達(dá)式在運(yùn)行表達(dá)式中。首先我們需要獲取粒子的velocity,這樣我們就可以得到他的方向了。我們用unit這個(gè)函數(shù)。
   //capture velocity
   vector $vel=unit(worldVelocity);   5.然后使用每個(gè)粒子的goalU和goalV屬性,我們將用命令查詢wave_surface_NRB's曲面的法線,它將提供給我們一個(gè)朝上的向量。
   //determine normal vector
   float $normalF[]=`pointOnSurface -u (goalU) -v (goalV) -normalizedNormal wave_surface_NRB`;
   vector $normal= <<$normalF[0],$normalF[1],$normalF[2]>>;   6.我們可以修改表面的法線來(lái)傾斜船,用來(lái)模擬風(fēng)的效果。我們將使用expr_NUL.lean屬性(在outline里可以找到expr_NUL,好像是建的一個(gè)空組)
   //lean boat depending on its speed
   float $lean=smoothstep(10,40,mag(velocity))*expr_NUL.lean;   7.確保$vel值為正。
   //if the boat X-position is decreasing,the boat leans the other way
   if($vel.x <0)$lean*=-1;   8.修改法線的值。
   //modify normal variable
   $normal+= <<0,0,$lean>>;   現(xiàn)在我們使用一個(gè)mel腳本來(lái)將我們剛才得到的兩個(gè)向量轉(zhuǎn)化為粒子的旋轉(zhuǎn)值。
   9.maya的instancer有一個(gè)小小的bug,那就是不能直接用一個(gè)簡(jiǎn)單的角度值賦予它的旋轉(zhuǎn)值。必須將這個(gè)值轉(zhuǎn)化為弧度,并且得轉(zhuǎn)兩次。否則你將得到一個(gè)非常大的旋轉(zhuǎn)值。
   float $rotX=deg_to_rad(deg_to_rad($rot[0]));
   float $rotY=deg_to_rad(deg_to_rad($rot[1]));
   float $rotZ=deg_to_rad(deg_to_rad($rot[2]));   10.將這個(gè)值指定給rotationPP。
   //finally,assign rotation values
   rotationPP= <<$rotX,$rotY,$rotZ>>;   本一節(jié)教程就完了。
  
  接上一節(jié)教程。
   1.5避免碰撞
   1.打開(kāi)1_3_instance_sailboat_base.mb
   2.選擇粒子節(jié)點(diǎn)boats_PTL.
   3.找到菜單fields.
   4.創(chuàng)建一個(gè)radial場(chǎng),并設(shè)置屬性值。
   magnitude=1
   attenuation=2
   maxdistance=40
   aplypervertex=on
   useMaxDistance=on
   radiaType=0   5.我們要讓每個(gè)粒子都成為一個(gè)radial場(chǎng)的發(fā)射源。先選擇radial場(chǎng),再選擇boats_PTL,然后選擇菜單,fields >use selected as Source of Field.然后設(shè)置radial場(chǎng)的applyPverVertex值為on。因?yàn)榱W拥膅oalPP屬性設(shè)置的是1,所以radial場(chǎng)的效果沒(méi)有表現(xiàn)出來(lái)。
   6.選擇粒子,打開(kāi)hypergraph,單擊input and output connections按鈕。

  
  可以看到radial場(chǎng)有個(gè)屬性輸出給了粒子。
   7.選擇boats_PTL然后添加一個(gè)float屬性,名稱為proximityPP我們將用這個(gè)屬性儲(chǔ)存粒子受到了多大的力量。
   8.打開(kāi)粒子進(jìn)行替代。

上一篇:Maya特效教程:maya中粒子做草地生長(zhǎng)動(dòng)畫

下一篇:Maya特效教程:粒子動(dòng)力學(xué)模擬汽水泡泡教程