玖玖资源站中文字幕在线_2020精品极品国产成人_欧美熟妇精品视频在线观看_亚州Av无码在线

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

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

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

  
  可以看到radial場有個屬性輸出給了粒子。
   7.選擇boats_PTL然后添加一個float屬性,名稱為proximityPP我們將用這個屬性儲存粒子受到了多大的力量。
   8.打開粒子進行替代。

上一篇:Maya特效教程:maya中粒子做草地生長動畫

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