私が出会ったゲームミドルウェア---Redux、Reduxについて:
おすすめ講座: C#チュートリアル。
Substance Redux は、テクスチャ処理ソフトウェアと、テクスチャの生成と圧縮に特に使用されるミドルウェアです。ユーザー ガイドによると、テクスチャ セットを最適化し、既存の圧縮アルゴリズムのパフォーマンスを 50% 以上向上させることができます。圧縮方式には可逆圧縮と可逆圧縮があります。圧縮率と画質は、圧縮時にユーザーがカスタマイズできます。
Redux はバッチ テクスチャ ファイルを圧縮してパッケージ化できます。操作プロセスは、新しい Project プロジェクトを作成し、そのプロジェクトに複数のテクスチャ ファイルをインポートし、各テクスチャの圧縮パラメータを設定することです。最後に圧縮ファイルをエクスポートします。 Redux は、さまざまな形式で画像ファイルを圧縮できます。入力画像の長さと幅が 2 の N 乗ではない場合、Redux は自動的に 2 の N 乗に引き伸ばします。 ReduxSDKが提供するDemoには、圧縮ファイルをDDS形式に解凍する機能があります。
Redux の最大のセールスポイントは画像生成機能です。いくつかの単純なグラフィック要素を使用して、アルゴリズムを通じて複雑な画像を生成できます。グラフィック要素は少量のディスク領域を占有するだけでよく、生成方法も必要です。ディスク容量もあまり必要としません。公式発表によると、ゲームでディスク容量を最も多く占めるのはテクスチャです。Redux を使用すると、テクスチャが占めるディスク容量を最小限に抑えることができます。ゲームのリリース パッケージのサイズを最大で半分に削減します。 Redux 圧縮方法
Redux は 3 つのテクスチャ圧縮方法を提供します。
Redux モード 1 (Redux Mode 1) は、ほとんどの場合最小の圧縮率を持つ可逆圧縮アルゴリズムです。ただし、通常はこれが最も高速にレンダリングされます。
Redux モード 2 (Redux モード 2) は、高画質な画像を提供する高速圧縮アルゴリズムですが、サイズ削減率は約 40% です。
Redux モード 3 は、画質とサイズ縮小の間の大まかなバランスを実現します。画質はモード 2 より低くなりますが、このモードではより高い圧縮率が実現されます。小型化率は約60%です。
実際に300個のDDSファイルを圧縮したところ、Reduxモード2とReduxモード3で生成されるファイルサイズは同じでした。当時、これらの DDS ファイルの具体的な圧縮形式については気にしていませんでしたが、ほとんどのファイルは DXT5.
3 だったと思います。 Redux 圧縮ファイル
Redux は主にバッチ テクスチャ ファイルを圧縮しており、圧縮ファイルは 2 つのカテゴリに分類されます。メイン データ ファイルのディレクトリが含まれ、各テクスチャの場所を解凍コードに提供する「ヘッダー」ファイル。このファイルには .RDXH 拡張子があり、テクスチャ名、フォルダ、パスなど、各テクスチャに関する詳細が保存されます。実際の圧縮テクスチャを含み、拡張子 .RDXC を持つ 1 つ以上の「データ」ファイル。 2 番目のタイプのファイルは「ブロック」内にあります。すべてのテクスチャを 1 つの大きなファイルに保存して、データの 1 つの「チャンク」だけを処理することが可能です。エクスポートされた圧縮「チャンク」ファイルについては、次の 3 つの設定を行うことができます:
1. チャンクなし (チャンクなし) - つまり、プロジェクト内の個々のテクスチャを含む大きなデータ ファイルです。
2. サイズ制限に従ってチャンクを分割します - たとえば、データの 4 MB ごとに新しいチャンクが作成されます;
3. コンテンツに従ってチャンクを分割します ブロックを分割します) - つまり、それぞれに新しいブロックを作成しますテクスチャー。このとき、ヘッダファイルと複数のチャンクファイルが生成されます。
圧縮ファイルの生成後、元のテクスチャ ファイルに変更があった場合は、圧縮ファイルを再生成する必要があります。この種の圧縮は私の考えにはあまり当てはまりません。私が望んでいるのは、テクスチャ名で圧縮ファイルを検索し、そのファイルをロードして解凍し、テクスチャを生成することです。 Redux を使用する場合、エンジンは最初に .RDXH ヘッダー ファイルをロードし、Redux によって定義された ReduxHandle オブジェクトを生成する必要があります。次に、テクスチャ名に従ってテクスチャ添字インデックスを見つけ、Redux が提供するインターフェイスを使用して、インデックス値を通じてテクスチャ データを取得します。生成される圧縮ファイルに 1 つのテクスチャが含まれるように、テクスチャ ファイルを 1 つだけ含む Redux プロジェクトを作成します。これは非常に面倒であり、多大な労力を必要とします。 ######四。 Redux 解凍
ReduxSDK が提供するデモは、圧縮ファイルを DDS 形式に準拠したデータに解凍します。そのパフォーマンスをテストしました。まず、テストに 300 個の DDS ファイルを使用します。元のファイルのサイズは 59.6M ですが、RAR を使用して圧縮すると、サイズは 25.9M になります。 DDS の圧縮形式は当時記録されておらず、ほとんどが DXT5 であったと推測されます。
圧縮方式
##同期テクスチャ作成時間 1 |
#同期テクスチャ作成時間 2 |
#圧縮なし |
59.6M |
|||||
可逆圧縮 |
19.5M |
743ミリ秒 |
25016ミリ秒 |
24985ミリ秒 |
||||
Redux モード 2 40% 削減 |
17.3M |
702ms |
25862 ms |
25860 ms |
||||
Redux モード 3 50% 削減 |
17.3M |
674ms |
25878ms |
25911ms |
||||
#Redux モード 1 可逆圧縮 チャンクあたりのテクスチャ |
20.6M |
813ms (ReduxHandle 作成時) |
29027ms |
29089ms |
Load localこの 300 個のテクスチャをファイルから作成するには約 8 秒かかりますが、Redux ファイルを解凍して 300 個のテクスチャを作成するには 30 秒以上かかり、ローカルでロードする場合に比べて 4 倍の時間がかかります。
さまざまなサイズのファイルの場合、テクスチャの作成にかかる時間は次の表に示すとおりです。
テクスチャ サイズ |
ファイルサイズ |
エンジンローディングの作成時間 |
Redux Mode1の作成時間 |
Redux Mode2の作成時間 |
Redux Mode3 作成時間 |
128*128 |
11K |
1ms | 105 ミリ秒 |
#31 ミリ秒 |
#30 ミリ秒 |
65K |
11 ミリ秒 |
228 ミリ秒 |
82 ミリ秒 |
82 ミリ秒 |
|
257K |
49 ミリ秒 |
206 ミリ秒 |
140 ミリ秒 |
137 ミリ秒 |
|
1025K |
176 ミリ秒 |
297 ミリ秒 |
418 ミリ秒 |
415 ミリ秒 |
#2048*2048 |
#2265 ミリ秒 |
2294 ミリ秒 |
###五。画像生成機能は、いくつかの単純なグラフィック要素を使用して、アルゴリズムを通じて複雑な画像を生成します。ここでの最大の問題は、アートがこの描画方法に適応できないことです。通常の状況では、アート描画タブレットは PS To make で使用されます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 はその逆を行います。それが行うのは、時間を空間に交換するだけです。上記の資料は、2 ~ 3 年前に私が編集したものです。パフォーマンス テスト データは、参考までに、Redux が現在どのように開発されているのかは知りませんし、市場でどれだけのゲームが Redux を使用しているのかも知りません。Google で検索しても、Redux に関する Web ページはあまりありませんでした。おそらく、 Redux はモバイル ゲームで開発されます。結局のところ、モバイル ゲームは現在、クライアントのディスク容量は PC クライアントのディスク容量よりもはるかに小さいです。 |
以上がゲームにおける redux とは何を意味しますか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。