top of page

Pixotope 如何設定 時碼同步 關卡

前言

本文旨在全面介紹如何在Pixotope Engine(引擎)中設計時碼驅動(Timecode-Driven)的製作。


要遵循本指南,你必須對虛幻引擎5(UE 5 - Unreal Engine 5)中的關卡設計(Level-Design)有扎實的瞭解,同時還要充分掌握Pixotope中的多機同步(Multi-Machine Synchronization)功能。


欲瞭解如何規劃Pixotope以便使用時碼,請學習以下文件:規劃及校正多機同步(Configure and calibrate multi-machine syncing)




有用的指標

在Editor(編輯器)中,透過查看Network Status(網路狀態)標籤中的Data Hub狀態,可檢查時碼是否成功到達引擎。



SYNC:表示你正在接收一致的時碼串流(Timecode Stream),輸入的數值具有正確的時序(Chronology)


NO TIMECODE:表示引擎正期待接收時碼,但沒有任何訊號傳入


ON/OFF:表示多機同步(Multi-Machine Sync)未啟動


注意掉格(Frame Drop)!要在機器之間正確同步製作,穩定的影格速率(Frame Rate)是必須


儘管如此,我們還是會試著透過良好的設計來防止偶爾出現的掉格。


另一個有用的指標是Window>Virtual Production中的Timecode Provide標籤。它會顯示最後到達引擎的時碼。



Tick 及 Time

在正確設定多機同步、輸入時碼及穩定的FPS後,你的製作已同步。


Game Time、Application Time、及Tick’s Delta Time應該反應了你所提供的時碼。這就意味著,任何在常規設定下執行的製作,都應該在這種新模式下表現良好。


根據預設值,Execution Time Offset(執行時間偏移)應用於時碼。可在Project Settings>Pixotope>Synchronization>Game Time中進行規劃。



不過,有一些方法可確保你的製作表現完美無瑕!




Event(事件)

遠端遙控觸發事件

預設情況下,如果多機同步設定正確,所有到達引擎的Call、Set及Update類型的Pixotope API訊息,都將在所有機器上同步執行。


在此,你可閱讀有關使用Pixotope API的更多資訊:Using Pixotope API


這意味著,你可在一組Blueprint Function(功能)及Event(事件)基礎上進行製作,透過Control Panel(控制台)觸發這些功能及事件,並確保在所有引擎上同時執行這些Call。


在此,你可瞭解更多有關於建立Control Panel的資訊:Creating a control panel - PRODUCTION


由於所有引擎對於何時執行API訊息皆需達成共識,因此我們增加了5個執行影格(Frames of Execution),以確保有足夠的時間進行溝通。


這可以在Store中進行State.Sync.CommonSyncDelay值的規劃。




Scheduling Event(安排事件)

使用Schedule Function(安排功能)Blueprint,你可定義一個邏輯,在給定的時碼下執行(準確的說,是在引擎接收到相等或更高的時碼時執行)。


這樣,你就可建立複雜的時碼驅動的製作。


計畫在時碼到達00:15:00:00時執行事件的範例


預設情況下,此功能使用第一個時碼(索引為0)並套用Director中所規劃的Execution Time Offset(執行時間偏移)。


在Project Settings>Pixotope>Synchronization>Schedule Function中,你可更改此一行為。




從一個引擎向其他引擎呼叫事件同步

在極少數情況下,如果你想讓其中一個引擎驅動製作,並向其他引擎發送同步命令,你可使用內容包(Content Pack)Pixotope Synchronized Event。


點擊此處瞭解更多資訊:Pixotope Synchronized Events


Pixotope Synchronized Event內容並非隨插即用(Plug-and-Play),只是一個樣版(Template),你可在此基礎上建構自己的邏輯。


我們並不推薦這種製作的設定方式,因為需對Blueprints和Pixotope有廣泛的瞭解才能進行。




Sequences(序列)

傳統的序列工作流程

讓Sequence發揮作用的最簡單方法,就是按照常規的方法觸發序列。


如前所述,Tick及Pixotope API都將同步,因此如果在Control Panel觸發的Function/Event中建立了Sequence,則Sequence應在所有機器上同時執行。


用於建立和播放Sequence、或再次執行時重新啟動Sequence的Event範例


在這種設定下,最輕微的掉格都將導致Sequence執行不同步。




使用 Blueprints 安排 Sequence

使用Blueprints可建立更穩固的Sequence設定方法,如果你想安排Sequence在特定的時碼執行,或在測試製作時遇到掉格及不同步的情況,這將會特別有用。


這種方法需要很強的UE5知識,來理解和建構自訂邏輯。


請嘗試以下步驟:

1. 在Begin Play中添加一個Create Level Sequence節點,並將建立的Sequence序列提升至一個新變數中。



2. 在Tick,使用Get Latest Time以讀取最後一個時碼,減去你希望Sequence開始的時間,將Timecode轉換為Frame Number,然後在Sequence上使用Set Playback Position來驅動它。



請注意,這種方法可確保Sequence與時碼保持一致,即使在掉格的情況下亦如此!





Material(材質)

如前所述,在Multi-machine Sync(多機同步)設定正確的情況下, Live Preview(PIE - 即時預覽)及Live in Pixotope中的Game Time會被時碼取代。


這意味著,你可使用Time Material(時間材質)節點來驅動著色器(Shader),並確保它們保持同步。


Panner(平移)節點與Time(時間)結合,進行同步動態材質(Animated Material)的範例



Particle Effects 及 Randomness(分子特效及隨機性)

對於你建構的任何偽隨機亂數產生(Pseudo-Random Number Generation)和分子特效(Particle Effect),請確保設定了Seed(種子),以便在不同的機器上得到相同的結果。




其他功能

有幾種使用範例可能對每個人都有用,但仍然是Pixotope的一個選項而已。




Timecode Math(時碼數學)

在Blueprints中使用“+”或“-”運算子(Operator),為製作建立複雜的安排邏輯!


有兩種添加時碼的運算子,通常Add(加)會自動使用正確的Refresh Rate(更新率)


如果對時碼的數學運算有疑問,可將其轉換為字串(String)並列印出來




Editor 中的 Sync Delta Time

預設情況下,Game Time、Application Time及Tick's Delta Time在Editor不會從時碼中匯出(但在Live Preview/PIE中會匯出)。


在Editor中將Project Settings>Pixotope>Synchronization>Editor>Sync Delta Time設定為true,將使Editor視窗(Viewport)同步。


當出現最輕微的FPS下降時,將導致你嘗試移動時,視窗攝影機會“跳動(Jumping)”。


在編輯關卡(Level)時,我們並不期望FPS達到完美,因此該選項預設為不啟動(Disable)。




Delayed Tick

有些製作可能會根據已透過的Tick來設定特定Event的時間。我們不建議採用這種方法,但在這種罕見的情況下,有一種方法可以在多台機器之間同步Live Tick的開始時間。


在每台機器上,進入Project Settings>Pixotope>Synchronization>Delayed Tick,將Wait for Synced Tick設定為大於0的秒數。該秒數應大於設備中最慢的機器啟動關卡所需的時間。



現在,每台機器都將與其他機器通訊,並嘗試同時開始Tick。


要實現這一功能,需要在Director中正確設定機器間的Execution Time Offset(執行時間偏移),也可選擇在本地使用不同的延遲(Local Synced Tick Delay)來覆蓋(Override)它。


該功能不會延遲Begin Play或第一個Tick。不過,之後的每一個Tick都會同步。



原文出處:https://reurl.cc/9RzNYO


Comments


bottom of page