徐曉丹,李秉杰,李伯森,呂 舜
(1.民政部 一零一研究所,北京100070; 2.北京航空航天大學(xué) 計(jì)算機(jī)學(xué)院,北京 100191)
隨著互聯(lián)網(wǎng)的發(fā)展,網(wǎng)絡(luò)祭祀成為引導(dǎo)人民群眾從實(shí)地實(shí)物祭掃轉(zhuǎn)移到對逝者精神傳承的一種途徑,是節(jié)地生態(tài)安葬、綠色低碳祭掃、文明節(jié)儉的方式,是更加充滿個(gè)性、人文和文化特色的方式。其中三維(Three Dimensional, 3D)圖像虛擬祭祀借助互聯(lián)網(wǎng)、虛擬現(xiàn)實(shí)、大數(shù)據(jù)等技術(shù),將現(xiàn)實(shí)的紀(jì)念館與墓地通過虛擬技術(shù)展現(xiàn)到移動(dòng)、PC等終端設(shè)備上,實(shí)現(xiàn)跨越時(shí)空;以祭祀場景更加貼近實(shí)際、良好的視覺和交互體驗(yàn),方便人們隨時(shí)隨地祭奠已逝親人等優(yōu)點(diǎn)備受人們青睞。為此,民政部近年來組織建設(shè)“中國殯葬公共服務(wù)平臺”重大項(xiàng)目,3D虛擬祭祀是該項(xiàng)目中的一個(gè)重要組成部分,本文介紹了該項(xiàng)目建設(shè)過程中關(guān)于3D虛擬祭祀開發(fā)的部分研究成果。
3D虛擬祭祀的技術(shù)特點(diǎn):一是所構(gòu)造的場景是根據(jù)用戶需求自行進(jìn)行搭建的,用戶通過靜態(tài)或動(dòng)態(tài)的方式對場景進(jìn)行修改,這包括了對場景中對象的布局或?qū)ο蟊旧淼膶傩孕畔⑦M(jìn)行修改;二是3D虛擬祭祀場景較復(fù)雜,具有明顯的場景構(gòu)成粒度低、場景屬性種類繁雜的特點(diǎn);三是要具備面向虛擬祭祀提供渲染任務(wù)調(diào)度與交互管理的基本功能,根據(jù)用戶前端平臺的性質(zhì),面向PC終端提供超文本標(biāo)記語言(Hyper Text Markup Language, HTML)5交互引擎構(gòu)造以及面向移動(dòng)終端提供云渲染引擎任務(wù)請求,用戶線上虛擬環(huán)境交互過程中實(shí)現(xiàn)各種操作動(dòng)作的捕捉以及響應(yīng)回饋,滿足不同終端用戶線上3D的虛擬環(huán)境體驗(yàn)。
虛擬現(xiàn)實(shí)(Virtual Reality, VR)又被稱作沉浸式多媒體或者是計(jì)算機(jī)模擬仿真[1]。通過虛擬現(xiàn)實(shí)技術(shù)可以在計(jì)算機(jī)中模擬出逼真的三維場景,給用戶良好的視覺和交互體驗(yàn),因此近些年來虛擬現(xiàn)實(shí)相關(guān)技術(shù)在各個(gè)領(lǐng)域的應(yīng)用越來越頻繁,涵蓋了軍事、教育、科研等多個(gè)方面并取得了良好的效果[2]。場景建模是虛擬現(xiàn)實(shí)相關(guān)應(yīng)用程序開發(fā)中非常重要的環(huán)節(jié),因此在應(yīng)用場景建模技術(shù)時(shí),需要綜合分析目標(biāo)場景的構(gòu)成特點(diǎn)及業(yè)務(wù)需求以選擇合適的建模方法。
目前場景建模技術(shù)主要分為傳統(tǒng)三維建模技術(shù)和基于圖像的幾何建模技術(shù)兩大類[3]。在該技術(shù)領(lǐng)域的研究中,先前研究主要著眼于描述場景的組成和場景對象的特性,基于包括可擴(kuò)展標(biāo)記語言(Extensible Markup Language, XML)、可擴(kuò)展虛擬現(xiàn)實(shí)建模語言(Extensible Virtual Reality Modeling Language, X-VRML)、可擴(kuò)展三維圖像(Extensible Three Dimensions, X3D)或自定義腳本語言在內(nèi)的多種文本格式形成場景描述文本文件,最終根據(jù)該描述文本利用模型進(jìn)行場景拼接完成建模工作[4-7]。
這些方法一般能滿足對復(fù)雜程度低的場景的需求,還不能解決像3D虛擬祭祀這類用戶根據(jù)自身需求自行搭建場景且構(gòu)成粒度細(xì)、對象屬性復(fù)雜的場景的情況,主要是因?yàn)檫@些建模技術(shù)普遍存在如下問題:1)對復(fù)雜場景對象的屬性和特征描述手段不足,具體表現(xiàn)在數(shù)據(jù)類型不足、構(gòu)造新數(shù)據(jù)類型困難以及對數(shù)組、結(jié)構(gòu)體等復(fù)雜類型描述困難等方面;2)業(yè)務(wù)耦合性強(qiáng),一方面沒有總結(jié)出抽象的場景對象描述方法,另一方面經(jīng)常局限于某一種具體的文本描述規(guī)則,因此導(dǎo)致其通用性不足;3)在設(shè)計(jì)時(shí)較少考慮到界面化建模支持,當(dāng)目標(biāo)場景的規(guī)模非常龐大時(shí),直接人工編輯建模文本會降低工作效率,并增加因人為疏忽導(dǎo)致的文本編輯錯(cuò)誤的概率。
針對上述問題,本文提出了一種基于形式化的場景建模語言與環(huán)境。首先,對場景的構(gòu)成特性進(jìn)行了清晰的分析,并基于巴科斯范式(Backus-Naur Form, BNF)規(guī)則[8]提出了場景建模語言;其次,定義了場景建模語言的操作使得該語言可以通過應(yīng)用程序編程接口(Application Programming Interface, API)調(diào)用的方式完成編輯,證明了該語言對界面化建模的支持;最后,定義了一套該語言的XML映射方法,實(shí)驗(yàn)結(jié)果表明通過自動(dòng)化的映射方法使場景建模結(jié)果以XML文本格式進(jìn)行存儲,提升了建模結(jié)果的可復(fù)用性。
本文基于ISO/IEC 14977標(biāo)準(zhǔn)化文檔中擴(kuò)展BNF規(guī)則給出了3D場景建模語言的語法規(guī)則[9]。其中擴(kuò)展BNF規(guī)則中的符號如表1所示。
表1 擴(kuò)展BNF符號表
3D場景建模語言語法規(guī)則定義如下:
場景描述腳本=變量定義區(qū),場景對象模板定義區(qū),場景構(gòu)造腳本定義區(qū)
變量定義區(qū)={變量定義}
變量定義=變量名,變量類型,{變量值}
變量名=標(biāo)識符
變量類型=基礎(chǔ)數(shù)據(jù)類型
變量值=終結(jié)符
場景對象模板定義區(qū)= {場景對象模板}
場景對象模板=模板ID,場景對象類型,缺省標(biāo)記,{屬性語句}
屬性語句=鍵值屬性語句 | 序列屬性語句 | 結(jié)構(gòu)體屬語句
鍵值屬性語句=語句基本信息,屬性類型,屬性值
序列屬性語句=語句基本信息,屬性類型,{屬性值}
結(jié)構(gòu)體屬性語句={鍵值屬性語句}
屬性類型=數(shù)據(jù)類型,[數(shù)值范圍]
屬性值=標(biāo)識符
語句基本信息=屬性名,語句類型,幫助信息
屬性名=標(biāo)識符
語句類型="鍵值屬性", "序列屬性", "結(jié)構(gòu)體屬性"
幫助信息=屬性別名, 屬性描述, 屬性分類
屬性別名=標(biāo)識符
屬性描述=終結(jié)符
屬性分類=標(biāo)識符
數(shù)值范圍=最小值,最大值
最小值=終結(jié)符
最大值=終結(jié)符
數(shù)據(jù)類型=基礎(chǔ)數(shù)據(jù)類型|場景對象類型|擴(kuò)展數(shù)據(jù)類型
基礎(chǔ)數(shù)據(jù)類型="Integer"|"Float"|"Double"|"Boolean"
|"String"|"Enum"|"Collection"
場景對象類型="Unit" | "Particle" | "Capacity" | "Item"
擴(kuò)展數(shù)據(jù)類型="ModelAsset" | "ParticleAsset" | "AudioAsset" | "MaterialAsset" | "TextureAsset"
場景構(gòu)造腳本定義區(qū)= {場景對象}
場景對象=索引ID, 模板ID, {特化信息}
特化信息=(屬性名, 屬性值) | (屬性名, 成員名, 屬性值)
終結(jié)符="′" , 符號, {符號} , "′" | ′"′ , 符號, {符號} , ′"′
標(biāo)識符=字母, {字母 | 數(shù)字 | "_"}
字符=字母 | 數(shù)字 | 符號 | "_"
數(shù)字="0" |"1" |"2" |"3" |"4" |"5" |"6" |"7" | "8" |"9"
符號= "[" | "]" | "{" | "}" | "(" | ")" | "<" | ">"| "'" | '"' | "=" | "|" | "." | "," | ";"
字母="A" | "B" | "C" | "D" | "E" | "F" | "G"| "H" | "I" | "J" | "K" | "L" | "M" | "N"| "O" | "P" | "Q" | "R" | "S" | "T" | "U"| "V" | "W" | "X" | "Y" | "Z" | "a" | "b"| "c" | "d" | "e" | "f" | "g" | "h" | "i" | "j" | "k" | "l" | "m" | "n" | "o" | "p"| "q" | "r" | "s" | "t" | "u" | "v" | "w"| "x" | "y" | "z"
由此,采用該語言對目標(biāo)3D場景進(jìn)行建模后最終得到的場景描述腳本由三個(gè)區(qū)域組成:變量定義區(qū),用于描述場景描述腳本中所使用的變量信息;場景對象模板定義區(qū),用于描述場景中所有的場景對象模板信息;場景構(gòu)造腳本定義區(qū),用于描述場景的實(shí)際構(gòu)成信息。其中,場景對象模板定義區(qū)是整個(gè)語言結(jié)構(gòu)中的關(guān)鍵組成部分。
為加強(qiáng)語言本身對復(fù)雜場景對象屬性和特征的描述能力,同時(shí)賦予語言對界面化建模的支持特性,本文在語言的提出和設(shè)計(jì)過程中以形式化方法為基礎(chǔ),通過對3D祭祀場景的構(gòu)成特點(diǎn)進(jìn)行分析并對其進(jìn)行高度抽象,抽象出場景對象、場景對象模板、場景對象模板屬性三個(gè)層次,并基于BNF的描述規(guī)則,根據(jù)場景抽象層次提出場景建模語言。
1.2.1 場景對象模板概念
為對3D祭祀場景進(jìn)行建模,首先對祭祀場景的組成結(jié)構(gòu)進(jìn)行分析并抽象成如圖1所示的形式。為盡可能地使具體業(yè)務(wù)與場景結(jié)構(gòu)一致,提出場景對象的概念,它代表了場景中每一個(gè)獨(dú)立的對象。雖然對象的內(nèi)部可能由更細(xì)微的顆粒構(gòu)成,為簡化暫時(shí)先不考慮內(nèi)部的構(gòu)成情況,將其看作一個(gè)整體。
圖1 一般虛擬場景的抽象層次結(jié)構(gòu)
場景對象模板是用于描述一類性質(zhì)相同的場景對象,將具有相同特征的場景對象的屬性進(jìn)行提取所形成的一種抽象屬性集合。這些場景對象僅僅是在屬性構(gòu)成上相同,并非屬性值也一致。場景對象模板的形成過程分為兩個(gè)步驟:一是將場景中具有相同特征的對象進(jìn)行歸類;二是對同一種類型的場景對象進(jìn)行屬性提取形成場景對象模板。場景對象模板形成后,需要保留每個(gè)場景對象特有的屬性值信息,因此每個(gè)對象要保留對應(yīng)的模板特化參數(shù)。為了壓縮參數(shù)數(shù)量,每個(gè)場景對象模板都會匹配一個(gè)默認(rèn)模板參數(shù),如果場景對象某個(gè)屬性的值與默認(rèn)模板參數(shù)一致則無需再進(jìn)行保存。
通過這樣的抽象方式,將場景中的所有場景對象歸結(jié)為幾大類場景對象模板,從而通過任何一個(gè)場景對象模板就可以隨意生成具有此類特性的場景對象,該場景對象的屬性值來源于默認(rèn)模板參數(shù)和模板特化參數(shù)的組合。
1.2.2 場景對象模板屬性概念
場景對象中的復(fù)雜屬性構(gòu)成是影響目前大多數(shù)建模方法應(yīng)用的主要難點(diǎn)[10],為解決此難點(diǎn),本文在場景對象模板概念的基礎(chǔ)上,對其中的屬性信息進(jìn)行抽象,如圖1所示,提出三種屬性類型:鍵值屬性、序列屬性、結(jié)構(gòu)體屬性。其中,鍵值屬性主要用于描述鍵值類型的屬性信息,這種屬性只包含一個(gè)數(shù)據(jù)類型和一個(gè)對應(yīng)數(shù)據(jù)類型的值;序列屬性語句用于描述一系列具有相同數(shù)據(jù)類型的數(shù)值所構(gòu)成的集合,這種屬性包含一個(gè)數(shù)據(jù)類型和至少一個(gè)該數(shù)據(jù)類型對應(yīng)的值,類比于程序語言中的數(shù)組;結(jié)構(gòu)體屬性語句用于表示結(jié)構(gòu)體類型的屬性信息,它可以看作多個(gè)鍵值類型屬性信息的集合,類比于程序語言中的結(jié)構(gòu)體。
通過這種抽象的方式就可以將場景對象模板中的所有屬性信息抽象成為上述三種類型的屬性并加以描述,基于這種結(jié)構(gòu)所設(shè)計(jì)出來的建模語言將會對具有復(fù)雜屬性結(jié)構(gòu)的場景對象有非常強(qiáng)的適應(yīng)性。
除此之外,如果該語言所包含的三種屬性類型無法滿足目標(biāo)3D場景的需求,也可以通過增添新的屬性類型加以應(yīng)對,由于場景建模語言是基于BNF設(shè)計(jì)的,因此只需要遵守語言的描述規(guī)范就可以在不破壞語言原有結(jié)構(gòu)的情況下實(shí)現(xiàn)語言的擴(kuò)充。
1.2.3 引入界面化建模支持特性
本文在設(shè)計(jì)3D場景建模語言時(shí),基于圖1所展現(xiàn)的抽象層次[11],結(jié)合BNF規(guī)則提出了一套嚴(yán)謹(jǐn)?shù)恼Z言語法模型,這有利于界面化編輯,只需提出一套該語言的編輯操作API即可實(shí)現(xiàn)對應(yīng)的界面化編輯環(huán)境。
另外,為了在界面化編輯過程中用戶能夠更清晰地理解場景對象模板中每一個(gè)屬性的含義,對構(gòu)成場景對象模板的屬性根據(jù)其用戶再次進(jìn)行劃分,并為每一個(gè)屬性的含義進(jìn)行標(biāo)定,將這些屬性的描述信息嵌入到每一個(gè)屬性語句中。通過這樣的方式,在實(shí)際建模過程中,就可以對每個(gè)屬性的分類及描述信息進(jìn)行標(biāo)識,這有助于界面化程序識別各種屬性并將其相關(guān)信息展示給使用者,以輔助使用者完成場景建模工作。
因?yàn)殇秩境绦驅(qū)鼍懊枋瞿_本進(jìn)行解析時(shí)不能直接對該腳本進(jìn)行讀取,所以,還需要針對該腳本設(shè)計(jì)一套專用的語言解釋器。因此,為了使得本文所提出的建模語言能夠更容易地被渲染系統(tǒng)讀取和解析,還需設(shè)計(jì)3D場景建模語言的XML轉(zhuǎn)化規(guī)則,通過該規(guī)則可以將建模結(jié)果轉(zhuǎn)化為XML的存儲格式。這種做法的優(yōu)勢是:1)避免了為該語言開發(fā)專門的語法解釋器,同時(shí)降低了渲染程序與語言之間的耦合程度;2)提升了建模結(jié)果的可復(fù)用性,當(dāng)需要使用其他描述格式重新對場景進(jìn)行建模時(shí),只需要實(shí)現(xiàn)對應(yīng)的自動(dòng)化轉(zhuǎn)換程序,而無需重新對該場景再進(jìn)行建模,此外轉(zhuǎn)換程序的實(shí)現(xiàn)難度遠(yuǎn)低于語言解釋器。
為此,本文首先提出了一套轉(zhuǎn)換規(guī)則操作符,用于描述轉(zhuǎn)換規(guī)則應(yīng)遵循的執(zhí)行方式,然后再針對場景建模語言語法規(guī)則中的每一種非終結(jié)符和終結(jié)符給出對應(yīng)的轉(zhuǎn)化規(guī)則。
表3 3D場景建模語言XML轉(zhuǎn)換規(guī)則
為了刻畫轉(zhuǎn)換過程中的操作,基于3D場景建模語言的語法規(guī)則定義提出了一套轉(zhuǎn)換規(guī)則操作符,如表2所示,這些操作符以BNF語法規(guī)則中的符號為輸入進(jìn)行操作。其中,對符號進(jìn)行XML展開時(shí)需要參考該符號下所支持的轉(zhuǎn)換規(guī)則,而對符號值展開時(shí),則將符號所對應(yīng)的值直接填寫到XML中即可。
表2 3D場景建模語言XML轉(zhuǎn)換規(guī)則操作符
表3只列出了3D場景建模語言XML轉(zhuǎn)換規(guī)則中比較關(guān)鍵的部分,建模語言語法規(guī)則中的每一個(gè)非終結(jié)符都對應(yīng)了一套詳細(xì)的轉(zhuǎn)換規(guī)則,基于這些轉(zhuǎn)換規(guī)則即可按照語法樹自頂向下進(jìn)行展開最終完成整個(gè)轉(zhuǎn)換過程。
對于每一個(gè)非終結(jié)符號而言轉(zhuǎn)換規(guī)則并不是唯一的,這種設(shè)計(jì)的目的是為了壓縮轉(zhuǎn)換后的XML文本量,接下來介紹壓縮優(yōu)化原理。
在建模語言的設(shè)計(jì)過程中為了讓場景建模語言邏輯縝密,導(dǎo)致了語言本身在使用時(shí)會產(chǎn)生一定的數(shù)據(jù)冗余,其主要表現(xiàn)在屬性語句的內(nèi)容冗余。如果存在兩個(gè)屬性名一致的屬性語句s1和s2,則根據(jù)屬性名的唯一性,兩個(gè)屬性語句的語句類型必然是一致的。下面對不同語句類型進(jìn)行討論:
鍵值屬性語句時(shí):兩個(gè)屬性語句除了屬性值以外的構(gòu)成是完全一致的;
序列屬性語句時(shí):兩個(gè)屬性語句除了屬性值序列以外的構(gòu)成是完全一致的;
構(gòu)體屬性語句時(shí):兩個(gè)屬性語句中除鍵值屬性語句序列以外的構(gòu)成是完全一致的;對于任意鍵值屬性語句m1∈s1存在鍵值屬性語句m2∈s2,此時(shí)m1和m2除了屬性值以外的構(gòu)成一定是完全一致的;且對于任意鍵值屬性語句m2∈s2存在鍵值屬性語句m1∈s1,此時(shí)m1和m2除了屬性值以外的構(gòu)成一定是完全一致的。
上述討論可以得到結(jié)論:如果屬性語句的定義中出現(xiàn)了同屬性名的屬性語句,那么就會產(chǎn)生冗余信息。而在實(shí)際的XML生成過程中,去除屬性語句的冗余是能有效地優(yōu)化建模結(jié)果的腳本大小。因此在轉(zhuǎn)換過程中,會對所有場景對象模板中的屬性信息進(jìn)行提取,過濾重復(fù)的內(nèi)容并統(tǒng)一放置在一個(gè)XML文件中進(jìn)行存儲,將場景對象模板中屬性值信息單獨(dú)提取出來存放在另一個(gè)XML文件中,兩者通過屬性名稱進(jìn)行關(guān)聯(lián),從而對轉(zhuǎn)化結(jié)果進(jìn)行了重新組織。如表4所示,將轉(zhuǎn)換后的XML內(nèi)容分別保存在不同的XML文件中,并約定每個(gè)XML文件的初始內(nèi)容。
每一個(gè)XML文件都擁有初始的轉(zhuǎn)換操作需求,因此將先前已經(jīng)生成的場景建模結(jié)果代入到對應(yīng)的轉(zhuǎn)換操作中,就可以自動(dòng)生成對應(yīng)的XML文本信息。
表4 場景描述腳本XML文件組織結(jié)構(gòu)
在目前的建模方法應(yīng)用過程中,大多數(shù)方法都需要使用者通過文本編輯的形式直接對建模文件進(jìn)行修改,這種方法在面對數(shù)量級較小的建模結(jié)果時(shí)還是很有效的,但是,隨著目標(biāo)建模場景規(guī)模和復(fù)雜度的不斷提升,直接對文本進(jìn)行編輯不僅效率較低,還有可能因?yàn)槿藶槭д`引入一些錯(cuò)誤。其中主要的一部分錯(cuò)誤就是語法錯(cuò)誤,這些錯(cuò)誤的排查往往要消耗很多的精力和時(shí)間,會嚴(yán)重影響建模效率。
為了解決該問題,本文提出了3D場景建模編輯環(huán)境,其核心思想是實(shí)現(xiàn)一系列編輯語言的操作,通過這些操作可以讓使用者通過類似于函數(shù)調(diào)用的形式完成建模,再借助界面化的窗口將操作進(jìn)一步封裝,即可實(shí)現(xiàn)界面化的編輯環(huán)境。這種編輯環(huán)境的優(yōu)勢在于:一是用戶在通過界面化手段建模過程中,只需填寫必要參數(shù),其他內(nèi)容全部自動(dòng)生成,提高了建模速度;二是自動(dòng)化的生成過程避免了直接編輯文本而導(dǎo)致的人為因素輸入錯(cuò)誤;三是界面化的建模結(jié)果相比純文本而言更加直觀、容易編輯。
由于3D場景建模語言是基于BNF描述的,因此本文按照遞歸的方式定義了語言編輯的相關(guān)操作。這些編輯操作根據(jù)場景描述腳本的組成結(jié)構(gòu),可以劃分為三個(gè)部分:變量定義區(qū)編輯操作、場景對象模板定義區(qū)編輯操作、場景構(gòu)造腳本區(qū)編輯操作。
以變量定義區(qū)中的部分操作為例進(jìn)行解釋,變量定義區(qū)中變量查詢操作的偽代碼描述如下:
findVar(varDefArea,name)=begin
VarDefination var;
foreach(var in varDefArea)
if (var.name==name)
return var;
endif
endforeach
return null;
end
變量定義區(qū)中修改變量名操作的偽代碼描述如下:
modifyVarName(varDefArea,name,newName)=begin
VarDefination finded;
finded:=findVar(varDefArea,name);
if (finded!=null)
varDefArea:=varDefArea〗{finded};
finded.name:=newName;
varDefArea:=varDefArea ∪ {finded};
endif
end
可以看到這些編輯操作實(shí)際上就是根據(jù)BNF規(guī)范和場景描述腳本的格式,直接進(jìn)行腳本生成操作,并且這些操作之間是可以進(jìn)行相互調(diào)用的,例如修改變量名稱的編輯操作modifyVarName調(diào)用了查找變量的方法findVar。
當(dāng)完成了對所有編輯操作的描述后,就可以將這些偽代碼在界面化編輯環(huán)境中實(shí)現(xiàn),并使用用戶界面(User Interface, UI)將這些操作進(jìn)行封裝供用戶調(diào)用,從而實(shí)現(xiàn)界面化建模的目的。通過界面化建模形成的場景描述腳本,將會通過2.2節(jié)中所提到的XML轉(zhuǎn)化規(guī)則自動(dòng)轉(zhuǎn)化成為XML格式的場景描述腳本,以便渲染程序讀取和分析。
本文以“中國殯葬公共服務(wù)平臺”項(xiàng)目中具有典型代表性的祭祀用品蠟燭、木桌、畫框以及火焰粒子這6種場景對象為例,分別應(yīng)用本方法與相關(guān)建模方法觀察建模能力[4-6,12]。其中,測試所使用的場景對象特征信息如表5所示,經(jīng)實(shí)際測試后得到了如表6所示的結(jié)果。
表5 典型場景對象特征信息
通過對比可以得到如下結(jié)論:本方法相對于現(xiàn)有方法進(jìn)一步強(qiáng)化了針對復(fù)雜場景對象屬性和特征的描述能力,在增強(qiáng)了新增數(shù)據(jù)類型特性支持的同時(shí)完善了序列屬性、結(jié)構(gòu)體屬性類型的描述;本建模方法在界面化建模支持程度上優(yōu)于先前方法;本建模方法基于抽象的建模結(jié)果通過自動(dòng)化轉(zhuǎn)化方法可以生成各種文本結(jié)構(gòu)下的建模結(jié)果,相比采用固定文本格式描述的先前方法而言通用性、靈活性更強(qiáng),可復(fù)用程度高。
表6 本文建模方法與先前建模方法的功能對比結(jié)果
相對于現(xiàn)有建模方法直接對目標(biāo)場景特征從零構(gòu)造描述規(guī)則[10],以人工編寫和檢查的方式生成場景描述文本這種方式而言,本文提出的建模方法流程雖然復(fù)雜一些,但具有更強(qiáng)的通用性、描述能力和界面建模支持特性,具體應(yīng)用流程如圖2中實(shí)線所示:一是針對目標(biāo)場景特征進(jìn)行分析,對本文所提出的建模語言BNF語法規(guī)則進(jìn)行擴(kuò)充,形成用于描述目標(biāo)場景的建模語言語法規(guī)則;二是基于建模語言及場景資源文件,在界面化建模環(huán)境中通過調(diào)用建模語言編輯操作完成場景描述腳本的編輯生成工作;三是依據(jù)XML轉(zhuǎn)化規(guī)則將場景描述腳本轉(zhuǎn)化為XML格式的描述信息;四是將XML文本輸入到渲染程序中,完成解析和虛擬場景的生成工作。
圖2 本文方法和先前方法應(yīng)用流程比較
圖3展示了網(wǎng)絡(luò)祭祀中基于C# .Net開發(fā)的界面化建模原型系統(tǒng)的啟動(dòng)效果,該系統(tǒng)從功能上驗(yàn)證了界面化建模的可行性并且可根據(jù)項(xiàng)目進(jìn)展動(dòng)態(tài)擴(kuò)充建模數(shù)據(jù)。圖3中可以看到基于形式化的建模語言規(guī)則信息以及建模場景資源信息已經(jīng)被載入到系統(tǒng)中。
圖4展示了變量定義區(qū)的界面化編輯環(huán)境,通過該窗體可以創(chuàng)建、修改、刪除業(yè)務(wù)所需要的枚舉、集合類型變量,并且可以向變量中添加所需的成員信息。系統(tǒng)會將這些變量臨時(shí)保存在內(nèi)存中,并在后續(xù)的場景對象模板的編輯過程中根據(jù)需要自動(dòng)提示用戶進(jìn)行選擇。
圖3 界面化建模環(huán)境啟動(dòng)效果
圖4 變量編輯窗口
圖5展示了場景對象模板的界面化編輯環(huán)境,通過該窗體用戶可以創(chuàng)建所需類型的場景對象模板,并通過雙擊該模板中的屬性信息進(jìn)行編輯,此時(shí)系統(tǒng)會根據(jù)屬性的類型自動(dòng)打開對應(yīng)類型的修改窗口方便用戶完成編輯操作。圖6、圖7和圖8分別展示了鍵值屬性、序列屬性和結(jié)構(gòu)體屬性的界面化編輯窗口。
圖5 場景對象模板編輯窗口
圖6 場景對象模板鍵值屬性編輯窗口
圖9展示了界面化編輯后的場景對象模板自動(dòng)轉(zhuǎn)化效果,可以看到所有界面化編輯產(chǎn)生的信息會以XML的形式導(dǎo)出存儲并等待建模過程使用。
圖10為實(shí)際生成的一個(gè)典型場景的建模結(jié)果效果圖,可以看到窗體內(nèi)部不僅可以顯示文字貼圖等信息,還能夠進(jìn)行3D物體的動(dòng)態(tài)展示,以及可以交互的按鈕等內(nèi)容。
圖7 場景對象模板序列屬性編輯窗口
圖8 場景對象模板結(jié)構(gòu)體屬性編輯窗口
圖9 場景對象模板XML轉(zhuǎn)化效果預(yù)覽
圖10 3D場景交互效果
本文對于現(xiàn)有3D場景建模方法普遍存在的業(yè)務(wù)耦合度高、復(fù)雜場景對象屬性和特征描述能力不足的問題,為解決像3D虛擬祭祀這類構(gòu)成粒度細(xì)、對象屬性復(fù)雜的場景建模技術(shù)難題,提出了一種基于形式化的3D場景建模方法。通過引入場景對象模板、場景對象模板屬性等概念,對場景的構(gòu)成進(jìn)行抽象,并基于BNF規(guī)則提出了一種低耦合、描述手段豐富的場景建模語言語法規(guī)則定義;基于該語言進(jìn)一步地提出了XML轉(zhuǎn)化規(guī)則和界面化建模環(huán)境,以增強(qiáng)建模結(jié)果的可復(fù)用性、提高建模速度。最后通過對課題中典型的幾類場景對象進(jìn)行建模,對比了本文提出的方法與其他方法并進(jìn)行了相關(guān)分析,證明了本文提出的方法在描述復(fù)雜場景對象屬性和特征時(shí)能力較強(qiáng),在降低業(yè)務(wù)耦合度、提高界面化建模支持方面也有一定的改進(jìn)。
[11] XIONG W, JIN Y, LIU Z. Recognizing Chinese number and quantifier prefix to enhance statistical parser in machine translation [J]. Journal of Computers, 2014, 9(4): 867-874.
[12] 徐俊杰,孫長嵩,張安真.基于XML的三維場景數(shù)據(jù)的組織與表示模型[C] // 北京地區(qū)高校研究生學(xué)術(shù)交流會——通信與信息技術(shù)會議.北京:北京郵電大學(xué)出版社,2006:1542-1547.(XU J J, SUN C S, ZHANG A Z. Model of scene date organization and expression based on XML [C] // Beijing University Graduate Academic Exchange Conference—Communication and Information Technology Conference. Beijing: Beijing University of Posts and Telecommunications Press, 2006: 1542-1547.)