<th id="bwd7y"><progress id="bwd7y"></progress></th>
    <dfn id="bwd7y"></dfn>
        • <b id="bwd7y"></b>

              <noframes id="bwd7y"><menu id="bwd7y"><td id="bwd7y"></td></menu>
              1. 暴雪國際動漫教育
                • 暴雪國際2024招生簡章
                • 暴雪國際2024招生簡章
                • 暴雪國際2024招生簡章
                • 暴雪國際2024招生簡章
                在線咨詢 預(yù)約課程 網(wǎng)上報名
                Maya特效教程

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

                編輯:Penny來源:發(fā)布時間:2010-06-28
                1、1instancer 基礎(chǔ)
                   要使用instancer必須先要準(zhǔn)備好要替換的物體。這個物體需要朝向正確的方向,位移值,軸心點等必須歸零,縮放值為1。這樣做以后就不會發(fā)生不必要的麻煩,產(chǎn)生的結(jié)果才能和你預(yù)想的一樣。
                   maya的particle instancer功能是將要替換的物體固定在每個粒子上,這個物體并不是復(fù)制到每個粒子上的,而是用這個物體的外形替代了每個粒,所以稱做“instance”。instancer并不會在場景中增加幾何體。
                  
                   1.2 軸心和方向
                  如果你在用instancer的時候出現(xiàn)問題了,首先檢查:
                   1 >.物體的軸心是不是處于原始的軸心上。
                   2 >.軸向有沒有與世界坐標(biāo)的軸向?qū)R。
                   3 >.物體的前進(jìn)方向是否對準(zhǔn)X軸。
                   4 >.物體的transform值是否歸0。
                  如果沒有歸零,將方向,位置調(diào)整好,然后freeze transform。
                   1.3 帆船的例子
                  這個例子是一只帆船漂動在一個被wave變形的nurbs平面上,粒子被指定了一個簡單的表達(dá)式,讓它們沿著U方向前進(jìn)。
                  
                   1)打開1_1instance_sailboat_base.mb這個場景文件。在這個文件里,實際上只有一只船,這么多的船其實都是粒子,使用instancer做的。船跟著粒子而動,那么我們怎么對準(zhǔn)他們前進(jìn)的方向呢?有兩種方法:
                   1 >.使用maya instancer的aimDirection 或者aimPosition功能.
                   2 >.使用每個粒子的運行表達(dá)式,改變每個粒子的速度向量從而改變粒子的旋轉(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),如果不用表達(dá)式,那么將很難控制他,但是這個選項將會提供給你更多的控制權(quán)。
                   .1(aimDirection)。maya將使用一個已經(jīng)提供的向量,如果你希望粒子指向他們的worldVelocity那么就選這個。
                   .2(aimPosition)。使用這個選項,你可以使你的粒子指向一個特定的點。這個使用起來可能會很困難,但是它有很強(qiáng)的可控性。
                  你可以讓不同的粒子有不同的旋轉(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)建一些表達(dá)式在運行表達(dá)式中。首先我們需要獲取粒子的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.打開粒子進(jìn)行替代。

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

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

                草草久久久无码国产专区,国产精品一码二码三码在线,无码综合一区二区三区,在线播放午夜无码毛片
                <th id="bwd7y"><progress id="bwd7y"></progress></th>
                  <dfn id="bwd7y"></dfn>
                      • <b id="bwd7y"></b>

                            <noframes id="bwd7y"><menu id="bwd7y"><td id="bwd7y"></td></menu>