穿模這種問題在大一點的3D遊戲中幾乎不可避免,最主要的原因是遊戲中的物理引擎都是"假的"。
物理引擎是對現實世界物理系統的近似計算,既然是近似,那麼只能接近真,永遠不可能變成真。但是計算的越逼真,所消耗的效能就越大。以物理碰撞檢測為例:
碰撞檢測大致可以分為離散碰撞檢測和連續碰撞檢測,假設要檢測一個球是否與一個平面發生碰撞:
當使用離散碰撞檢測時,一旦球在物理計算一幀內的移動距離超過了平面的檢測範圍,則這時候檢測不到碰撞資訊,發生穿模現象。
理論上物理計算單幀的時間越短,檢測的精確度也越高。但是這樣一來消耗效能會大大增加,二來幀率總會有上限。所以使用連續碰撞檢測來處理這個問題:
把小球每幀之間的運動路徑連線起來,然後判斷這條連線與平面是否相交。連續碰撞檢測比離散碰撞檢測更復雜,因此消耗更多效能。
但是就算這樣也並沒有根本上解決問題,實際遊戲內的碰撞檢測更復雜,有的模型面數太多,連續碰撞檢測太過消耗效能,因此物體的碰撞體也只能用一個近似形狀去模擬。
再加上如果是網路遊戲,還要涉及資料同步的問題,物理計算極容易出現誤差。
這會導致很多嚴重影響遊戲體驗的物理引擎BUG(比如絕地求生中的原力摩托),穿模問題已經算是比較“溫和”的BUG了。
這個是建模問題,我在昨天的直播過程中遇到過!敵人三級包,我打了結果沒傷害!後來拿隊友做測試也是!就是建模問題,不候細緻所以判定不到!
穿模這種問題在大一點的3D遊戲中幾乎不可避免,最主要的原因是遊戲中的物理引擎都是"假的"。
物理引擎是對現實世界物理系統的近似計算,既然是近似,那麼只能接近真,永遠不可能變成真。但是計算的越逼真,所消耗的效能就越大。以物理碰撞檢測為例:
碰撞檢測大致可以分為離散碰撞檢測和連續碰撞檢測,假設要檢測一個球是否與一個平面發生碰撞:
當使用離散碰撞檢測時,一旦球在物理計算一幀內的移動距離超過了平面的檢測範圍,則這時候檢測不到碰撞資訊,發生穿模現象。
理論上物理計算單幀的時間越短,檢測的精確度也越高。但是這樣一來消耗效能會大大增加,二來幀率總會有上限。所以使用連續碰撞檢測來處理這個問題:
把小球每幀之間的運動路徑連線起來,然後判斷這條連線與平面是否相交。連續碰撞檢測比離散碰撞檢測更復雜,因此消耗更多效能。
但是就算這樣也並沒有根本上解決問題,實際遊戲內的碰撞檢測更復雜,有的模型面數太多,連續碰撞檢測太過消耗效能,因此物體的碰撞體也只能用一個近似形狀去模擬。
再加上如果是網路遊戲,還要涉及資料同步的問題,物理計算極容易出現誤差。
這會導致很多嚴重影響遊戲體驗的物理引擎BUG(比如絕地求生中的原力摩托),穿模問題已經算是比較“溫和”的BUG了。