今天刷到Erin Catto曬出Box3D的GitHub倉(cāng)庫(kù),我整個(gè)人愣了一下。
你沒(méi)看錯(cuò),就是那個(gè)給無(wú)數(shù)2D游戲當(dāng)物理引擎的Box2D的作者,現(xiàn)在掏出了一個(gè)3D版本。按照他的說(shuō)法,Box3D目前還只是alpha階段,測(cè)試不夠、文檔也還沒(méi)補(bǔ)全,但已經(jīng)能在s&box平臺(tái)里跑起來(lái)了——Facepunch Studios最近推出的那個(gè)游戲平臺(tái),用的就是這套東西。
![]()
說(shuō)真的,這事的起因其實(shí)挺有意思。Erin Catto自己正在做一個(gè)叫《The Legend of California》的項(xiàng)目,大型開(kāi)放世界、服務(wù)器端有權(quán)威性判定的那種,結(jié)果在虛幻引擎原生物理系統(tǒng)上踩了不少坑。他也看過(guò)Jolt之類的替代方案,但最后還是決定自己寫一套。原因很直白:只有自己造的輪子,才能精確匹配自家項(xiàng)目在性能和功能上的那些奇怪需求。
那問(wèn)題就來(lái)了:市面上已經(jīng)有Jolt、有Rapier,Box3D這時(shí)候冒出來(lái),到底圖啥?咱們不妨把正反兩方的道理都擺一擺。
正方:熟悉Box2D的人,上手Box3D幾乎沒(méi)有心智負(fù)擔(dān)。
如果你之前用過(guò)Box2D,打開(kāi)Box3D的第一反應(yīng)大概率是"這設(shè)計(jì)語(yǔ)言我熟"。基礎(chǔ)架構(gòu)上延續(xù)了Box2D的思路,然后補(bǔ)了3D游戲必須的能力——三角形網(wǎng)格碰撞、高度場(chǎng)碰撞、烘焙后的復(fù)合碰撞體,這些是原原本本寫進(jìn)了倉(cāng)庫(kù)里的特性。而且目前用它的人不是只有Catto自己。《The Legend of California》在用,s&box在用,Bobby Anguelov做的開(kāi)源引擎Esoterica也在用,Glenn Fiedler那個(gè)號(hào)稱千人同服太空多人項(xiàng)目同樣在用。等于說(shuō)這引擎已經(jīng)有了四個(gè)完全不同類型的項(xiàng)目當(dāng)實(shí)戰(zhàn)場(chǎng)地,這比很多剛開(kāi)源的物理引擎起點(diǎn)要高。
更重要的是,Catto本人對(duì)于"競(jìng)爭(zhēng)"這件事的態(tài)度極其清醒。他公開(kāi)說(shuō)過(guò),開(kāi)源對(duì)他來(lái)講不是生意,他沒(méi)打算跟Jolt或Rapier搞什么PK,建議開(kāi)發(fā)者直接看代碼、跑跑看,合適就用,不合適就換。這種"我就放著,你覺(jué)得好用就拿去"的姿態(tài),在動(dòng)不動(dòng)就搞生態(tài)圈地、搞商業(yè)授權(quán)的引擎圈子里,反而顯得少見(jiàn)。
反方:alpha版本四個(gè)字,足夠勸退一批人。
文檔不全這件事,對(duì)于物理引擎這種底層組件來(lái)說(shuō),等于是給接入開(kāi)發(fā)者上了一道隱形成本。沒(méi)文檔意味著你很可能得自己翻源碼去理解碰撞檢測(cè)的邊界條件、剛體約束的行為、或者某些joint在極限情況下的表現(xiàn)。如果是小團(tuán)隊(duì)、或者項(xiàng)目排期本身就緊,這個(gè)時(shí)間成本不一定花得起。
另外,測(cè)試不足也是一個(gè)沒(méi)法繞過(guò)去的點(diǎn)。即便已經(jīng)有四個(gè)項(xiàng)目在跑,Catto自己的原話依然是"需要更多測(cè)試"。物理引擎這東西和上層邏輯不同,一個(gè)邊界條件下精度抖了、穿透判定出問(wèn)題了,帶來(lái)的后果可能不是幀率掉一截那么簡(jiǎn)單,而是整個(gè)游戲機(jī)制的崩塌。在alpha階段直接上生產(chǎn)環(huán)境,風(fēng)險(xiǎn)不小。
還有一個(gè)容易被忽略的問(wèn)題:生態(tài)。Jolt在Godot引擎里已經(jīng)混得挺熟了,Rapier在Rust圈子里也有一席之地,兩者的社區(qū)、工具鏈、已有踩坑記錄都比現(xiàn)在的Box3D厚得多。對(duì)于需要長(zhǎng)期維護(hù)的項(xiàng)目來(lái)說(shuō),選一個(gè)社區(qū)活躍、問(wèn)題有人回的引擎,是合理考量。
那這一波到底怎么看?
我個(gè)人覺(jué)得,Box3D這事的核心看點(diǎn),不是"它強(qiáng)不強(qiáng)",而是"它為什么被造出來(lái)"。Catto的路徑非常清晰:自己項(xiàng)目遇到真實(shí)痛點(diǎn)——現(xiàn)有的東西不夠順手——那就自己寫一個(gè)——寫完開(kāi)源,誰(shuí)愛(ài)用誰(shuí)用。這個(gè)過(guò)程里沒(méi)有商業(yè)目標(biāo)、沒(méi)有融資故事、甚至沒(méi)有"我們要做一個(gè)比XX更好的引擎"的敘事。它就是開(kāi)發(fā)者工具層面的"自用開(kāi)源",這種出身注定了它的氣質(zhì)會(huì)跟商業(yè)驅(qū)動(dòng)或者社區(qū)驅(qū)動(dòng)的項(xiàng)目不一樣。
但同時(shí)也得承認(rèn),alpha階段的保守定位,讓這件事在開(kāi)發(fā)者群體里大概率只會(huì)引起兩種反應(yīng):一種是Box2D老用戶,出于對(duì)Catto的技術(shù)信任和設(shè)計(jì)審美的熟悉,愿意上去看一眼、甚至在某些小項(xiàng)目里試水;另一種是正處在物理引擎選型期的開(kāi)發(fā)者,把它列入對(duì)比清單,一邊評(píng)估技術(shù)指標(biāo),一邊等社區(qū)反饋和文檔補(bǔ)全。至于那些已經(jīng)在現(xiàn)有引擎上跑得順風(fēng)順?biāo)膱F(tuán)隊(duì),短期內(nèi)遷移的可能性極低。
對(duì)于中國(guó)開(kāi)發(fā)者來(lái)說(shuō),還有一個(gè)很實(shí)際的維度:這玩意將來(lái)對(duì)國(guó)產(chǎn)引擎的底層替換是否友好?它現(xiàn)在的狀態(tài)肯定還談不上"拿來(lái)即用",但考慮到是MIT協(xié)議開(kāi)源、Catto的開(kāi)源態(tài)度又明確不搞商業(yè)化,如果后續(xù)文檔和穩(wěn)定性跟上,在國(guó)內(nèi)一些自研引擎的物理層里出現(xiàn)Box3D的影子,不是沒(méi)可能。
當(dāng)然,這些都是后話了。現(xiàn)階段官方標(biāo)的還是alpha,文檔和測(cè)試都是明牌短板。如果你現(xiàn)在就想拿它去跑正經(jīng)的商業(yè)項(xiàng)目,那勸你先冷靜一下;但如果只是圖個(gè)新鮮、或者想看看2D物理引擎作者怎么理解3D物理問(wèn)題,去GitHub上逛逛代碼庫(kù),確實(shí)能翻到一些有意思的設(shè)計(jì)選擇。
特別聲明:以上內(nèi)容(如有圖片或視頻亦包括在內(nèi))為自媒體平臺(tái)“網(wǎng)易號(hào)”用戶上傳并發(fā)布,本平臺(tái)僅提供信息存儲(chǔ)服務(wù)。
Notice: The content above (including the pictures and videos if any) is uploaded and posted by a user of NetEase Hao, which is a social media platform and only provides information storage services.