《沙石鎮時光》真的在優化了,沒有摸魚……


3樓貓 發佈時間:2023-07-15 06:09:14 作者:沙石鎮時光 Language

                                                                                                                                        

各位工坊主大家好,自2022年5月《沙石鎮時光》以搶先體驗形式發售一年以來,我們收到了很多有關優化問題的反饋,包括加載時間長、城鎮內掉幀等情況。今天我們的主題,就是給大家說明一下,為什麼《沙石鎮時光》會出現這些問題,以及針對這些問題,我們做了一些什麼工作——在看完後,您或許會明白,這裡並不存在所謂的”屎山代碼“,更多的是設計方面的權衡。如果大家在看後還有其他疑問,也歡迎大家在評論區和我們討論。

1.  《沙石鎮時光》優化問題的成因及難點

在2022年5月26日《沙石鎮時光》以搶先體驗版發售之初,我們收到了較多有關優化問題的反饋:其一是關於遊戲的加載時間,其二是有關城鎮場景中的幀率不穩定情況。

讓我們先從第一點說起。

由於每一次從主菜單進入遊戲時(或從存檔載入遊戲),遊戲的場景美術資源、代碼等都需要進行加載,才能保證大家能正常玩遊戲。而需要加載的資源越多,遊戲的加載時間也就越長。舉個例子說明,與《波西亞時光》相比,僅建築方面所使用的資源,《沙石鎮時光》就達到了波西亞五倍之多。所以,一開始大家就會明顯地感覺到進入遊戲的加載時間變長了。

同樣的,大家的每一次進出門,每一次進出副本,程序後臺都需要進行一次室外場景的卸載和室內場景(副本場景)的加載。由此一來,大家在遊戲發售之初體驗到的進出門、進出副本時長長的加載時間就由此產生了。

《沙石鎮時光》真的在優化了,沒有摸魚……-第0張

                                                                                                                                        

上圖所示的是《沙石鎮時光》初始場景中的材質數量和《波西亞時光》的材質數量的詳細對比

                                                                                                                                        

時光系列一直以來的遊戲設計理念是,雖然是單機遊戲,但是我們希望玩家在遊戲中不要感受到孤獨感,希望大家覺得遊戲世界是一個鮮活的世界,希望遊戲中的NPC能帶給大家更多“活”的感受,這樣,在結束遊戲之後,大家才能回憶起遊戲中所渡過的這一段美好的“時光”。因此,遊戲內的NPC,都會有他們的日常活動,你會看到他們會和現實中的人物一樣上班下班,在驛站吃飯吹牛、日常互動。這意味著,即便當前狀態玩家沒看到這些NPC,系統也需要進行實時的計算,計算他們當前的位置,計算他們當前的行進路線,計算他們當前正在乾的事情。因此,NPC AI的加載也需要花費很多時間。

舉個例子來說,沙石鎮中,單個NPC AI的行為樹節點,中位數就達到了約800個。大幾十個NPC AI的加載,必然導致了時間的花銷。當然,為了減少一開始的的加載時長,我們採用了一開始只加載行為軌跡,而不加載模型的方式。也就是說,進入遊戲後,NPC在後臺一直在活動,只有當NPC進入工坊主視野範圍時,才在當前幀對NPC的模型進行加載。這可以有效降低一開始的加載時間,但帶來的問題是,這一幀突然的加載,會帶來幀數的突然降低,卡頓的情況。

當然,幀數的不穩定,還和很多東西有關係。比如夜間的場景表現,由於新增了數十個光源,每一個光源會帶來無數的新的陰影,所以夜間也會尤其卡。而且整體場景中,由於我們一開始沒有規劃好LOD,所以也帶來了幀數的降低和不穩定。(所謂LOD,就是針對遠近不同的物件模型進行分別處理,讓遠處的物體顯示模型面數低的模型,從而節省性能的開支。)

《沙石鎮時光》真的在優化了,沒有摸魚……-第1張

                                                                                                                                        

圖為白天與夜間的陰影數量對比,可以看到沙石鎮夜晚的陰影數量增加了非常多


2、我們的解決方案

既然已經確定了優化問題的成因,那麼接下來就是想辦法解決它們。

加載優化

針對加載時間的問題,我們採用的是,讓遊戲內的主場景資源一直緩存在電腦內存中,而不是像之前一樣每進出一次門就進行卸載&加載。這樣處理之後,雖然啟動遊戲(載入存檔)還是需要較長時間進行加載,而且遊戲的內存佔用峰值會有所增長,但是至少每次進出門所需的加載時間大幅減少了。我們於去年9月2日的版本中採用了這個方案,在此次更新之後,至少大多數工坊主不需要每次進出門都刷手機解悶了。為什麼說是大多數呢,因為部分玩家的電腦配置中,內存容量不大(比如只有8G),這就導致有的進出門的時候不得不卸載掉某些資源,因此導致了這部分內存容量小的玩家進出門加載依然體驗不好。所以,我們推薦使用16G內存進行遊戲。

不過這個方法也不是萬能的。目前進出挖掘副本和戰鬥探索副本,依然會感受到不短的加載時間。因為副本資源本身資源就比較多,拿北部遺蹟舉例,其模型數量,和主場景的模型數量相當。這樣的情況下,再大的內存也扛不住。再比如挖掘副本,由於我們採用的是Voxel,這也會導致數據量非常大,因此需要在進入的時候在內存中卸載掉一部分主場景資源,以保證副本的穩定流暢。

(Tips:關於Voxel,大家可以想象成,地圖場景中,有無數個可以被拿掉的方塊。玩家每挖一下,也就意味著拿掉一個方塊。那麼這裡,本來標記為1,系統就需要把它標記為0並存儲下來。想想一下,我們最多的挖掘副本有11層,每一層有數千個Voxel……)

另外,對於NPC AI行為樹的加載,目前我們也採用了和之前不一樣的做法。之前的做法是,所有的NPC AI的行為樹是一整棵樹。而目前我們把每一個NPC AI的行為樹按照使用環境分為了不同的行為樹,比如在主場景中,房間內,副本內,任務劇情內……這樣能讓單一行為樹變得簡單一些,也能減少加載時間。

《沙石鎮時光》真的在優化了,沒有摸魚……-第2張

                                                                                                                                        

阿爾維奧的行為樹示意圖【並非最終版本,還會做優化】

                                                                                                                                        

掉幀優化

對於NPC模型加載導致的頻繁掉幀,我們嘗試優化加載的方式。之前採用的是在一幀之內全部加載完成,而我們現在嘗試將NPC分為多個部件,在3-4幀內分步進行加載。由於這個步驟是在後臺完成的,大家看到的NPC不會有什麼不同,但是在遊戲體驗上來說,它可以有效地減少大家遭遇的掉幀情況。下圖是分佈加載的示範。

《沙石鎮時光》真的在優化了,沒有摸魚……-第3張

NPC加載示意圖,實際上這個過程是在後臺完成的

除此之外,我們也在嘗試對LOD進行了更加細緻的規劃——前文中我們已經提到,《沙石鎮時光》的場景資源非常豐富,沙石鎮上有很多漂亮的建築,它們都有很多的頂點數和麵數,工坊主在離建築很近時,它們看起來非常好看;而當大家走遠的時候,建築還在視線內,雖然看起來不是那麼清晰了,但此時建築的模型的頂點和麵數都不變,性能開銷也還是那麼多。這種時候,LOD就顯得非常重要了。對於已經處於視線之外或者較遠距離的物體,使用性能開銷較低的模型,減少面數,可以降低電腦運行時候的負擔。目前這個工作還在進一步推進中,爭取在正式版的時候有一個比較理想的狀態。

3、新的問題以及我們的解決方案

可能有不少工坊主都有疑問:在去年9月的版本優化後,確實感覺遊戲在加載時間和幀數方面有了不小的提升,但是在幾次遊戲更新之後,為什麼感覺又越來越卡了?

這還得從這幾次更新給小鎮帶來的新變化說起:首先,為了呈現更加美麗的沙石鎮以及隨劇情進展而誕生的小鎮新氣象,我們給沙石鎮增加了更多小細節,例如阿蜜拉陶器店附近的小陶罐、升級的卡託莉遊樂廳、研究站頂部的望遠鏡等等。這些小裝飾單個算下來可能都沒有太多的佔用,但是相加之下,依然會帶來可觀的性能開銷。

《沙石鎮時光》真的在優化了,沒有摸魚……-第4張

《沙石鎮時光》真的在優化了,沒有摸魚……-第5張

《沙石鎮時光》真的在優化了,沒有摸魚……-第6張

《沙石鎮時光》真的在優化了,沒有摸魚……-第7張

以上是更新前後的沙石鎮場景細節對比,你能看出有哪些不同嗎

另外,隨著劇情的推進,沙石鎮開始下雨了。雨水的粒子效果以及物理碰撞(如果沒有物理碰撞,那麼雨就能下進屋子裡了)也給優化工作造成了不小的挑戰。目前我們採用的方式是,嘗試降低遠處雨水的粒子效果,進而減少一定的性能開銷。

在沙石鎮的設計中,我們希望大家能夠一眼看到儘可能多的模型,比如站在城鎮高處,你可以看到很遠的地方且能看到細節,而且很多地方都是可以去的(其它的遊戲設計中,可能會使用一個簡化的模型將大多數場景進行遮擋),這也導致沙石鎮的城鎮場景性能開銷不可避免的比較多。正如大家所見,隨著版本的更迭,沙石鎮變得越來越熱鬧,也越來越美了,但與此同時,這也意味著更多的性能開銷。而如何在保證遊戲體驗的同時,把性能開銷降低到可接受的水平,就是我們優化工作的重點。


《沙石鎮時光》真的在優化了,沒有摸魚……-第8張


我們在懸崖附近也增加了很多建築細節,讓曠野中的風景更加壯麗,但也帶來了更多性能開銷

舉例來說,我們正在嘗試減少會移動的碰撞體的數量,由此來減少物理效果造成的性能開銷——具體而言,此前工坊機器上的軸承會隨著齒輪的旋轉而進行運動、產生碰撞,而現在我們將這類不必要的碰撞關掉了;一些原本由程序控制的場景物體運動,我們使用了性能開銷較低的Tweener動畫來呈現。如此一來,雖然看起來並沒有什麼不同,但對於性能開銷的的確確是降低了,這一點對於配置較低的機器來說影響會尤為明顯。

不得不提的是,在過去每一個《沙石鎮時光》的角色身上會有多個功能不同的碰撞體,分別負責攻擊判定、受擊判定、檢測和激活周圍物體的交互,現在我們將這些碰撞體也合併成了一個,進一步減少了性能開銷。

以上只是我們在做的優化工作中的冰山一角,一個遊戲的優化,會牽涉到很多很多方面的工作,我們正在努力解決這些問題,已讓大家能體驗到一個比較完善,優化比較好的正式版。


《沙石鎮時光》真的在優化了,沒有摸魚……-第9張

以上是當前優化工作表中的部分工作內容


4、《沙石鎮時光》正式版的優化目標

在本文的最後,我們想要介紹一下《沙石鎮時光》正式版的優化目標。我們希望能夠通過進一步的遊戲優化,讓中高配置的工坊主們能夠以穩定的50-60幀運行遊戲;而對於較低配置的電腦,我們也力爭讓遊戲穩定在45fps左右且極少卡頓的情況下運行。

《沙石鎮時光》真的在優化了,沒有摸魚……-第10張

在《沙石鎮時光》發售的一年當中,我們推出了”洛根再襲“、”小康生活“、”老熟人兒“以及最近的”利刃出鞘“等多次更新,講述了規劃中第二章節的故事,在這期間我們也從未停止過遊戲的優化工作,力圖為大家帶來更好的遊戲體驗。但由於設計和規劃方面的不成熟,可能依然會有不少工坊主在遊玩過程中,感受到了程度不同的優化問題。而這些問題,就是我們計劃在正式版上線時(包括之後)一步步解決的。這其中並不存在所謂的”屎山代碼“,而是遊戲設計的權衡以及技術的迭代。


《沙石鎮時光》將於9月26日在Steam,WeGame,EpicGameStore,Bilibili,Nintendo Switch,Sony PlayStation5 和 Xbox one/Series S/X上,同步發售《沙石鎮時光》正式版。在正式版中,單人模式主線故事會完結,包括可攻略NPC的劇情,屆時沙石鎮的故事將迎來大結局。購買過《沙石鎮時光》搶先體驗版的玩家可以於當天通過免費更新的方式獲取到所有內容。

關於Sony PlayStation 4平臺,目前我們遇到了一些引擎方面的技術問題,PS4版本可能會比其他平臺稍晚一段時間推出,我們會在後續的公告中告知PS4平臺的上線時間等消息。

很多玩家所關注的多人在線合作模式,我們計劃在正式版上線前就開啟不刪檔測試,但暫時只有PC版用戶可以免費更新,主機平臺的多人在線合作模式將會視移植情況,在正式版發佈後的3個月左右再推出。如果您想了解更多有關《沙石鎮時光》的信息,您可以關注我們的官方社交媒體,第一時間獲取最新消息。


© 2022 3樓貓 下載APP 站點地圖 廣告合作:asmrly666@gmail.com