來源:金色財(cái)經(jīng)
作者:@therealbytes @_yonada,;編譯:Justin @captainz
作為虛擬世界的創(chuàng)造者,我們的目標(biāo)是創(chuàng)建出能讓用戶感到有趣并深度參與的環(huán)境。這就需要我們在設(shè)計(jì)允許復(fù)雜和不預(yù)期行為浮現(xiàn)的數(shù)字物理學(xué),,與確?,F(xiàn)有基礎(chǔ)設(shè)施能夠支撐這些行為之間找到平衡,。為此,,我們需要考慮數(shù)字物理學(xué)的三個(gè)主要維度:時(shí)間,,它的法則形式,,以及這些法則適用的范圍。
我們將虛擬世界中時(shí)間的流逝稱為世界法則對其自身的迭代應(yīng)用,。每個(gè)離散的應(yīng)用就是這個(gè)世界時(shí)間流中的一個(gè)“瞬間”,。設(shè)計(jì)世界內(nèi)的時(shí)間的一種方式是讓它與外部時(shí)間連續(xù)進(jìn)行。在基于區(qū)塊鏈的虛擬世界中,,每個(gè)區(qū)塊對應(yīng)世界內(nèi)過去的一定數(shù)量的瞬間,,無論該區(qū)塊包含的是什么交易。這被稱為同步時(shí)間,,或者“滴答”現(xiàn)象,。這種方法可以使世界對用戶更有趣,因?yàn)樗鼈兛梢詫?shí)時(shí)看到自己行為的結(jié)果,。另外,,它導(dǎo)致世界內(nèi)的時(shí)間更長,世界持續(xù)更新,,從而促進(jìn)有趣行為的出現(xiàn),。
然而,這種方法也有其缺點(diǎn),。更大的時(shí)間范圍通常需要更多的計(jì)算資源,,這可能會(huì)很快超過鏈或服務(wù)器的能力。在普通區(qū)塊鏈上實(shí)施這個(gè)系統(tǒng)也可能很困難,,因?yàn)樗墟溕系淖兓急仨氂赏獠坑脩舭l(fā)起的交易來啟動(dòng),。
當(dāng)你想象一些看似簡單的事情時(shí),這個(gè)困難就變得明顯了:一個(gè)鏈上的游戲有非玩家角色(NPC),。在主網(wǎng)以太坊上,,你可以定義一個(gè)更新功能,設(shè)置游戲地圖上每個(gè)NPC的位置,,并讓一個(gè)外部賬戶定期調(diào)用它來更新他們的位置,。但這可能不可靠,因?yàn)槟悴荒鼙WC外部賬戶在應(yīng)該調(diào)用更新的區(qū)塊中不會(huì)因?yàn)間as fee 被競價(jià)超過,。你的游戲中的時(shí)間結(jié)構(gòu)會(huì)因此發(fā)生漂移(以原始CryptoKitties的giveBirth()功能為例,;隨著鏈上gas fee 的增加,Axiom Zen實(shí)際上不得不增加調(diào)用giveBirth功能的獎(jiǎng)勵(lì),,以確保新的NFT出生交易在用戶繁育Kitty后的256個(gè)區(qū)塊被調(diào)用)。我們將這種使用外部賬戶的方法稱為“手動(dòng)滴答”,。
定制的 rollups 讓我們有更多的靈活性,,在鏈上添加”滴答”功能,無需外部賬戶,,而且同步時(shí)間的推進(jìn)由協(xié)議保證,。我們將這種方法稱為”自動(dòng)滴答”。自動(dòng)滴答可以通過編寫一個(gè)“滴答合約”來實(shí)現(xiàn),,該合約由協(xié)議本身調(diào)用,,而不是由外部賬戶調(diào)用。
舉個(gè)例子,,@therealbytes 開發(fā)了一個(gè)基于OP Stack的概念驗(yàn)證型滴答鏈,,它運(yùn)行了一個(gè)自動(dòng)滴答的康威生命游戲?qū)崿F(xiàn)。Bytes 使用了一個(gè)修改過的系統(tǒng)交易來自動(dòng)調(diào)用滴答式元胞自動(dòng)機(jī)模擬合約,。為了充分測試鏈本身的極限,,他用兩種方式實(shí)現(xiàn)了游戲:一種是作為一個(gè)在鏈上運(yùn)行的Solidity智能合約,另一種是作為鏈本身的預(yù)編譯,。Solidity實(shí)現(xiàn)在達(dá)到每個(gè)區(qū)塊兩次更新的70×70網(wǎng)格后讓CPU達(dá)到極限(1個(gè)區(qū)塊/秒,,或者大約10k個(gè)細(xì)胞/秒),,而自定義預(yù)編譯引擎的鏈在使用大約6%的CPU(大約130k個(gè)細(xì)胞/秒)時(shí),達(dá)到了相同速率的256×256網(wǎng)格,。
在最后一段的最后一句中,,關(guān)鍵詞是“達(dá)到極限”。滴答鏈添加了額外的復(fù)雜性層次:每增加一個(gè)區(qū)塊,,就需要由模擬游戲的交易觸及更多的狀態(tài),。最終,rollup 節(jié)點(diǎn)會(huì)被原始計(jì)算(CPU,,磁盤IO等)所限制,。這里的唯一解決方案是采用更高容量的節(jié)點(diǎn)。
“同步時(shí)間”的替代方案是“異步時(shí)間”,。在這個(gè)方案下,,世界中時(shí)間的流逝并不一定會(huì)在外部時(shí)間推進(jìn)時(shí)前進(jìn)。相反,,時(shí)間通常會(huì)在某些事件(通常是用戶行為)發(fā)生時(shí)向前移動(dòng),。傳統(tǒng)的不涉及計(jì)時(shí)器的棋盤游戲就屬于類似的范疇。在鏈上實(shí)現(xiàn)非同步時(shí)間更容易,,因?yàn)樗褪菂^(qū)塊鏈被設(shè)計(jì)來支持的模型,。然而,它也犧牲了一些可能使世界更有趣的特性(如自動(dòng)移動(dòng)的NPC),。
@notdavidhuang 和 cha0sg0d 的一款概念驗(yàn)證游戲早期版本 WildWood,,就揭示了這種犧牲。在這個(gè)游戲中,,兩個(gè)玩家必須從侵略性NPC的圍攻中保衛(wèi)他們的基地,。在游戲的早期版本中,NPC的移動(dòng)只有在玩家自己移動(dòng)時(shí)才會(huì)被觸發(fā) — 這是一種不太現(xiàn)實(shí)的異步時(shí)間實(shí)現(xiàn),。在添加滴答之后,,NPC移動(dòng)了,但另一個(gè)問題仍然存在,。鏈每秒滴答一次,,這意味著如果玩家每秒移動(dòng)多于一次,游戲必須使用 optimistic rollup 的更新來廣播玩家在地圖上的位置,。然而,,你的隊(duì)友不會(huì)自動(dòng)看到你的客戶端,這意味著在玩家位置更新上會(huì)有延遲,。為了克服這個(gè)問題,,團(tuán)隊(duì)利用了 MUD 的中繼服務(wù),一個(gè)用于向全鏈廣播本地客戶端的點(diǎn)對點(diǎn)網(wǎng)絡(luò)。瞧,,異步時(shí)間到同步時(shí)間的轉(zhuǎn)變就實(shí)現(xiàn)了,。
世界構(gòu)建者還必須決定他們的虛擬世界遵循開放形式的表達(dá)還是封閉形式的表達(dá)。封閉形式的表達(dá)具有固定數(shù)量的操作,。然而,,開放形式(或遞歸)表達(dá)的操作數(shù)量則根據(jù)給定變量的增長。在開放形式的表達(dá)下,,只能通過反復(fù)應(yīng)用世界的法則到已知狀態(tài),,才能計(jì)算出世界的未來狀態(tài)。復(fù)雜,、生動(dòng)的環(huán)境,,比如《矮人要塞》,通常屬于這個(gè)范疇,。另一方面,,封閉形式的表達(dá)允許從過去的狀態(tài)和它們之間流逝的時(shí)間,計(jì)算出任何未來的狀態(tài)(假設(shè)沒有未來的用戶行動(dòng)改變狀態(tài)),,比如《帝國時(shí)代 II》中的資源開采速率,。
開放形式可以使虛擬世界更有趣,因?yàn)橄瘳F(xiàn)實(shí)世界一樣,,它們是不可預(yù)測的,。預(yù)測世界未來狀態(tài)需要越來越多的時(shí)間和計(jì)算資源(在鏈上實(shí)現(xiàn)的康威生命游戲就是一個(gè)很好的例子:你不能計(jì)算出未來的任意狀態(tài),因?yàn)槟阈枰磿r(shí)間運(yùn)行游戲),。此外,,從簡單的微觀交互中可以出現(xiàn)意想不到的宏觀行為。在由封閉形式管理的世界中,,這些出現(xiàn)的行為通常只在外部發(fā)生,,通過用戶的行動(dòng)(他們自己就像開放形式一樣),而不是在世界物理本身中發(fā)生,。
開放和封閉形式之間的權(quán)衡涉及到一個(gè)與時(shí)間相似的平衡。封閉形式可能會(huì)降低世界的潛在趣味性,,但它們也使其更具計(jì)算效率,。封閉形式可以與同步或異步時(shí)間一起使用。在區(qū)塊鏈上實(shí)現(xiàn)時(shí),,他們在時(shí)間同步時(shí)對開放形式有顯著的優(yōu)勢,。因?yàn)槿魏伍L度的時(shí)間的成本是恒定的,所以世界可以被設(shè)計(jì)為只在用戶發(fā)送交易時(shí)更新鏈上狀態(tài),,但它被設(shè)置為在上次更新后的時(shí)間流逝后的狀態(tài),。
考慮一下當(dāng)前鏈上動(dòng)態(tài)的標(biāo)準(zhǔn)方法,一個(gè)被稱為“懶更新”的方法。在懶更新(lazy update)中,,玩家啟動(dòng)行動(dòng)的開始和結(jié)束,,但中間的時(shí)間是模擬的,而不是直接計(jì)算的,。比如,,一個(gè)玩家在第1個(gè)區(qū)塊時(shí)種下一棵蘋果樹,然后在第10個(gè)區(qū)塊時(shí)收獲蘋果,??梢跃帉憫懈逻壿嫞沟猛婕颐總€(gè)時(shí)間單位可以收獲一個(gè)蘋果,,總共9個(gè)蘋果,。對于有封閉形式函數(shù)(如每個(gè)區(qū)塊一個(gè)蘋果)的更新邏輯,這是完全可以的,,但如果農(nóng)業(yè)邏輯基于玩家行動(dòng)之間的輸入而變化,,這種方法就會(huì)失效。如果在第5個(gè)區(qū)塊,,一場暴雨增加了蘋果的生長速度,,而在第7個(gè)區(qū)塊,蝗蟲災(zāi)害幾乎摧毀了作物,,那么在第10個(gè)區(qū)塊時(shí),,玩家能收獲多少蘋果就無法有效計(jì)算,除非真正應(yīng)用所有已經(jīng)發(fā)生的事件(你不會(huì)有足夠的計(jì)算能力去趕上新的狀態(tài)),。盡管如此,,懶更新仍然對于某些生物(如固定生長速度的植物)的廉價(jià)計(jì)算非常有用,但對于一個(gè)動(dòng)態(tài)世界的完整工具箱來說,,這仍然不足,。
在現(xiàn)實(shí)世界中,時(shí)間無處不在,,一次性流逝,,宇宙可能是無限的(雖然有一些相對論的復(fù)雜性)。然而,,在虛擬世界里,,情況并非必然如此。
首先,,虛擬世界可能是明顯有限的,。有趣的可能性通常隨著大小的增加而增加——由二百億個(gè)星系組成的世界發(fā)生的事情比由兩個(gè)原子組成的世界更多——但計(jì)算成本也會(huì)增加。這兩種關(guān)系都與之前提到的兩個(gè)權(quán)衡密切相關(guān):時(shí)間的流逝和物理形態(tài),。
其次,,時(shí)間并不必須在虛擬世界的所有地方流逝。世界可以被劃分為時(shí)間流逝不同的離散區(qū)域,以減少世界的計(jì)算負(fù)擔(dān),。例如,,可以在有用戶活動(dòng)的地區(qū)使用更復(fù)雜和昂貴的物理規(guī)則,而在沒有活動(dòng)的地方使用更簡單的物理規(guī)則,。這種方法的缺點(diǎn)是雙重的:它可能使世界顯得不一致,,缺乏完整性,這限制了世界規(guī)則的設(shè)計(jì)空間,,也給世界建造者帶來了壓力,,要避免讓用戶感到困惑;同時(shí),,它也限制了因果關(guān)系在世界內(nèi)部的傳播,,如果一個(gè)區(qū)域的行為不能在遠(yuǎn)方的區(qū)域產(chǎn)生后果,那么兩者之間的空間就被凍結(jié)在時(shí)間中,。物理規(guī)則應(yīng)用的區(qū)域大小是一個(gè)重要的設(shè)計(jì)考慮因素,,它將影響世界需要的資源以及它能達(dá)到的趣味性水平。
為了創(chuàng)建一個(gè)有趣而吸引人的虛擬世界,,有必要仔細(xì)平衡計(jì)算效率和有趣性。這包括決定使用何種類型的時(shí)間(同步或異步)并評估統(tǒng)治世界的物理法則的形態(tài),。物理法則應(yīng)用的區(qū)域大小是另一個(gè)重要的決策,。通過謹(jǐn)慎地做出這些選擇,世界建造者不僅可以在保持世界的計(jì)算負(fù)擔(dān)管理得到有趣性,,他們還可以為其他開發(fā)人員提供一個(gè)高度肥沃的創(chuàng)新基礎(chǔ),。
免責(zé)聲明:本文來自網(wǎng)絡(luò)收錄或投稿,,觀點(diǎn)僅代表作者本人,,不代表芒果財(cái)經(jīng)贊同其觀點(diǎn)或證實(shí)其描述,版權(quán)歸原作者所有,。轉(zhuǎn)載請注明出處:http://lequren.com/1063607.html
溫馨提示:投資有風(fēng)險(xiǎn),,入市須謹(jǐn)慎。本資訊不作為投資理財(cái)建議,。