周 安 任培祥 嚴(yán) 研 王 科 尚 軻
(1.北京洛斯達(dá)數(shù)字遙感技術(shù)有限公司 北京 100120)(2.中南電力設(shè)計(jì)院 武漢 430074)(3.華中科技大學(xué) 武漢 430074)
?
基于MAX SDK的3DMAX模型結(jié)構(gòu)分析與導(dǎo)出實(shí)現(xiàn)*
周安1任培祥1嚴(yán)研1王科2尚軻3
(1.北京洛斯達(dá)數(shù)字遙感技術(shù)有限公司北京100120)(2.中南電力設(shè)計(jì)院武漢430074)(3.華中科技大學(xué)武漢430074)
摘要隨著智能電網(wǎng)技術(shù)的發(fā)展,三維數(shù)字化的電網(wǎng)平臺(tái)給電力規(guī)劃設(shè)計(jì)提供了有力的支撐。模型數(shù)據(jù)生產(chǎn)是平臺(tái)設(shè)計(jì)的基礎(chǔ)環(huán)節(jié)。然而,AutoCAD和Microstation等建模軟件通常達(dá)不到預(yù)期的渲染效果,所以論文選擇3DMAX軟件建立模型數(shù)據(jù)。論文利用3DMAX SDK,在VC++的環(huán)境中,開(kāi)發(fā)了3DMAX模型導(dǎo)出插件,實(shí)現(xiàn)了3DMAX模型幾何結(jié)構(gòu)和渲染效果的讀取與優(yōu)化。該插件支持自定義數(shù)據(jù)組織,方便各類(lèi)三維數(shù)字化平臺(tái)的模型數(shù)據(jù)加載和調(diào)度。該文對(duì)多個(gè)電站模型進(jìn)行了實(shí)驗(yàn),有效獲取并優(yōu)化了原有的數(shù)據(jù)模型,取得了良好的效果。
關(guān)鍵詞三維數(shù)字化; 3DMAX SDK; 導(dǎo)出插件; 優(yōu)化
Class NumberTP393
三維數(shù)字化電網(wǎng)平臺(tái)作為堅(jiān)強(qiáng)智能電網(wǎng)中的一環(huán),提升了電網(wǎng)工程的管理水平,加快了電網(wǎng)工程的建設(shè)進(jìn)度,實(shí)現(xiàn)了電網(wǎng)工程的信息化升級(jí)。承擔(dān)智能電網(wǎng)數(shù)據(jù)管理基礎(chǔ)平臺(tái)的三維數(shù)字化電網(wǎng)具有整合資源,集成功能,真實(shí)場(chǎng)景的特點(diǎn),是電網(wǎng)信息化領(lǐng)域重要的研究方向之一。三維數(shù)字化電網(wǎng)平臺(tái)需要大量模型數(shù)據(jù)的支持,模型數(shù)據(jù)的生產(chǎn)自然就是平臺(tái)建設(shè)的基礎(chǔ)根基之一。
國(guó)內(nèi)的三維模型生產(chǎn)技術(shù)經(jīng)過(guò)多年的發(fā)展,在國(guó)外三維模型設(shè)計(jì)軟件平臺(tái)的基礎(chǔ)上進(jìn)行二次開(kāi)發(fā),得到了長(zhǎng)足的進(jìn)步并取得了一定的成績(jī)和突破。鑒于AutoCAD和Microstation等建模軟件通常達(dá)不到預(yù)期的渲染效果,對(duì)變電站、換流站等復(fù)雜模型的建立和渲染,目前大多數(shù)設(shè)計(jì)單位通常采用3DMAX軟件進(jìn)行設(shè)計(jì)。然而,實(shí)際應(yīng)用中,3DMAX格式的數(shù)據(jù)模型無(wú)法滿(mǎn)足大數(shù)據(jù)量的實(shí)時(shí)渲染和調(diào)度要求。這一問(wèn)題的解決關(guān)鍵在于對(duì)模型數(shù)據(jù)進(jìn)行分塊管理,也就需要對(duì)文件格式重新組織,對(duì)3DMAX模型結(jié)構(gòu)的分析和導(dǎo)出便是在這樣的工程背景下提出。
3DMAX默認(rèn)的文件格式是.max,該格式的文件結(jié)構(gòu)復(fù)雜,數(shù)據(jù)量大,信息豐富,包含了模型網(wǎng)格的頂點(diǎn)、面、材質(zhì)、貼圖信息和場(chǎng)景的光照、攝像機(jī)等信息。簡(jiǎn)化的導(dǎo)出模型一般只包含模型的網(wǎng)格、材質(zhì)、紋理信息,這也是模型最基礎(chǔ)的數(shù)據(jù)[1~2]。
2.1模型的場(chǎng)景節(jié)點(diǎn)管理
3DMAX模型導(dǎo)入場(chǎng)景后,便由場(chǎng)景統(tǒng)一管理和組織模型數(shù)據(jù)。場(chǎng)景以樹(shù)狀形式來(lái)組織數(shù)據(jù),場(chǎng)景中的網(wǎng)格、材質(zhì)、燈光、攝像機(jī)等物體都附著在樹(shù)的節(jié)點(diǎn)(INode)上。節(jié)點(diǎn)保存了指向場(chǎng)景物體的指針,通過(guò)樹(shù)的根節(jié)點(diǎn)可遍歷場(chǎng)景中的所有節(jié)點(diǎn)。
3DMAX場(chǎng)景關(guān)聯(lián)圖如圖1所示,場(chǎng)景視口中的每一個(gè)對(duì)象實(shí)體都與一個(gè)樹(shù)節(jié)點(diǎn)關(guān)聯(lián),關(guān)聯(lián)的節(jié)點(diǎn)存儲(chǔ)了對(duì)象實(shí)體的相關(guān)屬性,這些屬性包括網(wǎng)格點(diǎn)面信息、材質(zhì)信息、空間變換矩陣信息、燈光信息、攝像頭信息等。同時(shí),節(jié)點(diǎn)存儲(chǔ)的空間變換矩陣信息又包括節(jié)點(diǎn)本身的變換矩陣和關(guān)聯(lián)對(duì)象實(shí)體的變換矩陣[3]。
圖1 3DMAX場(chǎng)景關(guān)聯(lián)圖
2.2模型材質(zhì)結(jié)構(gòu)分析
模型材質(zhì)與節(jié)點(diǎn)相關(guān)聯(lián),通過(guò)節(jié)點(diǎn)便可獲得材質(zhì)的詳細(xì)信息,不同類(lèi)別的材質(zhì)以特有的類(lèi)標(biāo)識(shí)符區(qū)分。3DMAX中的材質(zhì)類(lèi)別有標(biāo)準(zhǔn)材質(zhì)、多材質(zhì)和殼材質(zhì)等,其中,前兩者又最為常用[4~5]。
標(biāo)準(zhǔn)材質(zhì)的標(biāo)識(shí)符是DMTL_CLASS_ID,記錄了渲染物體的材質(zhì)屬性,包括環(huán)境光顏色、漫反射顏色、高光顏色、高光級(jí)別、光澤度、自發(fā)光、不透明度等信息。標(biāo)準(zhǔn)材質(zhì)的每一個(gè)屬性都可以存取貼圖紋理,貼圖紋理記錄了紋理通道、紋理坐標(biāo)方式等信息。用戶(hù)讀取的紋理坐標(biāo)需要與紋理通道匹配,否則渲染的物體紋理會(huì)發(fā)生錯(cuò)誤。多材質(zhì)的標(biāo)識(shí)符是MULTI_CLASS_ID,由多個(gè)子材質(zhì)構(gòu)成,每個(gè)子材質(zhì)由ID標(biāo)識(shí)符來(lái)唯一標(biāo)識(shí)。子材質(zhì)可以是標(biāo)準(zhǔn)材質(zhì),也可以是多材質(zhì),模型面片采用的材質(zhì)通過(guò)獲取材質(zhì)ID來(lái)匹配。
圖2展示了材質(zhì)可視化結(jié)構(gòu)圖,圖中左邊展示的是標(biāo)準(zhǔn)材質(zhì),圖中右邊展示的是多材質(zhì),從圖上可見(jiàn),多材質(zhì)包含了兩個(gè)標(biāo)準(zhǔn)子材質(zhì),標(biāo)準(zhǔn)材質(zhì)也都包含了紋理貼圖。
圖2 標(biāo)準(zhǔn)材質(zhì)和多材質(zhì)可視化結(jié)構(gòu)圖
2.3模型網(wǎng)格結(jié)構(gòu)分析
三角面片構(gòu)成了3DMAX模型網(wǎng)格(Mesh)結(jié)構(gòu),所有的對(duì)象實(shí)體都以三角網(wǎng)格的形式被渲染,所以對(duì)模型網(wǎng)格(Mesh)結(jié)構(gòu)的分析,也就是對(duì)三角面片構(gòu)建規(guī)則的分析。模型網(wǎng)格(Mesh)與節(jié)點(diǎn)相關(guān)聯(lián),通過(guò)遍歷節(jié)點(diǎn)可以獲得模型的所有網(wǎng)格(Mesh)結(jié)構(gòu)。
網(wǎng)格(Mesh)存儲(chǔ)了模型頂點(diǎn)、面、法向量、材質(zhì)索引、紋理坐標(biāo)等信息,包含了模型最重要的屬性數(shù)據(jù)。網(wǎng)格頂點(diǎn)面片和紋理面片一一對(duì)應(yīng),分別映射面片的頂點(diǎn)索引和紋理坐標(biāo)索引,兩種映射方式導(dǎo)致了網(wǎng)格頂點(diǎn)可以具有不同的紋理坐標(biāo),同時(shí),頂點(diǎn)的紋理坐標(biāo)需與材質(zhì)中記錄的紋理通道匹配。網(wǎng)格(Mesh)對(duì)象的不同三角面片可以匹配不同的材質(zhì),面片的材質(zhì)索引映射了子材質(zhì)或者標(biāo)準(zhǔn)材質(zhì)的標(biāo)識(shí)符[6]。
3.13DMAX SDK
3DMAX提供了MAX SDK開(kāi)發(fā)包來(lái)支持用戶(hù)的二次開(kāi)發(fā),利用SDK提供的類(lèi)和API,用戶(hù)可以開(kāi)發(fā)不同的插件。本文在對(duì)模型分析的基礎(chǔ)上,開(kāi)發(fā)了模型的優(yōu)化導(dǎo)出插件。
模型的導(dǎo)出從DoExport()函數(shù)開(kāi)始,參數(shù)Interface*iface提供了訪(fǎng)問(wèn)模型對(duì)象的接口。根節(jié)點(diǎn)的獲取可以調(diào)用iface->GetRootNode()函數(shù),利用節(jié)點(diǎn)提供的GetRootNode()函數(shù)和NumberOfChildren()函數(shù),便可獲得根節(jié)點(diǎn)關(guān)聯(lián)下的所有子節(jié)點(diǎn)個(gè)數(shù),然后遞歸調(diào)用GetChildNode()函數(shù),便可獲取場(chǎng)景中的所有節(jié)點(diǎn)。
3.2導(dǎo)出模型數(shù)據(jù)結(jié)構(gòu)定義
本文主要讀取了模型的網(wǎng)格、材質(zhì)、紋理等信息,這些信息存儲(chǔ)在自定義的數(shù)據(jù)結(jié)構(gòu)中,方便后續(xù)的數(shù)據(jù)優(yōu)化和邏輯分塊。
模型場(chǎng)景網(wǎng)格(Mesh)存儲(chǔ)數(shù)據(jù)結(jié)構(gòu)如表1所示。
表1 網(wǎng)格數(shù)據(jù)結(jié)構(gòu)
其中,紋理通道和紋理坐標(biāo)可以記錄多重紋理信息,分別記錄每一層紋理的通道信息和紋理坐標(biāo)信息。
3.3導(dǎo)出結(jié)構(gòu)的設(shè)計(jì)與優(yōu)化
3.3.1網(wǎng)格結(jié)構(gòu)的優(yōu)化
網(wǎng)格(Mesh)是TriObject對(duì)象的成員數(shù)據(jù),調(diào)用TriObject提供的GetMesh()方法便可獲得模型對(duì)象的網(wǎng)格(Mesh)結(jié)構(gòu)。同時(shí),網(wǎng)格(Mesh)信息與節(jié)點(diǎn)(INode)關(guān)聯(lián),節(jié)點(diǎn)(INode)的成員方法EvalWorldState()提供了獲取TriObject對(duì)象的途徑[7]。
鑒于網(wǎng)格頂點(diǎn)可能具有不同的紋理坐標(biāo)和不同的面法向量,確保導(dǎo)出的模型紋理正確和模型表面光照反射平仄有致,本文采取了先擴(kuò)充,后精簡(jiǎn)頂點(diǎn)的方式來(lái)優(yōu)化模型。先擴(kuò)充頂點(diǎn)是指以面片的方式來(lái)組織頂點(diǎn),頂點(diǎn)個(gè)數(shù)是三角面片個(gè)數(shù)的三倍,頂點(diǎn)位置是三角面片對(duì)應(yīng)頂點(diǎn)的位置,這樣使每一個(gè)紋理坐標(biāo)得到了保留,導(dǎo)出模型的紋理效果才不失真。
擴(kuò)充后的頂點(diǎn)存在大量冗余和重復(fù)的信息,需要優(yōu)化精簡(jiǎn)頂點(diǎn)個(gè)數(shù)。網(wǎng)格頂點(diǎn)可能只有一個(gè)紋理坐標(biāo),也可能具有多個(gè)紋理坐標(biāo)。對(duì)于只有一個(gè)紋理坐標(biāo)的頂點(diǎn),如果其所在的面的法向量與其現(xiàn)在的頂點(diǎn)法向量角度相差小于45°,則合并此類(lèi)頂點(diǎn),只保留一個(gè)頂點(diǎn)的信息。頂點(diǎn)精簡(jiǎn)合并算法如下:
1:獲取節(jié)點(diǎn)非重復(fù)頂點(diǎn)位置信息;
2:獲取節(jié)點(diǎn)貼圖通道上的紋理坐標(biāo)數(shù)據(jù);
3:for int i=0; i
for int j=0; j<3; j++ //一個(gè)面三個(gè)頂點(diǎn);
獲取舊的面頂點(diǎn)索引,頂點(diǎn),紋理,法向量信息;
if相同的頂點(diǎn)位置沒(méi)有讀取過(guò)轉(zhuǎn)4;
else if 頂點(diǎn)的紋理坐標(biāo)沒(méi)有讀取過(guò)轉(zhuǎn)4;
elseif頂點(diǎn)的面法向量與記錄中具有相同位置;
和紋理坐標(biāo)的頂點(diǎn)的法向量夾角大于45°轉(zhuǎn)4;
else 更新面頂點(diǎn)索引為記錄中具有相同紋理坐標(biāo)頂點(diǎn)的索引
4:記錄其頂點(diǎn),紋理,法向量信息,面頂點(diǎn)索引為記錄中頂點(diǎn)數(shù)據(jù)的個(gè)數(shù);
3.3.2材質(zhì)和紋理的優(yōu)化
3DMAX的材質(zhì)與節(jié)點(diǎn)對(duì)應(yīng),同一標(biāo)準(zhǔn)材質(zhì)或者多材質(zhì)可能被不同的節(jié)點(diǎn)引用,紋理貼圖也一樣,不同的材質(zhì)可能引用同一紋理貼圖[8]。優(yōu)化材質(zhì)和紋理的方法是采用統(tǒng)一的編碼方式,編碼方式如下。
materialID=(nodeID+1)〈〈8+offsetID;
(1)
其中materialID表示材質(zhì)編碼,nodeID表示節(jié)點(diǎn)編碼,offsetID表示子材質(zhì)的偏移編碼,如果沒(méi)有子材質(zhì),offsetID編碼為0。編碼后的材質(zhì),根據(jù)其內(nèi)容進(jìn)行合并優(yōu)化,同一材質(zhì)的內(nèi)容只保存一次,同時(shí)分配新的材質(zhì)編碼,記錄所有舊的材質(zhì)編碼。
計(jì)算面的材質(zhì)索引,&mesh->faces[i]->getMatID()方法獲取的是材質(zhì)的偏移編碼,加上node->GetHandle()方法獲得的nodeID節(jié)點(diǎn)編碼,便可計(jì)算出合并優(yōu)化前的材質(zhì)編碼,根據(jù)這一編碼便可查詢(xún)到合并后的材質(zhì)編碼[9~11]。優(yōu)化后的材質(zhì)和紋理極大地減少了數(shù)據(jù)的冗余度,節(jié)省了存儲(chǔ)空間。
3.4模型導(dǎo)出實(shí)驗(yàn)
3.4.1實(shí)驗(yàn)環(huán)境和設(shè)置
針對(duì)本文提出的模型讀取和優(yōu)化算法,設(shè)計(jì)了在3DMAX 2012 64位軟件中,對(duì)電網(wǎng)接地極模型和變電站模型導(dǎo)出的實(shí)驗(yàn),兩者文件大小分別為2.04MB和514MB。導(dǎo)出的模型組織成特定的文件格式,經(jīng)過(guò)重新解釋?zhuān)贜SC Globle三維GIS平臺(tái)上實(shí)時(shí)渲染。模型導(dǎo)出和渲染的計(jì)算機(jī)平臺(tái)配置參數(shù):windows 7操作系統(tǒng),i3處理器,4GB內(nèi)存,AMD HD 6450顯卡。
3.4.2實(shí)驗(yàn)結(jié)果
圖3序列展示了電網(wǎng)接地極模型不同部分在導(dǎo)出前和導(dǎo)出后的渲染效果圖,上半部分圖片展示了模型在3DMAX中的渲染效果,下半部分圖片展示了模型同一部分在NSC Globle三維GIS平臺(tái)上的渲染效果。不同平臺(tái)的光照環(huán)境差異導(dǎo)致的模型明暗程度和陰影差別不在本文實(shí)驗(yàn)考慮范圍之內(nèi),刨去這一因素,從圖中可以看出,轉(zhuǎn)換后的模型完整度和模型紋理映射與轉(zhuǎn)換前一致,細(xì)節(jié)處的紋理貼圖和紋理對(duì)比度也是基本一致。
圖3 青島接地極模型導(dǎo)出效果圖對(duì)比
變電站模型導(dǎo)出實(shí)驗(yàn)結(jié)果如圖4序列所示,左半部分圖片展示的原始模型和右半部分圖片展示的轉(zhuǎn)換模型渲染效果也是大致相似。
圖4 變電站模型導(dǎo)出效果圖對(duì)比
從實(shí)驗(yàn)結(jié)果顯示,本文提出的模型分析和優(yōu)化算法能較好地完成模型的導(dǎo)出,還原模型的頂點(diǎn)和面片結(jié)構(gòu),保留模型的材質(zhì)、紋理和法向量特征。在轉(zhuǎn)換時(shí)間上,本文模型導(dǎo)出算法處理結(jié)果如表2所示,達(dá)到了模型的實(shí)時(shí)處理效果。
表2 模型導(dǎo)出處理時(shí)間
在3DMAX SDK的基礎(chǔ)上,本文設(shè)計(jì)了一種導(dǎo)出插件,實(shí)現(xiàn)了3DMAX模型幾何結(jié)構(gòu)和渲染效果的讀取與優(yōu)化。該插件支持自定義數(shù)據(jù)組織,方便各類(lèi)三維數(shù)字化平臺(tái)的模型數(shù)據(jù)加載和調(diào)度。在對(duì)多個(gè)電站模型的實(shí)驗(yàn)中,取得了良好的效果。
參 考 文 獻(xiàn)
[1] LIU X, XIONG Z, CAO Q. Research for the Process of Establishing VR Model Based on 3Dmax[J]. West-China Exploration Engineering,2009,2:031.
[2] 鄭付聯(lián).3DMAX建模技術(shù)及其優(yōu)化的研究[J].大眾科技,2010(2):43-44.
ZHENG Fulian. Research on 3DMAX modeling and optimization[J]. Popular Science,2010(2):43-44.
[3] 鄭超,余上斌,黃肖丹,等.利用3DMAX和數(shù)碼攝像頭技術(shù)實(shí)現(xiàn)顱骨的三維重建[J].華中科技大學(xué)學(xué)報(bào):醫(yī)學(xué)版,2003,32(3):346-348.
ZHENG Cao, YU Shangbin, HUANG Xiaodan, et al. Use 3DMAX and digital camera technology to achieve a three-dimensional reconstruction of the skull[J]. Huazhong University of Science and Technology: Medical Sciences,2003,32(3):346-348.
[4] 李江平.DirectX中3DMAX模型的應(yīng)用[J].湖北工學(xué)院學(xué)報(bào),2003,18(4):58-59.
LI Jiangpin. DirectX application in 3DMAX Model[J]. Hubei Institute of Technology,2003,18(4):58-59.
[5] Bin F. The Application of 3DMAX Modelling to OPENGL[J]. Journal of Guizhou University of Technology(Natural Science Edition),1999,6:009.
[6] 張晉西.利用3DMAX獲取任意三維空間曲線(xiàn)坐標(biāo)數(shù)據(jù)文件[J].計(jì)算機(jī)應(yīng)用,2000,3:027.
ZHANG Jinxi. Use 3DMAX get any three-dimensional space curve coordinate data file[J]. Journal of Computer Applications,2000,3:027.
[7] Peng G, He Y, Sun Y, et al. Three-Dimensional Game Modeling and Design Research Based on 3Dmax Software[M]. Advances in Computer Science, Environment, Ecoinformatics, and Education. Springer Berlin Heidelberg,2011:192-196.
[8] 楊帆,楊克儉,王玉華,等.3DS文件格式與自定義文件格式的轉(zhuǎn)換[J].交通與計(jì)算機(jī),2004,22(3):101-104.
YANG Fan, YANG Kejian, WANG Yuhua, et al. 3DS file format conversion and custom file formats[J]. Computer and Communications,2004,22(3):101-104.
[9] 劉芳,劉賢梅.3DS文件讀取,繪制與控制方法的研究與應(yīng)用[J].計(jì)算機(jī)工程與設(shè)計(jì),2009(19):4575-4578.
LIU Fang, LIU Xianmei. 3DS file to read, study and application of drawing and control methods[J]. Computer Engineering and Design,2009(19):4575-4578.
[10] Chunxiang W, Shiwei B, Huaijian H. Study on Geological Modeling in 3D Strata Visualization[J]. Chinese Journal of Rock Mechanics and Engineering,2003,10:028.
[11] Zhang J, Li D. Research on 4D virtual construction and dynamic management system based on BIM[C]//Proceedings of the International Conference on Computing in Civil and Building Engineering, ICCBE,2010.
收稿日期:2015年10月5日,修回日期:2015年11月25日
作者簡(jiǎn)介:周安,男,碩士,工程師,研究方向:電力信息化建設(shè)。任培祥,男,碩士,工程師,研究方向:電力三維GIS研究與應(yīng)用。嚴(yán)研,男,碩士,工程師,研究方向:電網(wǎng)工程信息化、電力管理信息化。王科,男,碩士,工程師,研究方向:電力工程管理。尚軻,男,博士,研究方向:圖像處理,目標(biāo)識(shí)別。
中圖分類(lèi)號(hào)TP393
DOI:10.3969/j.issn.1672-9722.2016.04.042
Analysis and Export of 3DMAX Model Based on MAX SDK
ZHOU An1REN Peixiang1YAN Yan1WANG Ke2SHANG Ke3
(1. Beijing North-Star Digital Remote Sensing Technology Co., Ltd., Beijing100120)(2. Central Southern China Electric Power Design Institute, Wuhan430074)(3. Huazhong University of Science and Technology, Wuhan430074)
AbstractWith the development of smart grid technologies, three-dimensional digital grid platform provides support to the electric planning and design. Effective data model constitutes the basis of three-dimensional digital grid platform.Because of AutoCAD, Microstation and other CAD software connot achieve the desired rendering effect. Then, the model data is built by 3DMAX.In this paper, the API provided by 3DMAX SDK in VC++ environment is used to develop export plugin, reading and optimizing 3DMAX model are implemented, the developers building 3D model in early stage is supported and the model is converted to the custom data formats in the late. It is convenient for loading and scheduling the model. In this paper, through the experiment to multiple model of power plant, the original data model is accessed effectively and optimized and good results are achieved.
Key Wordsthree-dimensional digital, 3DMAX SDK, export plug-in, optimize