《Cookie Cutter》中2000多張精靈表與10000個2D光源的管理之道

一個小團隊如何在多個平臺上以優秀的效果展示手繪動畫?Subcult Joint 工作室給出了答案。他們用六年時間開發出了游戲《Cookie Cutter》。游戲中使用了數千個使用傳統動畫技術制作的高分辨率資產,而且這些資產都在 Unity 中進行了優化。由于工作室需要在清晰的視覺效果和流暢的游戲玩法之間找到平衡,因此他們廣泛使用了 2D 光照來增強圖形的深度并凸顯以探索為核心的游戲設計。

繼續閱讀,了解他們是如何實現這一愿景的;以及項目后期的意外變化如何讓他們解鎖了更快的資產管理能力,并將光照設置提升到了一個新的水平。

身兼藝術家、動畫師、Unity Learn 講師的 Subcult Joint 創始人 Stefano Guglielmana,從 2018 年就開始開發游戲《Cookie Cutter》。他的靈感來自之前一個 Unity 項目中被拒絕的角色:Cherry,一個說話強硬的機器人。他說:“我愛上了她的設計,所以我開始為她制作動畫。”Stefano 對《Cookie Cutter》混合了清版動作游戲和類銀河戰士惡魔城(Metroidvania)的游戲玩法有著清晰的構想,但需要開發人員的支持來實現這一目標。在獲得資金后,他聘請了程序員 Francesco Bizzini 和一批藝術家和設計師來合作開發這個項目。

他們取得了這些成果:

  • 發售一個月就售出 6 萬份,收入 120 萬美元

  • 輕松管理 2000 多張精靈圖表和 50 多個精靈圖集

  • 使用超過 10000 個 2D 光源點亮游戲

  • 在項目中期成功升級到 Unity 2022 LTS

內容的呈現方式

《Cookie Cutter》的手繪視覺效果是一個主要賣點。Stefano 知道它們的制作會很復雜,但額外的努力肯定是值得的。他說:“視覺享受是讓我們愛上電子游戲的原因。在 Subcult Joint,我們十分欽佩吉卜力工作室和迪士尼的大師們。雖然我們還沒有達到他們的水平,但在《Cookie Cutter》中,我們想要挑戰自己的動畫技能,努力制作出一款非常酷的游戲。”

對于一個小型團隊來說,這個項目極具挑戰性。大部分藝術資產(超過 1000 個背景、精靈、動畫和粒子效果)在視覺上非常復雜,并且都是使用傳統動畫技術精心制作的。在《Cookie Cutter》中,無論是玩家角色(Cherry)還是 NPC(27 種標準敵人類型和五個巨型 Boss),每個角色都有 20 到 40 個動畫。每個單獨的動畫可能需要 8 到 48 小時才能完成。不同的藝術家會使用不同的 DCC(數字內容創建工具),但 Stefano 大多數資產都是用 Adobe Photoshop 制作的。

當 Stefano 完成一幅插畫后,他使用 PSD Importer 將其轉換為 8K 紋理,然后在 Unity 編輯器中進行優化,以防止顯存溢出問題。通過合理地使用紋理導入設置,他成功減少了每個平臺的紋理大小,并且遵循二的冪次方尺寸規則等最佳實踐進一步優化了紋理。

*在編輯器中查看 Cherry 的各種動畫狀態。Subcult Joint 花了很多時間處理動畫過渡,以確保流暢的游戲體驗。

Stefano 表示:“在完成 Photoshop 中的工作后,我通過將每個動畫幀逐一排列到一個新圖像上,手動創建了精靈表(Sprite sheets),每個圖表的尺寸始終是 512 x 512 的倍數,遵循 Unity 中的二的冪次方尺寸規則。在此基礎上,Unity 的 Sprite Sheet Editor 讓我可以輕松地切割精靈表,或者通過移動支點(pivot)或每幀的像素來進行其他調整。”這些工作流程確保了《Cookie Cutter》的視覺效果在多個平臺上得到了優化,并且減少了性能問題。

在項目結束時,Subcult Joint 工作室將 2000 多張精靈表打包成 50 多個精靈圖集(Sprite Atlases),并按角色進行分類。“精靈圖集讓將游戲導出到不同的目標主機變得非常簡單,同時保持了穩定的幀率。我們的目標基本上是確保 60 幀每秒(fps),以保持游戲玩法流暢、整體性能順滑。這極大地優化了內存使用,并且使加載時間變得更快。”Stefano 說道。

自定義游戲玩法

Stefano 希望避免其他注重動畫的游戲常犯的錯誤。他解釋道:“有很多動畫的游戲可能會顯得笨重。有時候,動畫師想展示自己的技藝,但最終會影響游戲的流暢性。”他補充道:“在《Cookie Cutter》中,我們同樣注重游戲玩法的流暢性,因此,當你手持控制器時,游戲的操作體驗和動畫一樣順暢。”

考慮到這一點,他需要一種能在編輯器中快速調整游戲玩法,同時又不擔心破壞項目的方法。這就是 Francesco 所說的編程方面的最大技術難題之一:在 Unity 中創建一個能有效運行且不依賴過多代碼干預的系統。

他表示:“我的目標是為設計師提供一種方式,讓他們能夠直接從編輯器中自定義游戲的任何方面。”借助 Unity 的內置擴展性,Francesco 能夠添加自己的自定義功能,彌合他與團隊中技術較弱的藝術家之間的知識差距。

為了實現快速的游戲玩法和激烈的連擊動作,Francesco 在 Unity 中實現了第三方可視化工具 ActionGraph,以模塊化的方式構建和設計有限狀態機(Finite State Machines)。當動畫的精靈圖(Sprites)被加載時,ActionGraph 使得每一幀都可以加入游戲邏輯,從而讓藝術家能夠即時調整設置,例如碰撞體(colliders)或傷害數值(damage numbers)。舉個例子,Stefano 可以使用 ActionGraph 在攻擊中添加一個命中框(hitbox),并設置它在特定幀激活,啟用和禁用跳躍計數器,觸發戰斗資源的生成和消耗等等,這些都無需程序員的參與。

Francesco 還編寫了許多自定義的編輯器功能,以便 Subcult Joint 中以藝術家為中心的團隊能夠更多地參與項目。基于 xNode 可視化系統,UpWire 讓藝術家能夠輕松地管理人類和 AI 輸入、編輯碰撞體、為特定動畫節點添加視覺效果等。

*《Cookie Cutter》的圖形連擊系統(Graph Combo System)使 Subcult Joint 可以自定義攻擊的命中框和參數,以創建連續的攻擊、添加像攝像機震動這樣的視覺效果,以及調整敵人對攻擊的反應方式。

Francesco 解釋道:“我把它打造成為了一個真正的戰斗系統編輯器。它能夠處理所有游戲變量,因此只有當玩家解鎖了某個技能、武器或升級后,并且處于正確的位置時,才能執行特定的動作,例如空中攻擊或地面攻擊。”UpWire 還能處理物理中的力、位置轉換和身體旋轉等設置,這樣藝術家就能更輕松地試驗戰斗機制。

*在對戰 Boss 的圖形連擊系統(Graph Combo)中,Subcult Joint 可以調整攻擊命中框的力、方向和反彈值,或自定義 Boss 如何對 Cherry 使用不同武器類型的攻擊作出反應。

Timeline EZ Events 是 Francesco 的另一個自定義工具,它讓設計師能夠直接在編輯器中發送消息并調用函數(包括對場景對象進行操作),并為 GameObject 添加多種功能。例如,團隊可以創建一個控制桿,當它被拉動時,不僅可以解鎖一扇門,還能同時隱藏地圖和小地圖上的“上鎖的門”標記。

Subcult Joint 使用 Timeline EZ Events 創建了《Cookie Cutter》的過場動畫。這個工具讓他們可以將角色動畫、攝像機移動、音頻和視覺效果按順序排列,制作電影式的場景。

為了幫助設計師處理《Cookie Cutter》的小地圖(在任何以探索為重點的游戲中,這一部分非常關鍵),Francesco 創建了 EzMiniMapPro。Francesco 說:“這個工具用于創建游戲區域的地圖,并為圖像生成提供了一些有用的自定義和優化。在運行時,它支持基于攝像機視野的動畫疊加標記和自動探索遮罩。這個遮罩可以通過 SaveGame 進行存儲和恢復。”

創建和實現這些自定義功能雖然需要付出不少工作,但它為整個團隊帶來了創作自由,讓 Subcult Joint 的每個人都能參與到《Cookie Cutter》的設計、機制和游戲玩法平衡中。

使用 EzMiniMapPro,Subcult Joint 能夠捕捉他們在編輯器中構建的整個地圖,并將其導出到 Photoshop。然后,Stefano 可以在生成的地圖上進行繪制,使其與游戲的視覺風格匹配,之后再將其導回到 Unity。

設計游戲世界

《Cookie Cutter》中的巨大世界(即 Megastructure)包含九個可供探索的區域。一旦某個區域的概念原型定稿,Subcult Joint 的關卡設計師 Gabriel Raymond Roy 就會為該區域制作灰盒(grey-box)模型,創造一個玩家需要探索的迷宮。

Stefano 說:“一個好的關卡設計師知道如何創建既有趣又值得反復探索的主要和次要路徑。每個死胡同都應該為玩家提供某種獎勵,每個開放區域都應該遭遇敵人,讓玩家可以收集材料。”

當某個區域的灰盒模型設計完成后,Stefano 和設計師們就開始為場景添加環境細節,將手繪的精靈圖(Sprites)沿 Z 軸的四個點分層排列。《Cookie Cutter》使用的是一個透視相機視角,并沒有編寫視差效果(parallax)。因此,當玩家移動時,他們會看到某些元素在透視中顯得“錯位”。Cherry 站在“默認”位置旁邊,與敵人、物品和平臺等可交互的游戲對象一起,而非交互的前景、背景和“遠距離”元素則為場景視圖增添了模擬深度。

照亮游戲世界 Megastructure

Stefano 開玩笑地說:“我們試圖為每個區域賦予獨特的個性,但由于游戲背景是賽博朋克風格,加上團隊對機庫和金屬工廠的偏愛,我不確定是否真的成功為每個區域增加了獨特性。”

為了賦予每個區域獨特的視覺風格,Subcult Joint 大量使用了 URP 中的 Spot 和 Freeform 2D 光源。《Cookie Cutter》的世界里有超過 10000 個這樣的光源。Stefano 說:“游戲中的每個光源都會實時照亮我們的精靈,創造出角色、動畫和環境之間的緊密而自然的協調感。在黑暗的地方,角色會被陰影覆蓋,在外部區域暴露在飽和、受污染的天窗光下時,則會沐浴在光線中。我非常喜歡這些細節!”

Subcult Joint 在游戲中直接使用了 Unity 的 2D 光照,將它們應用到與環境精靈圖相同的Z軸層上,沒有進行額外的調整。Stefano 解釋道:“默認的 2D 光照非常棒,可以照亮游戲區域,而且可以決定它們影響哪些層。我們希望默認層始終對玩家清晰可見,這樣他們就能明白哪里可以走,哪里不能走。然后我們還在背景、前景和遠距離層上添加了光照。”

《Cookie Cutter》這款游戲的引人注目的 2D 光照在整體游戲設計中發揮了重要作用。作為一款類銀河戰士惡魔城類型的游戲,它側重于探索。光照被用來為玩家提供環境線索。Stefano 解釋道:“光照講述了一個故事,它告訴玩家應該去哪兒,引導他們走上主路徑,或者隱藏一些次要的可選路徑。”

閃爍的燈光可用于吸引玩家的注意力。Stefano 分享了他們是如何制作這種效果的:“2D 光照的優勢在于,你可以對它們進行動畫處理。制作閃爍的燈光非常簡單:選擇光源,進入動畫窗口,創建一個新的動畫,調整光源的強度(0, 9, 0, 9)。如果你想在其他地方創建相同的效果,還可以將這個動畫復制到其他光源上。”

在開發的最后階段升級Unity版本

在開發的最后階段,《Cookie Cutter》的 PlayStation 5 版本遇到了顯存溢出的問題,阻礙了游戲的發布。Subcult Joint 通過升級 Unity 版本來解決這個問題。

在如此接近游戲發布的時間點進行版本升級并不是最理想的選擇,但如果不解決這個問題,游戲就無法登陸 PlayStation 龐大的玩家市場。因此,Subcult Joint 團隊決定全力以赴,將項目遷移到當時最新的 Unity 2022 LTS 版本。這次升級讓他們能夠使用新的性能分析和調試工具,比如更新后的 Memory Profiler(內存分析器)。

Francesco 表示:“Memory Profiler(內存分析器)中新的快照對比功能幫助我們識別并解決了長期存在的顯存溢出問題。2022 LTS 版本在導入紋理時速度也更快了,而且這次升級最終讓我們的游戲變得更加穩定。”

升級后,團隊能夠對《Cookie Cutter》的視覺效果進行最后的打磨,而這些優化在之前是無法實現的,因為他們現在可以使用正式版的 2D 光照系統。但這也意味著他們需要根據新的參數,逐一檢查和修復游戲中之前使用的數千個實驗性 2D 光源。幸運的是,得益于2022 LTS 版本中的一些功能,這一過程變得更加高效。

通過 Unity 2022 LTS 版本中更新的精靈圖集功能,Subcult Joint 團隊能夠更加輕松、高效地將數百個手繪動畫推送到不同的目標平臺。同時,URP 正式版的 2D 光照系統也幫助團隊為游戲環境增添了更強的深度和氛圍感。

Stefano 解釋道:“我們使用了新的 2D Light Explorer 來選擇每個光源并手動調整。我們主要使用了 Spot 光源和 Freeform 光源,而 2022 LTS 實際上更新了 Freeform 光源的衰減特性,看起來比舊版好得多。雖然工作量很大,但我們成功修復了需要特別處理的技術問題,并進一步提升了游戲的質量。”

Subcult Joint 的首款游戲《Cookie Cutter》是藝術家和程序員緊密合作從而創造奇跡的一個例子。這個小團隊制作出了一款高視覺追求且成功的類銀河戰士惡魔城游戲,在發布的第一個月就售出了超過 60000 份,并且他們沒有在畫質或游戲玩法上妥協,始終堅守最初的創作理念。

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/web/80216.shtml
繁體地址,請注明出處:http://hk.pswp.cn/web/80216.shtml
英文地址,請注明出處:http://en.pswp.cn/web/80216.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

什么是實景VR?實景VR應用場景

實景VR,即基于真實場景的虛擬現實技術,是利用計算機技術生成三維環境,以模擬并再現真實世界場景的技術。 用戶通過佩戴VR設備(如VR頭盔、手柄等)或通過電腦設備,可以沉浸在一個高度仿真的虛擬環境中&#…

內核性能測試(60s不丟包性能)

以xGAP-200-SE7K-L(雙口10G)在飛騰D2000上為例(單通道最高性能約2.8Gbps) 單口測試 0口: tcp: taskset -c 4 iperf -c 1.1.1.1 -i 1 -t 60 -p 60001 taskset -c 4 iperf -s -i 1 -p 60001 udp: taskse…

58. 區間和

題目鏈接: 58. 區間和 題目描述: 給定一個整數數組 Array,請計算該數組在每個指定區間內元素的總和。 輸入描述 第一行輸入為整數數組 Array 的長度 n,接下來 n 行,每行一個整數,表示數組的元素。隨后…

C#進階(2)stack(棧)

前言 我們前面介紹了ArrayList,今天就介紹另一種數據結構——棧。 這是棧的基本形式,博主簡單畫了一下,你看個意思就行,很明顯,這種數據有一種特征:先進后出。因為先進來的數據會在下面,下面是密閉的,所以只能取后面進來的。 C#為我們封好了這種數據結構,我們不用擔…

汽車工廠數字孿生實時監控技術從數據采集到三維驅動實現

在工業智能制造推動下,數字孿生技術正成為制造業數字化轉型的核心驅動力。今天詳細介紹數字孿生實時監控技術在汽車工廠中的應用,重點解析從數據采集到三維驅動實現的全流程技術架構,并展示其在提升生產效率、降低成本和優化決策方面的顯著價…

git|gitee倉庫同步到github

參考:一次提交更新兩個倉庫,Get 更優雅的 GitHub/Gitee 倉庫鏡像同步 文章目錄 進入需要使用鏡像功能的倉庫,進入「管理」找到「倉庫鏡像管理」選項,點擊「添加鏡像」按鈕綁定github綁定成功后再次點擊添加鏡像如何申請 GitHub 私…

原生小程序+springboot+vue+協同過濾算法的音樂推薦系統(源碼+論文+講解+安裝+部署+調試)

感興趣的可以先收藏起來,還有大家在畢設選題,項目以及論文編寫等相關問題都可以給我留言咨詢,我會一一回復,希望幫助更多的人。 系統背景 在數字音樂產業迅猛發展的當下,Spotify、QQ 音樂、網易云音樂等音樂平臺的曲…

RustDesk

配置中繼服務器 https://rustdesk.com/docs/zh-cn/self-host/windows/ 服務器端 下載Windows版本 rustdesk-server-windows-x86_64.zip,安裝路徑為:C:\Program Files\RustDeskServer\bin。執行 hbbr.exe 和 hbbs.exe 兩個應用程序。這兩個應用提供了兩…

django中用 InforSuite RDS 替代memcache

在 Django 項目中,InforSuite RDS(關系型數據庫服務)無法直接替代 Memcached,因為兩者的設計目標和功能定位完全不同: 特性MemcachedInforSuite RDS核心用途高性能內存緩存,臨時存儲鍵值對數據持久化關系型…

leetcode 57. Insert Interval

題目描述 代碼:由于intervals已經按照左端點排序,并且intervals中的區間全部不重疊,那么可以斷定intervals中所有區間的右端點也已經是有序的。先二分查找intervals中第一個其右端點>newInterval左端點的區間。然后按照類似于56. Merge In…

去年開發一款鴻蒙Next Os的window工具箱

持拖載多個鴻蒙應用 批量簽名安裝 運行 http://dl.lozn.top/lozn/HarmonySignAndFileManagerTool_2024-11-26.zip 同類型安卓工具箱以及其他軟件下載地址匯總 http://dl.lozn.top/lozn/ 怎么個玩法呢,比如要啟動某app, 拖載識別到包名 點啟動他能主動讀取包名 然后…

Trivy:讓你時刻掌控的開源安全掃描器

深入了解 Trivy:全面的安全掃描工具 在如今互聯網快速發展的時代,軟件的安全性顯得尤為重要。隨著應用程序的復雜性增加,其可能帶來的安全漏洞也在不斷增多。如何快速、準確地發現這些潛在威脅是每個開發者和運維人員心中的課題。今天,我們將為大家介紹一個開源的安全掃描…

網址為 http://xxx:xxxx/的網頁可能暫時無法連接,或者它已永久性地移動到了新網址

這是由于瀏覽器默認的非安全端口所導致的,所謂非安全端口,就是瀏覽器出于安全問題,會禁止一些網絡瀏覽向外的端口。 避免使用6000,6666這樣的端口 6000-7000有很多都不行,所以盡量避免使用這個區間 還有在云服務器中&#xff0c…

Jenkins 執行器(Executor)如何調整限制?

目錄 現象原因解決 現象 Jenkins 構建時,提示如下: 此刻的心情正如上圖中的小老頭,火冒三丈,但是不要急,因為每一次錯誤,都是系統中某個環節在說‘我撐不住了’。 原因 其實是上圖的提示表示 Jenkins 當…

運維實施31-NFS服務

NFS概述 NFS(Network File System)網絡文件系統,主要用于Linux系統上實現文件共享的一種協議,其客戶端主要是Linux。 沒有用戶認證機制,且數據在網絡上傳送的時候是明文傳送,一般只能在局域網中使用支持多…

藍牙協議架構與調試工具詳解(含 BLE、HCI 命令、調試命令)

本文介紹藍牙協議從物理層到應用層的完整通信流程,并詳解了 Linux 下主流藍牙調試工具的使用方法,適用于嵌入式藍牙驅動開發、BLE調試、通信協議分析等場景。 🔧 1. 藍牙架構概覽 ? 芯片架構 單模芯片:僅支持 BLE 或 Classic 藍…

激光雷達定位算法在FPGA中的實現——section3 Matlab實現和校驗

1、校驗section2的計算方法是否正確 以section1里面的圖示 舉個例子: 1.1 手動計算 可以計算出4*4方陣C相關參數: 可以計算出余子式矩陣C_1相關參數:

數據結構(2)線性表-順序表

知道一個算法的好壞怎么去判斷以后,就該正式的去學習一些常見的數據結構,當然,這里的數據結構僅僅是初階,不會挨個一個一個學完,后期慢慢來。 一、數據結構總論 一般按照邏輯結構和存儲結構來分類,在初階…

性能測試詳解

🍅 點擊文末小卡片,免費獲取軟件測試全套資料,資料在手,漲薪更快 一、什么是性能測試 先看下百度百科對它的定義 性能測試是通過自動化的測試工具模擬多種正常、峰值以及異常負載條件來對系統的各項性能指標進行測試 我們可以認為…

每日Prompt:三只動物與地標自拍磨砂玻璃后的虛實對比剪影

提示詞 一張黑白照片,展示了一個[主體]在磨砂或半透明表面后的模糊剪影。其[部分]輪廓清晰,緊貼表面,與其余朦朧、模糊的身影形成鮮明對比。背景是柔和的灰色漸變色調,增強了神秘和藝術的氛圍。