首頁  >  文章  >  後端開發  >  遊戲裡redux什麼意思

遊戲裡redux什麼意思

(*-*)浩
(*-*)浩原創
2019-05-14 14:32:4410052瀏覽

我所遭遇過的遊戲中間件---Redux,關於Redux:

推薦課程:C#教學

遊戲裡redux什麼意思

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.

# 17.3M674ms25878 ms25911ms#20.6M##813ms以引擎載入本地檔案創建這300個紋理需要的時間約為8秒,透過解壓縮Redux檔案來創建300個紋理需要花費30多秒時間,是本地加載的4倍。
#壓縮方式
檔案大小
載入檔案時間
同步建立紋理時間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





#Redux Mode1

無損壓縮

Texture per chunk


(此為創ReduxHandle的時間)

  29027ms

29089ms

針對不同大小的文件,建立紋理所使用的時間如下表所示:

#紋理大小##Redux Mode2建立時間#11K #65K257K#1025K#2048*20485462K#

五.影像產生功能

使用若干個簡單的圖元,經過演算法產生複雜的影像.這裡最大的問題是,美術無法適應這種做圖方式.正常情況下,美術用繪圖板在PS中做圖,而Redux則要求美術以解析的方式,先想像出一張圖由多少圖元組成,再設計好圖元的組合方式.如何讓圖元生成圖像,這種邏輯思維太顛覆了.一般人很難有效率的用它提供的軟體做圖.就是因為這個原因,最終這個中間件沒有使用.

六.軟體問題

(1)專案的屬性設定時,設定Mode2與Mode3產生的壓縮檔案是一樣的。

(2)單幅紋理的壓縮設定中Redux Mode3 與專案屬性中的Mode3不一樣。

設定Redux Mode2與Redux Mode3沒有任何差異.

(3)對於某些紋理檔案壓縮後資料大小,要大於未處理的資料大小。

原DDS檔案大小為6.475KB,壓縮後為6.682KB

原DDS檔案大小為57.6KB,壓縮後為140.9KB

(4)使用有損壓縮,對一些紋理會產生明顯的斑駁.

(5)當時我使用的版本,如果紋理的數目過多,會導致軟體崩潰。

(6)Redux線程不安全,所以不能同時解壓縮多個紋理。

七. Redux 後記

 我個人對Redux的感覺是:這個中間件很奇怪.目前的發展,硬碟大小不是問題,記憶體的消耗也不是問題.最大的問題是提高效率.為了提高效率我們經常使用一些用空間換時間的算法.而Redux則反其道而行之,它所做的無非是用時間換空間.以上這些材料還是我兩三年前整理的,文章中的性能測試數據僅供參考,不知道現在Redux發展的如何,也不太清楚市面上有多少遊戲使用它.用Google搜索了下,也沒多少關於它的網頁.也許Redux會在移動遊戲上有所發展,畢竟現在移動端的磁碟空間比PC端小了很多.

##文件大小
引擎載入建立時間
Redux Mode1建立時間

##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中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn