周 安 任培祥 嚴 研 王 科 尚 軻
(1.北京洛斯達數字遙感技術有限公司 北京 100120)(2.中南電力設計院 武漢 430074)(3.華中科技大學 武漢 430074)
?
基于MAX SDK的3DMAX模型結構分析與導出實現*
周安1任培祥1嚴研1王科2尚軻3
(1.北京洛斯達數字遙感技術有限公司北京100120)(2.中南電力設計院武漢430074)(3.華中科技大學武漢430074)
摘要隨著智能電網技術的發展,三維數字化的電網平臺給電力規劃設計提供了有力的支撐。模型數據生產是平臺設計的基礎環節。然而,AutoCAD和Microstation等建模軟件通常達不到預期的渲染效果,所以論文選擇3DMAX軟件建立模型數據。論文利用3DMAX SDK,在VC++的環境中,開發了3DMAX模型導出插件,實現了3DMAX模型幾何結構和渲染效果的讀取與優化。該插件支持自定義數據組織,方便各類三維數字化平臺的模型數據加載和調度。該文對多個電站模型進行了實驗,有效獲取并優化了原有的數據模型,取得了良好的效果。
關鍵詞三維數字化; 3DMAX SDK; 導出插件; 優化
Class NumberTP393
三維數字化電網平臺作為堅強智能電網中的一環,提升了電網工程的管理水平,加快了電網工程的建設進度,實現了電網工程的信息化升級。承擔智能電網數據管理基礎平臺的三維數字化電網具有整合資源,集成功能,真實場景的特點,是電網信息化領域重要的研究方向之一。三維數字化電網平臺需要大量模型數據的支持,模型數據的生產自然就是平臺建設的基礎根基之一。
國內的三維模型生產技術經過多年的發展,在國外三維模型設計軟件平臺的基礎上進行二次開發,得到了長足的進步并取得了一定的成績和突破。鑒于AutoCAD和Microstation等建模軟件通常達不到預期的渲染效果,對變電站、換流站等復雜模型的建立和渲染,目前大多數設計單位通常采用3DMAX軟件進行設計。然而,實際應用中,3DMAX格式的數據模型無法滿足大數據量的實時渲染和調度要求。這一問題的解決關鍵在于對模型數據進行分塊管理,也就需要對文件格式重新組織,對3DMAX模型結構的分析和導出便是在這樣的工程背景下提出。
3DMAX默認的文件格式是.max,該格式的文件結構復雜,數據量大,信息豐富,包含了模型網格的頂點、面、材質、貼圖信息和場景的光照、攝像機等信息。簡化的導出模型一般只包含模型的網格、材質、紋理信息,這也是模型最基礎的數據[1~2]。
2.1模型的場景節點管理
3DMAX模型導入場景后,便由場景統一管理和組織模型數據。場景以樹狀形式來組織數據,場景中的網格、材質、燈光、攝像機等物體都附著在樹的節點(INode)上。節點保存了指向場景物體的指針,通過樹的根節點可遍歷場景中的所有節點。
3DMAX場景關聯圖如圖1所示,場景視口中的每一個對象實體都與一個樹節點關聯,關聯的節點存儲了對象實體的相關屬性,這些屬性包括網格點面信息、材質信息、空間變換矩陣信息、燈光信息、攝像頭信息等。同時,節點存儲的空間變換矩陣信息又包括節點本身的變換矩陣和關聯對象實體的變換矩陣[3]。

圖1 3DMAX場景關聯圖
2.2模型材質結構分析
模型材質與節點相關聯,通過節點便可獲得材質的詳細信息,不同類別的材質以特有的類標識符區分。3DMAX中的材質類別有標準材質、多材質和殼材質等,其中,前兩者又最為常用[4~5]。
標準材質的標識符是DMTL_CLASS_ID,記錄了渲染物體的材質屬性,包括環境光顏色、漫反射顏色、高光顏色、高光級別、光澤度、自發光、不透明度等信息。標準材質的每一個屬性都可以存取貼圖紋理,貼圖紋理記錄了紋理通道、紋理坐標方式等信息。用戶讀取的紋理坐標需要與紋理通道匹配,否則渲染的物體紋理會發生錯誤。多材質的標識符是MULTI_CLASS_ID,由多個子材質構成,每個子材質由ID標識符來唯一標識。子材質可以是標準材質,也可以是多材質,模型面片采用的材質通過獲取材質ID來匹配。
圖2展示了材質可視化結構圖,圖中左邊展示的是標準材質,圖中右邊展示的是多材質,從圖上可見,多材質包含了兩個標準子材質,標準材質也都包含了紋理貼圖。

圖2 標準材質和多材質可視化結構圖
2.3模型網格結構分析
三角面片構成了3DMAX模型網格(Mesh)結構,所有的對象實體都以三角網格的形式被渲染,所以對模型網格(Mesh)結構的分析,也就是對三角面片構建規則的分析。模型網格(Mesh)與節點相關聯,通過遍歷節點可以獲得模型的所有網格(Mesh)結構。
網格(Mesh)存儲了模型頂點、面、法向量、材質索引、紋理坐標等信息,包含了模型最重要的屬性數據。網格頂點面片和紋理面片一一對應,分別映射面片的頂點索引和紋理坐標索引,兩種映射方式導致了網格頂點可以具有不同的紋理坐標,同時,頂點的紋理坐標需與材質中記錄的紋理通道匹配。網格(Mesh)對象的不同三角面片可以匹配不同的材質,面片的材質索引映射了子材質或者標準材質的標識符[6]。
3.13DMAX SDK
3DMAX提供了MAX SDK開發包來支持用戶的二次開發,利用SDK提供的類和API,用戶可以開發不同的插件。本文在對模型分析的基礎上,開發了模型的優化導出插件。
模型的導出從DoExport()函數開始,參數Interface*iface提供了訪問模型對象的接口。根節點的獲取可以調用iface->GetRootNode()函數,利用節點提供的GetRootNode()函數和NumberOfChildren()函數,便可獲得根節點關聯下的所有子節點個數,然后遞歸調用GetChildNode()函數,便可獲取場景中的所有節點。
3.2導出模型數據結構定義
本文主要讀取了模型的網格、材質、紋理等信息,這些信息存儲在自定義的數據結構中,方便后續的數據優化和邏輯分塊。
模型場景網格(Mesh)存儲數據結構如表1所示。

表1 網格數據結構
其中,紋理通道和紋理坐標可以記錄多重紋理信息,分別記錄每一層紋理的通道信息和紋理坐標信息。
3.3導出結構的設計與優化
3.3.1網格結構的優化
網格(Mesh)是TriObject對象的成員數據,調用TriObject提供的GetMesh()方法便可獲得模型對象的網格(Mesh)結構。同時,網格(Mesh)信息與節點(INode)關聯,節點(INode)的成員方法EvalWorldState()提供了獲取TriObject對象的途徑[7]。
鑒于網格頂點可能具有不同的紋理坐標和不同的面法向量,確保導出的模型紋理正確和模型表面光照反射平仄有致,本文采取了先擴充,后精簡頂點的方式來優化模型。先擴充頂點是指以面片的方式來組織頂點,頂點個數是三角面片個數的三倍,頂點位置是三角面片對應頂點的位置,這樣使每一個紋理坐標得到了保留,導出模型的紋理效果才不失真。
擴充后的頂點存在大量冗余和重復的信息,需要優化精簡頂點個數。網格頂點可能只有一個紋理坐標,也可能具有多個紋理坐標。對于只有一個紋理坐標的頂點,如果其所在的面的法向量與其現在的頂點法向量角度相差小于45°,則合并此類頂點,只保留一個頂點的信息。頂點精簡合并算法如下:
1:獲取節點非重復頂點位置信息;
2:獲取節點貼圖通道上的紋理坐標數據;
3:for int i=0; i
for int j=0; j<3; j++ //一個面三個頂點;
獲取舊的面頂點索引,頂點,紋理,法向量信息;
if相同的頂點位置沒有讀取過轉4;
else if 頂點的紋理坐標沒有讀取過轉4;
elseif頂點的面法向量與記錄中具有相同位置;
和紋理坐標的頂點的法向量夾角大于45°轉4;
else 更新面頂點索引為記錄中具有相同紋理坐標頂點的索引
4:記錄其頂點,紋理,法向量信息,面頂點索引為記錄中頂點數據的個數;
3.3.2材質和紋理的優化
3DMAX的材質與節點對應,同一標準材質或者多材質可能被不同的節點引用,紋理貼圖也一樣,不同的材質可能引用同一紋理貼圖[8]。優化材質和紋理的方法是采用統一的編碼方式,編碼方式如下。
materialID=(nodeID+1)〈〈8+offsetID;
(1)
其中materialID表示材質編碼,nodeID表示節點編碼,offsetID表示子材質的偏移編碼,如果沒有子材質,offsetID編碼為0。編碼后的材質,根據其內容進行合并優化,同一材質的內容只保存一次,同時分配新的材質編碼,記錄所有舊的材質編碼。
計算面的材質索引,&mesh->faces[i]->getMatID()方法獲取的是材質的偏移編碼,加上node->GetHandle()方法獲得的nodeID節點編碼,便可計算出合并優化前的材質編碼,根據這一編碼便可查詢到合并后的材質編碼[9~11]。優化后的材質和紋理極大地減少了數據的冗余度,節省了存儲空間。
3.4模型導出實驗
3.4.1實驗環境和設置
針對本文提出的模型讀取和優化算法,設計了在3DMAX 2012 64位軟件中,對電網接地極模型和變電站模型導出的實驗,兩者文件大小分別為2.04MB和514MB。導出的模型組織成特定的文件格式,經過重新解釋,在NSC Globle三維GIS平臺上實時渲染。模型導出和渲染的計算機平臺配置參數:windows 7操作系統,i3處理器,4GB內存,AMD HD 6450顯卡。
3.4.2實驗結果
圖3序列展示了電網接地極模型不同部分在導出前和導出后的渲染效果圖,上半部分圖片展示了模型在3DMAX中的渲染效果,下半部分圖片展示了模型同一部分在NSC Globle三維GIS平臺上的渲染效果。不同平臺的光照環境差異導致的模型明暗程度和陰影差別不在本文實驗考慮范圍之內,刨去這一因素,從圖中可以看出,轉換后的模型完整度和模型紋理映射與轉換前一致,細節處的紋理貼圖和紋理對比度也是基本一致。

圖3 青島接地極模型導出效果圖對比
變電站模型導出實驗結果如圖4序列所示,左半部分圖片展示的原始模型和右半部分圖片展示的轉換模型渲染效果也是大致相似。

圖4 變電站模型導出效果圖對比
從實驗結果顯示,本文提出的模型分析和優化算法能較好地完成模型的導出,還原模型的頂點和面片結構,保留模型的材質、紋理和法向量特征。在轉換時間上,本文模型導出算法處理結果如表2所示,達到了模型的實時處理效果。

表2 模型導出處理時間
在3DMAX SDK的基礎上,本文設計了一種導出插件,實現了3DMAX模型幾何結構和渲染效果的讀取與優化。該插件支持自定義數據組織,方便各類三維數字化平臺的模型數據加載和調度。在對多個電站模型的實驗中,取得了良好的效果。
參 考 文 獻
[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] 鄭付聯.3DMAX建模技術及其優化的研究[J].大眾科技,2010(2):43-44.
ZHENG Fulian. Research on 3DMAX modeling and optimization[J]. Popular Science,2010(2):43-44.
[3] 鄭超,余上斌,黃肖丹,等.利用3DMAX和數碼攝像頭技術實現顱骨的三維重建[J].華中科技大學學報:醫學版,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模型的應用[J].湖北工學院學報,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獲取任意三維空間曲線坐標數據文件[J].計算機應用,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文件格式與自定義文件格式的轉換[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文件讀取,繪制與控制方法的研究與應用[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日
作者簡介:周安,男,碩士,工程師,研究方向:電力信息化建設。任培祥,男,碩士,工程師,研究方向:電力三維GIS研究與應用。嚴研,男,碩士,工程師,研究方向:電網工程信息化、電力管理信息化。王科,男,碩士,工程師,研究方向:電力工程管理。尚軻,男,博士,研究方向:圖像處理,目標識別。
中圖分類號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