新遊戲中出現的基於BSP場景分割技術

2021-08-22 06:52:23 字數 2618 閱讀 4465

前不久看了看wow的wmo地**件格式,發現這是乙個規整的interlocking tiles+portal+bsp分割體系,與farcry的引擎體系幾乎完全相同。它很通用,而且很有用。

我一說wow的什麼什麼技術「很通用」,什麼什麼技術「挺簡單」,就會被人扁,麻木了都。我說他通用,說他簡單,並不代表我不頂禮膜拜。簡單即美麗,正確的往往是相對於目標最優的路徑,而不是最眩的路徑。

我想先說說dreams他們曾經討論過的farcry中的技術,這篇文章本來在gameres的blog中,但是我現在上不去這個blog站了,很鬱悶。farcry用的是33x33的interlocking tiles室外場景,這一點注意一下wow的室外場景,雖然nxn不好說,但是同樣也是interlocking tiles!

首先,這裡就能說明,wow用的決不是什麼高不可攀的技術,farcry都已經誕生多少年了?!可以說:wow用的是最成熟的技術,構架了最完美的世界。這點我希望大家認清楚wow的技術實質,國外這是一套比較成熟的場景結合技術,並不是高不可攀。只不過,放到中國,本來大量有希望作出來的好的圖形程式設計師都被某些公司當二奶包養著去做綠色網遊了……操,說好這個話題不再說的!我畢竟還是相信山河雖已不幸若此,但好人還是有的!

首先,必須強調一點,farcry的格式以及hl2的室內場景部分我並未具體研究過,所以以下的發言只是基於dreams等人在討論中傳達出來的資訊。如果大家能登入到gameres的blog,可以看看dreams他們的討論,關於farcry主要透露出這樣幾個點:

1、farcry的室外場景是it四叉樹,關於這個主題,在這個blog的前面的文章中提過9x9標準it演算法,**也有。

2、farcry的室內場景是bsp。

3、farcry的內外結合首先通過portal。

4、farcry使用it+portal可以在內外場景間建立pvs,從而可以在執行時使用pvs系統提高效率。

對於若dreams、skullwang這樣的前輩來說,這應該是再規整不過的演算法了,一點也不華麗。對於farcry而言,室內場景畢竟並不是它主要想表達的東西,所以farcry的室內場景或許可能會簡單了些。因此,按照dreams的討論,它在室內場景的表達上也不會比hl2的概念顯得優秀。按照討論來看,hl2的室內場景概念不是太複雜的概念:

1、hl2的城市以area作為單元,area和area之間通過portal連線。乙個area,主要可能就是一棟棟房子,和一條條街道。

2、每個area本身,進行標準bsp分割,分割為乙個個sector(就是房間)。

如果這裡,area不叫area,而叫做group,sector不叫sector,而叫做bspnode,那麼,我們看看wow的wiki中wmo的格式,就能找到完全相同的名稱。

wmo乙個室內地形,由多個group構成,每個group可能都是乙個規則的bsp空間分割(group內部出現了標準的bspnode結構),group和group之間以portal連線。據我的老大說,魔獸中的portal很少,我認為,我們能看到的portal主要是g-g之間的portal,而不包括bspnode之間的portal,bspnode之間的portal可能沒有渲染出來,沒有計入header的portal表中(應該是不必要計入),或者乾脆可能已經被pvs優化掉。這個我沒有具體跟蹤乙個wmo場景,所以不太清楚到底是那種情況。但無論是哪種情況,我認為,將wmo和bsp劃清界線的做法並不可取。

通過這個方法,大空間bsp的「大樹」問題被通過area或者group輕鬆乾掉,而同時不會丟棄bsp本身的優勢——這就類似於無限大場景之於四叉樹,相輔相成,不可缺一。area離開了sector,房子是好篩選了,然而一次整體渲染乙個房子,首先渲染就低效,房子內部的邏輯也不好走。sector離開了area,乙個可能超過幾千個節點的大樹就會被建立出來,同時,還有大量的portal,還有被分割平面分割得過分瑣碎的空間——這也不像是乙個優秀的演算法應該擁有的效率。

bsp是乙個老演算法,但它不是乙個不再發展的演算法,相反,bsp在邏輯處理上的優點和高效性,目前沒有新的演算法可以抹殺,而bsp的缺點,卻可以通過種種手段予以消弭。其中主要的瑣碎空間問題,通過area和sector的劃分,area本身就可以避免大量不必要的空間劃分,使得空間劃分集中在每個area本身內部。而在area內部,又可以通過struct face和detail face的區分、甚至是手動分割面指定使得空間盡可能少被分割。而凸包問題也早已不是問題,現在的bsp就算是個凹多面體,也不會引發太大的問題——因為在更大的眼光來看,通過struct face,再bt的凹多面體都可以被當作凸多面體。而最複雜的光照計算,似乎3dmax也提供了更簡單的做法,可以直接在模型製作的階段就能直接將光照圖打進去。一切都在向著更好的方向走去,就像c++一樣,可選的庫越來越多,方案越來越多……只有對方案掌握的好壞,沒有經典bsp本身的問題了……

bsp目前面臨的主要困難應該還是在編輯器,你不能指望美工明確他所在的空間哪些是struct face,哪些是detail face,而area的劃分,則更必須通過編輯器來進行了,這可能也是導致bsp無法大規模成為制式方案的乙個不足之處——在目前,特殊的歷史時期,特殊的時代背景下,有足夠公尺和人力的公司寧可花錢養一堆不幹事的食客,也不會把這些人團結起來,讓他們從事一些研究的工作。而本來被設計為擔負這個任務的研究機構,卻都據說去研究最關乎「國計民生」的問題了。初級階段嘛……結果就是,只好靠自己精神病般的一腔狂熱來獨自面對這種**問題。

如果有乙個哪怕效率稍差的演算法,可以連乙個剛從學校畢業的美工都能輕鬆畫出乙個內外結合的地圖,這個演算法應該就會很容易替代掉bsp,曙光還未來臨,吾輩還需努力!

cocos2dx tilemap 在遊戲中出現縫隙

在不同的解析度上,用tilemap拼出來得地圖上,tile之間可能會出現乙個畫素的縫隙 通常是由於抗鋸齒造成的,開啟這個巨集 cc fix artifacts by streching texel 1 問題解決 呼叫瓦片地圖對應cctexture2d的setaliastexparameters介面。...

遊戲中基於物理的渲染(三)

大多數基於物理的specular brdf的基礎是microfacet理論。這個理論是用來描述來自於一般表面 不是光學平滑的 的反射。microfacet理論的基本假設是,表面是由很多微平面 microfacet 組成,這些微平面都太小了,沒有辦法乙個乙個地看到 並假設每個microfacet都是光...

蒜頭君的新遊戲

工作空閒之餘,蒜頭君經常帶著同事們做遊戲,最近蒜頭君發明了乙個好玩的新遊戲 n n位同事圍成乙個圈,同事 a 手裡拿著乙個兔妮妮的娃娃。蒜頭君喊遊戲開始,每位手裡拿著娃娃的同事可以選擇將娃娃傳給左邊或者右邊的同學,當蒜頭君喊遊戲結束時,停止傳娃娃。此時手裡拿著娃娃的同事即是敗者。玩了幾輪之後,蒜頭君...