Jul.25, 2006
?關(guān)于場景管理有了一些頭緒,總算走出了被“選用哪種形式的場景管理”所困擾的煩惱。認(rèn)識到場景的組織最關(guān)鍵的是應(yīng)該以“邏輯層次+幾何結(jié)構(gòu)”來組織。加速渲染,對象剔除,碰撞檢測都只是場景所應(yīng)具有的功能,應(yīng)該在不同的層次上區(qū)別的處理,而不能單純的指望用一個“最優(yōu)”的場景管理數(shù)據(jù)結(jié)構(gòu)或算法來通吃。
?當(dāng)前的處理方式是用樹來維持所有對象(層次間的關(guān)系以邏輯為主,幾何結(jié)構(gòu)為輔),每個節(jié)點(diǎn)上存儲變換矩陣(LocalToWorld & WorldToLocal)渲染場景時從根節(jié)點(diǎn)起遍歷場景樹,每得到當(dāng)前節(jié)點(diǎn)時都通過它的變換矩陣得到局部坐標(biāo)系。
?最重要的是這個場景樹對關(guān)卡設(shè)計師而言一定要是可隨時進(jìn)行觀察調(diào)整以及一定程度上的性能評估的,由于場景對象間的邏輯在程序引擎中很難管理(這些往往是由游戲設(shè)計師和關(guān)卡設(shè)計師共同擬定的),所以場景樹的結(jié)構(gòu)管理權(quán)大部分應(yīng)當(dāng)由程序員轉(zhuǎn)交至具體關(guān)卡的設(shè)計者。這樣一是便于關(guān)卡設(shè)計師根據(jù)場景的復(fù)雜度和性能評估隨時調(diào)整,二是便于后期針對特定的場景進(jìn)行特定的優(yōu)化,
?最重要的一點(diǎn)是任意的節(jié)點(diǎn)與其所有子節(jié)點(diǎn)都成了邏輯相關(guān)的,邏輯相關(guān)的好處在于“對某個節(jié)點(diǎn)進(jìn)行變換能夠立刻應(yīng)用于它的所有子節(jié)點(diǎn)”在大部分情況下都是合適的,因為需要一起變換的對象往往都是邏輯相關(guān)的。這樣就免去了關(guān)卡設(shè)計師常常需要把某些對象并為一組一起移動的麻煩。打個生動點(diǎn)兒的比方,在即時戰(zhàn)略中,所有的兵種由于不是邏輯相關(guān)的,所以我們需要用Ctrl+1,Ctrl+2等將其分隊,將對所有對象的獨(dú)立操作簡化為組操作。但是如果所有的軍隊根據(jù)上下級所屬關(guān)系成為邏輯相關(guān)的層次結(jié)構(gòu),我們只需選中一個連長就可以操作該連的所有單位,而選中司令則可以處理整個軍隊,這樣對關(guān)卡的設(shè)計者而言顯然效率有極大的提高。
???
?關(guān)于游戲內(nèi)建的編輯器,也有了一些想法,不一定所有的信息都需要在hud上顯示出來,這樣既麻煩也不便于顯示和修改。改進(jìn)的辦法是在游戲外另開一個Editor窗口專用于顯示信息和修改信息,比如選中對象時顯示和修改被選中對象的信息,顯示和修改場景樹的節(jié)點(diǎn)間層次關(guān)系,等等。這樣最大的受益者是擁有雙顯示器的關(guān)卡設(shè)計師。他們可以在一個屏幕上全屏運(yùn)行游戲,而在另一個屏幕上修改場景樹的屬性。
?