最美情侣中文字幕电影,在线麻豆精品传媒,在线网站高清黄,久久黄色视频

歡迎光臨散文網(wǎng) 會(huì)員登陸 & 注冊

Niagara Ribbon制作植物生長

2023-03-07 14:00 作者:塵星_Star  | 我要投稿

????????最近看官方視頻,看到肖月大佬提到用Ribbon的方法制作植物生長。一直也對這比較感興趣,所以花時(shí)間試著做了一下。還有很多地方需要完善,希望大家多多提提意見。

????????目前首選的考慮當(dāng)然是Houdini,這就需要Houdini To Niagara來完成信息傳導(dǎo)。相關(guān)的插件地址:

????????????????https://github.com/sideeffects/HoudiniNiagara

????????????????https://github.com/sideeffects/SideFXLabs

????????一個(gè)是UE引擎的,一個(gè)Houdini的。網(wǎng)上有很多教程講了如何安裝插件,我就不贅述了。插件默認(rèn)可以傳遞很多屬性(點(diǎn)是關(guān)鍵),包括位置,ID,旋轉(zhuǎn),大小,Type等。

????????首先當(dāng)然是在Houdini中制作我們所需的植物。我只需要植物的最終形態(tài),只需要當(dāng)前幀的數(shù)據(jù),植物的生長效果在引擎內(nèi)完成。

????????在最開始,對于Ribbon部分。我設(shè)想傳遞點(diǎn)的位置,大小來確定Ribbon。

?????? 首先Circle,Scatter節(jié)點(diǎn)在圓內(nèi)創(chuàng)建幾個(gè)點(diǎn)?,作為最開始的根部。而后用AttributeRandomize分別對N,pscale進(jìn)行隨機(jī)化(確定曲線的朝向以及長度)。對于主干用Line和Resample做出一根很多點(diǎn)的線。

????????

?????通過Length設(shè)置點(diǎn)的數(shù)量,更改TreatPolygon使線更加平滑。并且勾選curveu屬性,此屬性根據(jù)曲線長度進(jìn)行0~1的賦值。

?

????AttributeVOP節(jié)點(diǎn),通過curveu進(jìn)行曲線采樣,然后采樣的值與Noise相乘來改變點(diǎn)的位置,將Noise的Frequency、Roughness、Amplitude節(jié)點(diǎn)用鼠標(biāo)中鍵提升為參數(shù),這樣就可以對曲線進(jìn)行彎曲操作了。曲線的左端保持為0,讓連接處的點(diǎn)不發(fā)生偏轉(zhuǎn)。最后用CopyToPoint節(jié)點(diǎn)將散布的點(diǎn)的屬性傳遞給曲線。

????至于AttributeWrangle定義的屬性有什么用,這在后面將會(huì)提到,現(xiàn)在我們專注構(gòu)建基礎(chǔ)形狀。出與美術(shù)的考慮使用Twist對曲線進(jìn)行扭曲。

?????這樣主干部分就完成了。

????????

? ????隨后用OrientAlongCurve使法線沿著曲線方向?qū)R,再對N和pcale進(jìn)行隨機(jī)化處理,Scatter產(chǎn)生點(diǎn)以進(jìn)行下一層級的生成。其他的就和上面的一樣,Copy&Paste改下參數(shù)名稱就行了。??

?

????接下來,我想要在枝條末端生長花。為此,GroupRange節(jié)點(diǎn)就是選擇枝條的最后一個(gè)點(diǎn),并作為END的組。這個(gè)不能放在CopyToPoint的節(jié)點(diǎn)后面,不然你只會(huì)得到一朵花。別問我怎么知道,都是淚。

????????那么一個(gè)關(guān)鍵的問題來了,怎么確定花的朝向了。這個(gè)就要用到四元數(shù)了,我們首先OrientAlongCurve讓法線沿著曲線的方向。而后用AttributeWrangle寫上我們的朝向。我們只關(guān)注前三行關(guān)于方向的。1.定義旋轉(zhuǎn)矩陣m,該矩陣的作用是讓花的模型的Y軸(0,1,0)(參考UE方向)對齊到@N法線方向。2.對模型進(jìn)行旋轉(zhuǎn),旋轉(zhuǎn)的軸向是@N,旋轉(zhuǎn)的角度用參數(shù)ang來控制然后與ptnum相乘讓每朵花的旋轉(zhuǎn)值不同。3.最后把矩陣m參與矩陣運(yùn)算賦予orient。

????后面的就是Copy&Paste過程了,然后瘋狂的調(diào)整參數(shù)來達(dá)到你想要的美術(shù)效果。最后的花我沒有進(jìn)行方向的調(diào)整,因?yàn)檫@朵花相對較小,在UE里我就用GPU粒子朝向攝像機(jī)來解決,已獲得那微小的性能提升。

? ? 好,做完了?。?!準(zhǔn)備導(dǎo)出到UE.

????最后我們把需要導(dǎo)出的點(diǎn)用Merge合在一起,用我們安裝好的插件的Niagara節(jié)點(diǎn),選擇渲染當(dāng)前幀。導(dǎo)出!

????什么,你問我,多了幾個(gè)屬性和節(jié)點(diǎn)。那是后來的事了,因?yàn)槲野堰@個(gè)導(dǎo)進(jìn)UE里一看。

????CrazyWork!!!

????好了,不皮了。導(dǎo)進(jìn)UE里,我們還面對幾個(gè)問題。

  1. ?我們該怎么區(qū)分每個(gè)層級,區(qū)分不同的花以及枝干。

  2. UE里的Ribbon怎么一條線連到底呢,怎么判斷Ribbon那是起點(diǎn),那是終點(diǎn)。

  3. 怎么做植物生長的效果。

????通過查閱官方示例以及其他大佬的視頻文章之后,慢慢的解決了。

????1.?在每次CopyToPoint節(jié)點(diǎn)之前,創(chuàng)建一個(gè)新的屬性Type用來區(qū)分他們。

????需要注意的是花我們記得把之前的END組給上。

????2. UE官方提到Particle.RibbonID和RibbonLinkOrder決定Ribbon的鏈接方式,但我仍然不明白究竟如何鏈接的。于是自己創(chuàng)建一個(gè)測試的粒子系統(tǒng),把上面提到的兩個(gè)變量賦予隨機(jī)值。結(jié)果如下:

????從第一張圖不難發(fā)現(xiàn),RibbonID一樣時(shí),Ribbon才會(huì)連起來,從第二張第三張圖我們發(fā)現(xiàn)Ribbon的鏈接順序取決于LinkOrder的大小。


????RibbonID我們可以在CopyToPoint節(jié)點(diǎn)之前用ptnum賦值。LinkOrder則用之前提到過的curveu、1、2來賦值。忽視掉那些被注釋掉的黃色代碼,本來打算用pscale來做Ribbon的Width的,但由于樹枝間的接縫問題以及LinkOrder的出現(xiàn)我沒有用這種方法。

????3.?植物的生長是通過對ID的重新排序得到的,我們得出每個(gè)點(diǎn)到原點(diǎn)的距離,并以此來進(jìn)行重新排序。

然后在UE里根據(jù)這個(gè)值做出生長的效果。

以上就是整個(gè)Houdini的工作了。接下來導(dǎo)進(jìn)UE里。

????

????在安裝好HoudiniNiagara插件后,我們找到官方自帶的發(fā)射器,以此為模版。

????我們只需要起始狀態(tài)就行了,不需要變化,可以把Update里的Sample刪除。然后把我們自己得到的點(diǎn)的數(shù)據(jù)到進(jìn)來。

????

????檢查一下點(diǎn)的屬性是否是我們想要的。

????

???

?????枝條用Ribbon發(fā)射器,UV就用默認(rèn)的。Width等下我們自己設(shè)定。

????Niagara里我們只是定義了枝條的發(fā)光顏色,枝條和花的材質(zhì)都用的Masked的材質(zhì)模式,用半透明模式消耗大,可能還會(huì)出現(xiàn)半透明排序問題。枝條的基礎(chǔ)顏色,粗糙度,法線都是在材質(zhì)里完成的??紤]到文章篇幅原因,材質(zhì)我就不展示了,都是一些基本的UV流動(dòng),扭曲,溶解等。

????

????Ribbon形狀設(shè)定為Tube。

????隨后我們初始化LifeTime,Position,RibbonWidth。

????發(fā)射器默認(rèn)自帶了一些Houdini的屬性,將Houdini.Position賦予到Particle.Position里。

????至于我們自定義的屬性,需要像上面那樣手動(dòng)寫進(jìn)去。

????接下來還剩一個(gè)問題,RibbonWidth的屬性如何定義了,我們可以用Type確定那一層級,用Linkorder進(jìn)行曲線采樣來確定Width。

????首先進(jìn)行判斷那一層級,根據(jù)結(jié)果來設(shè)定Width。

????將我們所寫的賦值給RibbonWidth,HType用Houdini.Type復(fù)制,TypeNum則是確定我們需要對那一層級進(jìn)行編輯,0為主干,1為Branch_1~~~以此類推。至于Width我們用A*B賦值。

????A用LinkOrder進(jìn)行曲線采樣,確定枝干的形狀。ScaleCurve設(shè)置枝干的大小。

????B是一個(gè)Noise,與A相乘賦予每個(gè)枝條更加隨機(jī)的變化。

????Noise是采樣CurlNoise實(shí)現(xiàn)的,因?yàn)檫@樣的噪音的隨機(jī)是一種偽隨機(jī)。

????第一個(gè)是我們想要的Random,第二種是賦予隨機(jī)值。

????這個(gè)是參考官方的CurlNoiseForce寫的。通過粒子的位置,Age實(shí)現(xiàn)對Noise的采樣,采樣出來的值歸一化,用Lerp節(jié)點(diǎn)重新映射,這樣我們便于方便的調(diào)整。

????我想對Width做0.9~1.1的隨機(jī)變化。

????其他的就是Copy&Paste過程了,我們只需要改變TypeNum確定改變那根枝條就行了。后面的枝條在曲線開始初給了一個(gè)相對較小的值,這樣枝條的連接處更加好看。

????

????至于生長我們需要新定義一個(gè)Particle屬性,TimeShiftByID。這個(gè)雖然看起來比上面簡單,但其實(shí)花了我比較長時(shí)間想出來的。Age屬性是一個(gè)每秒增加1的動(dòng)態(tài)屬性。再引入一個(gè)新的浮點(diǎn)數(shù),定義生長的速度。最后和ID進(jìn)行運(yùn)算。(Age-ID*GrowSpeed)/GrowSpeed。(GrowSpeed不能為0),假如GrowSpeed為1,那么ID為0的粒子在0~1S內(nèi)的TimeShiftByID為0~1;ID為1的粒子在1~2S內(nèi)的TimeShiftByID為0~1;ID為2的粒子在2~3S內(nèi)的TimeShiftByID為0~1。假如GrowSpeed為2,那么ID為0的粒子在0~2S內(nèi)的TimeShiftByID為0~1;ID為1的粒子在2~4S內(nèi)的TimeShiftByID為0~1;ID為2的粒子在4~6S內(nèi)的TimeShiftByID為0~1以此類推。這樣將TimeShiftByID進(jìn)行采樣就能實(shí)現(xiàn)很多效果。

????

? ? 最后我們給到GrowSpeed一個(gè)很小的值來確定生長時(shí)間,其實(shí)這里還可以根據(jù)ID調(diào)整GrowSpeed來讓開始時(shí)生長的更快,結(jié)束時(shí)生長的慢一些。但是由于太快了,難以察覺我就沒加。而后我們根據(jù)TimeShiftByID給EmissiveColor進(jìn)行設(shè)值,這樣就實(shí)現(xiàn)了植物生長的效果以及發(fā)光的效果。

????

? ? 我也通過DynamicMaterialParameters給材質(zhì)中的溶解(Dissolve)參數(shù)賦值,其實(shí)這個(gè)和Alpha的功能有些重合,不過影響不大,在實(shí)現(xiàn)花的生長要靠溶解來更好的實(shí)現(xiàn)。

????終于到最后的階段了,首先花的模型是通過Blender做的。

????首先建一個(gè)平面,保證模型的UV是正方形方便貼圖制作。然后對平面用表面細(xì)分和陣列修改器進(jìn)行編輯和復(fù)制。期間手動(dòng)用衰減對點(diǎn)進(jìn)行編輯,使其更加隨機(jī)化,最后平滑著色就OK了。

????

????花的貼圖在SD里面做的,紅色通道儲(chǔ)存著Albedo的信息,綠色通道儲(chǔ)存著EmissiveColor的信息,藍(lán)色通道儲(chǔ)存著溶解貼圖的信息。

????通過IF判斷Type來確定花的生長位置和數(shù)量。

????初始化花的基礎(chǔ)信息,花的大小設(shè)置一個(gè)隨機(jī)值就行了。

????注意這里的橫坐標(biāo)的值很大,不是1,我給到的是3500,否則太快看不到發(fā)光生長。通過溶解來實(shí)現(xiàn)花的生長。到此為止,就沒有什么新的東西了,后面的第二種花和前面的制作思路差不多。

????其實(shí)做這個(gè)初衷是想用GPU粒子實(shí)現(xiàn)的,但我把Ribbon切換到GPU時(shí)發(fā)生錯(cuò)誤,我看了下NiagaraDebugger發(fā)現(xiàn),RibbonID和RibbonLinkOrder現(xiàn)在好像不能傳遞給GPU Ribbon,那樣的話可以實(shí)現(xiàn)更大數(shù)量的植物模擬了。由于東西比較多,難免會(huì)出現(xiàn)錯(cuò)誤,歡迎大家指出。

Niagara Ribbon制作植物生長的評論 (共 條)

分享到微博請遵守國家法律
霍州市| 小金县| 延川县| 磐安县| 台前县| 元朗区| 南康市| 梅州市| 澜沧| 临高县| 山阳县| 额敏县| 新邵县| 南汇区| 清徐县| 遂昌县| 乐平市| 丰都县| 抚顺市| 沙坪坝区| 即墨市| 当阳市| 胶州市| 孟州市| 康马县| 迁安市| 吴江市| 称多县| 三亚市| 桐乡市| 莱阳市| 荆门市| 武鸣县| 平阳县| 华安县| 兴和县| 剑河县| 龙海市| 旬邑县| 江口县| 时尚|