• <ins id="pjuwb"></ins>
    <blockquote id="pjuwb"><pre id="pjuwb"></pre></blockquote>
    <noscript id="pjuwb"></noscript>
          <sup id="pjuwb"><pre id="pjuwb"></pre></sup>
            <dd id="pjuwb"></dd>
            <abbr id="pjuwb"></abbr>

            wmo(wow map object) research

            wmo(wow map object) research
            The wmo是一個(gè)非常有趣的設(shè)計(jì),wow中比較小的物體使用doodad,而building使用wmo,
            這里的building可以是橋梁、了望臺(tái)、簡(jiǎn)單的小房子、復(fù)雜點(diǎn)的旅館這樣的房屋、非常
            復(fù)雜的建筑群(例如地下城場(chǎng)景),本文對(duì)wmo場(chǎng)景文件進(jìn)行簡(jiǎn)單的介紹,關(guān)于wmo文件的具
            體信息請(qǐng)參考wowmapview的source code,這里非常感謝ufoz所做的貢獻(xiàn)。
            1、命名規(guī)則
            wmo保存在以.wmo結(jié)尾的文件中,這個(gè)文件使用數(shù)據(jù)塊來(lái)保存數(shù)據(jù)。一個(gè)wmo通常由一個(gè)或多個(gè)
            group組成,而group數(shù)據(jù)也保存在以.wmo結(jié)尾的文件中,不過(guò)文件名稱(chēng)存在不同,例如一個(gè)wmo
            保存在name.wmo文件中,那么group文件名就為name_001.wmo name_002.wmo......
            2、結(jié)構(gòu)
            wmo就組織結(jié)構(gòu)來(lái)說(shuō)包含兩個(gè)層次,group和batch。一個(gè)group通常包含多個(gè)batch,其中g(shù)roup包含
            一個(gè)AABB。batch是wmo最小的渲染單元,它保存了頂點(diǎn)索引列表,可以直接調(diào)用DP進(jìn)行渲染。group
            內(nèi)保存一個(gè)標(biāo)志位,可以將group分為indoor/outdoor兩類(lèi),這一個(gè)信息非常重要,通過(guò)它wmo就將
            building分成了內(nèi)外兩部分,outdoor group就是building的外殼,他通過(guò)portal與室內(nèi)場(chǎng)景連接
            在一起。
            3、portal
            wmo文件中保存了portal信息,在wmo中規(guī)定group必須通過(guò)portal進(jìn)行連接,portal由PVS和PRS
            兩部分組成,PVS記錄portal頂點(diǎn)信息,PRS記錄portal和group的連接信息,PRS結(jié)構(gòu)如下:
            struct WMOPR {
            int portal;
            int group;
            int dir;
            };
            需要注意的是dir,這個(gè)成員只有兩個(gè)值-1或1,由于portal的頂點(diǎn)信息按照順時(shí)針記錄,因此group
            位于portal的正面時(shí)dir為1,否則為-1,通過(guò)dir可以快速確定group到底位于portal的哪一側(cè)。
            通過(guò)wmo中記錄的portal信息可以使用portal culling來(lái)檢查group的可見(jiàn)性,但是這里還是有一些
            難度,主要是指portal的記錄方式。由于一個(gè)group可能有多個(gè)portal,而查找連接的portal只能
            通過(guò)PRS,這樣在大的場(chǎng)景中非常不方便。而且在wmo中竟然沒(méi)有記錄portal的plane信息,如何確定
            camera到底是位于portal的正面還是反面呢?(現(xiàn)在wmo文件由于沒(méi)有完全破解,存在一些wowmapview
            未讀入的數(shù)據(jù)塊,例如MVER、MOPT、MOVV、MOVB等,其中MVER應(yīng)該是wmo文件的版本號(hào),MOPT懷疑是保
            存所有plane信息,而MOVV可能是保存包圍體頂點(diǎn)信息,而MOVB保存包圍體信息,MOVV、MOVB應(yīng)當(dāng)用于
            碰撞檢測(cè),這些暫時(shí)沒(méi)有驗(yàn)證)我的做法是在載入時(shí)計(jì)算portal的plane信息,并將PRS信息轉(zhuǎn)換為類(lèi)似
            Q3 BSP中portal的結(jié)構(gòu)。
            struct portal_t {
            int othergroup;
            int pvs;//pvs index
            int dir;
            };
            struct group_t {
            int firstportal;
            int numportals;
            };
            4、碰撞檢測(cè)
            在wmo中并沒(méi)有使用BSP、OC TREE這樣的結(jié)構(gòu)來(lái)進(jìn)行場(chǎng)景管理,可能所有人都感覺(jué)非常困惑。
            場(chǎng)景管理的功能主要是為了加速渲染和方便碰撞檢測(cè),由于存在portal,這樣第一個(gè)功能已經(jīng)完成。
            而對(duì)于碰撞檢測(cè),我的想法應(yīng)當(dāng)是AABB TREE。仔細(xì)觀察WOW的場(chǎng)景可以發(fā)現(xiàn)在indoor場(chǎng)景中曲面、斜面
            這樣的幾何物體非常少,大多數(shù)是規(guī)則物體,因此可以判斷在wmo中所有的物體都是嚴(yán)格按照軸對(duì)齊
            方式進(jìn)行建模,也就是對(duì)規(guī)則性物體AABB=OBB。由于MOVV和MOVB信息并沒(méi)有完全研究透徹,因此關(guān)于
            這一部分只能是我的猜測(cè)。
            5、渲染
            對(duì)wmo的渲染由于batch的存在從而變的簡(jiǎn)單化,但還有可以?xún)?yōu)化的地方。由于wmo中使用portal將其分割
            成group,因此有大量的材質(zhì)相同的model被分割成不同的batch,在渲染時(shí)將材質(zhì)相同的batch合并到一起
            渲染可以避免一些無(wú)謂的DP調(diào)用。wmo一個(gè)令人詬病的地方是使用vertex light,為了減少圖元數(shù)量從而
            使頂點(diǎn)數(shù)量降低,造成渲染的時(shí)候出現(xiàn)色帶效果,應(yīng)當(dāng)加入lightmap,由于wmo的場(chǎng)景通常不大,預(yù)處理
            時(shí)做radiosity的時(shí)間也不會(huì)太長(zhǎng)。
            6、動(dòng)態(tài)載入
            對(duì)于只包含幾個(gè)group的小場(chǎng)景的wmo,由于載入時(shí)間不是太長(zhǎng),在動(dòng)態(tài)載入時(shí)一次性載入對(duì)程序影響
            并不會(huì)太大。但是對(duì)于超大場(chǎng)景的wmo就需要考慮載入策略,這樣場(chǎng)景典型的就是wow中的地下城場(chǎng)景,
            它一個(gè)wmo中包含了幾百個(gè)group,一次性載入時(shí)間非常長(zhǎng),需要分段進(jìn)行載入。此時(shí)就顯示出wmo分
            文件保存group的優(yōu)勢(shì)了,為了實(shí)現(xiàn)動(dòng)態(tài)載入wmo場(chǎng)景,一種可能的做法是在載入wmo后需要根據(jù)camera
            所在的group快速的建立group連接層次圖,這個(gè)圖通過(guò)PRS數(shù)據(jù)建立,建立流程如下:
            一、將camera所在group作為當(dāng)前group,獲得所有相連的protal;
            二、將protal連接的group保存到第一層列表中,遍歷第一層列表中所有的group;
            三、獲得第一層列表中g(shù)roup的portal,檢查portal所連接的group是否保存在第一層列表中,如果沒(méi)有
                將其保存到第二層列表中;
            四、重復(fù)上述過(guò)程,直到整個(gè)層次圖建立。
            這個(gè)層次圖可以預(yù)先建立然后保存到文件中運(yùn)行時(shí)載入,這樣wmo就是分層載入而不需要一次性載入。
            (這里我考慮是否在wmo中也可以建立類(lèi)似bsp的pvs數(shù)據(jù)呢?雖然pvs現(xiàn)在已經(jīng)開(kāi)始淘汰,但是如果
            存在pvs就可以方便確定哪些group需要立即載入,只是不知被portal分割后的group到底是不是convex
            hull,如果是的話可以建立pvs,但對(duì)建模時(shí)限制更加明顯,兩難的選擇!!!)
            7、建模
            由于wmo是按照group對(duì)場(chǎng)景進(jìn)行保存,因此為了建立wmo需要設(shè)計(jì)一個(gè)強(qiáng)力的模型構(gòu)建工具,這個(gè)工具
            主要功能就是對(duì)從建模工具(3DS MAX)中建立的場(chǎng)景模型進(jìn)行分組和處理。美工在制作模型時(shí)需要非常
            小心,所有的模型要嚴(yán)格的軸對(duì)齊(軸對(duì)齊的原因是需要模型的AABB=OBB),然后將模型導(dǎo)入工具中。
            模型構(gòu)建工具有以下功能:分組(group)功能、group選擇、group顯示/隱藏、指定portal,portal對(duì)
            齊(考慮門(mén)、窗戶(hù)這樣天然的portal,手動(dòng)指定portal時(shí)肯定無(wú)法與外表墻壁對(duì)齊,需要程序自動(dòng)對(duì)齊)
            、batch操作(分割、選擇、顯示/隱藏等)、圖元級(jí)操作(triangle揀選,用于batch分割)、光照運(yùn)算
            (產(chǎn)生vertex light數(shù)據(jù))、放置光源、放置doodad(場(chǎng)景中的道具,如桌子、椅子等)。可能還需要其
            他一些功能,但是對(duì)比其他引擎的場(chǎng)景建模工具(hammer、sandbox)明顯簡(jiǎn)單化許多。
            8、優(yōu)勢(shì)及不足
            當(dāng)前處理室內(nèi)場(chǎng)景的主流技術(shù)依然是bsp,但是隨著硬件的發(fā)展bsp的優(yōu)勢(shì)在慢慢地喪失,bsp賴(lài)以生存的
            預(yù)處理PVS現(xiàn)在已經(jīng)完全被實(shí)時(shí)的portal culling所取代,bsp優(yōu)勢(shì)只剩下對(duì)圖元排序(用于透明物體的
            渲染)和基于brush的快速碰撞檢測(cè)上,但是對(duì)比建模工具的復(fù)雜化和場(chǎng)景的限制,采用bsp的開(kāi)銷(xiāo)確實(shí)
            顯得太大。而基于純portal引擎的結(jié)構(gòu)開(kāi)始流行,例如cryengine中處理室內(nèi)場(chǎng)景時(shí)就完全拋棄bsp,
            場(chǎng)景完全由一塊塊固定大小的墻壁組成,一塊墻壁基本和bsp中brush類(lèi)似,這樣做的好處是建模工具變
            的簡(jiǎn)單(不需要進(jìn)行CSG運(yùn)算),而且非常容易的產(chǎn)生portal,同時(shí)由于場(chǎng)景使用brush構(gòu)成也兼具了
            bsp方便進(jìn)行碰撞檢測(cè)的優(yōu)勢(shì)。wmo有些類(lèi)似cryengine,但是在某些方面更具優(yōu)勢(shì)。
            首先在建模方面,wmo的場(chǎng)景完全可以通過(guò)成熟的建模工具來(lái)構(gòu)建,這樣對(duì)于美工不需要重新學(xué)習(xí)新的
            建模工具,可以節(jié)約大量的時(shí)間。其次模型構(gòu)建工具需要的功能非常少,減少了程序的復(fù)雜性,縮短了
            編寫(xiě)相關(guān)工具的時(shí)間。再次,場(chǎng)景管理簡(jiǎn)單化,相應(yīng)代碼量大幅度減少,同時(shí)由于portal的存在,可以方便
            的與其他引擎相對(duì)接。可以說(shuō)wmo是一種可以進(jìn)行快速開(kāi)發(fā)的場(chǎng)景結(jié)構(gòu)。

            posted on 2009-09-25 08:39 RedLight 閱讀(618) 評(píng)論(0)  編輯 收藏 引用


            只有注冊(cè)用戶(hù)登錄后才能發(fā)表評(píng)論。
            網(wǎng)站導(dǎo)航: 博客園   IT新聞   BlogJava   博問(wèn)   Chat2DB   管理


            <2008年4月>
            303112345
            6789101112
            13141516171819
            20212223242526
            27282930123
            45678910

            導(dǎo)航

            統(tǒng)計(jì)

            公告


            Name: Galen
            QQ: 88104725

            常用鏈接

            留言簿(3)

            隨筆分類(lèi)

            隨筆檔案

            相冊(cè)

            My Friend

            搜索

            最新評(píng)論

            閱讀排行榜

            評(píng)論排行榜

            久久人妻少妇嫩草AV无码蜜桃| 久久久精品国产免大香伊| 亚洲AV无码久久精品成人 | 亚洲中文字幕无码久久2020 | 久久精品国产色蜜蜜麻豆| 国产午夜电影久久| 国产精品欧美久久久久无广告| 久久久91精品国产一区二区三区| 久久精品国产乱子伦| 中文字幕热久久久久久久| 免费精品国产日韩热久久| 国内精品久久久久影院薰衣草 | 久久久久四虎国产精品| 伊人色综合久久天天| 久久黄视频| 国产精品久久久久蜜芽| 一本色道久久HEZYO无码| 久久一日本道色综合久久| 91精品国产91久久久久福利| 91精品国产高清久久久久久国产嫩草| 国产精品熟女福利久久AV| 久久99国产精品久久99小说| 久久精品国产男包| 国产69精品久久久久777| 国产午夜精品久久久久九九电影| 亚洲国产精品成人久久蜜臀| 亚洲人成电影网站久久| 无码国内精品久久人妻| 99久久国产综合精品网成人影院| 一本色综合久久| 久久久久久免费一区二区三区| 日本精品久久久久影院日本| 久久久噜噜噜久久熟女AA片 | 久久精品国产99久久丝袜| 国产精品久久久香蕉| 精品午夜久久福利大片| 精品国产日韩久久亚洲| 9191精品国产免费久久| 亚洲AV无码久久精品狠狠爱浪潮 | 久久影院综合精品| 久久人人爽人爽人人爽av|