常見問題

Umbra 3 常見問題與解答(2012 年 3 月)

Umbra 3 介紹

Umbra 3 是一款渲染優化中間件,通過優化諸如渲染、內容串流、AI 以及遊戲邏輯等關鍵部分,以減少 CPU 和 GPU 的處理時間。

Umbra 3 的目的是提高幀速率,並幫助您的遊戲中獲得更加性能。我們所提供的解決方案,在單獨使用 CPU 或同時使用 CPU 和 GPU 時,均能 100% 完美運行。

Umbra 3 構建了一個遊戲場景的內部表現形式,並在運行時使用此數據執行有效的查詢,這些查詢可用於為玩家確定一組可見的對象,或者從一個點確定給定距離內的一組對象等。

遮擋剔除是任何 3D 引擎的核心組件,我為何要選擇外部解決方案呢?這樣會不會太冒險?我們不是應當自己開發嗎?

您的想法我們完全理解。但選擇我們的解決方案,您並無風險。

Umbra 自 2006 年起開始研究與開發遮擋剔除技術。多年來,我們已在數十款遊戲引擎中成功實施了遮擋剔除技術,並在能見度優化和遮擋剔除相關的各方面累積了大量寶貴經驗。我們的技術將處於持續測試、改進以及維護之中。它的成熟度已在多款已發售的知名遊戲中得到證明。我們會持續對已發布的遊戲,在多種遊戲環境中測試我們的軟件。

Umbra 運行時整合為非侵入式,可以輕鬆整合入現有的剔除解決方案中。藉助我們的技術,您可以降低潛在風險,快速獲得絕佳的性能,並將時間用於優化而非生成解決方案中。

Umbra 的技術整合非常簡單 – 不論您處於開發的早期階段正在進行嘗試,還是在開發結束時尋求所有重要的性能提升。當然,您越早整合 Umbra 的技術,就能越早從中獲益。

我們的絕大部分核心工程師在加入 Umbra 前,自 1999 年起即開始研究遮擋剔除 – 我們的經驗和實力值得信賴。

是否可以在同一個區域使用不同質量的遮擋消除,以便能夠在水平面上部分位置實現真正準確的遮擋,但在水平面的其他部分使用準確度較低的遮擋?

最新版 Umbra 3 提供了一種機制,可用於在本地修改能見度估算參數。用戶可以指定 AABB 以代表不同水平面,並覆蓋這些內容的其他計算參數。

請考慮這種情況,假設一個同時包含室外環境和室內環境的較大水平面。在室外, 遮擋的相關幾何學指標相當粗糙,例如地形、山脈、峽谷, 這意味着為 Smallest Occluder 參數使用較小的值(可以獲得最精確的結果)就很沒有必要。然而在室外使用較大值,也可以在室內產生相當保守的結果,進而會導致遮擋消除的效果不很明顯。因此為場景中的室內部分指定一個值,並針對每個計算參數指定不同的值,以便用較小的值覆蓋 Smallest Occluder 的設置,這種做法就顯得非常合理。

我們的遊戲需要以 60fps 速度運行,Umbra 3 如何應對這種需求?

一般來說,Umbra 的查詢所需時間不到 1 毫秒,或者在幾毫秒內即可完成,這主要取決於內容本身,可視性計算參數,以及底層平台。

Umbra 的查詢是一種線程內操作,查詢操作的上下文包含執行單個查詢所需的全部信息。因此如果系統中有空閑核心,此時並不需要在獨立的線程中運行能見度查詢。另外還有必要進行實驗,如果將視野截面拆分為不同區域,用並行的方式針對不同區域運行查詢,並在最後將結果進行匯總,這樣做也許可以獲得更多好處。一般來說這種做法都能獲得更好的結果,但在某些較為極端的情況下,可能需要更長的查詢時間,不過在最極端情況下這種做法對查詢時間可能毫無改善,因為整個界面圖形(一個對查詢時間影響最大的因素)的複雜度可能並未統一遍及整個視野。

最後,只要調整能見度計算參數,運行時性能總是能夠有所改善,但需要付出遮擋消除準確度作為代價。遮擋消除和查詢時間之間的平衡點主要在於內容和引擎本身,因此有必要進行一定的嘗試和實驗。

能見度計算是否需要一次將整個場景都加載到內存?(Umbra 會將能見度數據用公式的方式存儲起來,運行時則會用輕量級方式進行訪問,這是一種已申請專利的 “Tome” 格式。遊戲世界越大,您選擇的閉合參數越精確,最終獲得的 Tome 數據也就越大)

請考慮這樣的情況:一個大場景被拆分為多個小塊,並直接進行本地修改,但並不需要考慮其他塊的存在。在這種情況下,如果設計人員需要每天使用這些本地塊,就有必要計算相互獨立的“本地工作 Tome”。這樣可以生成在指定塊內使用的 Tome,但相對整個場景,這樣做明顯無法在邊界範圍內包含全局使用的能見度信息。

整個場景最終的“生產用 Tome”可以進行計算獲得,例如每天夜間進行。這可能需要將整個場景(當然只需要遊戲的幾何信息)一次全部加載到內存中,因此只需要在初始步驟中執行區塊劃分,隨後每個區塊所輸入的內容就會包含塊邊界範圍內部所需的全部幾何信息。另一種方法是多次運行區塊輸入生成操作,讓場景內部的不同區塊相互重疊,對最終獲得的不同區塊輸入對象進行計算,並將區塊操作的結果匯總起來生成最終的 Tome。

另外還需要注意,如果需要對特定區塊的輸入內容進行計算,無論是由設計人員在本地進行運算,或通過構建場進行集中運算處理,其運算結果完全是可緩存的,只要區塊的輸入內容是二進制等式,相應的運算結果可保證與輸入的內容相匹配。因此對於上述提到的場景,只要特定塊的區塊運算結果可以使用某種類型的緩存被實例所調用,夜間進行的 Tome 計算最終只需要對每一塊邊界處的區塊進行計算即可。但要使用這種方式,要求協調系統必須能夠涵蓋整個場景。

我們的遊戲有大量流式世界/水平面,是否可以在運行是將 Umbra 的能見度數據進行流式傳輸?

通過 Umbra 將能見度數據流式傳輸的方法需要保證實時,並將遊戲水平面拆分為多個區塊,隨後即可根據用戶的流傳輸條件(例如距離)進行流式傳入或傳出。

首先,在計算 Tome 時必須在能見度計算中指定所需的粒度。

完成該操作后,就可以通過在 Tome 中對區塊進行迭代,並查詢相應區塊的 AABB,從空間邊界創建到每個區塊的映射。另外,為了讓查詢能夠知道每個區塊在 Tome 中的內部“位置”,您還需要查詢區塊的“插槽”。

這一過程可以將區塊看作是 Tome 的不同頁面,插槽則是頁碼。當查詢需要從 Tome 中“讀取”一個“頁面”時,除了需要知道頁面的內容(區塊),當然還需要知道這個“頁面”(插槽)的頁碼。

在發布能見度查詢之前,您可以針對流半徑(或其他條件)測試區塊的 AABB,並將相應的區塊加載到流傳輸集中。在運行時對查詢對象進行初始化可以通過兩種方式完成。基本方法是調用 Query::init(const Tome*),該方法會假設所有區塊都已位於內存中。然而在進行流式傳輸時,您需要調用 Query::init(const TomeGlobal*, const TomeTile**)。第一個參數是到 Tome 全局數據 (Tome::getGlobal()) 的指針,字母則是到流式傳輸區塊的指針數組。要為該數組輸入內容,您需要設置每個插槽(見上文)的指針,如果區塊需要流入,請設置為 NULL,或者設置為相應(流傳輸)區塊的地址。

我們的遊戲有大量場景及動態對象,或者有大量小空間、陰影、龐大世界等,Umbra是否可以提供幫助?

只要有不可見對象,Umbra的技術就能提供幫助。Umbra技術就是針對高動態場景的處理而設計的。

Umbra 3 中間件由那些組件組成?

Umbra3 包含三個組件:Umbra 3 優化器、Umbra 3 運行時和 Umbra OB。

我應該在自己遊戲中使用哪個Umbra 3組件?

我們明白,每個遊戲和項目都有獨特的需求 – 我們的技術非常靈活,適合任何遊戲的任何需求。

要確定Umbra的哪個組件最適合您的項目,最好的辦法是與我們的工程師進行一次簡單交流,這樣才有助於確定您的需求,進而我們才能為您提供最好的解決方案。這樣做可以節約我們大家的時間,並讓您儘快開工。

什麼是 Umbra 3 優化器?

Umbra 3 優化器是一個內容處理工具,將 3D 場景的幾何形狀作為輸入,並自動生成可用於運行時的數據,以優化性能關鍵的運算。Umbra 3 優化器使用自動生成的入口和 PVS,以在運行時可有效訪問的格式,來表現場景數據。

什麼是 Umbra 3 運行時?

Umbra 3 運行時使用由 Umbra 3 優化器生成的數據來執行多種類型的查詢。可見性查詢用於找到從一個點或區域可見的對象集,距離查詢用於找到到對象的拓撲距離,而交點查詢用於找到在給定形狀相交的對象集。

Umbra 3 運行時使用 100% 的 CPU 資源。

什麼是 Umbra 3 OB?

Umbra 3 OB 是一個獨立的遮擋剔除組件,同時使用 CPU 和 GPU 用於確定可見性。Umbra OB 不需要單獨的預處理步驟,在極為動態的場景(例如爆炸場景)工作效果極佳。

什麼是“增量烘焙 (Incremental Bake)”?

此功能將更改作用於場景中,這樣僅有受影響區域的可見性信息需要重新計算,而無須再次烘焙整個場景。烘焙過程可以輕鬆分佈至多個線程或一個網絡,並且結果可被緩存以提供給整個開發團隊使用,而無須再次本地烘焙整個場景。

Umbra 3 可用於哪些平台?

PlayStation 3、Xbox 360、PC、PlayStation Vita 和 iOS 平台。

我們可以按需求,為其他平台提供 Umbra 3。這麼說吧,我們無法列出 Umbra 3 支持的每個平台…

Umbra 3 可用於商業化引擎嗎?

可以。Umbra 3 可整合入 Unreal Engine 3™、GameBryo™、BigWorld™、Vision™ 和 Unity 3D™。Unity 3D 使用 Umbra 3 優化器和 Umbra 3 運行時組件,其他引擎集成使用 Umbra 3 OB。

將 Umbra 3 整合入我們的引擎中需要多長時間?

時長取決於您的引擎,但將 Umbra 3 與專有遊戲引擎的基本整合通常需要約 3 天時間。Umbra 3 SDK 包中包含詳盡的整合指南與示例代碼,這使得您的整合非常簡單。

我們是否可以獲得源代碼?

可以。在獲得 Umbra 3 的許可后,您即可訪問源代碼。您也可以與架構師 (Architect)本人交談。

我們的PlayStation 3遇到性能問題需要幫助,你們能幫忙嗎?

當然可以。

如果時間緊迫,我們需要快速獲得解答,你們的支持人員能做到嗎?

沒問題。試試就知道!我們的所有支持工作都是由參與Umbra核心技術研發的工程師負責的。

聽起來似乎不錯!我該如何開始試用Umbra 3並作出決定?

真高興您這樣問。請訪問我們的評估頁面,直接在這裏輸入您的申請,或發電子郵件到sales@umbrasoftware.com ,我們將很快答覆您。

改進渲染,更高幀速,更高細節的環境,更大繪製距離
Umbra 3 可以幫您全部實現