本發(fā)明涉及一種計(jì)算機(jī)圖像領(lǐng)域,尤其是涉及一種粒子編輯方法及粒子編輯器。
背景技術(shù):
粒子系統(tǒng)表示三維計(jì)算機(jī)圖形學(xué)中模擬一些特定的模糊現(xiàn)象的技術(shù),而這些現(xiàn)象用其它傳統(tǒng)的渲染技術(shù)難以實(shí)現(xiàn)的真實(shí)感的game physics。經(jīng)常使用粒子系統(tǒng)模擬的現(xiàn)象有火、爆炸、煙、水流、火花、落葉、云、霧、雪、塵、流星尾跡或者象發(fā)光軌跡這樣的抽象視覺效果等等。
Particle Designer和cocos2d-windows-particle-editor分別是mac下的粒子編輯工具,后者是windows下的粒子編輯工具。他們的共同點(diǎn)就是對(duì)于現(xiàn)有的cocos2d的粒子系統(tǒng)的各種屬性,提供一個(gè)可視化工具進(jìn)行方便的設(shè)置,可以隨著參數(shù)的更改,及時(shí)的反饋出不同的效果,達(dá)到更高的特效制作的工作效率。
然而其均有一定的缺陷,基本上是只能針對(duì)一個(gè)粒子系統(tǒng)進(jìn)行編輯,并且在屬性參數(shù)設(shè)置界面上,效率都不是很高。
技術(shù)實(shí)現(xiàn)要素:
本發(fā)明的目的就是為了克服上述現(xiàn)有技術(shù)存在的缺陷而提供一種粒子編輯方法及粒子編輯器。
本發(fā)明的目的可以通過以下技術(shù)方案來實(shí)現(xiàn):
一種粒子編輯方法,包括:
在需要發(fā)射新的粒子時(shí)產(chǎn)生一個(gè)新的粒子;
根據(jù)預(yù)設(shè)的粒子屬性函數(shù),結(jié)合時(shí)刻信息更新已經(jīng)產(chǎn)生的每個(gè)粒子的屬性值;
根據(jù)每個(gè)粒子的屬性值生成對(duì)應(yīng)粒子的頂點(diǎn)信息;
將一個(gè)時(shí)刻中所有粒子的頂點(diǎn)信息輸出為一幀的粒子信息。
所述根據(jù)預(yù)設(shè)的粒子屬性函數(shù),結(jié)合時(shí)刻信息更新已經(jīng)產(chǎn)生的每個(gè)粒子的屬性值,包括:
獲取粒子已存活的時(shí)間;
基于粒子已存活的時(shí)間,根據(jù)預(yù)設(shè)的粒子屬性函數(shù)分別得到粒子的顏色、大小和相對(duì)于出生點(diǎn)位置。
所述根據(jù)每個(gè)粒子的屬性值生成對(duì)應(yīng)粒子的頂點(diǎn)信息,包括:
在需要3D變換時(shí)根據(jù)粒子的大小進(jìn)行3D變換;
根據(jù)錨點(diǎn)位置,結(jié)合粒子的相對(duì)位置得到粒子的坐標(biāo);
整合得到粒子的頂點(diǎn)信息。
所述獲取粒子已存活的時(shí)間,包括:
根據(jù)當(dāng)前時(shí)刻和粒子產(chǎn)生時(shí)刻得到粒子已存活時(shí)間;
在已存活時(shí)間大于設(shè)定閾值時(shí),刪除該該粒子。
所述預(yù)設(shè)的粒子屬性函數(shù)為分段函數(shù)。
一種粒子編輯器,包括:
粒子產(chǎn)生裝置,用于在需要發(fā)射新的粒子時(shí)產(chǎn)生一個(gè)新的粒子;
屬性計(jì)算裝置,用于根據(jù)預(yù)設(shè)的粒子屬性函數(shù),結(jié)合時(shí)刻信息更新已經(jīng)產(chǎn)生的每個(gè)粒子的屬性值;
頂點(diǎn)信息計(jì)算裝置,用于根據(jù)每個(gè)粒子的屬性值生成對(duì)應(yīng)粒子的頂點(diǎn)信息;
信息輸出裝置,用于將一個(gè)時(shí)刻中所有粒子的頂點(diǎn)信息輸出為一幀的粒子信息。
所述屬性計(jì)算裝置包括:
存活時(shí)間計(jì)算模塊,用于獲取粒子已存活的時(shí)間;
函數(shù)計(jì)算模塊,用于基于粒子已存活的時(shí)間,根據(jù)預(yù)設(shè)的粒子屬性函數(shù)分別得到粒子的顏色、大小和相對(duì)位置。
所述頂點(diǎn)信息計(jì)算裝置包括:
3D變換模塊,用于在需要3D變換時(shí)根據(jù)粒子的大小進(jìn)行3D變換;
錨點(diǎn)變換模塊,用于根據(jù)錨點(diǎn)位置,結(jié)合粒子的相對(duì)位置得到粒子的坐標(biāo);
頂點(diǎn)信息整合模塊,用于整合得到粒子的頂點(diǎn)信息。
所述存活時(shí)間計(jì)算模塊包括:
時(shí)間計(jì)算單元,用于根據(jù)當(dāng)前時(shí)刻和粒子產(chǎn)生時(shí)刻得到粒子已存活時(shí)間;
時(shí)間比對(duì)單元,用于在已存活時(shí)間大于設(shè)定閾值時(shí),刪除該該粒子。
所述預(yù)設(shè)的粒子屬性函數(shù)為分段函數(shù)。
與現(xiàn)有技術(shù)相比,本發(fā)明具有以下優(yōu)點(diǎn):
1)支持序列幀的輸出,粒子的屬性根據(jù)預(yù)設(shè)的屬性函數(shù)按照時(shí)刻進(jìn)行更新,得到的粒子顯示效果更好,可以方便地修改函數(shù)的參數(shù)修改粒子的屬性。
2)預(yù)設(shè)的粒子屬性函數(shù)包括分別用于計(jì)算粒子的顏色、大小和相對(duì)位置的類,實(shí)現(xiàn)粒子屬性在其生命周期內(nèi)變化的多元化。
3)粒子可以進(jìn)行3D變換,且錨點(diǎn)可變,可以自定義錨點(diǎn),不規(guī)則變化時(shí)有著更高的開發(fā)效率。
4)對(duì)粒子的時(shí)間進(jìn)行了控制,可以達(dá)到多個(gè)粒子配合顯示。
附圖說明
圖1為本發(fā)明的主要步驟流程示意圖;
圖2為粒子系統(tǒng)一幀的更新流程示意圖;
圖3為基于本發(fā)明設(shè)計(jì)的編輯工具的架構(gòu)示意圖。
具體實(shí)施方式
下面結(jié)合附圖和具體實(shí)施例對(duì)本發(fā)明進(jìn)行詳細(xì)說明。本實(shí)施例以本發(fā)明技術(shù)方案為前提進(jìn)行實(shí)施,給出了詳細(xì)的實(shí)施方式和具體的操作過程,但本發(fā)明的保護(hù)范圍不限于下述的實(shí)施例。
當(dāng)我們想用粒子系統(tǒng)做一個(gè)更真實(shí)的火焰,可能會(huì)這樣設(shè)計(jì),首先粒子發(fā)射出呈現(xiàn)出內(nèi)焰的顏色,會(huì)稍微偏黃色,然后漸變成外焰,會(huì)稍微偏紅色,最后慢慢的消失,而在速度上也是先后快,然后更快的一個(gè)過程。這樣,我們就需要粒子在其整個(gè)生命周期內(nèi)屬性參數(shù)呈現(xiàn)出一種非線性的變化方式。
再比如說我們可能會(huì)以2.5d視角呈現(xiàn)出粒子在地面上旋轉(zhuǎn)的效果,這個(gè)時(shí)候,為了更為真實(shí),我們希望粒子以我們地面的法線為軸去進(jìn)行旋轉(zhuǎn),或者某種情況下我們希望粒子在放縮或者旋轉(zhuǎn)的時(shí)候不是基于中心點(diǎn),而是自定義的錨點(diǎn)等。這時(shí)候,我們就需要增加或者修改一些粒子系統(tǒng)的屬性。
為此,提供一種粒子編輯方法,如圖1所示,包括:
在需要發(fā)射新的粒子時(shí)產(chǎn)生一個(gè)新的粒子;
根據(jù)預(yù)設(shè)的粒子屬性函數(shù),結(jié)合時(shí)刻信息更新已經(jīng)產(chǎn)生的每個(gè)粒子的屬性值;
根據(jù)每個(gè)粒子的屬性值生成對(duì)應(yīng)粒子的頂點(diǎn)信息;
將一個(gè)時(shí)刻中所有粒子的頂點(diǎn)信息輸出為一幀的粒子信息。
根據(jù)預(yù)設(shè)的粒子屬性函數(shù),結(jié)合時(shí)刻信息更新已經(jīng)產(chǎn)生的每個(gè)粒子的屬性值,包括:
獲取粒子已存活的時(shí)間;
基于粒子已存活的時(shí)間,根據(jù)預(yù)設(shè)的粒子屬性函數(shù)分別得到粒子的顏色、大小和相對(duì)位置。
根據(jù)每個(gè)粒子的屬性值生成對(duì)應(yīng)粒子的頂點(diǎn)信息,包括:
在需要3D變換時(shí)根據(jù)粒子的大小進(jìn)行3D變換;
根據(jù)錨點(diǎn)位置,結(jié)合粒子的相對(duì)位置得到粒子的坐標(biāo);
整合得到粒子的頂點(diǎn)信息。
獲取粒子已存活的時(shí)間,包括:
根據(jù)當(dāng)前時(shí)刻和粒子產(chǎn)生時(shí)刻得到粒子已存活時(shí)間;
在已存活時(shí)間大于設(shè)定閾值時(shí),刪除該該粒子。
預(yù)設(shè)的粒子屬性函數(shù)為分段函數(shù)。
與之對(duì)應(yīng)的一種粒子編輯器,包括:
粒子產(chǎn)生裝置,用于在需要發(fā)射新的粒子時(shí)產(chǎn)生一個(gè)新的粒子;
屬性計(jì)算裝置,用于根據(jù)預(yù)設(shè)的粒子屬性函數(shù),結(jié)合時(shí)刻信息更新已經(jīng)產(chǎn)生的每個(gè)粒子的屬性值;
頂點(diǎn)信息計(jì)算裝置,用于根據(jù)每個(gè)粒子的屬性值生成對(duì)應(yīng)粒子的頂點(diǎn)信息;
信息輸出裝置,用于將一個(gè)時(shí)刻中所有粒子的頂點(diǎn)信息輸出為一幀的粒子信息。
屬性計(jì)算裝置包括:
存活時(shí)間計(jì)算模塊,用于獲取粒子已存活的時(shí)間;
函數(shù)計(jì)算模塊,用于基于粒子已存活的時(shí)間,根據(jù)預(yù)設(shè)的粒子屬性函數(shù)分別得到粒子的顏色、大小和相對(duì)位置。
頂點(diǎn)信息計(jì)算裝置包括:
3D變換模塊,用于在需要3D變換時(shí)根據(jù)粒子的大小進(jìn)行3D變換;
錨點(diǎn)變換模塊,用于根據(jù)錨點(diǎn)位置,結(jié)合粒子的相對(duì)位置得到粒子的坐標(biāo);
頂點(diǎn)信息整合模塊,用于整合得到粒子的頂點(diǎn)信息。
存活時(shí)間計(jì)算模塊包括:
時(shí)間計(jì)算單元,用于根據(jù)當(dāng)前時(shí)刻和粒子產(chǎn)生時(shí)刻得到粒子已存活時(shí)間;
時(shí)間比對(duì)單元,用于在已存活時(shí)間大于設(shè)定閾值時(shí),刪除該該粒子。
本申請(qǐng)主要是針對(duì)現(xiàn)有cocos2d的粒子系統(tǒng)進(jìn)行擴(kuò)展——使其呈現(xiàn)出更豐富的效果,和其編輯工具的開發(fā)——以提高特效制作效率。
功能1:對(duì)于粒子屬性在其整個(gè)生命周期內(nèi)非線性變換
解決方案:首先寫了一個(gè)分段線性函數(shù)的類模板,該結(jié)構(gòu)主要包含一系列鍵值對(duì),每個(gè)鍵表示粒子已存活的時(shí)間,值代表了對(duì)應(yīng)時(shí)間上的值,該值根據(jù)不同的類型實(shí)例化后為不同的類型,還包含了一個(gè)根據(jù)時(shí)間計(jì)算值的算法。然后分別實(shí)例化為分段線性color類、分段線性size類、分段線性vec3類等。并用這些類型去替換掉之前相應(yīng)的屬性。在每一幀粒子頂點(diǎn)數(shù)據(jù)生成的時(shí)候,會(huì)根據(jù)其當(dāng)前處于生命周期的什么位置,找到對(duì)應(yīng)的屬性值,并根據(jù)此值去計(jì)算頂點(diǎn)信息。
功能2:對(duì)粒子添加序列幀支持、錨點(diǎn)、3D變換等功能
解決方案:序列幀支持實(shí)際上原理和上邊的描述的一樣,根據(jù)當(dāng)前粒子存活時(shí)間,獲取對(duì)應(yīng)的紋理。而其他的添加的功能,則是在每幀產(chǎn)生粒子頂點(diǎn)信息時(shí),多了一些變換。
粒子系統(tǒng)一幀的更新流程如圖2所示:
功能3:粒子編輯工具
該工具架構(gòu)分為兩層,如圖3所示,上次為參數(shù)設(shè)置面板,底層為改造后的Cocos2d系統(tǒng)。并且在上下兩層都保存了一份當(dāng)前特效的所有參數(shù),每當(dāng)上層有參數(shù)改動(dòng)的時(shí)候,便將參數(shù)傳遞到底層,同時(shí),我們還對(duì)粒子的時(shí)間進(jìn)行了控制,已達(dá)到多個(gè)粒子配合顯示。在操作界面上,我們采用了cocos2d-windows-particle-editor的方式,類似于屬性面板,但是,為了更高的制作效率,我們把每個(gè)屬性參數(shù)面板,根據(jù)不同的類型,提供不同的操作方式,使得制作特效過程顯得更快捷更直觀。
使用過程:
1.首先由美術(shù)人員使用粒子編輯工具,做出一個(gè)預(yù)想的效果,并保存
2.使用工具將特效文件批量導(dǎo)出為plist文件和合圖后的紋理
3.在游戲中加載紋理和plist文件并解析初始化粒子系統(tǒng)