CRD(CollisionResolutionDevice)碰撞檢測設備.碰撞檢測在3D遊戲中至關重要,好的碰撞檢測要求人物在場景中可以平滑移動,遇到一定高度內的台階可以自動上去,而過高的台階則把人擋住,遇到斜率較小的斜坡可以上去,斜率過大則把人擋住,在各種前進方向被擋住的情況下都要儘可能地讓人物沿合理的方向滑動而不是被迫停下。在滿足這些要求的同時還要做到足夠精確和穩定,防止人物在特殊情況下穿牆而掉出場景。
碰撞檢測做得好了是應該的,不易被人注意到,因為這符合我們日常生活中的常識。做得差了卻很容易讓人發現,人物經常被卡住不能前進或者人物穿越了障礙。所以大部分人都覺得寫碰撞檢測代碼是件吃力不討好的事情,算法複雜、容易出bug、不容易出彩。下面還是回到正題,看看我們該如何解決這個難題。
早期3D遊戲的碰撞檢測多數基於格子或者BSP樹,基於格子的系統實現簡單但精度不夠,不屬於嚴格意義的3D碰撞檢測。基於BSP樹的碰撞檢測一度十分流行,算法基本已經成熟定型,但它的固有缺點卻使它不太適合現在的遊戲。BSP樹需要很長的預處理時間不適合載入時計算,BSP劃分經常會產生原多邊形數三到四倍的多邊形,考慮到不用保存法線、顏色、uv等信息也要增加將近一倍的資源容量,在一個大的遊戲中將模型資源的容量從200M增加到400M相信是大部分人都不願接受的。目前對於任意複雜三角形集合(mesh)的碰撞檢測多數基於BVTree(boundingvolumetree),具體可以是aabbtree,obbtree或者K-doptree,這也是當今各種物理引擎和碰撞檢測引擎流行的做法。
上面是碰撞檢測按數據結構不同的分類,按檢測方式又可以分為離散點的碰撞檢測和連續碰撞檢測(CCDcontinuouscollisiondetection)。離散點的碰撞檢測是指定某一時刻T的兩個靜態碰撞體,看它們之間是否交迭,如果沒有交迭則返回它們最近點的距離,如果交迭則返回交迭深度,交迭方向等。連續碰撞檢測則是分別指定在T1、T2兩個時刻兩個碰撞體的位置,看它們在由T1運動到T2時刻的過程中是否發生碰撞,如果碰撞則返回第一碰撞點的位置和法線。連續碰撞檢測是最為自然的碰撞檢測,可以大大方便碰撞回響邏輯的編寫,可以很容易避免物體發生交迭或者穿越。離散點的碰撞檢測則沒有那么友好,當檢測到碰撞時兩個物體已經發生了交迭,如果其中有三角形格線對象那么已經有許多三角形發生了交迭,如何將兩個交迭的對象分開並按合理的方式運動是一個挑戰。雖然連續碰撞檢測是最自然的方式,但它的實現非常複雜,運算開銷也很大,所以目前大部分成熟的物理引擎和碰撞檢測引擎還是採用了基於離散點的碰撞檢測,為了避免物體交迭過深或者彼此穿越,它們都要採用比較小的模擬步長。
由於碰撞檢測引擎的複雜性和對效率的高要求,我們應該儘量使用目前成熟的完整引擎,而不是自己去開發。經過評估,我決定採用Opcode碰撞檢測引擎來做遊戲中人物和場景的碰撞檢測。Opcode的主要功能是用aabbtree管理複雜三角形集合來和射線、球體,立方體,另一個三角形集合等進行離散點上的碰撞檢測,如果檢測到交迭則返回所有發生交迭的三角形。Opcode的特點是高度的記憶體使用最佳化和極好的效率,ODE物理引擎底層就採用它來做複雜三角形mesh的碰撞檢測,Opcode的作者也是NovodeX(PhysX前身)物理引擎的核心開發人員,據說NovodeX採用了Opcode的一個更最佳化版本。由此可見Opcode的成熟與效率。
確定了要使用的引擎,下面要討論的算法就和具體引擎無關了,適合於任何離散點的碰撞檢測引擎。我們用AABB包圍盒來代表場景中的人物,看看如何實現文章開頭所提出的效果。
另外,CRD是CapitalRecreationDistrict(首都休閒娛樂中心)的英文縮寫,是繼朝陽區CBD之後的又一C*D力作。
為解決因首鋼涉鋼產業搬遷後石景山經濟支柱產業“空心化”問題,未來的石景山區將大力培育休閒娛樂服務業、商務會展服務業和創意科技服務業“三大產業集群”。日前,石景山區正式推出“打造北京CRD”的發展戰略,在未來5年內帶動300億元的投資項目。
CRD(CapitalRecreationDistrict)是石景山區打造“首都休閒娛樂中心區”的英文縮寫。這個發展定位主要是要把石景山區建設成一個以休閒、娛樂為發展主旋律,以營造京西花園式的生態環境和時尚高雅的文化氛圍為基礎,打造集休閒、娛樂、數字動漫、會展、購物和商務辦公等功能為一體的首都休閒娛樂中心區。該區常務副區長張力兵說,這一戰略定位的背景是,北京城市總體規劃和首鋼涉鋼產業搬遷兩件大事。在CRD發布會現場5個規劃沙盤中可以看到,石景山區將推出以一山(山林景觀)、一水(永定河)、一軸(長安街西延長線商務軸)、一園(石景山科技園區)為核心的三大特色功能區,包括東部的主題娛樂區、西部的休閒度假區、中部的創意高新區。未來3年內,圍繞首都休閒娛樂中心區(CRD)的定位,將完成石景山遊樂園4D影院等49個重大項目建設。