国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

深入分析物理引擎后,他寫了一個輕量的 Cocos 3D 碰撞檢測優(yōu)化方案

這篇具有很好參考價值的文章主要介紹了深入分析物理引擎后,他寫了一個輕量的 Cocos 3D 碰撞檢測優(yōu)化方案。希望對大家有所幫助。如果存在錯誤或未考慮完全的地方,請大家不吝賜教,您也可以點擊"舉報違法"按鈕提交疑問。

引言:碰撞檢測是游戲開發(fā)中一個非常重要的技術(shù)點,優(yōu)化碰撞檢測性能,是提升游戲體驗不可或缺的一環(huán)。開發(fā)者「我叫98K」寫了一個輕量碰撞系統(tǒng),用以改善 3D 游戲在不同平臺遇到的碰撞性能問題和包體問題。下載和在線體驗地址見文末。

98K物理-輕量碰撞系統(tǒng)是一個高性能輕量?3D 碰撞管理器,適用于 Cocos Creator 3.4 及以上版本,對?Mesh?模型和基本幾何體提供高效的碰撞系統(tǒng)和射線檢測系統(tǒng),以提升游戲在不同平臺上的 3D 碰撞檢測性能,減少包體大?。ㄓ绕涫?H5 平臺)。

先通過在線體驗,看幾組應(yīng)用效果:

http://www.cocospro.com/98K/

kdtree 做碰撞檢測,3d,cocos2d,unity,vr,游戲引擎

場景1,碰撞測試

kdtree 做碰撞檢測,3d,cocos2d,unity,vr,游戲引擎

場景1,1000射線測試

kdtree 做碰撞檢測,3d,cocos2d,unity,vr,游戲引擎

場景2,碰撞測試

kdtree 做碰撞檢測,3d,cocos2d,unity,vr,游戲引擎

場景2,1000射線測試

本文主要和大家詳細介紹 98K 中最為重要的自定義碰撞系統(tǒng)的功能與使用、及其實現(xiàn)思路與技術(shù)要點,感興趣的小伙伴可以深入了解。

功能特點

98K 的主要功能特點有:

  • 多物體場景管理:Octree,對場景物體進行高效劃分查詢。

  • 模型三角化管理:Kdtree,對物體表面進行高效劃分查詢。

  • 通用 3D 碰撞計算:GJK+EPA,精確計算修正碰撞后的物體。

  • 3D 角色控制器:3D 物體在場景碰撞系統(tǒng)下的自由移動。

  • 高效射線檢測:基于 Octree 和 Kdtree 對射線檢測加速。

我們在 H5 環(huán)境下,對比 98K 和 Bullet,PhysX(由于 Cannon 對 mesh collider 支持不完善,不參與比較)。

kdtree 做碰撞檢測,3d,cocos2d,unity,vr,游戲引擎

雖然和 Bullet、PhysX?相比,98K 的功能還不夠全面,但是在需要使用 3D 碰撞檢測和射線檢測的 MMO、SLG、FPS?等 3D 場景的游戲中,目前 98K 提供的功能已經(jīng)可以滿足需求,并且 98K 更加輕量,使用也更簡單一些,可以替代 Bullet、PhysX。

使用方法

前一段時間孫二喵制作的?3D 跑酷游戲?Demo 就使用了 98K,我們以此為例,看看這一系統(tǒng)在實際游戲項目中的使用方法與效果。

kdtree 做碰撞檢測,3d,cocos2d,unity,vr,游戲引擎

源碼下載:

https://store.cocos.com/app/detail/4084

在線體驗:

http://learncocos.com/jare/?v=1.01

該游戲場景超過100萬面,而且地形較不規(guī)則,使用 Bullet+Mesh Collider 整體開銷會比較高,所以孫二喵使用了 98K,以獲得更好性能。

相對于 Bullet Mesh Collider 初始化滿和設(shè)置麻煩的缺點,98K 的 Mesh Collider 可以說是鍵設(shè)置。

kdtree 做碰撞檢測,3d,cocos2d,unity,vr,游戲引擎

我們可以制作1個小腳本,在編輯器環(huán)境下,給所有的 Mesh 都加上 98K 的碰撞組件。

kdtree 做碰撞檢測,3d,cocos2d,unity,vr,游戲引擎

然后把所有有 Object3D 碰撞組件的物體都加到我們的主場景下面。

kdtree 做碰撞檢測,3d,cocos2d,unity,vr,游戲引擎

進入場景后,再進行構(gòu)建。

kdtree 做碰撞檢測,3d,cocos2d,unity,vr,游戲引擎

后續(xù)有需要增加和刪減碰撞體,也可以通過 World 里的方法進行操作。

kdtree 做碰撞檢測,3d,cocos2d,unity,vr,游戲引擎

同時 98K 也提供了射線檢測功能。我們可以通過射線檢測地面,來處理跳躍等邏輯。

kdtree 做碰撞檢測,3d,cocos2d,unity,vr,游戲引擎

98K 的另外一個特點是使用了簡單的數(shù)學(xué)公式,這部分可以進行定點數(shù)的處理,方便聯(lián)機游戲處理幀同步,目前也已經(jīng)有開發(fā)者進行了二次開發(fā)。

技術(shù)要點

接下來簡單介紹一下 98K 中自定義碰撞系統(tǒng)的技術(shù)實現(xiàn)要點,以及我選擇現(xiàn)在這個優(yōu)化方案的思路與原因。

在造輪子前,得先了解輪子是怎么構(gòu)成,才能更好的去改造。

kdtree 做碰撞檢測,3d,cocos2d,unity,vr,游戲引擎

功能分層結(jié)構(gòu)圖

物理引擎進行碰撞檢測的基本流程包含三個環(huán)節(jié):

  • Board-Phase(粗略篩選碰撞對)

  • Narrow-Phase(精確計算碰撞對)

  • Resolve-Phase(修正碰撞速度位置)

Board-Phase

Board-Phase 的目標(biāo)是快速排除掉不可能發(fā)生碰撞的物體對,以此提高后續(xù)碰撞檢測的效率??臻g劃分是這一階段最重要的部分。在游戲開發(fā)中,我們常用各種空間數(shù)據(jù)結(jié)構(gòu)來加速計算。

多叉樹:四叉樹與八叉樹

kdtree 做碰撞檢測,3d,cocos2d,unity,vr,游戲引擎

kdtree 做碰撞檢測,3d,cocos2d,unity,vr,游戲引擎

四叉樹

四叉樹是很常見的一種 2D 碰撞檢測方法,實現(xiàn)手段也五花八門。不過在具體實現(xiàn)中要注意優(yōu)化細節(jié),控制建樹時間消耗與建樹空間大小,特別是在 JS 語言環(huán)境下。但四叉樹的射線檢測、區(qū)域檢測效率比較高,樹更新很快,會產(chǎn)生物體多次劃分,空間占用大。

kdtree 做碰撞檢測,3d,cocos2d,unity,vr,游戲引擎

八叉樹

八叉樹雖然包圍精確性沒 BVH 高(可用狀態(tài)壓縮改善)、占用空間較大(過度劃分),但是建樹和增刪非常快,很適合用作物體的篩選。目前 98K 使用了八叉樹對模型包圍盒進行空間劃分,簡單高效的建樹比精確計算建樹(比如 BVH 建樹會有大量計算消耗)更加劃算。缺點和四叉樹一樣,射線檢測、區(qū)域檢測較快,樹更新很快, 會產(chǎn)生物體多次劃分,空間占用大。

二叉樹:BVH,BSP,k-d

kdtree 做碰撞檢測,3d,cocos2d,unity,vr,游戲引擎

kdtree 做碰撞檢測,3d,cocos2d,unity,vr,游戲引擎

BVH

四叉樹和八叉樹是以平均空間來劃分物體,劃分算法簡單,而 BVH 是對當(dāng)前物體集合進行空間的劃分,追求左右空間大小相對均衡且無相交。BVH 構(gòu)建的一般是二叉樹,劃分算法復(fù)雜。

主流物理引擎都有采用 BVH,因為其功能支持完備、查找精確性高、性能不俗。但是其在建樹和增刪改時要維護平衡樹,消耗很大。針對這個問題,有一些時序性的空間優(yōu)化方法,通過減少增刪改達到優(yōu)化目的,感興趣的朋友可以參考各大物理引擎中的實現(xiàn)方法。

kdtree 做碰撞檢測,3d,cocos2d,unity,vr,游戲引擎

BSP

BSP(Binary Space Partitioning Tree),二維空間分割樹,非常經(jīng)典,1993年在知名游戲 DOOM 里第一次被應(yīng)用,早期 CS 也是用 BSP 來做地形碰撞。BSP 通常通過計算得到一個合理的任意角度片面或者法線,然后對空間進行劃分。標(biāo)準(zhǔn)的 BSP 雖然高效,但樹構(gòu)建非常消耗時間,通常都是編輯器預(yù)處理,比較適合靜態(tài)模型或者靜態(tài)場景使用。

kdtree 做碰撞檢測,3d,cocos2d,unity,vr,游戲引擎

k-d 樹

k-d 樹是一種特殊的 BSP 樹,它基于動態(tài)計算的三個軸進行劃分。k-d 樹相比 BSP 可能精確性沒那么高,但是建樹時間大大減少,因為對軸劃分算法簡單,所以很適合使用。目前 98K 用 k-d 樹方式來維護模型的三角形數(shù)據(jù),用于碰撞和射線檢測。

其他:SAP

kdtree 做碰撞檢測,3d,cocos2d,unity,vr,游戲引擎

kdtree 做碰撞檢測,3d,cocos2d,unity,vr,游戲引擎

SAP

SAP(Sweep And Prune) 又稱為掃掠法,也是物理引擎的一種常用碰撞檢測方式。SAP 比較輕便,增刪改比較快,物體不會被多次劃分,對靜態(tài)模型是非???。它唯一缺點是性能不太穩(wěn)定,每次只能對單個軸進行掃描,有時會有大量物體投影重疊,導(dǎo)致查詢不穩(wěn)定。而且射線檢測和區(qū)域檢測,需要額外的擴展來優(yōu)化,性能也一般,沒上面各種樹結(jié)構(gòu)的方便和高效。

Narrow-Phase

在這個階段,我們需要對篩選后的這些可能發(fā)生的碰撞進行精確計算,判定他們是否發(fā)生了碰撞,如果發(fā)生碰撞,還需計算出碰撞點、碰撞法線等細節(jié)。

幾何計算

數(shù)學(xué)方法,從分離角度來判斷碰撞,一般用于常見的幾何圖形之間的碰撞計算,速度非???。良好的物理引擎必不可少這些數(shù)學(xué)方法,各大引擎都能找到它們的身影。

GJK + EPA

凸包算法,從重疊角度來探索碰撞。GJK 的原理核心是,當(dāng)兩個物體發(fā)生重疊時,它們必然有一個坐標(biāo)相減為原點。GJK 檢測出碰撞后,再用 EPA 在 GJK 構(gòu)建的數(shù)據(jù)下,進一步計算出穿透的距離碰撞點和碰撞法線。

基本上主流物理引擎都有使用 GJK+EPA,和前面幾何數(shù)學(xué)方法混合使用,可以大幅提升碰撞計算性能。98K 也是同時混合使用以上兩種方法,支持基本幾何模型計算,也能支持三角化 mesh 或者凸包化 mesh 的計算。

Resolve-Phase

在上一個階段,我們已經(jīng)確定了是否發(fā)生碰撞和碰撞的細節(jié),最后階段即是修正他們的位置和速度。這一過程非常耗時,目前 98K 只提供了簡單高效的修正處理,更多重心還是放在解決現(xiàn)有的碰撞性能問題上。

98K 優(yōu)化方案

物理引擎是一套復(fù)雜完整的過程,沒辦法在功能上做分割,所以一定程度上會造成不必要的性能消耗,例如 Resolve 階段消耗就很大,過程中還有大量的必要變量緩存的計算也會帶來一定消耗。而考慮到健壯和可讀性,物理引擎代碼的寫法和緩存的用法也不會過于激進。

在某些項目——比如輕量化的?RPG、MMO、FPS?中,我們很多時候需要的是高效碰撞和修正,而并不需要完全真實的物理模擬效果(如果只需要簡單重力效果或者碰撞效果,通常直接自己實現(xiàn)模擬)。

因此,98K 在算法、寫法、緩存上對物理引擎幾大模塊進行了優(yōu)化,使之更加精簡高效。經(jīng)過一系列的評估,98K 最終采用了以下方案:

  • 優(yōu)化1:八叉樹,篩選物體

  • 優(yōu)化2:kdtree,篩選三角形

  • 優(yōu)化3:幾何體,篩選三角形

  • 優(yōu)化4:GJK?+?EPA,篩選和計算

選用八叉樹和?kdtree?做優(yōu)化,不僅是因為它們性能較好,還因為它們可以為射線檢測加速做支持,所以?98K?也實現(xiàn)了高性能的射線檢測系統(tǒng)。

資源鏈接

  • 點擊文末【閱讀原文】下載源碼

https://store.cocos.com/app/detail/4035

  • 在線試玩(注:該 Demo 性能并不是最優(yōu),最新優(yōu)化工程的運行性能要快1倍以上)

http://www.cocospro.com/98K/

限于篇幅,98K 中定制的 octree、kdtree、GJK/EPA 的實現(xiàn)過程和優(yōu)化細節(jié)就不在本文展開了,可以先參看實際源碼,后續(xù)有機會再詳細展開分析,同時歡迎大家試用、反饋和提供好的建議。

往期精彩

kdtree 做碰撞檢測,3d,cocos2d,unity,vr,游戲引擎

kdtree 做碰撞檢測,3d,cocos2d,unity,vr,游戲引擎

kdtree 做碰撞檢測,3d,cocos2d,unity,vr,游戲引擎文章來源地址http://www.zghlxwxcb.cn/news/detail-772976.html

到了這里,關(guān)于深入分析物理引擎后,他寫了一個輕量的 Cocos 3D 碰撞檢測優(yōu)化方案的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來自互聯(lián)網(wǎng)用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務(wù),不擁有所有權(quán),不承擔(dān)相關(guān)法律責(zé)任。如若轉(zhuǎn)載,請注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實不符,請點擊違法舉報進行投訴反饋,一經(jīng)查實,立即刪除!

領(lǐng)支付寶紅包贊助服務(wù)器費用

相關(guān)文章

  • 教你使用PHP實現(xiàn)一個輕量級HTML模板引擎

    教你使用PHP實現(xiàn)一個輕量級HTML模板引擎

    ??作者簡介,黑夜開發(fā)者,全棧領(lǐng)域新星創(chuàng)作者?,2023年6月csdn上海賽道top4。多年電商行業(yè)從業(yè)經(jīng)驗,對系統(tǒng)架構(gòu),數(shù)據(jù)分析處理等大規(guī)模應(yīng)用場景有豐富經(jīng)驗。 ??本文已收錄于PHP專欄:PHP進階實戰(zhàn)教程。 ??另有專欄PHP入門基礎(chǔ)教程,希望各位大佬多多支持??。 在 W

    2024年02月15日
    瀏覽(101)
  • DOTS Unity.Physics物理引擎碰撞查詢核心分析

    DOTS Unity.Physics物理引擎碰撞查詢核心分析

    ??最近DOTS發(fā)布了正式的版本,同時基于DOTS的理念實現(xiàn)了一套高性能的物理引擎,今天我們給大家分享和介紹一下這個物理引擎的碰撞查詢以及核心相關(guān)概念。 Unity.Physics碰撞查詢概述 ??碰撞查詢(Collison Qurey)是Unity.Physics物理引擎中的一個很重要的功能。很多游戲邏輯都需

    2024年04月25日
    瀏覽(22)
  • DOTS Unity.Physics物理引擎的核心分析與詳解

    DOTS Unity.Physics物理引擎的核心分析與詳解

    最近DOTS發(fā)布了正式的版本,同時基于DOTS的理念實現(xiàn)了一套高性能的物理引擎,今天我們來給大家分享和介紹一下這個物理引擎的使用。 Unity.Physics 的設(shè)計哲學(xué) Unity.Physics是基于DOTS設(shè)計思想的一個高性能C#物理引擎的實現(xiàn), ?包含了物理剛體的迭代計算與碰撞檢測等查詢。Unity.

    2024年03月18日
    瀏覽(29)
  • 解密Elasticsearch:深入探究這款搜索和分析引擎

    解密Elasticsearch:深入探究這款搜索和分析引擎

    作者:京東保險?管順利 最近使用Elasticsearch實現(xiàn)畫像系統(tǒng),實現(xiàn)的dmp的數(shù)據(jù)中臺能力。同時調(diào)研了競品的架構(gòu)選型。以及重溫了redis原理等。特此做一次es的總結(jié)和回顧。網(wǎng)上沒看到有人用Elasticsearch來完成畫像的。我來做第一次嘗試。 背景說完,我們先思考一件事,使用內(nèi)存

    2024年02月03日
    瀏覽(25)
  • cocos游戲引擎--cocos creater2.4.10

    cocos游戲引擎--cocos creater2.4.10

    新建項目 打開其他項目 在 Dashboard 中,打開 新建項目 選項卡,選中 Hello World 項目模板。js ? 資源管理器 Scene 場景編輯器 Node Tree 層級管理器 屬性檢查器(Properties) 控件庫 控制臺(Console) 最左邊選擇預(yù)覽窗口的比例大小,來模擬在不同移動設(shè)備上的顯示效果 Rotate 按鈕決

    2024年01月24日
    瀏覽(138)
  • 從0開始做游戲—-cocos引擎

    最近小游戲做完了,記錄一下。開發(fā)工具cocos creator,純前端。 游戲介紹 小游戲一共只有兩個游戲場景,分別是開始界面和游戲界面。 開始界面 游戲界面 游戲?qū)崿F(xiàn) 游戲背景無限滾動(用兩張背景圖交替往上滾動,實現(xiàn)游戲背景一直在動) 自動生成新的階梯以及小球和階梯

    2024年02月13日
    瀏覽(24)
  • Unity、UE、Cocos游戲開發(fā)引擎的區(qū)別

    Unity、Unreal Engine(UE)和Cocos引擎是三個常用的游戲開發(fā)引擎,它們在功能和特性上有一些區(qū)別。以下是它們之間的主要區(qū)別: 編程語言:Unity使用C#作為主要的編程語言,開發(fā)者可以使用C#腳本進行游戲邏輯編寫。Unreal Engine主要使用C++作為編程語言,但也支持藍圖系統(tǒng),允許

    2024年02月22日
    瀏覽(99)
  • 全新適配鴻蒙生態(tài),Cocos引擎助力3D應(yīng)用開發(fā)

    全新適配鴻蒙生態(tài),Cocos引擎助力3D應(yīng)用開發(fā)

    原文鏈接: 全新適配鴻蒙生態(tài),Cocos引擎助力3D應(yīng)用開發(fā),點擊鏈接查看更多技術(shù)內(nèi)容; 一、適配HarmonyOS背景 HarmonyOS 3.1版本自發(fā)布以來,備受廣大開發(fā)者的好評,同時也吸引了鴻蒙生態(tài)眾多伙伴的青睞。 鴻蒙生態(tài)所強調(diào)的智慧全場景、多端聯(lián)動與跨設(shè)備流轉(zhuǎn)等能力,與Coc

    2024年02月09日
    瀏覽(23)
  • 使用“Cocos引擎”創(chuàng)建的cpp工程如何在VS中調(diào)試Cocos2d-x源碼

    使用“Cocos引擎”創(chuàng)建的cpp工程如何在VS中調(diào)試Cocos2d-x源碼

    前段時間Cocos2d-x更新了一個Cocos引擎,這是一個集合源碼,IDE,Studio這一家老小的整合包,我們可以使用這個Cocos引擎來創(chuàng)建我們的項目。 在Cocos2d-x被整合到Cocos引擎之前,我們可以不那么方便地在我們創(chuàng)建的工程里調(diào)試Cocos2d-x的代碼,當(dāng)我們使用了整合后的Cocos引擎,調(diào)試

    2024年02月12日
    瀏覽(23)
  • cocos游戲引擎制作的滾動框地圖防止誤點操作的簡單方法

    cocos游戲引擎制作的滾動框地圖防止誤點操作的簡單方法

    本篇文章主要講解,使用cocos creator 來解決在我們?nèi)粘L動框開發(fā)中,滾動和觸摸存在沖突的情況,導(dǎo)致的誤觸行為的解決辦法。 日期:2023年11月25日 說明:在我們滾動滾動框時,會出現(xiàn)誤點的情況,這時我們用代碼解決需要進行上鎖,但實際上cocos引擎給出了很簡單的解決

    2024年02月03日
    瀏覽(19)

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包