在 Blender Studio,我們目前正在製作我們的第二個互動項目——一款暫定名為 遛狗計劃 的電玩遊戲。許多年前,當 Blender 有內建遊戲引擎時,第一款使用 Blender 製作的電玩遊戲是《Yo Frankie!》。從那時起,工作室主要專注於製作動畫短片,而將互動元素排除在外。
多年來,已經製作了許多採用不同技術、方法和挑戰的電影。然而,Blender 並不僅僅用於電影動畫。遊戲產業已將 Blender 納入其工作流程,目前全球各大遊戲工作室都在大量使用它。由於 Blender 在創建遊戲資產方面非常受歡迎,並且在開發流程中發揮著重要作用,Julien Kaspar 提出了互動項目 遛狗計劃 - 一款獨立的“感覺良好”遊戲,玩家被邀請進入一個白雪皚皚的公園。在這個世界中,狗巧克力 和他們的夥伴 Pinda 穿越環境,尋找裝飾雪人的物品。這兩個角色由玩家直接和間接控制,每個角色都需要自己的一組動畫循環。雖然大部分製作都使用了 Blender,但開源遊戲引擎 Godot 被選中來建立遊戲。但是,我們是如何處理為這樣的遊戲創建這些動畫的過程的?我們在過程中遇到了哪些挑戰?
享受閱讀!
遊戲動畫和電影動畫之間最根本的區別之一是互動性。在像《遛狗計畫》這樣的電玩遊戲中,動畫必須即時回應玩家的輸入,適應跑步、跳躍或與環境互動等動作。這使得遊戲動畫變得動態且不可預測,因為玩家可以以任何順序或隨時觸發動畫。適當的規劃和「遊戲邏輯」對於確保這些動畫順利融合在一起至關重要。這並不意味著它要犧牲故事敘事。遊戲玩法和電影都可以喚起精彩的故事敘述,並且可以巧妙地結合起來創造出可信的世界和情感故事。對於遊戲動畫,動畫師必須與遊戲開發者合作才能成功交付動畫。對於電影,動畫師通常在自己的「島嶼」上工作,即使他們確實需要與其他部門溝通,他們的主要工作流程可以更獨立地進行。
相較之下,精靈恐懼、衝鋒! 或 展翅翱翔! 等電影的動畫更為線性和非互動性。動畫師設計具有特定敘事流程的表演,該流程在故事板和佈局階段已預先確定。由於觀眾無法控制。時間和編排都是經過精心設計的,以喚起情感並創造可信、有趣的表演。遊戲動畫也是如此,但由於互動性方面,這裡的過程更為複雜。動畫師需要更加註意過渡到電影以及遊戲動畫需要從各個角度讀取的位置。對於電影,鏡頭通常是鎖定的,這讓動畫師可以朝鏡頭方向「作弊」。現在對於 遛狗計劃,當動畫只朝向鏡頭時,我們先可以作弊。
動畫循環,動作和電影
在視頻遊戲中,創建了重複的動作,例如步行,跑步或閒置,以循環動畫週期創建。這些週期可以在從一個動作過渡到另一種動作時無縫融合,無論玩家輸入如何,都可以保持自然而流暢的外觀。
對於 遛狗計劃 來說,動畫風格旨在透過以 2 秒、3 秒甚至 4 秒的速度為角色製作動畫來喚起「定格動畫」的感覺。這意味著角色不是每幀都移動,而是保持其姿勢幾幀後再轉換到下一個姿勢。這種美學讓我們能夠「快速」進入不同的狀態,而不必擔心過多的混合。它使得該流程更加經濟並且更易於實施。
要建立的關鍵元素是兩個角色的動畫樹。由於它們需要相互交互,因此我們必須制定清晰的「遊戲邏輯」。 Pinda(小孩)可以在遊戲中體驗到不同的情緒,從而影響玩家與他們的互動方式——是繼續玩遊戲,還是只是坐下來哭泣。一個動作會引起一個反應,所有這些互動都需要仔細規劃,以了解遊戲的整體功能以及每個角色需要哪些動畫才能創造出可信的動態。
視覺化遊戲邏輯為開始對話奠定了堅實的基礎,確保每個人都了解角色的邏輯和預期行為。雖然遊戲邏輯可能仍會根據遊戲測試、回饋或錯誤修復進行調整,但它提供了足夠的方向來開始創建遊戲的核心動畫。
為了區分動畫的多種狀態,我們將它們分成指定的群組:
核心遊戲循環(LOOP):這些是進行核心遊戲所需的基本動畫。其中包括步行、跑步、閒置以及這些狀態的變化。它們始終是可循環的,這意味著它們可以無縫且無限地播放。
動作(ACTN):這些是玩家在特定時間或地點觸發的動畫。動作每次僅播放一次。例如撿起一件物品或跌倒在雪地裡。
過場動畫 (CINE):此類別用於為開頭和結尾以及遊戲過程中玩家透過完成某些任務來推進故事發展的某些時刻創建敘事驅動的動畫。在過場動畫中,玩家可以進行最少的互動,這樣就可以清楚地了解遊戲中故事的進展。這裡的主要區別是動畫是針對鏡頭播放的,以確保它們由於對故事的重要性而易於閱讀。
同步動畫(SYNC):某些動畫要求兩個角色彼此「同步」。兩個角色都包含自己的動作,但是當角色擁抱時,例如,他們都需要播放自己的動畫部分。重要的是,它們必須在同一時間開始,以避免時間偏移,從而導致不必要的行為。
這些不同的類別用作可由遊戲引擎的代碼調用和區分的動作名稱的前綴。
在電影中,動畫遵循線性時間線,其中節拍已在故事板階段確定。角色不需要無限地循環動作,並且轉換時間經過精心安排以適應鏡頭。這使得動畫師可以自由地微調個別瞬間。一旦一個鏡頭被批准,他們就可以繼續拍攝下一個鏡頭,這是一個相當線性的工作流程。在某些鏡頭獲得批准之前,仍會收到回饋並需要重拍,但主要節奏已經在故事板或預覽中確定了。
相較之下, 遛狗計畫 的動畫工作流程則遵循更循環的過程。當動畫師被指派製作特定動畫時,他們通常會從粗略框架所要求的動作開始。這些框架捕捉動作的主要節拍並指示動畫的時間。完成後,動畫將匯出為 .gltf 檔案並匯入 Godot 遊戲引擎。我們的管道已由 Simon 設置,以便匯出文件,以便 Godot 可以自動匯入和更新遊戲的動畫文件。
對於動畫師來說,這個特定的動畫將被“擱置”,直到它在遊戲引擎中的實現成功並得到導演的批准。在這個階段,仍然可以進行回饋,從而可以完善動畫,同時確保其在遊戲中正常運作。這種迭代工作流程使動畫師和遊戲開發者能夠快速調整和實現動畫,從而使遊戲內的測試過程更有效率。
使用Blender的NLA(非線性動畫編輯器)
在測試動畫時,動畫師並不完全依賴遊戲開發者。雖然可以在 Godot 中組合模組化動畫循環,但 Blender 自己的非線性動畫 (NLA) 編輯器也提供了強大的預覽和混合動畫工具。
NLA 允許動畫師將不同的動畫匯入到單一 Blender 檔案中,並使用 NLA 條帶混合各種狀態,並調整多個參數。這在早期階段特別有用,因為當時 Godot 的實施流程和匯入/匯出過程尚未完全建立。然而,這最初並沒有完全成功地轉化為 Godot。骨骼縮放不正確,必須在 Blender 中調整裝備才能正確匯出到 Godot。這是一個反覆的過程,問題在遊戲測試期間才被發現。
使用 NLA 作為預覽工具既高效又易於使用。它使我們能夠在開始出口過程並讓其他團隊成員參與之前識別並解決潛在問題。
由於 遛狗計劃 是我們第一個同時使用 Godot 和 Blender 的遊戲項目,我們在早期遇到了幾個與動畫相關的挑戰。匯出為 .gltf 檔案格式本身就存在一系列障礙,但在 Simon 的管道設定和與 Godot 開發人員的合作下,我們設法改進並添加了一些導入/導出功能,但仍有一些問題有待解決。
結合關鍵影格和程式動畫需要添加額外的骨骼來適應這兩種技術。例如,當玩家使用「吠叫」輸入時,它應該會觸發吠叫動作。然而,為了確保該系統在狗的所有狀態(坐、走、跑等)下都能無縫運行,我們開發了一個系統,其中使用單獨的骨骼來尊重每個狀態的獨特姿勢。這可以防止狗狗在吠叫時突然進入中立姿勢,而是只覆蓋執行吠叫動畫所需的骨頭。這個解決方案有些特殊,因為大多數動畫循環都可以透過在所有狀態下混合相同的骨骼來實現。
另一個關鍵挑戰是確保電影和互動遊戲之間的無縫過渡。我們如何確保當電影結束時,角色可以在完全相同的位置和方向上操作?為了解決這個問題,我們創建了一個位於雪人周圍的位置骨骼列表,這些骨骼決定了每個角色的每個電影的起點和終點。例如,Pinda(孩子)總是從相同的位置開始和結束,從而保持了電影序列和遊戲玩法之間的連續性。操作順序如下:
玩家進入觸發電影的區域。
Pinda(在遊戲中)走向電影動畫開始的目標位置。
電影結束後,Pinda 的最終位置將交還給遊戲,繼續核心遊戲循環。
在 遛狗計劃 中,動畫的最終完成是一個反覆的過程,涉及不斷的反饋、遊戲測試和潤色。動畫師與 Julien Kaspar(導演)和 Simon Thommes(Pipeline TD)密切合作,他們負責技術實現並確保動畫在遊戲引擎中既實用又具有視覺凝聚力。
為 遛狗計劃 製作動畫是一次令人興奮的旅程,一路上我們學到了很多。我們的電影製作經驗使我們能夠帶來一些新的東西,同時也熟悉遊戲開發的工作流程。
說到遊戲動畫,我們覺得自己才剛涉足這個廣闊的世界。即使是一個相對簡單的遊戲,遛狗計劃 也提出了許多挑戰和難題需要解決。回顧過去,我們看到了優化和改進部分工作流程的機會,使其在未來更加靈活和高效。
到目前為止,這個項目一直是一個很棒的實驗,我們很高興您很快就能玩到最終的遊戲!請繼續關注 studio.blender.org/project-dogwalk/ 上的更多更新、新聞和生產日誌。
加入 並發表評論。