本發(fā)明涉及一種模型網(wǎng)格數(shù)據(jù)導(dǎo)出Obj文件的方法以及系統(tǒng)。
背景技術(shù):
在游戲制作過程中,游戲人物需要和場景的物體進行交互,游戲動作師在動作制作過程中,需要確切的知道游戲的物體所在的位置和大小等信息,因此,需要將Unity內(nèi)的數(shù)據(jù)導(dǎo)出,并提供給游戲動作師在3Ds MAX或者Maya等軟件中使用。
目前互聯(lián)網(wǎng)上的Unity場景與3Ds MAX或者Maya進行數(shù)據(jù)互通的方式,大多數(shù)只采用導(dǎo)出Obj文件的方式進行數(shù)據(jù)交互,但只是提供簡單的模型信息,沒有貼圖,沒有人物信息,也不能在場景運行時候?qū)С觯?dāng)場景很復(fù)雜時,使用也較為麻煩。
技術(shù)實現(xiàn)要素:
本發(fā)明要解決的技術(shù)問題,在于提供一種模型網(wǎng)格數(shù)據(jù)導(dǎo)出Obj文件的方法以及系統(tǒng),便于用戶使用。
本發(fā)明之一是這樣實現(xiàn)的:一種模型網(wǎng)格數(shù)據(jù)導(dǎo)出Obj文件的方法,包括如下步驟:
步驟1、判斷網(wǎng)格物體的類型,若是SkinnedMeshRenderer,則給該網(wǎng)格物體添加MeshCollider組件,并重新烘焙MeshCollider,處理后得到網(wǎng)格信息;否,則直接得到網(wǎng)格信息;
步驟2、創(chuàng)建第一對象,將網(wǎng)格信息按照Obj文件格式添加到該第一對象中;
步驟3、創(chuàng)建第二對象,將所述網(wǎng)格物體的材質(zhì)數(shù)據(jù)保存至所述第二對象,并保存貼圖路徑至一鏈表;
步驟4、使用StreamWriter將第一對象中的網(wǎng)格數(shù)據(jù)寫入到.Obj文件內(nèi),以及第二對象中材質(zhì)數(shù)據(jù)寫入到.mtl文件內(nèi);并使用File.Copy根據(jù)鏈表保存的貼圖路徑,將圖片復(fù)制保存到指定文件夾內(nèi)。
進一步地,所述步驟3進一步具體為:創(chuàng)建第二對象,判斷該網(wǎng)格物體所使用的材質(zhì)信息是否已經(jīng)記錄,若沒有記錄,則創(chuàng)建一材質(zhì)信息,并將材質(zhì)信息保存至第二對象;否,則將材質(zhì)信息保存至第二對象中;之后保存貼圖路徑至一鏈表。
進一步地,所述第一對象為StringBuilder對象。
進一步地,所述第二對象為StringBuilder對象。
本發(fā)明之二是這樣實現(xiàn)的:一種模型網(wǎng)格數(shù)據(jù)導(dǎo)出Obj文件的系統(tǒng),包括如下模塊:
網(wǎng)格數(shù)據(jù)采集模塊,判斷網(wǎng)格物體的類型,若是SkinnedMeshRenderer,則給該網(wǎng)格物體添加MeshCollider組件,并重新烘焙MeshCollider,處理后得到網(wǎng)格信息;否,則直接得到網(wǎng)格信息;
網(wǎng)格數(shù)據(jù)處理模塊,創(chuàng)建第一對象,將網(wǎng)格信息按照Obj文件格式添加到該第一對象中;
材質(zhì)數(shù)據(jù)處理模塊,創(chuàng)建第二對象,將所述網(wǎng)格物體的材質(zhì)數(shù)據(jù)保存至所述第二對象,并保存貼圖路徑至一鏈表;
文件生成模塊,使用StreamWriter將第一對象中的網(wǎng)格數(shù)據(jù)寫入到.Obj文件內(nèi),以及第二對象中材質(zhì)數(shù)據(jù)寫入到.mtl文件內(nèi);并使用File.Copy根據(jù)鏈表保存的貼圖路徑,將圖片復(fù)制保存到指定文件夾內(nèi)。
進一步地,所述材質(zhì)數(shù)據(jù)處理模塊進一步具體為:創(chuàng)建第二對象,判斷該網(wǎng)格物體所使用的材質(zhì)信息是否已經(jīng)記錄,若沒有記錄,則創(chuàng)建一材質(zhì)信息,并將材質(zhì)信息保存至第二對象;否,則將材質(zhì)信息保存至第二對象中;之后保存貼圖路徑至一鏈表。
進一步地,所述第一對象為StringBuilder對象。
進一步地,所述第二對象為StringBuilder對象。
本發(fā)明具有如下優(yōu)點:本發(fā)明一種模型網(wǎng)格數(shù)據(jù)導(dǎo)出Obj文件的方法以及系統(tǒng),人物的網(wǎng)格數(shù)據(jù)也能導(dǎo)出,并且能導(dǎo)出貼圖信息;能夠在Unity運行的狀態(tài)下導(dǎo)出實時的場景數(shù)據(jù);使用方便,無需多余設(shè)置,一鍵即可完成。
附圖說明
下面參照附圖結(jié)合實施例對本發(fā)明作進一步的說明。
圖1為本發(fā)明方法執(zhí)行流程圖。
圖2為本發(fā)明系統(tǒng)的原理框圖。
具體實施方式
如圖1所示,本發(fā)明模型網(wǎng)格數(shù)據(jù)導(dǎo)出Obj文件的方法,包括如下步驟:
步驟1、判斷網(wǎng)格物體的類型,若是SkinnedMeshRenderer,則給該網(wǎng)格物體添加MeshCollider組件,并重新烘焙MeshCollider,處理后得到網(wǎng)格信息;否,則直接得到網(wǎng)格信息;
步驟2、創(chuàng)建第一對象,將網(wǎng)格信息按照Obj文件格式添加到該第一對象中,所述第一對象為StringBuilder對象;
步驟3、創(chuàng)建第二對象,判斷該網(wǎng)格物體所使用的材質(zhì)信息是否已經(jīng)記錄,若沒有記錄,則創(chuàng)建一材質(zhì)信息,并將材質(zhì)信息保存至第二對象;否,則將材質(zhì)信息保存至第二對象中;之后保存貼圖路徑至一鏈表,所述第二對象為StringBuilder對象;
步驟4、使用StreamWriter將第一對象中的網(wǎng)格數(shù)據(jù)寫入到.Obj文件內(nèi),以及第二對象中材質(zhì)數(shù)據(jù)寫入到.mtl文件內(nèi);并使用File.Copy根據(jù)鏈表保存的貼圖路徑,將圖片復(fù)制保存到指定文件夾內(nèi)。
如圖2所示,本發(fā)明模型網(wǎng)格數(shù)據(jù)導(dǎo)出Obj文件的系統(tǒng),包括如下模塊:
網(wǎng)格數(shù)據(jù)采集模塊,判斷網(wǎng)格物體的類型,若是SkinnedMeshRenderer,則給該網(wǎng)格物體添加MeshCollider組件,并重新烘焙MeshCollider,處理后得到網(wǎng)格信息;否,則直接得到網(wǎng)格信息;
網(wǎng)格數(shù)據(jù)處理模塊,創(chuàng)建第一對象,將網(wǎng)格信息按照Obj文件格式添加到該第一對象中,所述第一對象為StringBuilder對象;
材質(zhì)數(shù)據(jù)處理模塊,創(chuàng)建第二對象,判斷該網(wǎng)格物體所使用的材質(zhì)信息是否已經(jīng)記錄,若沒有記錄,則創(chuàng)建一材質(zhì)信息,并將材質(zhì)信息保存至第二對象;否,則將材質(zhì)信息保存至第二對象中;之后保存貼圖路徑至一鏈表,所述第二對象為StringBuilder對象;
文件生成模塊,使用StreamWriter將第一對象中的網(wǎng)格數(shù)據(jù)寫入到.Obj文件內(nèi),以及第二對象中材質(zhì)數(shù)據(jù)寫入到.mtl文件內(nèi);并使用File.Copy根據(jù)鏈表保存的貼圖路徑,將圖片復(fù)制保存到指定文件夾內(nèi)。
本發(fā)明一種具體實施方式:
A:網(wǎng)格數(shù)據(jù)采集
1)查找場景內(nèi)的所有物體,判斷其是否含有網(wǎng)格物體;
2)判斷網(wǎng)格物體的類型,MeshFilter或者是SkinnedMeshRenderer;
3)如果網(wǎng)格物體類型是SkinnedMeshRenderer,給該物體添加MeshCollider組件,并重新烘焙MeshCollider,處理后得到網(wǎng)格信息。
B:網(wǎng)格數(shù)據(jù)處理
1)創(chuàng)建StringBuilder對象;
2)創(chuàng)建全局的整數(shù)對象,保存三角形索引信息;
3)將網(wǎng)格的頂點、法線、貼圖坐標(biāo)、三角形索引等相關(guān)數(shù)據(jù)按照Obj文件格式添加到StringBuilder對象中。
C:材質(zhì)數(shù)據(jù)處理
1)創(chuàng)建StringBuilder對象;
2)創(chuàng)建一張鏈表,保存貼圖的路徑;
3)判斷該網(wǎng)格所使用的材質(zhì)信息是否已經(jīng)記錄,如沒有記錄,則創(chuàng)建一個新的材質(zhì)信息,保存材質(zhì)的名稱、所使用的貼圖名字等;
4)貼圖的路徑單獨用鏈表保存。
D:文件生成
使用StreamWriter對網(wǎng)格數(shù)據(jù)寫入到.Obj文件內(nèi),將貼圖數(shù)據(jù)寫入到.mtl文件內(nèi);自動將.Obj文件和.mtl存儲至一文件夾;
使用File.Copy根據(jù)鏈表保存的貼圖路徑,將圖片復(fù)制保存到指定文件夾內(nèi)。
雖然以上描述了本發(fā)明的具體實施方式,但是熟悉本技術(shù)領(lǐng)域的技術(shù)人員應(yīng)當(dāng)理解,我們所描述的具體的實施例只是說明性的,而不是用于對本發(fā)明的范圍的限定,熟悉本領(lǐng)域的技術(shù)人員在依照本發(fā)明的精神所作的等效的修飾以及變化,都應(yīng)當(dāng)涵蓋在本發(fā)明的權(quán)利要求所保護的范圍內(nèi)。