1樓:皮皮關
穿模這種問題在大一點的3D遊戲中幾乎不可避免,最主要的原因是遊戲中的物理引擎都是"假的"。
物理引擎是對現實世界物理系統的近似計算,既然是近似,那麼只能接近真,永遠不可能變成真。但是計算的越逼真,所消耗的效能就越大。以物理碰撞檢測為例:
碰撞檢測大致可以分為離散碰撞檢測和連續碰撞檢測,假設要檢測乙個球是否與乙個平面發生碰撞:
當使用離散碰撞檢測時,一旦球在物理計算一幀內的移動距離超過了平面的檢測範圍,則這時候檢測不到碰撞資訊,發生穿模現象。
理論上物理計算單幀的時間越短,檢測的精確度也越高。但是這樣一來消耗效能會大大增加,二來幀率總會有上限。所以使用連續碰撞檢測來處理這個問題:
把小球每幀之間的運動路徑連線起來,然後判斷這條連線與平面是否相交。連續碰撞檢測比離散碰撞檢測更複雜,因此消耗更多效能。
但是就算這樣也並沒有根本上解決問題,實際遊戲內的碰撞檢測更複雜,有的模型面數太多,連續碰撞檢測太過消耗效能,因此物體的碰撞體也只能用乙個近似形狀去模擬。
再加上如果是網路遊戲,還要涉及資料同步的問題,物理計算極容易出現誤差。
這會導致很多嚴重影響遊戲體驗的物理引擎BUG(比如絕地求生中的原力摩托),穿模問題已經算是比較「溫和」的BUG了。
2樓:
瀉藥。但是這個問題一年前大家就答得很好了呀。是為了給我送分嗎? ( 'ω' )
既然大家都答全了,我就換個角度吧,也皮一下,談一下「設計安全」和「本質安全」
可能是在十多年前,日本發生了一起事故。一名兒童被賓館還是商場的旋轉門給夾死了。
出了事故的旋轉門上裝有感測器和保護裝置,設計上是考慮了這種意外情況的。然而,那天這些裝置都失靈了。
其實除了這些保護裝置,這個轉門的質量也是經過了計算與設計,保證了即使裝置失靈,其質量所產生的慣性也不足以夾死人。
那麼事故為什麼發生了呢?
設計師百思不得其解,到實地去考察,結果發現是賓館為了美觀,在門上加了很多裝飾材料,導致門的質量大大增加了。
門的質量是「本質安全」,而安全裝置是「設計安全」。這個事故,根本上是因為「本質安全」被破壞導致的。而「設計安全」是無法完全避免事故的產生的。
跑題跑得好遠。。。
遊戲裡為什麼穿模?因為遊戲裡對於穿模這件事情是沒有「本質安全」的。穿模是必然的,不穿是相對的,是被設計出來的「安全」。
遊戲裡的模型,都是沒有物理實體的,而只是一種數學描述。它沒有體積,沒有物理化學反應,沒有任何現實世界當中物體的「本質」。你所看到的,只是乙個符號,乙個概念而已。
所有的碰撞、破壞、移動、改變等等,都是被設計出來的。
能被設計的總是有限的,而未被設計的總是無窮的。當玩家的操作超出設計的範圍之後,就會出現各種bug,包括穿模。然而,這些bug其實才是它們的本質,而正常遊戲所展現的,那些都是設計。
不要說遊戲,就是現實世界,謊言也是相對容易被揭穿的。因為謊言是被設計出來的,沒有「本質安全」的東西。
3樓:Jerish
這裡補充另一種穿模,與速度快慢無關,單純的因為模型根本沒有物理碰撞,而且更為常見~
這種穿模的根本原因在於,遊戲中的"視覺"與"觸覺"是完全分開的,二者分別交給渲染引擎與物理引擎處理。
角色本身一般有乙個簡單的碰撞體,如膠囊體、球體,同時還有乙個Mesh模型。一般我們用膠囊體作為碰撞檢測的核心(因為簡單的幾何體碰撞檢測速度快),這時候只要把Mesh包含在膠囊體裡面就可以保證不會穿模了。
但是如果我把Mesh移到膠囊體外面,就可能出現下面的情況
對於Mesh可以被包裹住的角色,我們只要採用圖一的方式就可以了。但是對於大型而且複雜的模型,比如乙隻噴火龍,乙個膠囊體或者球體是不能覆蓋住全部模型的(如果都覆蓋了,那球體非常大,你就別想靠近這個龍了),所以你就會見到乙個龍頭穿到其他模型裡面去了。
這樣的穿模是非常常見的。
4樓:vimer ding
請參考這個答案,應該是類似的問題
5樓:勝勳
遊戲裡的數學計算都有一定的週期,一般是 0.0167秒(1秒 / 60幀 = 0.0167秒)
假設,角色的移動速度達到100公尺每秒
那麼,一次計算所移動距離為 100 x 0.0167 = 1.67公尺假設一堵牆有1公尺厚,1.67公尺 > 1公尺
這個角色可能沒有和牆壁發生任何碰撞,直接瞬移過去了只要角色在幀間隔時間裡的移動距離大於牆的一半厚度,就會穿牆
6樓:糖葫蘆俠
初學做遊戲的才發現遊戲的計算量有多大,而且大部分都是只能單執行緒的計算。很多東西只能用近似演算法就導致了各種奇奇怪怪的bug,如果每個步驟都用最精準的演算法那就算最nb的超級計算機也得報廢。 所以一般只要不是影響遊戲流程的也就隨他穿吧。
遊戲為什麼會出bug?
萊山小鮮肉 遊戲更像乙個數學題,尤其是競技類遊戲,比寫應用更麻煩,有時候必須利用工具模擬所有的資料來保證公平性,不會因為某件裝備的不合理使用而導致公平性喪失。當然bug不屬於這個範疇,一般是是不合理操作導致的。 木木老爹管木木 計算機只有0和1 但由於某些外界因素。比如CPU老化了,使有時候應該寫1...
為什麼遊戲的 expansion pack 會被翻譯成「資料片」?
資料片 英文為expansion pack,expansion set或supplement,正確的翻譯解釋是 擴充套件包 擴充版 或者 補充內容 跟 資料 兩字完全搭不上邊。所以說,這個詞本身是乙個誤譯。正是由於當初的這個錯誤,讓很多第一次聽到這個詞的人壓根不明白是什麼意思,有些人乍一聽甚至會以為...
為什麼遊戲人物要有等級?
馬納com 熟練度,等級,就是乙個直觀的資料體現,人為什麼要有年齡?你看見3歲和30歲差距你自己大腦裡想一下,很多東西不言而喻,乙個資料體現出一切,遊戲就是用等級這種最直觀的方式體現出這個人在本遊戲世界中乙個基本概念,別跟我談裝備,那又是另一回事,滿級的人裝備不一,就跟你在現實世界裡,同樣年紀財富不...