Maya 硬件渲染粒子與軟件渲染元素結(jié)合具體操作方法介紹
本教程向朋友們介紹Maya 硬件渲染粒子與軟件渲染元素結(jié)合的具體方法,教程介紹的比較詳細(xì),希望對(duì)朋友們有所幫助!
I 、創(chuàng)建一個(gè) Sprite 圖像
用一個(gè)簡(jiǎn)單的點(diǎn)發(fā)射器和軟件渲染粒子云,創(chuàng)建一系列用作 sprite 紋理的圖像,粒子產(chǎn)生和消失的動(dòng)畫——結(jié)合軟件渲染粒子云的動(dòng)畫和體積紋理——能夠制作出變化多端的動(dòng)畫紋理。

1 、設(shè)置 Timeline Range :從 1 到 60
2 、創(chuàng)建一個(gè)點(diǎn)發(fā)射器
3 、第 30 幀, rate 關(guān)鍵幀為 100
4 、第 31 幀, rate 關(guān)鍵幀為 0
5 、設(shè)置粒子 lifespan 為 lifespanRandom
6 、設(shè)置 lifespanRandom 為 0.3
7 、設(shè)置 lifespan 為 1
回放動(dòng)畫,注意:第 60 幀粒子的生成和消失。
1 、設(shè)置 conserve 為 0.9
2 、增加一個(gè)紊亂場(chǎng)
3 、設(shè)置 magnitude 為 25
4 、設(shè)置 attenuation 為 0
5 、設(shè)置 frequency 為 2
6 、第 1 幀,關(guān)鍵幀 TranslateY 為 0
7 、第 60 關(guān)鍵幀,關(guān)鍵幀 TranslateY 為 5
回放動(dòng)畫,注意:粒子現(xiàn)在更隨機(jī)自由地運(yùn)動(dòng)并夾在一起。這些團(tuán)塊在軟件渲染里有更大的密度,給最終的精靈影像添加了更多的變換。
1 、創(chuàng)建一個(gè)粒子云 shader
2 、設(shè)置顏色為 100% 的白色
3 、創(chuàng)建一個(gè) Volume Noise 3D Texture
4 、將 3D Texture Placement 做為動(dòng)畫紊亂場(chǎng)的父物體
5 、將 Volume Noise 連接到粒子云材質(zhì)的 Blob Map 屬性
6 、打開 Volume Noise 紋理屬性編輯器
7 、設(shè)置 Threshold 為 0
8 、設(shè)置 Amplitude 為 1
9 、設(shè)置 Ratio 為 0.4
10 、設(shè)置 Frequency Ratio 為 0.2
11 、設(shè)置 Depth Max 為 5
12 、設(shè)置 Scale 為 3.0,3.0,3.0
13 、設(shè)置 Noise Type 為 Wispy
不同的氣體要求不同的圖像,從壺里發(fā)出的蒸汽更細(xì)弱一點(diǎn),但從煙囪里出來的煙霧更濃密更"圓"一點(diǎn)。云層是濃密的,但卻有一個(gè)纖細(xì)的邊,你就要為你的圖像復(fù)制這樣的邊。一旦增加了不同的扭曲和縮放值到你的 sprite 粒子,而且還有成打的粒子彼此重疊,那它們都將混合并創(chuàng)建理想的外觀。
1 、打開粒子物體屬性編輯器
2 、設(shè)置粒子渲染類型為 cloud
3 、點(diǎn)擊的 Add Attibutes 后的 Current Render Type
4 、打開 Better Illumination
5 、為 OpacityPP 創(chuàng)建一個(gè) ramp
6 、 ramp 底部和頂部設(shè)置為黑色,中間為白色
7 、設(shè)置 Interpolation 為 Smooth
8 、增加一個(gè)預(yù)粒子 radiusPP 屬性
9 、創(chuàng)建表達(dá)式類型里:
radiusPP=rand(0.3,1.3)
從頂部攝影機(jī)觀看場(chǎng)景,設(shè)置視口大小,確保這樣粒子到了窗口的邊卻不會(huì)跑出邊外。

1 、 打開全局渲染窗口
2 、 設(shè)置理想的文件名
cg/image/ 的粒子系統(tǒng)在為 sprite 圖像命名方面是非常特別的, cg/image/ 傾向于用 Name.# 這樣的命名格式,例如: cloudTex.1, cloudTex.20 等等。

1 、 設(shè)置 Frame/Animation Ext 為 name.#
2 、 設(shè)置 Frame Range 為 1-60
3 、 設(shè)置 camera 為 Top
4 、 打開 RGB 和 Alpha 通道
一個(gè) Sprite 圖像應(yīng)該始終是正方形的,比如 1 : 1 的比例。即使圖像分辨率非常高,但其大小也不應(yīng)該超過 512 Χ 512 。因?yàn)閳D像在硬件里渲染,所以需要圖形卡里的紋理儲(chǔ)存器。每個(gè) sprite 圖像被載入紋理儲(chǔ)存器,所以,如果你有 100 個(gè)不同的圖像,它們都是 512 Χ 512 分辨率,那多數(shù)圖形卡將沒有足夠的內(nèi)存有效地回放場(chǎng)景,并會(huì)"卡殼"。在幀里一個(gè) sprite 應(yīng)該是多大,這才是獲得分辨率的真正決定性因素??紤]到一旦你運(yùn)用了運(yùn)動(dòng)模糊 sprite ,任何像素都趨向于完全消失,你可以用更低分辨率的圖像操作。
設(shè)置分辨率為 128*128
附加 tweaks 到渲染圖像序列,比如添加模糊,調(diào)整對(duì)比度,用一個(gè)合成包修改 alpha 通道。
最后,渲染圖像序列。
Maya 硬件渲染粒子與軟件渲染元素結(jié)合II 、粒子發(fā)射
重新設(shè)置 frame range 為 1-100
當(dāng)一輛汽車踢起灰塵的時(shí)候,從輪胎下半部分會(huì)發(fā)出像一團(tuán)云樣的東西??袒@個(gè)發(fā)射形狀的簡(jiǎn)單方法就是用一個(gè)體積發(fā)射器。

打開 wheelsOnPath.ma 文件 .
在這個(gè)場(chǎng)景里,沿著凹凸表面的一條運(yùn)動(dòng)路徑有一個(gè)簡(jiǎn)單的汽車裝備。車輪通過一個(gè) closestPiontOnSurface 約束粘附在地面。
現(xiàn)在從輪胎發(fā)射粒子。
1 、創(chuàng)建一個(gè)發(fā)射器
2 、設(shè)置 Emitter Type 為 Volume
3 、設(shè)置 Volume shape 為 sphere
塵埃沒有特定的運(yùn)動(dòng)方向,其運(yùn)動(dòng)源自汽車周圍的空氣運(yùn)動(dòng),因此,你不用在體積形狀基礎(chǔ)上給與塵埃任何速度。
1 、設(shè)置 Away From Center 為 0
2 、設(shè)置 Away From Axis 為 0
3 、設(shè)置 Along Axis 為 0
4 、設(shè)置 Around Axis 為 0
但是,塵埃的運(yùn)動(dòng)基于汽車運(yùn)動(dòng)的基礎(chǔ)上,所以,汽車踢起的塵埃要稍微隨著汽車的向前運(yùn)動(dòng)而向前運(yùn)動(dòng)。
1 、打開 outliner
2 、選擇 Fitire 和你剛才創(chuàng)建的發(fā)射器: Emitter1
3 、點(diǎn)約束和方向約束發(fā)射器到輪胎
4 、縮放發(fā)射器,大概有輪胎的 1/3 高,長(zhǎng)于和寬于輪胎大約 1/4 。
5 、調(diào)整發(fā)射器的 VolumeOffsetZ 屬性,重新定位發(fā)射器,低于輪胎 1/3 。

回放時(shí),你會(huì)看見左前輪胎后面有粒子軌跡。
1 、復(fù)制 Emitter1 三次
2 、刪除復(fù)制品潛在的點(diǎn)約束和方向約束節(jié)點(diǎn)
3 、點(diǎn)約束、方向約束每個(gè)發(fā)射器到每個(gè)輪胎,這樣,每個(gè)輪胎都有了一個(gè)發(fā)射器。
4 、重新命名這些發(fā)射器為: IEmitter,frEmitter,blEmitter,brEmitter
5 、用動(dòng)力學(xué)關(guān)系編輯器,連接粒子物體到每個(gè)發(fā)射器。

回放,你會(huì)看見所有輪胎左后方都留下了一道粒子軌跡。
當(dāng)一輛汽車奔跑在一條滿是灰塵的溪谷時(shí),它會(huì)碰到各種各樣的凹凸地,水溝,巖石和沙地,每次碰撞的結(jié)果就是:汽車不僅改變一點(diǎn)點(diǎn)方向,而且汽車踢起的塵土和碎片數(shù)量都會(huì)不同,利用 noise 和 rand 功能,你可以很容易地模擬這種隨意的變化。
1 、選擇 flEmitter
2 、在通道盒里,右鍵點(diǎn)擊任何屬性并選擇 Expressions ……
3 、在 Expression Editor 中鍵入:
float $rate=100.0
float $rateRand=0.5
flEmitter.rate=$rate+$rateRand*$rate*noise(frame)
這個(gè)表達(dá)式運(yùn)用了 noise 功能,可以依據(jù)不同的幀在 -1 到 1 之間取一個(gè)值。這個(gè)值將與 rate 的百分?jǐn)?shù)相乘再相加。
FlEmitter 發(fā)射器的 rate 的最終結(jié)果是圍繞著 $rate 大概成平均狀,但是,這個(gè)參數(shù)可以低到 0.5 ,也可以高到 1.5 ,主要看 noise 值的回饋。
不是隨便用一個(gè)數(shù)字發(fā)生器就可以得到聲音功能的值,將聲音功能視為一個(gè)預(yù)定的曲線,可以無限延伸,這個(gè)曲線在它的值里有各種各樣的聲音,但聲音平滑插入,聲音功能回到什么樣的值依賴于你在曲線哪里取樣。如果你給聲音功能取 10 的值:
print(noise(10));
… cg/image/ 回到 -0.465903 的值

如果你給聲音功能取 10.01 的值 :
print(noise(10.01));
… cg/image/ 回到 -0.474992 的值
參數(shù)表達(dá)式里:
flEmitter.rate=$rate+$rateRand*$rate*noise(frame)
…我們用"幀"作為聲音輸入,所以,每個(gè)幀的聲音功能回到一個(gè)新的值。
既然幀以每幀的整數(shù)增加,來自聲音功能的結(jié)果可能變化很大。如果你想從聲音功能那里獲得一個(gè)更加平滑的數(shù)字流,那就用" time "來代替 " frame "。
一樣的輸入值,聲音功能返回的值也一樣,所以,每個(gè)發(fā)射器需要用不同的輸入值。
在表達(dá)式編輯器里,增加:
frEmitter.rate=$rate+$rateRand*$rate*noise(frame+100)
blEmitter.rate=$rate+$rateRand*$rate*noise(frame+200)
brEmitter.rate=$rate+$rateRand*$rate*noise(frame+300)
現(xiàn)在每個(gè) rates 參數(shù)都是從聲音曲線不同部分取樣,回放時(shí)候,你會(huì)看見粒子的軌跡有點(diǎn)更加隨意稀少了。
參數(shù) rates 任何明顯的提高都表示模擬輪胎碰到了凹凸塊或者是巖石。發(fā)生碰撞的時(shí)候,粒子方向突然隨意改變,就好像剛剛發(fā)生了一場(chǎng)小的爆炸。
因?yàn)槁曇艄δ軐?duì)同樣的輸入總是返回到同樣的值,所以,我們檢查 rates 參數(shù)的一個(gè)突然變化并添加一些隨意性到發(fā)射速度上。
在表達(dá)式編輯器里,添加:
float $flChange=noise(frame)-noise(frame-1);
float $flChange=noise(frame)-noise(frame-1);
float $frChange=noise(frame+100)-noise(frame+100-1);
float $blChange=noise(frame+200)-noise(frame+200-1);
float $flChange=noise(frame+300)-noise(frame+300-1);
float $randomSpeed=100;
flEmitter.randomDirection=$randomSpeed*linstep(0.1,0.5, $flChange);
frEmitter.randomDirection=$randomSpeed*linstep(0.1,0.5, $frChange);
blEmitter.randomDirection=$randomSpeed*linstep(0.1,0.5, $blChange);
brEmitter.randomDirection=$randomSpeed*linstep(0.1,0.5, $brChange)
回放時(shí),你會(huì)看在塵土軌跡甚至有更大的隨意性,一些粒子飄浮空中,其他一些粒子保持靜止?fàn)顟B(tài)。
Maya 硬件渲染粒子與軟件渲染元素結(jié)合III 、創(chuàng)建一個(gè)特效裝備
在完成一個(gè)作品時(shí),越多的給予使用者超越解算的控制越好,基于這種考慮,越復(fù)雜的參數(shù)設(shè)置會(huì)使使用者工作起來越困難。
你想要做的最后一件事就是:提供終端使用者一個(gè)復(fù)雜的表鍤劍?廡枰?魘悅扛鼉低貳4唇ㄒ桓隹刂譜氨福?盟???桓霰澩鍤降慕峁??憔涂贍芨?斬聳褂謎咭惶卓刂票硎臼劍ū硎臼嬌刂瞥【埃┑墓ぞ擼?庋???薔筒揮米約罕嗉?澩鍤驕涂梢鑰刂瞥【啊?

1 、選擇發(fā)射器和粒子物體,把它們編成組。
2 、重新命名結(jié)果組節(jié)點(diǎn)為 dustcontrols
3 、選擇組節(jié)點(diǎn),并打開 Add Attribute 窗口
4 、添加下面的屬性,維持 Float,Scalar 屬性:
rate
rateRand
randSpeed
發(fā)射的表達(dá)式:
float $rate=100;
float $rateRand=0.5
float $radomSpeed=10;
替換成
float $rate=dustControls.rate;
float $rateRand=dustControls.rateRand
float $radomSpeed=dustControls.randSpeed;
現(xiàn)在你可以從表達(dá)式外控制這些變量。
控制節(jié)點(diǎn)的通道盒應(yīng)該僅僅顯示相關(guān)的屬性,那些對(duì)解算沒有影響的屬性應(yīng)該被挪開。變形屬性,旋轉(zhuǎn)屬性和縮放屬性不需要用來控制解算,所以,可以用 channel Control 窗口將它們關(guān)掉。將它們從通道盒挪開之前,先鎖定它們,這樣,使用者就不會(huì)偶爾變形,旋轉(zhuǎn)或縮放該組。

IV. 創(chuàng)建塵土粒子運(yùn)動(dòng)
1 、重新命名 particle1 為 dustParticles
2 、設(shè)置 Particle Render Type 為 Sprites
3 、設(shè)置 Inherit Factor 為 0.2
4 、點(diǎn)擊 play
粒子緊隨車后,注意粒子能隨在車后多長(zhǎng)距離,那些以隨意爆發(fā)速度發(fā)射的粒子是怎樣漂浮遠(yuǎn)去的。粒子保存屬性設(shè)置為 1 ,意味著每幀保持 100% 運(yùn)動(dòng)。既然粒子繼承了發(fā)射器 20% 的運(yùn)動(dòng),粒子就收到初始的爆發(fā)速度。粒子絕不會(huì)丟失速度,會(huì)繼續(xù)沿著那個(gè)方向運(yùn)動(dòng)。
1 、選擇 dustParticles
2 、設(shè)置 conserve 為 0.9
現(xiàn)在回放場(chǎng)景,你會(huì)看見粒子最初隨著汽車運(yùn)動(dòng),但是它們會(huì)很快就丟失向前運(yùn)動(dòng)的動(dòng)力并開始落后,最后停止運(yùn)動(dòng)。
降低 conserve ,你可以用場(chǎng)來更好地控制粒子的運(yùn)動(dòng)。
1 、創(chuàng)建一個(gè)紊亂場(chǎng)并指派到塵土粒子
2 、設(shè)置 Magnitude 為 100
3 、設(shè)置 Attenuation 為 0
4 、設(shè)置 Frequency 為 3
5 、點(diǎn)擊 play
粒子在紊亂場(chǎng)內(nèi)繼續(xù)運(yùn)動(dòng)并在隨意方向擴(kuò)展范圍。紊亂場(chǎng)是 3D Noise ,就像一個(gè)三維程序上的紋理。將聲音視為一個(gè)大理石質(zhì)地的紋理,如果你動(dòng)畫紋理布置,你就會(huì)在空間運(yùn)動(dòng)三維聲音。
選擇 dustControls 節(jié)點(diǎn),添加一個(gè) turbulenceRise 屬性,設(shè)置其值為 0.1 。
打開你一直在用于發(fā)射的表達(dá)式,在它的最后添加一行:
//Turbulence Rise
//
TurbulenceField1.ty=dustControls.turbulenceRise*frame;
當(dāng)你回放場(chǎng)景時(shí)候,你看見塵土粒子沿 Y 軸向上運(yùn)動(dòng),這是因?yàn)槲蓙y紋理隨著場(chǎng)的變換而向上運(yùn)動(dòng),粒子繼續(xù)被這些紋理吸引。
依靠你正試圖創(chuàng)建的塵土類型,不管它是一種細(xì)而輕的像粉筆一樣的東西,還是更重的像被汽車踢起的泥土,在 Y 軸運(yùn)動(dòng)的紊亂場(chǎng)參數(shù)都會(huì)給你的粒子重力感覺:

不像氣態(tài)物質(zhì),比如煙霧或者蒸汽(固體或液體變化成一種氣體并升上天),塵土?xí)3止腆w狀,但它是一種非常輕的固體,可以踢到空氣中,并逗留在最輕的空氣流上,最后落地。塵土越厚,就越重,落地越快。要獲得塵土落地運(yùn)動(dòng)狀態(tài),做到以下兩點(diǎn):
1 、創(chuàng)建一個(gè)重力場(chǎng)并指定給 dustParticles
2 、設(shè)置重力場(chǎng) magnitude 為 2
回放時(shí)候,即使紊亂場(chǎng)繼續(xù)將粒子向上拉,粒子看起來還是更重。對(duì)于這種效果,重力場(chǎng)的大小與場(chǎng)景大小不相關(guān)。對(duì)重力場(chǎng)的 magnitude 調(diào)整,應(yīng)該建立在你追求的外觀基礎(chǔ)上。
粒子現(xiàn)在穿透了地面,如果是一個(gè)非常細(xì)小的塵土,粒子落到地面就 ok 了,但是對(duì)于一個(gè)更厚重的塵土,你希望地上塵土堆積得厚重一點(diǎn)。
1 、選擇地面平面、粒子,并碰撞。
2 、設(shè)置 Tessenllation Factor 為 2000
3 、設(shè)置 Resilience 為 0.1
4 、設(shè)置 Friction 為 0.3
粒子堆積在地上,它們就像是被重力拉下來的,接著又被紊亂場(chǎng)拉上天。賦予紊亂,粒子就像是液體在運(yùn)動(dòng)。
Maya 硬件渲染粒子與軟件渲染元素結(jié)合V. 創(chuàng)建塵土粒子外觀
幾個(gè)屬性一起作用,以創(chuàng)建一個(gè)粒子模擬外觀。

粒子的生命周期
粒子在模擬中,什么時(shí)候消失怎樣消失,這在創(chuàng)建模擬形狀和任何場(chǎng)一樣重要。如果所有粒子以同樣的速度消失,模擬就會(huì)看起來非常線性,非常假。體積效果就像煙霧和塵土用到 sprite 時(shí),粒子的消失應(yīng)該是不容易注意到的,它會(huì)在不同時(shí)間消失,而不管粒子什么時(shí)候從哪里發(fā)射出來。
為了簡(jiǎn)化,我們將要用 lifespanRandom 模式開始:
1 、設(shè)置 lifespan Mode 為 Lifespan Random
2 、設(shè)置 Lifespan Random 為 1.5
3 、設(shè)置 Lifespan 為 2
回放時(shí),粒子會(huì)以隨意方式消失。
Sprites-Assigning a Sprite Image Sequence
打開屬性編輯器,改變粒子渲染類型屬性為 sprite 。
1 、點(diǎn)擊 Add Attributes for Current Render Type 按鈕
2 、設(shè)置 spriteScaleXPP 為 25
3 、設(shè)置 spriteScaleYPP 為 25
4 、打開 Multillster 或超圖窗口
5 、創(chuàng)建一個(gè) Lambert 材質(zhì)
6 、添加一個(gè)紋理文件到 Lambert 材質(zhì)的色彩屬性
7 、將文件紋理的圖像名字貼圖到第一部分里你渲染過的 sprite 序列
8 、打開 Use Cache
9 、打開 Use Frame Extension
10 、第 1 幀,為 frame extension 設(shè)置一個(gè)值為 1 的關(guān)鍵幀
11 、第 60 幀,為 frame extension 設(shè)置一個(gè)值為 60 的關(guān)鍵幀(也可以是序列中的最后一幅圖像 # )
12 、打開 Use Hardware Texture Cycling
13 、設(shè)置 Start Cycle Extension 為 1
14 、設(shè)置 End Cycle Extension 為 60
15 、指派 Lambert 材質(zhì)到粒子
16 、打開紋理顯示模式(熱幀: 6 )
回放時(shí), sprite 是看不見的,當(dāng)用硬件紋理循環(huán)時(shí),你需要給 spritNumPP 指派一個(gè)數(shù)字,數(shù)字大小在紋理循環(huán)范圍內(nèi)。
打開用于粒子的屬性編輯器。
1 、在 Add Dynamic Attributes 欄下點(diǎn)擊 General 按鈕
2 、出現(xiàn) Add Attubute 窗口,點(diǎn)擊 Particle 欄
3 、選擇 spriteNumPP
4 、點(diǎn)擊 ok
5 、在 Attribute Editor 里,右鍵點(diǎn)擊挨著 spritNumPP 屬性的文字域,并選擇 Create Ramp.
6 、在 arrayMapper1/outValuePP 域,點(diǎn)擊鼠標(biāo)右鍵并選擇 Edit Array Mapper.
7 、設(shè)置 Min Value 為 1
8 、設(shè)置 Max Value 為 60
9 、 Ramp 節(jié)點(diǎn)負(fù)方向,設(shè)置 ramp 底端值為 black, 頂端為 white 。
當(dāng)你回放動(dòng)畫時(shí),你會(huì)發(fā)現(xiàn):直到 sprites 在汽車正后面的時(shí)候才顯出來。為了修改這種現(xiàn)象,調(diào)整底端顏色入口的密度,增加它的值,直到你希望 sprites 出現(xiàn)的時(shí)候,。你也可以調(diào)整插入或者添加其他的顏色 entry 到 ramp ,以此控制粒子循環(huán)如何通過 sprites images 。
注意:如果 sprites 圖像邊上有一個(gè)黑色輪廓, sprites 圖像看起來就會(huì)像是燃燒的汽油或者是濃濃的煙霧。調(diào)整正在使用的文件紋理的 Alpha Offset ,設(shè)置它的值,小于 0 , -0.1 ,這樣更好。另外,可以增加 colorOffset ,或者,也可以調(diào)整 sprites 的整個(gè) alpha ,利用 color gain 或者合成包。
Maya 硬件渲染粒子與軟件渲染元素結(jié)合V. 創(chuàng)建塵土粒子外觀
Sprites- 調(diào)整 sprite Scale 和 Twist
效果開始合成一起,但是還有改進(jìn)的余地。當(dāng)創(chuàng)建一個(gè) sprite 基礎(chǔ)上的效果的時(shí)候, sprites 頂部每個(gè)分層都賦予它最終效果。利用不同的縮放值和扭曲值并在此基礎(chǔ)上動(dòng)畫,可添加角色到模擬。
為粒子物體添加以下的動(dòng)力學(xué)屬性,方法和你添加 spritNumPP 屬性一樣:
spriteScaleXPP
spriteScaleYPP
spriteTwistPP
在 Add Attibute 窗口 New 欄目里,保留 Float,Per Particle 屬性添加以下屬性:
randXPP
randYPP
randTwistPP
spriteTwistMultPP
spriteScaleMultPP
給 spriteTwistMultPP 和 spriteScaleMultPP 貼上凹凸貼圖,重新命名這些貼圖,名字要能正確反映他們要連接的屬性,可以命名為 spriteTwistramp , spriteScaleRamp 等等。反過來,于 spriteTwistMultPP 有聯(lián)系的 rump 貼圖,底端設(shè)為 black ,頂端設(shè)為 white 。
打開粒子物體需要的 creation Expression 并鍵入:
//generate random numbers for X and X
//
float $randx=rand(0.3,1.3)
float $randy=rand(0.8,1.2)
//store a random number for X and Y
//
//
randXPP=$randx
randYPP=$randY
//set spriteScaleXPP and SpriteYPP
//
spriteScaleXPP=0
spriteScaleYPP=0
//set randTwistPP
//
randTwistPP=rand(-180,180)
每個(gè)粒子 X,Y,Twist 的數(shù)值都是任意指派的,這些值會(huì)賦予每個(gè)粒子獨(dú)特的特征,并會(huì)被用在 Runtime Expression 里。既然我們用 rand 功能生成值并且邊緣功能返回結(jié)果總是不一樣,那么,我們就在單粒子屬性里保存這些值,以便以后使用。
用 rump 給 spriteTwistMultPP 和 spriteScaleMultPP 貼圖,也可將它們作為增效器,并給我們一個(gè)插值,但是,能否給我們一個(gè) interpolation ,那就要看粒子的年齡如何??梢杂贸R?guī)表達(dá)式控制扭曲和放縮值,但是在控制基于時(shí)間的屬性改變上,增加一個(gè)由 rump 控制的乘數(shù),會(huì)給我們更大的控制靈活性。
為什么用 0 值初始化 spriteScaleYPP 和 spriteScaleYPP ?因?yàn)?cg/image/ 的一個(gè) bug , rump 在 Creation 上沒有正確估算,產(chǎn)生了不可預(yù)料的結(jié)果。
打開粒子物體需要的 Runtime Expression 并鍵入:
//set spriteScaleXPP and spriteScaleYPP
//
spriteScaleXPP =spriteScalex* spriteScaleMultPP*randXPP;
spriteScaleYPP=spriteXcaleY*spriteScaleMultPP*randYPP*randXPP
為 sprite 渲染類型創(chuàng)建默認(rèn)屬性時(shí), cg/image/ 添加了一個(gè) spriteScaleX, spriteScaleY 和 spriteTwist 屬性。如果沒有這些屬性的單粒子版本,比如 spriteScaleXPP , cg/image/ 就會(huì)用 scalar 屬性代替,例如 spriteScale 。既然有了這些屬性的單粒子版本,縮放版本就被忽略了。我不忽略它們,在全局增效器中,我習(xí)慣用他們作為表達(dá)式的一部分。用一個(gè)你眾所周知的屬性名字,這個(gè)名字不僅用在保存創(chuàng)建一個(gè)新屬性階段(作為增效器),也展示給使用者一個(gè)屬性——具有相似的方式相似的功能。在通道盒里改變 spriteScaleX 或 spriteScaleY ,這會(huì)改變粒子總值。
在下面一行中:
spriteScaleXPP= spriteScaleY* spriteScaleMultPP*randYPP*randXPP;
spriteScaleYPP 和 spriteScaleXPP 的值大體相當(dāng),回到 creation expression, randYPP ,隨意初始化一個(gè)值—— 0.8 至 1.2 之間,這會(huì)導(dǎo)致 sprite 在 x 軸成矩形的—— +/-20% 。
添加下面幾行到 runtime Expression :
//spriteTwistPP
//
spriteTwistPP+= spriteTwistMultPP*sign(spriteTwistPP)* spriteTwist;
如果值是正的,用 sign 功能返回 1 ;如果值是負(fù)的,用 sign 功能返回 -1 。 spriteTwist 屬性是用用默認(rèn) Sprite 屬性創(chuàng)建的,在這種情況下,我們添加它的值到當(dāng)前 sprite 的 twist 上,引起 sprite 每幀旋轉(zhuǎn)。利用 spriteTwistMultPP ,你可以改變每個(gè) sprite twist 的速率, sprite 越大,自轉(zhuǎn)越慢。
此時(shí),你可以開始回放場(chǎng)景,交互式地調(diào)整被當(dāng)作 spriteTwist, spriteScaleX 和 spriteSclaeY 屬性創(chuàng)建的 rmaps 值。該階段有很大的扭曲空間,要得到 sprites 正確的縮放和扭曲值需要花點(diǎn)時(shí)間,但是,利用 ramp 貼圖,就可以創(chuàng)建一些非常有趣的效果。
打開塵土粒子屬性編輯器,在 Add Dynamic Attribute 欄點(diǎn)擊 Opacity 按鈕。
1 、為透明度創(chuàng)建 Per Object 和 Per Particle 屬性
2 、點(diǎn)擊 color 按鈕,為色彩添加 Per Particle 屬性
3 、點(diǎn)擊 General 按鈕,作為 Float,Per Particle 添加屬性:
intensityPP
opacityOrgPP
opacityMultPP
4 、用 ramp 貼圖為 opacityMulPP 貼圖,正確重新命名。
5 、在 creation 表達(dá)式中鍵入
//opacityPP
//
opacityOrgPP=rand(0.1,0.4)
opacityPP=0
用相對(duì)較低的值初始化透明度,該值保存在 opacityOrgPP 里, Runtime 表達(dá)式要用到它。
既然 spriteScaleXPP 和 spriteScaleYPP 屬性已經(jīng)設(shè)置 0 ,當(dāng) sprite 縮放到 0 并無法看見時(shí),就沒有必要初始化 opacityPP 一個(gè)值。
Maya 硬件渲染粒子與軟件渲染元素結(jié)合V. 創(chuàng)建塵土粒子外觀
選擇使用 rgbPP
添加下面的到 creation 表示式:
//rgbPP
//
float $intensity=rand(0.6,1.0);
intensityPP=$intensity
對(duì)于 rgbPP ,我們將用一個(gè) HSV 模式確定塵土的顏色,不用傳統(tǒng)的紅綠藍(lán)模型。每個(gè)粒子有各自的值或亮度,粒子在一個(gè)簡(jiǎn)單的陰影技術(shù)基礎(chǔ)上獲得顏色,粒子是否改變顏色要看是否被陰影,并將保留一個(gè)完整的密度值。該信息被合成器用來單獨(dú)扭曲粒子(從粒子密度)陰影。
添加下面東西到 runtime 表達(dá)式:
//opacityPP
//
opacityPP= opacityMultPP* opacityOrgPP* opacity;
利用通道盒里的透明度屬性,使用者現(xiàn)在可以全部調(diào)整所有粒子物體的透明度,同時(shí)保持每個(gè)粒子的獨(dú)特的 opacityOrgPP 。并修改粒子生命周期的透明度(使用連接到 opacityMultPP 的 ramp )。
體積陰影
體積陰影是獲得真實(shí)云和塵土效果的關(guān)鍵因素。體積陰影是通過粒子投射陰影到每個(gè)粒子身上而獲得的(通過透明度)。不幸的是,這種技術(shù)只有在軟件云粒子渲染中可以有效,而且耗時(shí)之多,令人難以置信。有成打的技術(shù)可以模仿這類效果,而且只花很少的時(shí)間。
你要用到的技術(shù)是我的一個(gè)同事 Eyal Erez 教我的,他和我一起合作制作 The Kolektiv 。將現(xiàn)在粒子所在位置和粒子"出生"的位置 birthWorldPosition 相比較,看現(xiàn)在粒子增加了多少高度,你就可以計(jì)算出一個(gè)值,粒子越低,值就越低。該技術(shù)對(duì)粒子系統(tǒng)來說很不錯(cuò),從相對(duì)等高的高度發(fā)射的粒子不會(huì)升或者降太多(和粒子最初位置相比較)。
LEGO 投射方面的"領(lǐng)頭羊"合成器 ----Gary Jackamuk 需要一個(gè)粒子路徑,這樣就可以調(diào)整顏色,以和 CG 背景元素的陰影及燈光匹配。通常,當(dāng)軟件為合成渲染一個(gè)元素時(shí)候,你可以輸出一個(gè)單獨(dú)的 shadow pass ,它可以被合成器單獨(dú)調(diào)整。 Gray 要給粒子上多少色,這要看粒子獲得的陰影數(shù)量。
我們可以提供一個(gè)給粒子上色和陰影的解決辦法,使它效果更好。

在 Add Dynamic Attributes 欄里點(diǎn)擊 General 按鈕,到 Particle 欄。
1 、創(chuàng)建 birthWorldPosition 屬性
2 、添加下面東西到 runtime 表達(dá)式:
//rgbPP
//
vector $pos=position;
vector $birthPos=birthWorldPosition;
float $hue=(240+120*smoothstep(-1,1, $pos.Y-$birthPos.y))/360;
rgbPP=hsr_to_rgb(%26lt;%26lt;$hue,1.0,intensityPP%26gt;%26gt;);
為了控制粒子顏色,我們規(guī)格化粒子所在位置和粒子產(chǎn)生位置之間的差數(shù),該規(guī)格發(fā)生在 -1 和 1 之間,這意味著如果一個(gè)粒子比它產(chǎn)生的位置低于 1 個(gè)單位,我們就會(huì)得到一個(gè) 0 的值;如果高于 1 個(gè)單位,則會(huì)得到一個(gè) 1 的值,然后,這些值要被調(diào)整為沿著色輪 ----100% 藍(lán)色和 100% 紅色之間,或者 240 和 360 之間。參考顏色選擇窗口,找到其它顏色的色彩值。
粒子物體的 rgbPP 屬性讀取 rgb 值,而不是 hsv 值,所以,你需要利用 hsv_to_rgb 函數(shù)將 hsv 轉(zhuǎn)換成 rgb 。該功能視一個(gè)矢量為輸入,那也是為什么我們用 %26lt;%26lt;%26gt;%26gt; 來為色彩、飽和度、密度壓縮這些值的原因。色彩值最好為 0-1 ,而不是 0-360 ,所以我們要用 360 來除 hue 值。飽和度仍為 1.0 ,但是,你有個(gè)機(jī)會(huì):通過修改飽和度(在你決定的值的基礎(chǔ)上),添加路徑附加消息到合成器上,最后,粒子的亮度都被考進(jìn) hsv 的 value 中。
在這一點(diǎn)上,仍然可以對(duì)各種各樣的 rumps 貼圖和場(chǎng)做大量的扭曲,以此獲得你想要的外觀。
打開 wheeOnPath_Part6.ma 文件,看看我拿出的結(jié)果。

VI. 硬件渲染粒子
緩存
在硬件渲染前隱藏粒子,如果沒有隱藏,運(yùn)動(dòng)模糊就不會(huì)產(chǎn)生正確的結(jié)果, pickup 幀就不會(huì)和原始幀匹配。
Alpha 通道
當(dāng) sprites 透明值少于 1 時(shí),由 Hardware Render Buffer 生成的 Alpha 通道是不正確的。與彩色通道不同,考慮到當(dāng)前粒子后的粒子顏色, Alpha 通道會(huì)返回只顯示在顯示器上的最終粒子的值 ---- 這意味著,如果你有 1000 個(gè)粒子堆疊一起,每個(gè)粒子透明值為 0.1 ,即使不能在三維視圖里看穿粒子堆, cg/image/ 也將在圖像最終 Alpha 通道里放上一個(gè) 0.1 的值。
用 Luminance 作為 Alpha 通道會(huì)產(chǎn)生不正確的結(jié)果,用粒子的亮度,你會(huì)將粒子里的所有陰影挪開。不管較黑區(qū)域在哪里,較黑區(qū)域都會(huì)比較亮區(qū)域更加透明。最終的圖像看起來是平的,塵土很少紋理。
合成粒子的最好方法就是用非內(nèi)嵌的 Alpha 通道渲染它們,背景要是 100% 綠色。利用簡(jiǎn)單的合成技術(shù),這種綠屏方法, Alpha 通道就會(huì)有準(zhǔn)確的結(jié)果。如果粒子沒有任何綠色信息,這種方法會(huì)更好,這也是為什么我們限制塵土粒子的色彩范圍在綠色和紅色之間,而不通過綠色范圍。
幾何體遮罩
既然大多數(shù)粒子效果傾向于帶有體積的三維元素,那么,當(dāng)正確分層你的效果時(shí),一個(gè)簡(jiǎn)單的二維 Alpha 通道就會(huì)不充足了。體積在不同的深度有不同的密度,你需要在三維空間裁減體積,這樣,元素前的體積才會(huì)保持密度。有兩種方法:
打開幾何體遮罩, cg/image/ 自動(dòng)利用場(chǎng)景中的所有幾何體作為一個(gè)三維挖剪圖畫,該幾何體被用來挖剪粒子,但是,它在色彩和 Alpha 通道里是看不見的,就像在軟件渲染里的 useBackground 材質(zhì)。
特殊遮罩元素
運(yùn)用幾何遮罩將帶來一個(gè)后果,那就是如果你用了粒子替代并且替代物是幾何體,那么幾何體也會(huì)被遮罩,但不會(huì)出現(xiàn)在色彩或者 Alpha 通道里。為了避免這點(diǎn),你可以指定一個(gè) Lambert 材質(zhì)到場(chǎng)景中的所有做為遮罩的幾何體,其色彩和 incandescence 都是 100% 綠色,也可以是其它顏色,只要以后能對(duì)它進(jìn)行摳像就行。將 incandescence 提高到 100% 綠色原因是:消除任何在幾何體上的硬件陰影影響。
匹配鑲嵌細(xì)分 Matching Tessenllation
在場(chǎng)景中使用 NURBS 幾何體的時(shí)候,這一點(diǎn)很重要:三維視圖里的鑲嵌細(xì)分要和軟件渲染的渲染鑲嵌細(xì)分相匹配。 cg/image/ 的 NURBS 物體在視口里高精度顯示 ----Hotkey:3---- 這與用渲染器來渲染鑲嵌細(xì)分是不一樣的。如果你正在渲染一個(gè)非常厚的體積,你會(huì)看到幾何體遮罩比軟件渲染物體有很多的小面,這個(gè)結(jié)果導(dǎo)致在合成時(shí)會(huì)有令人不快的邊緣圍繞在物體周圍。為了避免發(fā)生這樣的事情,打開場(chǎng)景里所有 NURBS 物體的 Display Render Tessenllation ,現(xiàn)在,當(dāng)你硬件渲染的時(shí)候,鑲嵌細(xì)分會(huì)和軟件渲染器相匹配。
運(yùn)動(dòng)模糊
模擬渲染粒子時(shí),運(yùn)動(dòng)模糊就是必須的。一般說來,粒子都非常小,運(yùn)動(dòng)速度非???,粒子系統(tǒng)的外觀不僅僅指顏色、燈光和透明度,還包括運(yùn)動(dòng)中粒子的模糊狀態(tài)。運(yùn)動(dòng)模糊不僅僅反映了粒子運(yùn)動(dòng)速度,而且反映了粒子體積大小。一股旋風(fēng)不需要由 100 , 000 , 000 個(gè)快速自旋的點(diǎn)粒子組成,幾百個(gè)帶有運(yùn)動(dòng)模糊的 sprite 就可以產(chǎn)生同樣的精彩結(jié)果。
硬件渲染的運(yùn)動(dòng)模糊和軟件渲染的運(yùn)動(dòng)模糊結(jié)果不同,不必考慮匹配它們有多難,實(shí)際上,絕不可能 100% 精確,有 50% 精確就很幸運(yùn)了。依靠物體相對(duì)于攝影機(jī)的移動(dòng)速度,產(chǎn)生的結(jié)果可能是可接受的,也可能是完全沒用的??梢杂貌煌暮铣杉记珊土W酉到y(tǒng)的從屬路徑來取消這些差異。
為了更好地匹配粒子的軟件渲染,運(yùn)動(dòng)模糊長(zhǎng)度的設(shè)置要和攝影機(jī)的快門角度相匹配, 144 快門角度會(huì)產(chǎn)生 144/360 或 0.4 的運(yùn)動(dòng)模糊,若用更高值時(shí),可能會(huì)獲得有趣的效果。記住以下幾點(diǎn)很重要:
如果你正用幾何體遮罩,運(yùn)動(dòng)模糊設(shè)置過高或過低都會(huì)引起遮罩和軟件運(yùn)動(dòng)模糊不相匹配。
如果你的攝影機(jī)被動(dòng)畫,動(dòng)作模糊設(shè)置高過 1 ,你的效果將在三維空間游動(dòng),運(yùn)動(dòng)模糊結(jié)果將在時(shí)間線之前。
如果你有一個(gè)鎖定的攝影機(jī),且你正在用的一個(gè)作為遮罩的幾何體沒有運(yùn)動(dòng)(比如從一個(gè)煙囪或蠟燭冒出的煙),你可以抬高運(yùn)動(dòng)模糊設(shè)置,用完全非真實(shí)的大于 1 的值試驗(yàn)一下,你會(huì)獲得非常有趣的結(jié)果。
糾正運(yùn)動(dòng)模糊 Artifacts
如果幾何遮罩引起嚴(yán)重 Artifacts ,糾正這些 Artifacts 的方法是非常有限的:
多數(shù)情況下,關(guān)閉運(yùn)動(dòng)模糊會(huì)給你一個(gè)元素并更好地適合你的軟件渲染元素,當(dāng)然,代價(jià)就是粒子外觀會(huì)改變。
關(guān)閉特殊物體的運(yùn)動(dòng)模糊
這種辦法就是關(guān)閉運(yùn)動(dòng)模糊。與軟件渲染器不同的是,硬件渲染器在渲染狀態(tài)下不妨礙運(yùn)動(dòng)模糊特征。
要關(guān)閉一個(gè)物體的運(yùn)動(dòng),你需要這樣做:
1 、選中物體
2 、烘焙所有的動(dòng)畫屬性,這樣每幀都有了關(guān)鍵幀。
3 、關(guān)鍵幀插入類型為 stepped
這會(huì)確保當(dāng)物體在關(guān)鍵幀之間取樣的時(shí)候, cg/image/ 不會(huì)插入到物體的位置上。該技術(shù)通常比較好用,而且可以寫入一個(gè) mel 腳本,將所有動(dòng)畫曲線程序自動(dòng)化。
如果你看見 artifacts 和攝影機(jī)還處于動(dòng)畫狀態(tài),你也可以嘗試上面提到的攝影技術(shù)。
關(guān)鍵幀特殊物體
修改 Artifacts 的另一技術(shù)就是:在合成階段添加附加的運(yùn)動(dòng)模糊到 Artifacts ,但是,這項(xiàng)技術(shù)的難點(diǎn)在于 ---- 遮罩那些引起問題的特殊幾何體,并只模糊幾何體有問題的區(qū)域。要做到這一點(diǎn),用一種綠色 Lambert 材質(zhì)渲染粒子的附加路徑,就像在幾何體遮罩章節(jié)描述的一樣。合成器現(xiàn)在可以為那個(gè)區(qū)域提取一個(gè) alpha 通道,單獨(dú)模糊圖像的那個(gè)部位。

(完)
以上就是Maya 硬件渲染粒子與軟件渲染元素結(jié)合具體操作方法介紹,希望能對(duì)大家有所幫助!
相關(guān)文章

如何將Maya首選項(xiàng)重置為默認(rèn)值? 重置Maya首選項(xiàng)的技巧
Maya首選項(xiàng)是Maya軟件中的一組用戶可配置的選項(xiàng),可以讓用戶根據(jù)自己的需要調(diào)整軟件的默認(rèn)設(shè)置,下面我們就來看看重置Maya首選項(xiàng)的技巧2024-02-18
Maya打開失敗報(bào)錯(cuò)提示Maya已停止工作原因與解決方法
啟動(dòng)Maya軟件的時(shí)候,提醒:停止并顯示以下錯(cuò)誤,然后軟件崩潰了,該怎么結(jié)解決呢?下面我們就來看看Maya崩潰的原因分析和解決辦法2024-02-18
maya控制手柄怎么創(chuàng)建IK? maya的IK表達(dá)式拉伸效果的設(shè)置方法
maya控制手柄怎么創(chuàng)建IK?maya建模的是偶,使用IK控制柄工具創(chuàng)建IK該怎么添加表達(dá)式做拉伸效果呢?下面我們就來看看maya的IK表達(dá)式拉伸的設(shè)置方法2023-02-28
maya打不開fbx文件提示Unrecognized file type錯(cuò)誤怎么辦?
maya打不開fbx文件提示Unrecognized file type錯(cuò)誤怎么辦?maya導(dǎo)入fbx文件失敗,提示無法識(shí)別的文件類型錯(cuò)誤,該怎么辦呢?下面我們就來看看詳細(xì)的解決辦法2021-10-29
maya一款專為游戲開發(fā)者和制片人專門設(shè)計(jì)。適合視效藝術(shù)家、建模和動(dòng)畫師,今天小編就來教給大家一個(gè)簡(jiǎn)單的教程,使用maya制作立體曲面2021-09-09
maya怎么創(chuàng)建絢麗多彩的煙花? maya煙花的制作方法
maya怎么創(chuàng)建絢麗多彩的煙花?maya中想要?jiǎng)?chuàng)建漂亮的煙花,該怎么制作這個(gè)效果呢?下面我們就來看看詳細(xì)的教程,需要的朋友可以參考下2021-01-08
maya怎么用phoenixfd插件制作逼真的火焰動(dòng)畫?
maya怎么用phoenixfd插件制作逼真的火焰動(dòng)畫?maya中想要制作逼真的火焰動(dòng)畫,該怎么制作這個(gè)動(dòng)畫效果呢?下面我們就來看看詳細(xì)的教程,需要的朋友可以參考下2020-12-08
maya模型上的數(shù)字怎么關(guān)掉? maya模型不顯示數(shù)字的技巧
maya模型上的數(shù)字怎么關(guān)掉?maya中的模型顯示數(shù)據(jù),想要關(guān)閉顯示數(shù)據(jù),該怎么操作呢?下面我們就來看看maya模型不顯示數(shù)字的技巧,需要的朋友可以參考下2020-11-02
maya怎么重建曲面?maya中想要重建曲面,讓模型更加圓滑,該怎么操作呢?下面我們就來看看maya重建曲面的方法,需要的朋友可以參考下2020-10-10
maya骨骼不顯示怎么辦?maya文件打開以后發(fā)現(xiàn)骨骼隱藏了,我們找不到,骨骼被隱藏?zé)o非三種情況,自己被隱藏,父對(duì)象被隱藏,繪制樣式選擇了無,下面我們就來看看maya顯示骨2020-08-10






