我所遭遇過的遊戲中間件---Redux,關於Redux:
推薦課程:C#教學。
Substance Redux 是一款紋理處理軟體加上中間件,專門用於紋理產生和壓縮。具其使用者指南介紹,它能夠對紋理集進行最佳化,可以將現有壓縮演算法的效能提高50%或更多。其壓縮方式可是無損壓縮,也可以是無損壓縮。壓縮時可以由使用者自訂壓縮比和影像品質。
Redux可以針對批次紋理檔案進行壓縮打包。操作流程是新建一個Project項目,為該項目導入若干個紋理文件,可以設定每一個紋理的壓縮參數。最後導出壓縮檔。 Redux可以對多種格式的圖片檔案進行壓縮。若輸入影像的長寬不為2的N次冪,Redux會自動將其拉伸至2的N次冪。 ReduxSDK提供的Demo中將壓縮檔案解壓縮成符合DDS格式的功能。
Redux最大的賣點在於其影像產生功能,它可以用若干個簡單的圖元,經過演算法產生複雜的影像.圖元只需要佔用很小的磁碟空間,產生方法的保存也用不了多少磁碟空間,按他們官方的說法,遊戲中佔用磁碟最大的部分是紋理,而使用了Redux可以將紋理佔用的磁碟空間降低到最小,從而最多能將遊戲的發布包大小降低到二分之一.
二. Redux 壓縮方式
Redux 提供3種紋理壓縮方式:
Redux Mode 1(Redux 模式 1)是無損壓縮演算法,在大多數情況下壓縮比最小。但是,通常它的渲染速度最快。
Redux mode 2(Redux 模式 2)是提供高品質影像的快速壓縮演算法,但是尺寸縮減率為 40% 左右。
Redux mode 3(Redux 模式 3)實現了影像品質和尺寸縮減率的大致均衡。影像品質低於模式 2,但透過此模式可以獲得更高的壓縮比。尺寸縮減率為60% 左右。
在實際操作中,我將300張DDS檔案進行壓縮,發現Redux mode 2與Redux mode 3產生的檔案大小是一樣的。我當時沒有在意這些DDS檔具體是什麼壓縮格式,估計大部分為DXT5的.
三. Redux 壓縮檔
Redux 主要針對批次紋理檔案進行壓縮,壓縮後的檔案分為兩類。一個「頭」文件,包含主要資料檔案的目錄並向解壓縮程式碼提供每個紋理的位置。該檔案的副檔名為 .RDXH,用於儲存每個紋理的詳細信息,例如紋理名稱、資料夾和路徑。一個或多個“數據”文件,包含實際已壓縮的紋理,這類文件的擴展名為.RDXC。第二類文件將採用「塊」。可以將所有紋理儲存在一個大檔案中,這樣就只需要處理一個資料「塊」。對於匯出的壓縮「區塊」文件,可以有以下三種設定方式:
1. No Chunks(無區塊)-也就是一個大數據文件,包含專案中每個單獨的紋理;
2. Chunks split according to a size limit(根據大小限制來分割區塊)-例如,每4 MB 資料建立一個新區塊;
3. Chunks split according to content(根據內容分割塊)-即為每個紋理建立一個新區塊。此時會產生一個頭文件,若干個chunk文件。
產生壓縮檔案之後,如果對原始紋理檔案有任何改動,則必需重新產生壓縮檔案。這種壓縮方式不太符合我的想法。我所希望的是透過一個紋理名找到一個壓縮文件,載入該文件,解壓縮並產生紋理。如果使用Redux,引擎需要先載入一個.RDXH頭文件,產生一個Redux定義的ReduxHandle物件。再根據紋理名稱找到紋理下標索引,再透過索引值使用Redux提供的介面取得紋理資料。建立只含有一個紋理檔案的Redux工程,這樣產生的壓縮檔案中有含有一個紋理。這是很麻煩的事情,工作量會很大。
四. Redux 解壓縮
ReduxSDK提供的Demo中將壓縮檔案解壓縮成符合DDS格式的數據,我曾經對其性能做過測試:首先使用300個DDS檔案進行測試。原檔案大小為59.6M,若使用RAR壓縮後大小為25.9M。 DDS的壓縮格式,當時沒有記錄,估計大部分為DXT5.
#壓縮方式 |
檔案大小 |
載入檔案時間 |
同步建立紋理時間1 |
同步建立紋理時間2 |
不壓縮 |
#59.6M |
2355ms |
6172 ms |
6133 ms |
#Redux Mode1 無損壓縮 |
19.5M |
743ms |
#25016 ms |
24985 ms |
##Redux Mode2 40% reduction |
17.3M |
702ms |
#25862 ms |
25860 ms |
#Redux Mode3 ##50% reduction | # 17.3M||||
#Redux Mode1無損壓縮Texture per chunk | #20.6M
(此為創ReduxHandle的時間) 29027ms |
29089ms |
針對不同大小的文件,建立紋理所使用的時間如下表所示:
##文件大小 |
引擎載入建立時間 |
Redux Mode1建立時間 | ##Redux Mode2建立時間
##Redux Mode3建立時間 |
128*128 |
|
1ms |
# 105 ms |
31 ms |
30 ms |
256*256 |
|
11 ms |
228 ms |
82 ms |
82 ms |
512*512 |
|
49 ms |
206 ms |
140 ms |
137 ms |
1024*1024 |
|
#176 ms |
297 ms |
#418 ms |
##415 ms |
||
242 ms |
2263 ms |
#2265 ms |
2294 ms |
以上是遊戲裡redux什麼意思的詳細內容。更多資訊請關注PHP中文網其他相關文章!