本教程向朋友們介紹MAYA制作MAYA制作中山艦的海洋部分教程,介紹的還是很詳細的,其他部分的教程請朋友們細細查看。
具體的操作步驟如下:
1.創(chuàng)建海洋。
從Maya的Visor庫中拖入一個流體海洋的實例。這個實例包含了海洋動態(tài)和海面大氣效果,是很好的范本,可以在它的基礎(chǔ)上更改設(shè)置。
2.匹配場景單位比例。對整個海洋相關(guān)的元素成組,然后scale增大為10倍;而海洋材質(zhì)的Scale數(shù)值設(shè)定為0.1。
接著增加一些海浪泡沫,根據(jù)需要的效果微調(diào)一些渲染細節(jié)。為了得到較為真實的效果,可以找一些照片進行參考。
海洋材質(zhì)是基于世界空間的UV坐標,因此波浪大小和其他海洋參數(shù)不會受到幾何體的縮放的影響。對NURBS平面可以進行任意的縮放。
3.制作航船和海洋的相交線。
(1) 創(chuàng)建同步海洋運動的NURBS曲面。
創(chuàng)建海洋時默認生成的PreviewPlane只是用于交互式預(yù)覽,它既不能被渲染也不能發(fā)生動力學(xué)碰撞,因此我們需要創(chuàng)建一個特別的NURBS表面來彌補這些不足(默認的圓形NURBS表面與渲染形態(tài)不一樣,所以不能用來做動力學(xué)碰撞)。
在時間欄下方的命令輸入欄中,輸入“oceanNurbsPreviewPlane 50 50 oceanShader1”,然后按Enter回車鍵執(zhí)行命令,稍等一會就可以得到一個新的NURBS預(yù)覽表面,它的行為和之前的oceanPreviewPlane是一樣的,但它可被渲染并能應(yīng)用于通常的幾何體動力學(xué)。因為需要此平面和船底發(fā)生相交,因此將Nurbs放大至和航船長度差不多。
oceanNurbsPreviewPlane 是Maya內(nèi)置腳本庫中的一個MEL腳本,目前還沒有界面化,是個隱藏命令?!緊ceanNurbsPreviewPlane 50 50 oceanShader1】:“50 50”是NURBS曲面的分辨率,一旦創(chuàng)建便不能更改;“oceanShader1”是場景中海洋材質(zhì)的名稱。如果海洋較為平靜,使用20以下分辨率即可。
(2) 創(chuàng)建船體和海洋NURBS曲面的相交線。
創(chuàng)建一個和船殼差不多的NURBS模型。我使用建模時保留下來的NURBS曲線放樣而成,多數(shù)情況下,我們也可使用一個NURBS球體變形而成。
選擇NURBS曲面,shift加選NURBS船模型,執(zhí)行EditNURBS->IntersectSurfaces,設(shè)置如圖。
得到兩個NURBS幾何體之間的相交線,然后在outliner中選擇這根相交線,執(zhí)行EditCurves->DuplicateCurves,保留所有操作歷史。因為模型較為復(fù)雜,因此會生成了不少NURBS曲線。在播放動畫的時候,由于歷史節(jié)點的緣故,NURBS曲線會隨著模型位置的改變而變化,但同時Maya的執(zhí)行會很緩慢。Maya的腳本庫中有一個用于烘焙曲線動畫的MEL,但這只有在場景動畫不需要再進行修改的時候才使用,后面會提到。
*復(fù)制相交線并保留歷史記錄,是為了稍后進行曲線動畫烘焙而作的準備;如果不需要烘焙曲線動畫,那么可以省略DuplicateCurves這個步驟。
4.綁定航船和海洋的運動。
將NURBS船殼和多邊形航船成組,執(zhí)行FluidEffects->Ocean->MakeMotorBoats。
因為場景只有一個海洋,所以Maya會自動選擇oceanShader1。
選擇生成的locator定位器,在它的形節(jié)點的ExtraAttributes區(qū)塊下,設(shè)置相關(guān)浮動參數(shù)。首先將StartY設(shè)置合適的數(shù)值,讓航船剛好懸浮至船的吃水線處。多次測試之后,最終參數(shù)設(shè)置如下。
特別需要說明的是,因為考慮到綁定了流體,柔體,布料這些動力學(xué)系統(tǒng),物體運行需要一段解算過程,因此不能直接在起始幀就讓航船突然下沉。所以浮動參數(shù)開始起作用的StartFrame我設(shè)置為100,StarY分別在第1幀和第99幀設(shè)置了動畫關(guān)鍵幀:高度0到-40的位移動畫。SceneScale是匹配海洋尺寸的,數(shù)值應(yīng)該和海洋材質(zhì)的Scale值相等,所以設(shè)置為0.1。
Throttle(油門)和Rudder(轉(zhuǎn)舵)是兩個有趣的參數(shù),它們控制著航船的行進和轉(zhuǎn)彎; WaterDamping(水阻尼)會對行進速度有很大影響。ThrottlePitch(行駛傾斜)是開啟Throttle之后航船前后傾斜的程度,TurnRoll則是Rudder啟用時,航船在轉(zhuǎn)彎時的側(cè)斜程度。
Throttle在SceneScale匹配的時候,可以近似的理解為千米/小時的航速。
【注意】使用Maya內(nèi)的任何“Boat”工具,BoatLength,Width和Height都會自動從所選小船的包裹盒尺寸獲取。這些工具將最長長度的坐標軸作為前方,所以當使用一個奇怪的外形(寬度大于長度),模型的轉(zhuǎn)向和速度調(diào)節(jié)可能發(fā)生錯誤。在應(yīng)用船體工具前,你可以暫時改變物體的縮放值,在使用工具后再恢復(fù)原狀(此時Maya會按應(yīng)用工具前的形狀定位方向軸)。
5. 創(chuàng)建航船尾流。
尾流發(fā)射器有兩種,一種是單純的制造波浪,另一種除了波浪還產(chǎn)生泡沫foam(盡管可以設(shè)置只產(chǎn)生泡沫不產(chǎn)生波浪,但這不太現(xiàn)實):前者用于航船的前部和中部,后者則放置于船尾。選擇海洋,執(zhí)行Ocean->CreateWake。
Maya的海洋尾流是通過流體紋理控制海洋材質(zhì)的waveHeightOffect屬性而實現(xiàn)的,尾流發(fā)射器的密度發(fā)射比率是控制尾流強弱的重要參數(shù)。創(chuàng)建了尾流之后,場景會生成一個3D流體容器,選擇物體并shift加選流體容器,執(zhí)行FluidEffects->MakeCollide。
Maya2011新增了流體AutoResize的功能之后,只要將流體發(fā)射器作為運動物體的子級即可,但因為wake是SpringMesh的流體發(fā)射形式,不能使用AutoResize,只有發(fā)射foam泡沫的時候可以用。
制作螺旋槳式的航船時,除了尾流,還要加入適當?shù)呐菽?。如果在?chuàng)建尾流時候沒有在選項中設(shè)置一定的FoamCreation(泡沫產(chǎn)生)數(shù)值,那么只產(chǎn)生一個用于模擬尾流的3D流體容器;設(shè)置FoamCreation數(shù)值大于0,則會增加一個用于產(chǎn)生泡沫細節(jié)的3D流體容器。當然,用戶也可以手動將一個流體紋理連接到海洋材質(zhì)的FoamOffset制作泡沫。要注意的是,尾流強度由流體密度的發(fā)射比率決定,而泡沫量則是熱量密度的發(fā)射比率決定,并且泡沫的流體節(jié)點會開啟TextureOpacity。
一般來說,制作流體特效時盡量不要對流體容器進行縮放;不過當場景發(fā)生了比例關(guān)系的變化,為了減少計算量,則應(yīng)將流體容器匹配場景比例進行縮放。
6. 飛濺水花。航船在水面急速運行時,會產(chǎn)生撞擊飄散的浪花。
首先,為了提高計算速度,需要先將航船和海面的相交線烘焙成點動畫。在outliner中選擇NURBS曲線,在命令輸入欄中輸入并執(zhí)行命令:bakeSoft 1 200 1【格式:bakeSoft (起始幀) (結(jié)束幀) (間隔幀)】。完成之后,可以將NURBS預(yù)覽海面(包括相交線)和NURBS船底刪除,只保留烘焙后生成的曲線。當然,在這操作之 前你必須完成所有動畫參數(shù)的調(diào)節(jié),尤其是航船的運動和海面的狀況。
bakeSoft和之前提到的oceanNurbsPreviewPlane命令一樣,是maya內(nèi)置的未界面化的隱藏腳本。bakeSoft可將曲線動畫烘焙到CV點上,轉(zhuǎn)為關(guān)鍵幀動畫。注意:該命令一次只能用于一條NURBS曲線,并且計算過程中不能停止。
選擇烘焙后的新曲線,執(zhí)行Dynamics>Particles>EmitFromObject,設(shè)置如下:
EmitterType:Curve
Rate:3000
Speed:9
SpeedRandom:0
對產(chǎn)生的粒子設(shè)置重力場和擾亂場(Magnitude:33,Attenuation:0,F(xiàn)requency:0.5),并把粒子的conserve設(shè)置為0.9降低粒子的擴散行為。
前面使用到的海洋浮動系統(tǒng),其實是通過colorAtPoint的MEL控制物體的高度變化的;而在表達式中使用MEL語句,是不會自動更新表達式引用的名稱的。如
float $hei[] = `colorAtPoint -u $u -v $v oceanShader1`;
locator1.translateY = $hei[0];
ceanshader1和locator1的名稱都不能在設(shè)置了表達式后再修改,除非同時更新MEL中的命名。也就是說,一旦使用了海洋中的“Boat”功能,不要輕易修改受控物體的名稱。
粒子表達式有兩種:creation和runtime(又分動力學(xué)前后執(zhí)行)。Creation只在動畫開始時執(zhí)行一次,而runtime則會在動畫每幀中執(zhí)行。 本例中語句如下:
【Creation】
particleShape1.lifespanPP=rand(4,5);//設(shè)置粒子隨機的生命周期
【Runtime】
vector $foamP=particleShape1.position; //獲取粒子當前的位置
float $foamU=$foamP.x;//將粒子位置的x坐標賦予變量foamU
float $foamY=$foamP.y;//將粒子位置的y坐標(高度)賦予變量foamY
float $foamV=$foamP.z;//將粒子位置的z坐標賦予變量foamV
vector $foamColor[]=`colorAtPoint -o RGBA -u $foamU -v $foamV oceanShader1`;
//通過colorAtPoint的MEL命令獲取海洋材質(zhì)的相應(yīng)色彩和透明度信息
float $foamHeight=$foamColor[3];//定義一個變量foamHeight,將colrAtPoint所獲取的材質(zhì)透明度信息賦予它。
if($foamY<$foamHeight)
particleShape1.position=<<$foamU,$foamHeight,$foamV>>; //當粒子高度低于泡沫高度,將被吸附到海洋表面
以上完成了船底和海面接觸時飛濺的水花,船尾部還缺少螺旋槳噴出的水花,只要再增加一個體積型的粒子發(fā)射器即可。
浪花粒子在海面漂浮一段時間后,逐漸消失。這里我使用一個噪波紋理控制粒子誕生的不透明度,并設(shè)置漸變過渡,在粒子消亡時不透明度為0。
*需要更為細致的特效,可以對粒子的速度設(shè)置runtime表達式,增加速度,透明度和生命周期之間的關(guān)系。如果粒子量大,表達式越復(fù)雜,計算速度就越慢。
7.生成各種動力學(xué)緩存。
n布料執(zhí)行:nDynamics->nCache->CreateNewCache。
流體執(zhí)行:Dynamics->FluidEffects->CreateNewCache。
粒子執(zhí)行:Dynamics->Solvers->CreateParticleDiskCache。
柔體IK,則直接烘焙為骨骼動畫。
教程結(jié)束,以上就是MAYA制作中山艦的海洋部分教程,希望對大家有所幫助!
|
新聞熱點
疑難解答
圖片精選