2011-09-07 76 views
6

我正在爲一個藝術家公司編寫一個支持全高清的2D引擎,希望它是跨平臺的,並且是用OpenGL和C++編寫的。全高清2D紋理內存OpenGL

我一直面臨的主要問題是如何處理所有這些高清精靈。藝術家以24fps的速度繪製圖形,並將它們導出爲png序列。我已經將它們轉換爲DDS(不理想,因爲它需要加載directx頭文件)DXT5減少了文件大小。遊戲中的某些場景一次可以有5個或6個動畫精靈,並且這些場景可以由200個以上的幀組成每個。目前我正在將sprites加載到指針數組中,但加載時間過長(即使使用壓縮紋理),並使用相當多的內存(大約500mb用於全部場景)。

所以我的問題是你有任何想法或提示如何處理如此大量的幀?有一對夫婦的想法,我thought've的:

  • 使用SWF格式,從Flash
  • 實現一個2D骨骼動畫系統中存儲的幀,更換PNG序列(我有顧慮關節是可見的)

像Castle Crashers這樣的遊戲如何快速加載高清顯卡?

+1

從磁盤加載太長,或上傳到GPU太長時間? – genpfault

+0

「不理想,因爲它需要directx標題才能加載」您不需要Direct3D標題來加載DDS。 –

回答

2

24 fps手繪動畫?你有考慮過降低幀率嗎?即使是電影質量的cel動畫也很少以24fps的速度繪製。即使降低到18 fps也會擺脫25%的數據。

無論如何,您並未指定,其中您的加載時間很長。是從硬盤加載到內存的問題,還是內存質量加載問題?您是否經常將紋理數據集交換到GPU中,或者您是否在加載時僅從紋理數據中構建一堆紋理?

如果是磁盤加載問題,那麼您唯一真正的選擇是壓縮磁盤上的紋理數據並將其解壓縮到內存中。 S3TC風格的壓縮並非如​​此壓縮;它被設計成可用於紋理硬件的可用壓縮技術。通常可以通過使用標準壓縮庫使其更小,如zlib,bzip2或7z。當然,這意味着必須對其進行解壓縮,但CPU的硬盤速度比硬盤快,所以這通常是總體上的勝利。

如果問題出在紋理上傳帶寬上,那就沒有很多解決方案了。那麼,取決於你感興趣的硬件。如果您感興趣的硬件支持OpenCL,那麼您始終可以將壓縮數據傳輸到GPU,然後使用OpenCL程序將其直接解壓縮到GPU內存中。但要求OpenCL支持將影響您可以支持的最低硬件級別。

不要很快地排除2D骨骼動畫。像Odin Sphere這樣的遊戲可以通過對每個手臂位置進行多個版本來實現更好的2D骨骼動畫。被繪製的是最接近它所連接的身體部位的那個。他們還利用聰明的藝術來隱藏任何缺陷,如喇叭服裝等等。

+0

hmnn感謝您的建議,它出現在我的案例中,它是紋理上傳帶寬。我使用zlib打包紋理,並優化png紋理。它使速度更快一些,但可能不得不採取降低幀速率的措施。再次感謝! – GracelessROB

4

首先要記住的是,並非所有的平臺都支持DXT5(特別是手機)。

除此之外,你有沒有考慮使用類似zlib來壓縮紋理?紋理可能會有相當程度的自相似性,這意味着它們會壓縮很多。在這個時代,由於處理器的速度,解壓縮成本很低,節省的時間使得數據離開磁盤可能比解壓縮所花費的時間要有用得多。

如果我是你,我會從那裏開始。

+2

+1爲我見過的最好的壓縮庫,zlib – Prime

+0

大多數手機無法處理500MB的紋理數據,所以我猜那些對他無關緊要;) –

+1

@Nicol:你可以用zlib壓縮和流。 – Goz