UE4粒子特效Niagara系統(tǒng)
Niagara設(shè)計理念:為何要重新塑造虛幻引擎的視覺效果系統(tǒng)?
虛幻引擎的用戶群體在不斷擴大,虛幻引擎廣泛應(yīng)于游戲開發(fā)領(lǐng)域以外的眾多行業(yè)。例如:
建筑視覺表現(xiàn)
工業(yè)設(shè)計(如汽車設(shè)計)
虛擬影視制作
用戶更加多樣化——有設(shè)計專業(yè)的學(xué)生、獨立開發(fā)者、大型專業(yè)工作室團隊,以及非游戲領(lǐng)域的個人和公司。隨著不斷發(fā)展,Epic開發(fā)人員無法全面了解虛幻引擎介入的所有行業(yè)。因此我們希望創(chuàng)建適用于各行業(yè)所有用戶的視覺效果(VFX)系統(tǒng)。
新VFX系統(tǒng)的目標(biāo)
我們要創(chuàng)建新系統(tǒng),取Cascade之精華,去其糟粕。因此,新VFX系統(tǒng)的目標(biāo)是:
美術(shù)師可全權(quán)掌控效果。
各軸均可編程、可自定義。
提供更好的調(diào)試、顯示和性能工具。
支持來自虛幻引擎4其他部分或外部源的數(shù)據(jù)。
不妨礙用戶操作。
Niagara如何實現(xiàn)目標(biāo)
數(shù)據(jù)共享
實現(xiàn)用戶全面控制,從數(shù)據(jù)訪問開始。我們希望用戶能夠使用虛幻引擎的所有部分的數(shù)據(jù),以及來自其他應(yīng)用程序的數(shù)據(jù)。因此,我們決定向用戶公開一切數(shù)據(jù)。
粒子負載
為向用戶公開所有此類數(shù)據(jù),必須確定用戶使用數(shù)據(jù)的方式。命名空間可容納層級數(shù)據(jù)。比如,Emitter.Age包含發(fā)射器數(shù)據(jù);Particle.Position包含粒子數(shù)據(jù)。參數(shù)映射是攜帶粒子所有屬性的粒子負載。因此,一切都是可選項。
可添加許多數(shù)據(jù)類型
任何數(shù)據(jù)類型均可添加為粒子參數(shù)。可添加復(fù)雜結(jié)構(gòu)體、變換矩陣或布爾標(biāo)記??商砑尤魏螖?shù)據(jù)類型,并應(yīng)用于效果模擬。
將圖表范式和堆棧范式結(jié)合
堆棧范式(例如Cascade中所用范式)和圖表范式(例如藍圖中所用范式)各有優(yōu)勢。堆棧提供模塊化行為和可讀性。圖表增強用戶對行為的控制。新效果系統(tǒng)兼具兩者之長。
Niagara混合結(jié)構(gòu)的層級
模塊
模塊可用于圖表范式 - 可使用可視節(jié)點圖表在腳本編輯器中創(chuàng)建帶HLSL的模塊。模塊相當(dāng)于Cascade的行為。模塊與公共數(shù)據(jù)通信、封裝行為,并堆疊在一起。
發(fā)射器
發(fā)射器用于堆棧范式 - 作為模塊容器,可堆疊在一起創(chuàng)建各種效果。發(fā)射器用途單一,但可重復(fù)使用。參數(shù)可從模塊傳輸?shù)桨l(fā)射器級別,但用戶可在發(fā)射器中修改模塊和參數(shù)。
系統(tǒng)
發(fā)射器、系統(tǒng)用于堆棧范式,也與Sequencer時間軸配合用于控制發(fā)射器在系統(tǒng)中的行為。系統(tǒng)是發(fā)射器的容器。系統(tǒng)將此類發(fā)射器組合成一種效果。在Niagara編輯器中編輯系統(tǒng)時,可以修改和覆蓋系統(tǒng)中的參數(shù)、模塊或發(fā)射器。
Niagara選擇堆棧和堆棧組
從概念上講,Niagara中的粒子模擬作為堆棧運行,模擬從堆棧頂部流向底部,依次執(zhí)行各模塊。關(guān)鍵點是,每個模塊都指定到組,以確定模塊執(zhí)行時間。例如,初始化粒子的模塊或粒子生成時起作用的模塊位于 粒子生成 組中。
每個組中都有多個 階段,會在一個系統(tǒng)的生命周期內(nèi)的特定時間點上調(diào)用它們。發(fā)射器、系統(tǒng)和粒子都默認具有生成和更新階段。生成階段會在組存在的第一幀內(nèi)被觸發(fā)。例如,系統(tǒng)會在關(guān)卡內(nèi)首次實例化并被激活時觸發(fā)其生成階段。粒子會在發(fā)射器發(fā)射粒子時觸發(fā)其生成階段,在每個新粒子被創(chuàng)建出來時將執(zhí)行生成指令。更新階段會在系統(tǒng)、發(fā)射器或粒子被激活的每一幀中觸發(fā)。
此外還有其他高級階段,如 事件 和 模擬階段。它們可以被添加到生成和更新流程中。每當(dāng)粒子生成一個新事件,并設(shè)置一個發(fā)射器去處理該事件時,就會觸發(fā) 事件。如果有可能,事件句柄階段會發(fā)生在同一幀中,但位于發(fā)起事件之后。模擬階段 是一個高級GPU功能。該功能可讓一個序列中發(fā)生多個生成和更新階段,對于構(gòu)建流體模擬之類的復(fù)雜結(jié)構(gòu)非常有用。
模塊是項目,但項目并不是模塊。模塊 是用戶可創(chuàng)建的可編輯資源。項目 指的是系統(tǒng)或發(fā)射器中用戶無法創(chuàng)建的部分。舉例而言,系統(tǒng)屬性、發(fā)射器屬性和渲染器都是項目。
階段、組、命名空間及數(shù)據(jù)封裝
通過將各個模塊添加到組(系統(tǒng)、發(fā)射器或粒子)的階段(更新、生成、事件或模擬),可控制模塊執(zhí)行時間及模塊處理的數(shù)據(jù)。堆棧組關(guān)聯(lián) 命名空間;此類命名空間將定義該組中的模塊可讀取或?qū)懭氲臄?shù)據(jù)。
例如,系統(tǒng) 組中執(zhí)行的模塊可讀寫系統(tǒng)命名空間的參數(shù),但只能讀取引擎或用戶命名空間中的參數(shù)。沿堆棧從系統(tǒng)組向下執(zhí)行至發(fā)射器組時,發(fā)射器 組中執(zhí)行的模塊可讀寫發(fā)射器命名空間中的參數(shù),但只能讀取系統(tǒng)、引擎和用戶命名空間中的參數(shù)。粒子 組中的模塊只能讀取系統(tǒng)和發(fā)射器命名空間的參數(shù)。
由于發(fā)射器組中的模塊可讀取系統(tǒng)命名空間中的參數(shù),因此系統(tǒng)組中的模塊可執(zhí)行一次與所有發(fā)射器相關(guān)的模擬,并由各個發(fā)射器中的發(fā)射器組模塊讀取模擬結(jié)果(存儲在系統(tǒng)命名空間中)。這也適用于粒子組中的模塊,其可讀取系統(tǒng)和發(fā)射器命名空間中的參數(shù)。
本文摘自網(wǎng)絡(luò),如侵必刪
標(biāo)簽: