陳 蕾,趙正旭
(石家莊鐵道大學(xué) 信息科學(xué)與技術(shù)學(xué)院,石家莊 050043)
基于BNF的3DS文件格式規(guī)范化描述①
陳 蕾,趙正旭
(石家莊鐵道大學(xué) 信息科學(xué)與技術(shù)學(xué)院,石家莊 050043)
3DStudio(3DS)是3dsMax用來(lái)保存模型信息的一種文件結(jié)構(gòu),是業(yè)界的通用標(biāo)準(zhǔn)格式之一.為了使不同星系之間的模型可以被自由調(diào)用,解決可視化系統(tǒng)中模型格式不兼容的問(wèn)題,減小3DS文件的存儲(chǔ)空間,提出使用巴克斯范式(BNF)規(guī)范化描述3DS文件.描述了BNF的特點(diǎn)和對(duì)3DS文件結(jié)構(gòu)進(jìn)行表述和分析的使用方法,并以土衛(wèi)三模型的3DS文件為例,使用BNF對(duì)其進(jìn)行形式化定義,從而形成了統(tǒng)一的規(guī)范化管理格式,以利于搜索引擎的檢索和應(yīng)用.
3DS;BNF;形式化語(yǔ)言;規(guī)范化
隨著虛擬現(xiàn)實(shí)技術(shù)的發(fā)展,基于三維模型的深空探測(cè)實(shí)時(shí)三維可視化技術(shù)需求越來(lái)越大,對(duì)三維模型的需求也隨之增大.目前,常用的三維建模軟件包括AutoCAD[1]、3DS Max[2]、Autodesk Maya[3]、Zbrush[4]等,不同的三維建模軟件適用于不同的應(yīng)用領(lǐng)域,生成的模型格式也各種各樣.在深空探測(cè)實(shí)時(shí)三維可視化系統(tǒng)中,需要存儲(chǔ)成千上萬(wàn)的三維模型,由于模型的數(shù)據(jù)格式和文件結(jié)構(gòu)不同,可能會(huì)導(dǎo)致各個(gè)星系互不兼容,使得這些三維模型不能在同一實(shí)時(shí)系統(tǒng)中同時(shí)被調(diào)用,導(dǎo)致在深空探測(cè)實(shí)時(shí)可視化系統(tǒng)中不能快速精確地調(diào)用目標(biāo)模型.如果對(duì)系統(tǒng)中三維模型的文件格式和描述方式制定統(tǒng)一的規(guī)范,對(duì)三維模型文件進(jìn)行標(biāo)準(zhǔn)化和規(guī)范化處理,就會(huì)大大提高系統(tǒng)的效率.
文件標(biāo)準(zhǔn)化和規(guī)范化是實(shí)現(xiàn)三維模型資源共享與重用的前提條件,在資源建設(shè)中占有極其重要的地位.規(guī)范化管理三維模型的途徑之一就是將模型的文件結(jié)構(gòu)“標(biāo)準(zhǔn)化”.首先統(tǒng)一三維模型的文件格式,本文選擇3DS[5]格式的三維模型,它是一種比較通用的保存三維模型信息的文件格式.其次需要對(duì)3DS文件進(jìn)行規(guī)范化描述,制定一個(gè)統(tǒng)一的描述規(guī)則.目前對(duì)于3DS的文件格式和塊結(jié)構(gòu)都是以樹(shù)狀圖或自然語(yǔ)言描述,必須用自然語(yǔ)言加以說(shuō)明才能將3DS的文件結(jié)構(gòu)描述清楚.這些圖表和自然語(yǔ)言計(jì)算機(jī)識(shí)別不了,現(xiàn)有的文本描述方式和自然語(yǔ)言解釋方式存在二義性等弱點(diǎn),因此必須尋找一種規(guī)范化的形式將其描述.
描述文件數(shù)據(jù)結(jié)構(gòu)的常用語(yǔ)言有XML(eXtensible Markup Language)[6]、 JSON(JavaScript Object Notation)[7]、Z語(yǔ)言[8,10]、BNF[11].XML具有文檔結(jié)構(gòu)清晰、容易閱讀等優(yōu)點(diǎn),但其文件尺寸一般都比較大,因此在現(xiàn)有的網(wǎng)絡(luò)條件下傳輸文件效率較低[12].JSON采用完全獨(dú)立于語(yǔ)言的文本格式,易于人閱讀和編寫(xiě),同時(shí)也易于機(jī)器解析和生成.Z語(yǔ)言是一種用“數(shù)學(xué)文字”或“數(shù)學(xué)符號(hào)”來(lái)描述計(jì)算機(jī)系統(tǒng)的規(guī)范化語(yǔ)言,是軟件工程中編碼之前的規(guī)格說(shuō)明語(yǔ)言.BNF是一種上下文無(wú)關(guān)文法的符號(hào)集,由于其簡(jiǎn)潔、明了和科學(xué)而被廣泛接受[13,14].
經(jīng)過(guò)比較,BNF具有簡(jiǎn)單易學(xué)、開(kāi)放、易于擴(kuò)展、分析效率高等優(yōu)點(diǎn),相對(duì)于其它形式化語(yǔ)法,在描述文件格式方面具有更好的適用性.因此,本文使用BNF描述3DS文件結(jié)構(gòu),統(tǒng)一描述文件格式,以一種計(jì)算機(jī)可識(shí)別的文法將其規(guī)范化描述,將3DS文件變?yōu)椤皹?biāo)準(zhǔn)”格式,建立一種專(zhuān)有的數(shù)據(jù)格式,使其更加通用.
3DS文件是樹(shù)狀結(jié)構(gòu)的二進(jìn)制文件,基本單位是塊,每個(gè)塊都有各自的用途.所有塊都是以樹(shù)形結(jié)構(gòu)組織的,以一個(gè)主塊開(kāi)始,以嵌套的形式構(gòu)成.
文件的主塊ID是Ox4D4D,這可以判斷一個(gè)文件是否是3DS文件.3DS文件的每個(gè)塊都是一個(gè)層次結(jié)構(gòu),每一部分都有各自特有的ID號(hào),圖1表示了3DS文件中塊的存在結(jié)構(gòu)及位置(文件太長(zhǎng),只畫(huà)出文件前幾個(gè)塊,其他不再贅述).
圖1 3DS文件結(jié)構(gòu)和塊
這些“塊”描述了3DS文件的數(shù)據(jù)信息,由塊頭和數(shù)據(jù)兩部分組成.塊頭包括ID和長(zhǎng)度兩項(xiàng),共占6位,長(zhǎng)度指得是整個(gè)塊的長(zhǎng)度,而不只是數(shù)據(jù)的長(zhǎng)度.每一個(gè)“塊”都是以2個(gè)字節(jié)的ID開(kāi)始,緊接著是4個(gè)字節(jié)的塊長(zhǎng)度信息,緊接著是塊數(shù)據(jù)信息[15,16],如圖2所示.
圖2 3DS文件塊的嵌套
從圖1和圖2可以看出,3DS文件是一層套一層的 樹(shù)狀結(jié)構(gòu),而且這個(gè)樹(shù)狀結(jié)構(gòu)是一個(gè)無(wú)比龐大的家族,每一個(gè)塊都包含著自己的子塊,子塊接著包含子塊,如此下去.
2.1 BNF范式
BNF就是使用一種類(lèi)似的形式來(lái)描述一個(gè)問(wèn)題,讓所有參與者都能明白他們對(duì)哪一方面能夠達(dá)成一致意見(jiàn).也就是對(duì)于某個(gè)問(wèn)題制定一個(gè)統(tǒng)一的標(biāo)準(zhǔn),為某個(gè)符號(hào)賦予一個(gè)特定的意義,在某個(gè)領(lǐng)域內(nèi)它就只能是這個(gè)意思,別人在了解這個(gè)標(biāo)準(zhǔn)和所制定的規(guī)則之后,就能理解使用這種符號(hào)集的表達(dá)方式和內(nèi)容.
BNF被廣泛應(yīng)用于編程語(yǔ)句,也可以用來(lái)規(guī)范自然語(yǔ)言[17,18].BNF非常精確,在語(yǔ)法上沒(méi)有歧義;形式簡(jiǎn)單易學(xué),便于使用者和計(jì)算機(jī)處理;開(kāi)放、易于擴(kuò)展、表達(dá)能力較強(qiáng),能充分表達(dá)出描述者意圖.而用普通語(yǔ)言描述的語(yǔ)法不僅冗長(zhǎng),而且會(huì)造成理解上的歧義;用BNF表示的語(yǔ)法是數(shù)學(xué)產(chǎn)物,可以被計(jì)算機(jī)理解,因此選擇BNF描述文件語(yǔ)法結(jié)構(gòu).
2.2 塊結(jié)構(gòu)描述
文章上一節(jié)中,使用自然語(yǔ)言和圖表的形式對(duì)3DS的文件結(jié)構(gòu)進(jìn)行了描述,這種方式雖然通俗易懂,但是由于結(jié)構(gòu)比較繁雜,沒(méi)有形成一個(gè)統(tǒng)一的形式.如果使用BNF制定一種通用的文法,結(jié)果會(huì)更加一目了然,計(jì)算機(jī)也更容易識(shí)別.對(duì)圖1和圖2中的3DS文件結(jié)構(gòu)制定BNF文法,則表示為:
(1)首先對(duì)一些專(zhuān)業(yè)術(shù)語(yǔ)作以下定義:
塊 ::=chunk
子塊 ::=sub-chunk
塊頭 ::=head
數(shù)據(jù) ::=data
長(zhǎng)度 ::=size
(2)句子文法如下:
由于3DS文件的塊ID是由十六進(jìn)制數(shù)表示的,2個(gè)字節(jié),一共四位;size表示的是整個(gè)塊的長(zhǎng)度,也是用十六進(jìn)制數(shù)表示的,所以其BNF表示文法如下:
BNF范式中有不定循環(huán)的規(guī)則[19],格式為:*Rule,即在元素前加操作符*表示重復(fù),完整形式為: *element,例如:3*3
ID::=“Ox”,4*4
size::=“Ox”,8*8
每一個(gè)塊的ID都不一樣,都有自己的專(zhuān)屬表示,比如主塊ID是Ox4D4D,編輯塊是Ox3D3D,具體塊的ID只需要根據(jù)實(shí)際情況靈活替換即可.
通過(guò)上述幾個(gè)文法表示,采用遞歸法可以簡(jiǎn)潔地表示出3DS文件中塊與塊的包含關(guān)系和樹(shù)狀結(jié)構(gòu).這種使用字母和符號(hào)表達(dá)的文法沒(méi)有二義性,計(jì)算機(jī)更容易識(shí)別,更通用.
2.3 文件描述
在描述3DS文件的時(shí)候,如果單純從實(shí)體外觀上描述,可能會(huì)因?yàn)橐恍┱Z(yǔ)言共識(shí)或者描述方式的不同,造成理解上的歧義.另一方面,每個(gè)3d模型都有自己的特點(diǎn),都描述出來(lái)就會(huì)出現(xiàn)很多語(yǔ)句,這些語(yǔ)句可能只是換了一個(gè)形容詞,或者只是換了一個(gè)名詞而已,這樣就會(huì)做許多重復(fù)的工作.如果,現(xiàn)在用一種規(guī)范定義出3DS文件的描述形式,那就會(huì)省很多工作量,只需要套用形式就行.
通過(guò)上述3DS文件的描述,我們可以了解到3DS文件數(shù)據(jù)格式是由“塊”組成的,它是一個(gè)樹(shù)形層級(jí)結(jié)構(gòu),主塊包含子塊的關(guān)系.
首先,一個(gè) 3DS文件的開(kāi)始是主塊MAIN3DS,其ID是Ox4D4D,它是基本信息塊,所以在一個(gè)3DS文件中,主塊是必選項(xiàng),它總是以主塊Ox4D4D開(kāi)始的.其次是一級(jí)子塊,版本信息塊VERSION,ID是Ox0002,編輯信息塊EDIT3DS,ID是Ox3D3D,關(guān)鍵幀信息塊KEY3DS,ID是OxB000.
最基本的語(yǔ)句規(guī)范描述如下:
因?yàn)橐粋€(gè)3DS文件總是以主塊開(kāi)始的,所以
編輯塊的父塊是 Ox4D4D,其主要子塊是EDIT_MATERIAL 材 質(zhì) 塊 ,ID 是 OxAFFF; EDIT_OBJECT對(duì)象塊,ID是Ox4000.
EDIT_UNKNWN、OBJ_UNKNWN等指的是一些未知信息塊,它可以有多個(gè),也可以沒(méi)有,所以用花括號(hào)括起來(lái),表示重復(fù)0到無(wú)數(shù)次.
主編輯塊的子塊雖然是按照一定的次序存放,但其中有些塊并不是一定存在的,比如:如果你沒(méi)有定義材質(zhì),使用缺省材質(zhì),這里將不存在材質(zhì)塊.
2.4 文件數(shù)據(jù)結(jié)構(gòu)描述
2.4.1 宏定義
在一個(gè)3DS文件中,使用宏定義來(lái)定義文件中的塊:
#define MAIN3DS 0x4D4D //定義主塊
使用BNF統(tǒng)一描述為:
Macro definition::=“#define”,
2.4.2 定義數(shù)據(jù)結(jié)構(gòu)
在3DS文件中,保存塊信息的結(jié)構(gòu)如下:
3.1 土衛(wèi)三.3DS文件數(shù)據(jù)格式解析
許多文獻(xiàn)已經(jīng)介紹過(guò),3DS文件的二進(jìn)制位存儲(chǔ)順序是Intel式的[20],低字節(jié)在前,高字節(jié)在后,所以在讀取3DS數(shù)據(jù)文件的時(shí)候必須考慮這個(gè)規(guī)則.下面通過(guò)一個(gè)具體實(shí)例對(duì)3DS文件的數(shù)據(jù)格式進(jìn)行詳細(xì)解析:首先,通過(guò)3DSMax2010創(chuàng)建土衛(wèi)三的三維模型,以.3DS的格式導(dǎo)出并保存,如圖3所示.
圖3 3dsMax打開(kāi)土衛(wèi)三.3DS的三維模型
通過(guò)工具C32asm讀取圖3中.3DS的土衛(wèi)三文件,得到其十六進(jìn)制數(shù)據(jù)列表,如圖4所示.圖中所顯示的數(shù)據(jù)以兩個(gè)字節(jié)的塊ID開(kāi)始,之后是四個(gè)字節(jié)的塊的長(zhǎng)度信息.從數(shù)據(jù)中提取到標(biāo)志性的塊ID,比如Ox4D4D(主塊)、Ox3D3D(編輯塊)及OxAFFF(材質(zhì)塊)等,它們是兩個(gè)字節(jié)的塊ID,后面緊跟4個(gè)字節(jié)該塊的長(zhǎng)度信息.
圖4 3DS格式的土衛(wèi)三十六進(jìn)制數(shù)據(jù)
從土衛(wèi)三3DS文件中截取一組數(shù)據(jù)如下:
4D 4D CA C9 09 00 02 00 0A 00 00 00 03 00 00 00 3D 3D DE C8 09 00......
(1)首先,4D4D是該文件的主塊ID,占兩個(gè)字節(jié).
(2)之后的4個(gè)字節(jié)保存的是主塊的長(zhǎng)度信息,也就是整個(gè)文件的長(zhǎng)度.由于3DS二進(jìn)制數(shù)據(jù)是按低位在前、高位在后存儲(chǔ)的,所以主塊的長(zhǎng)度為Ox0009C9CA.
(3)接著是該 3DS文件的第一個(gè)子塊的ID, Ox0002.子塊的長(zhǎng)度是Ox0000000A. (4)之后的塊ID未知,歸為未知信息,可以跳過(guò)(5)Ox3D3D是主編輯塊的ID.該塊的長(zhǎng)度為Ox0009C8DE.
(6)之后的字節(jié)的讀取規(guī)則按如上步驟.
3.2 土衛(wèi)三3DS文件的BNF描述
根據(jù)以上的研究?jī)?nèi)容,運(yùn)用BNF描述土衛(wèi)三.3DS文件結(jié)構(gòu),具體內(nèi)容如下:
根據(jù)式①和圖4中土衛(wèi)三3DS文件的十六進(jìn)制序列,其BNF描述規(guī)范如下:
根據(jù)式②和③擴(kuò)展如下:
(1)基本塊的表示:
(2)版本塊的表示:
(3)編輯塊的表示:
(4)材質(zhì)塊的表示:
(5)綜合以上所有式子,總式表示為:
由于3DS文件是嵌套結(jié)構(gòu),因此以上是通過(guò)遞歸的方式表示3DS的BNF描述方法,先用非終結(jié)符一層一層表示,直到結(jié)構(gòu)最中心再用終結(jié)符一層一層替換.由于土衛(wèi)三.3DS文件塊結(jié)構(gòu)特別龐大,其中有許多未知塊和不重要的塊,文章不再贅述,只選取了其中比較重要的塊.上述所用數(shù)據(jù)是從土衛(wèi)三.3DS文件的十六進(jìn)制數(shù)據(jù)序列中摘取,數(shù)據(jù)屬實(shí).
從上述式子可以看出,這種描述方法與圖4中文件的十六進(jìn)制數(shù)據(jù)相比,更清晰、更簡(jiǎn)潔.省去了沒(méi)有用的信息之后,所有表述的都是模型文件必要的特征信息,減小了文件存儲(chǔ)空間.
如何將知識(shí)提煉成規(guī)則,需要用到統(tǒng)一的文法.文法最吸引人的特性,是它們自然地描述了所定義語(yǔ)言句子的分層語(yǔ)法結(jié)構(gòu).基于BNF的3DS文件文法表示,可以更科學(xué)地描述文件的結(jié)構(gòu),更加簡(jiǎn)潔、通用.
在深空探測(cè)三維可視化系統(tǒng)中,將模型文件格式統(tǒng)一,保證在各個(gè)星系之間模型可以被自由調(diào)用,解決了不同星系系統(tǒng)中模型格式不兼容的問(wèn)題.使用巴克斯范式描述3DS文件,可以縮小文件長(zhǎng)度,同時(shí)在描述過(guò)程中,把文件中不重要的部分省略,描述文件的必要信息,在不影響模型正常顯示的情況下,將文件描述到最簡(jiǎn),這不僅有助于計(jì)算機(jī)快速讀取,也方便使用者識(shí)別.
文章為更好地管理和使用3DS文件提出一種新思路,希望能對(duì)改進(jìn)3DS文件的存儲(chǔ)空間和傳送速率起到一定的借鑒作用.接下來(lái),需要對(duì)深空探測(cè)系統(tǒng)中大量天體模型的具體描述,在應(yīng)用中完善該描述方法,能夠進(jìn)一步促進(jìn)航天事業(yè)的發(fā)展.另外,計(jì)劃在3DS文件分類(lèi)過(guò)程中使用BNF描述代碼,制定統(tǒng)一的描述規(guī)范,如何利用BNF對(duì)3DS文件制定分類(lèi)規(guī)范也是下一步要進(jìn)行的研究工作.
1百度百科.AutoCAD.http://baike.baidu.com/view/25199.htm. [2016-07-27].
2百度百科.3dsmax.http://baike.baidu.com/view/11137.htm# reference-[1]-11137-wrap.[2016-08-01].
3 百 度 百 科 .Autodesk Maya.http://baike.baidu.com/view/ 6463073.htm?fromtitle=maya&fromid=38497&type=syn. [2016-07-15].
4百度百科.ZBrush.http://baike.baidu.com/view/165599.htm. [2016-08-05].
5杜琳,蔣輝.VC++中利用DirectX實(shí)現(xiàn)3DS文件的讀取和控制.計(jì)算機(jī)時(shí)代,2010,01:41–43.
6搜狗百科.XML.http://baike.sogou.com/v34402.htm?fromTitle= XML.[2016-07-26].
7 百度百 科 .JSON.http://baike.baidu.com/view/136475.htm. [2016-07-27].
8趙正旭,溫晉杰,趙衛(wèi)華.Z規(guī)范及其使用方法.北京:科學(xué)出版社,2015.
9 Wen JJ,Guo Y,Zhao ZX.Representation of raspberry PI practice in Z notation.British Journal of Applied Science& Technology,2016,(4):2231–0843.
10趙正旭,溫晉杰.Z規(guī)格說(shuō)明自動(dòng)生成器.計(jì)算機(jī)系統(tǒng)應(yīng)用,2016,25(4):148–155.
11百度百科.BNF.http://baike.baidu.com/view/1137652.htm. [2016-07-24].
12程小東,張宇.X3D文件轉(zhuǎn)換為JSON的方法.池州學(xué)院學(xué)報(bào),2009,23(3):29–30.
13 Zhao W,Xia CH,Luo Y,Liu XC,Wu WK.An approach for description of computer network defense scheme and its simulation verification.Journal of Computers,2014,(2): 388–398.
14羅晨,鮑廣宇,劉曉明,袁黎苗.基于改進(jìn)BNF的作戰(zhàn)管理語(yǔ)言語(yǔ)法形式化方法.計(jì)算機(jī)科學(xué),2012,39(4):189–192.
15劉芳,劉賢梅.3DS文件讀取、繪制與控制方法的研究與應(yīng)用.計(jì)算機(jī)工程與設(shè)計(jì),2009,30(19):4575–4578.
16百度文庫(kù).Autodesk公司官方 3ds文件格式介紹. http://download.csdn.net/detail/whucv/4851225.[2015-11-15].
17 Xiong W,Jin YH,Liu ZY.Recognizing Chinese number and quantifier prefix to enhance statistical parser in machine translation.Journal of Computers,2014,(4):867–874.
18 Laros JFJ,Blavier A,den Dunnen JT,Taschner PEM.A formalized description of the standard human variant nomenclaturein Extended Backus-NaurForm.BMC Bioinformatics,2011,(12):S5.
19綠色背影.巴科斯范式.http://xl-feng1314.blog.163.com/ blog/static/4450715220080196551349/.[2016-05-15].
20劉爽,張恒博.三維建模軟件3dsMax數(shù)據(jù)文件3ds的解析.大連民族學(xué)院學(xué)報(bào),2012,14(3):260–264.
3DS File Format Specification Based on BNF
CHEN Lei,ZHAO Zheng-Xu
(School of Information Science and Technology,Shijiazhuang Tiedao University,Shijiazhuang 050043,China)
3DStudio(3DS)is a file structure of 3dsMax used to store model information,which is one of the industry’s standard format in 3D software.In order to ensure the models of different system can be called freely,to solve the problem that the different model format is not compatible in visual system,and to reduce the storage space of 3DS file, this paper proposes to use the Backus-Naur Form(BNF)specification to describe the 3DS file.This paper describes the characteristics of the BNF and the method of describing and analyzing the 3DS file structure,and takes the 3DS file of Tethys model as an example,using BNF to formally definite it,thus forms a unified format of standardization management,which facilitates retrieval and application of search engine.
3DS;BNF;Formal language;specification
河北省高層次人才科學(xué)研究項(xiàng)目(GCC2014010)
2016-08-10;收到修改稿時(shí)間:2016-09-13
10.15888/j.cnki.csa.005721