《Clocker》的聲音設計 - Part 1

大家好,我是譚宇,來自一罐鹽聲音工作室(Salt Sound Studio)。下面將透過這篇部落格跟大家分享一下我們的專案 —《Clocker》的聲音設計歷程。在這個專案中我負責了遊戲中Wwise音訊引擎的接入與搭建、遊戲的音效製作與互動機制的設計。

遊戲介紹

《Clocker》的聲音設計 - Part 1

《Clocker》是一款以時間為題材,以父女親情為感情基調的冒險解謎類獨立遊戲,由Wild kid Games歷時四年研發。遊戲擁有其獨有的時間解謎機制,唯美的手繪畫風,充滿趣味的謎題以及扣人心絃的劇情。講述了一段父親與女兒間的故事,採用了雙主角的敘事手法,透過分別控制父親與女兒,從而慢慢解開故事中的謎題,推進故事的發展。

遊戲的玩法是圍繞一塊鐘錶來控制NPC的行動與邏輯線。在遊戲中父親是在一個時間靜止的空間中使用鐘錶控制時間的流逝與回溯,女兒出現後會恢復被父親靜止的時間並繼續下去讓時間恢復正常的流逝。

在沒測試遊戲之前,我們把這個遊戲定義為了一個小體量的遊戲,認為遊戲中可能不會需要太多的聲音。直到測試以後我們拿到了遊戲中所有的物料才發現這個遊戲沒有我們想的那麼簡單。

《Clocker》的聲音設計 - Part 1

第六場景的邏輯圖

在上圖中我們可以先看一下游戲中的邏輯關係圖,每條邏輯線代表了遊戲中NPC的一套動作,圖中只是2個NPC的邏輯線路圖。

可以看到玩家進入到場景後操縱小偷會觸發小偷的A邏輯向前移動去開門(小偷A邏輯分為兩段,一段是移動一段是開門。如果A邏輯播放到一半或者沒開啟門是不會觸發別的邏輯事件,很多NPC會出現一條邏輯多個階段的情況)。

小偷A邏輯全部播放完畢後會透過這個動作觸發屋主的B邏輯,屋主會跑向小偷。這時玩家操縱屋主會出現兩個情況,一個是屋主衝過去打了小偷,另一個是操縱屋主到一半的情況下,使屋主的時間回退到邏輯A,然後轉身去控制小偷。這時會根據屋主當前邏輯播放的階段判斷小偷到底是選擇E邏輯還是D邏輯,以此類推我們可以發現這個遊戲的邏輯很複雜。在下圖中我們可以看到遊戲中關於人物狀態切換的情況,圖中鐘錶會出現兩條時間線來表現人物狀態的改變。

《Clocker》的聲音設計 - Part 1

小偷與屋主的邏輯表現

透過上述描述已經清楚了遊戲的玩法與邏輯,我們統計了一下游戲內的NPC一共有70個,像上圖中的邏輯線路一共有682條。而且遊戲充分運用了蝴蝶效應來控制劇情的走向。

蝴蝶效應意味著遊戲中需要實時記錄所有操縱過NPC的聲音播放位置,就是說我們操縱了一個NPC的時間走到一半之後需要記錄這個音訊的播放時間資訊來保證下次繼續操縱這個NPC的時候聲音與畫面可以同步,還需要滿足聲音正反向的操縱。

遊戲聲音設計

在滿足上述條件的前提下我們把遊戲的聲音設計分為了五部分:

1. 父親時間

如何展現時間的流逝與回溯

如何精確記錄聲音播放時間的位置

2. 女兒時間

如何表現時間的漸變

靜止動畫的延展

配音的問題

3. 對應遊戲的功能

如何透過手柄按壓力度控制聲音的播放速度

4. 互動音樂

如何利用音樂控制玩家的行為

Clocker互動音樂設計

5. 效能最佳化

Soundbank的管理

針對不同平臺的音訊壓縮

列舉出製作思路以後我們又發現了一個問題,發現在音訊功能上的需求還是蠻多的,介於現在的開發週期來說Unity自帶的音訊引擎沒有辦法快速解決我們當前需要的功能。所以我們使用了Wwise音訊引擎來幫助我們實現更多的音訊功能。

在遊戲中的具體實現

父親時間

如何展示時間的流逝和回溯

我們嘗試了很多種手段去配合遊戲內的機制,但是單獨的音效很難把每個人物的時間狀態呈現出來。如果只做單獨的音效去配合遊戲中的動畫,很難精確的對應當前邏輯線上的時間點。最後決定對應每個人物的邏輯線去製作一整條的邏輯線音效,這樣既能很好的維護每個人物的音效也能解決遊戲內玩家操縱時間正反向過程需要記錄當前聲音播放位置的問題。

《Clocker》的聲音設計 - Part 1

Event列表

上面兩張圖中列舉了我們對應人物邏輯線製作的Event與切換邏輯時用到的Switch組。按照場景名、當前場景的NPC、NPC下的邏輯來精確的尋找需要的事件,這樣在維護方面節省了很多的時間。

我們嘗試了很多種手段去配合遊戲內的機制,但是單獨的音效很難把每個人物的時間狀態呈現出來。如果只做單獨的音效去配合遊戲中的動畫,很難精確的對應當前邏輯線上的時間點。最後決定對應每個人物的邏輯線去製作一整條的邏輯線音效,這樣既能很好的維護每個人物的音效也能解決遊戲內玩家操縱時間正反向過程需要記錄當前聲音播放位置的問題。

關於時間反向的過程,為單個動作或者物品製作的音效都很難達到反向的整體性,反向效果也不是很突出,很難表現聲音的回退過程。為了達到更好的效果,我們在嘗試了很多種方法後,最終決定把正向整條的聲音做Reverse,然後在當前音訊中加一層低頻來與遊戲中的時間機制相配合。透過在遊戲中同時播放正反向兩條音訊,實時切換Switch選擇邏輯以達到匹配從A邏輯切換到B邏輯的播放狀態。不過工作量也是翻了N倍,為了好效果我們也是拼了。下圖中可以看到整條音訊的波形。

《Clocker》的聲音設計 - Part 1

反向邏輯的波形

接下來在GameParameters中定義了1與-1的值用來判斷對應的時間線,1是正向播放-1是反向播放。前進時呼叫正向的音效,後退時呼叫反向的音效。這樣在正反向判斷上我們可以做到快速切換狀態。下圖是在GameParameter Editor的工程截圖。

《Clocker》的聲音設計 - Part 1

GameParameter Editor

為了確保聲音同時播放不重疊用到了Wwise的Blend容器,在Blend容器中控制了音訊的播放位置。這個位置用來確認同時播放時不會出現音訊疊加播放避免兩個聲音都播放的情況。下圖是在Blend容器中的工程截圖。

《Clocker》的聲音設計 - Part 1

Blend Editor

如何精確記錄聲音播放時間的位置

為了能精確記錄聲音的位置,上述中已經告訴大家我們已經把音效製作成一正一反兩條音效同時播放來匹配遊戲中的時間線。這樣的做法是為了可以量化聲音播放時間的百分比,然後透過wwise的SeekOnEvent API函式來精確按照百分比播放時間。下圖中可以看到這個函式的詳細使用方法。

《Clocker》的聲音設計 - Part 1

Event列表

根據這個方法就只需要記錄當前動畫與聲音播放的百分比位置,在下次觸發NPC邏輯前讀取記錄到的資訊就可以精確還原到上一次操作的位置。

女兒時間

如何表現時間的漸變

遊戲中女兒出現會讓靜止的時間恢復正常流逝,並出現漸變效果。下圖中演示了這個漸變效果的過程。

《Clocker》的聲音設計 - Part 1

女兒時間漸變效果

父親時間時整體畫風是黑白風,為了表現靜止的狀態我們沒有播放當前場景中的環境聲。在控制女兒的時間時,女兒第一次加入的場景會從黑白色漸變成有色彩的狀態。為了配合遊戲的藝術效果在聲音上我們也是配合遊戲的效果,做了一個場景的環境聲漸變。為了讓效果更好我們把環境聲單獨的分開了每層,從單獨的空氣在到場景中每個小物品小動物我們都做了分層,根據漸變的效果慢慢讓聲音有一個從無到有的過程。

透過GameParameter定義了0-1的值,然後與場景大小做了百分比的定義,這樣可以透過女兒移動的位置資訊來播放當前位置的環境聲。

《Clocker》的聲音設計 - Part 1

在Blend容器中把分層的環境聲透過音量線做淡入的效果然後把所有環境聲混合疊加到一起實現了這個效果。下圖中可以看到工程中的截圖。

《Clocker》的聲音設計 - Part 1

靜止動畫的延展

女兒在遊戲中有一套自己的邏輯線,這條邏輯線只針對女兒,父親不會觸發這些邏輯。

在操縱女兒時,女兒會繼續播放當前父親未播放完畢的邏輯。例如場景中的NPC在父親階段時時間播放了30%。那麼女兒第一次走到這個NPC附近時,就會讓這個NPC的聲音從當前30%的位置繼續播放完父親的邏輯。在根據這個父親的邏輯階段判斷他自己的邏輯。這樣也是為之前說到的蝴蝶效應做了延續。

在下圖中我們可以看到,女兒出現在場景中後,警察繼續了父親之前的邏輯,等邏輯播放完以後他會根據之前的情況判斷是否抓住小偷。女兒的動畫是迴圈播放的,在這個情況下我們必須停止當前聲音的播放,避免出現聲音一直迴圈播放產生的聽覺疲勞。

《Clocker》的聲音設計 - Part 1

女兒時間延續

配音的問題

遊戲中很多人物的語音我們透過語氣助詞還原了當時人物的各種情緒,語氣助詞可以很快的讓玩家感受到遊戲NPC的各種情感與人設。設計之初我們其實考慮過用配音去填補。但是與製作人溝通後製作人說了兩個情況,一個是遊戲中的很多對白容易暴露隱藏結局,這款遊戲是一個多結局的遊戲。另一個是對於一款小成本的獨立遊戲來說資金不允許,所以我們取消了對白,用語氣詞來代替。

為了在沒有配音的情況下也能讓遊戲中的人物生動的表現出自己的人物設定。我們選擇了用語氣詞來表現。例如遊戲中的中年紳士,其實在遊戲中他的人設是一個不好相處的貴族小老頭,我們用了那種很尖酸刻薄的語氣來表現出來,從最開始的接觸就完全的表現出人物的一些特性。

遊戲的音訊功能實現

如何透過手柄按壓力度控制聲音的播放速度

《Clocker》的聲音設計 - Part 1

力度按壓控制

遊戲中會透過手柄的力度控制邏輯時間的加速與減速過程來配合遊戲畫面,上圖中展示了遊戲中的加減速過程。

我們透過給全域性聲音增加Wwise自帶的 Time Stretch效果器去製作了加速與減速的過程。下圖中定義了0-1的值,與手柄力度進行換算來更改時間拉伸率。

《Clocker》的聲音設計 - Part 1

TimeStretch Effect Editor

我們將在下期內容分享《Clocker》的音樂設計過程,敬請期待!

《Clocker》的聲音設計 - Part 1