このプロジェクトに関する重要な変更はすべてこのファイルに記録されます。
このフォーマットは Keep a Changelog に基づいており、 このプロジェクトは Semantic Versioning に準拠しています。
- アンパックモード: ツールウィンドウ上部に パック / アンパック の切り替えを追加しました。新しいアンパックタブはパッキングの逆の処理を行い、パック済みの RGBA テクスチャをチャンネルごとの個別グレースケールテクスチャに分解します。
- 即時チャンネルプレビュー: ソーステクスチャを選択すると、R/G/B/A の内容が 2×2 のグレースケールプレビューグリッドとして即座に表示されます(小さな解像度に制限されるため、16K のソースでも高速です)。
- チャンネル別出力トグル: 各チャンネルにチェックボックスがあり、アセットとして出力するかどうかを個別に選択できます。
- 未使用チャンネル検出: 全ピクセルが同じ値のチャンネル(例: 全面 255 のアルファ)には「均一」バッジが表示され、自動的に出力対象から除外されます。出力したい場合はチェックを入れ直してください。
- スマート命名: 出力のベース名はソーステクスチャ名から既知のパックサフィックスを除去して生成され(例:
T_Rock_ORM→T_Rock)、各チャンネルにはプリセット由来のサフィックスが付加されます — ORM プリセットの場合、T_Rock_AO/T_Rock_Roughness/T_Rock_Metallicになります。ベース名は手動でも編集できます。 - プリセット連携: プリセット(組み込み・ユーザー作成)がチャンネルごとのアンパックサフィックスを保持するようになり、アンパックタブのプリセットドロップダウンから選択できます。既存のプリセットファイルは欠落フィールドを
_R/_G/_B/_Aとして読み込みます。 - 抽出されたアセットは単一チャンネル(G8)テクスチャで、圧縮設定は
Grayscale、sRGB = false、解像度はソースと同じです。 - 中間バッファを持たないストリーミング読み出し: プレビュー・抽出のいずれも、ロックしたソースミップから直接読み出します(フル解像度のコピーも
FColorの中間バッファも作りません)。プレビューはソースをちょうど1回走査し、4チャンネルのボックスダウンサンプリングと均一チャンネル検出を同一パスで行うため、確保量はソースサイズによらず約 256KB です(16K の RGBA32F を選択してもギガバイト単位のスパイクが発生しません)。抽出時のピークは「選択チャンネル数 × 1バイト/ピクセル」で、ソース形式に依存しません。副次的な効果として、2GB を超えるソース(例: 16K の RGBA32F)もアンパックできるようになりました。 - アンパックタブは既存の UX をそのまま利用します: 上書き確認(対象アセットを一覧表示)、キャンセル可能な進捗ダイアログ、トースト通知、8K 超のメモリ警告、日英ローカライズ。
- 注意:
Grayscale圧縮は非圧縮のPF_G8になるため、作成後は 8K のチャンネル1枚あたり約 67MB(+ミップ)のビデオメモリを消費します。
- Unreal Engine 5.8 対応: サンプルプロジェクトのターゲットを UE 5.8 に変更し(
EngineAssociation)、プラグインのEngineVersionを5.8.0に更新しました。対応バージョンは 5.5 / 5.6 / 5.7 / 5.8 になります。
- 結果プレビュー (Live Preview): ツールにプレビューパネルを追加しました。プレビュー更新 ボタンを押すと、現在の入力・反転フラグ・入力チャンネル選択を用いてパック後の RGB 合成結果を低解像度で表示します。アセットを生成せずに結果を確認できるため、「生成 → 確認 → 調整」のループが短縮されます。
- プレビューはターゲットのアスペクト比に従い、長辺最大 256px の小さな解像度で生成されるため、出力ターゲットが 16K でも高速に動作します。
- アルファチャンネルに格納されたデータが RGB 合成をパネル背景とブレンドしないよう、アルファは不透明として表示されます。
- 表示モード切替: プレビュー上部の「表示」ドロップダウンで、RGB 合成と各単一チャンネル(R / G / B / A)のグレースケール表示を切り替えられます。これにより、緑・青・アルファに格納したデータも個別に確認できます。切り替えは即時で、テクスチャの再読み込みは行いません。
- 生成されるアセットと同じ色空間に合わせ、プレビューはリニア(sRGB オフ)で表示されます。
- 大きなテクスチャでのオーバーフロー: ソースデータ抽出時のバイト数計算が 32bit 演算(
Width * Height * BytesPerPixel)だったため、非常に大きな入力(例: 16K の RGBA32F は 4GB)でオーバーフローし、紛らわしい「invalid total bytes」エラーで失敗していました。バイト数を 64bit で計算するようにし、32bit インデックスのバッファに収まらないテクスチャは明確なメッセージで拒否するようにしました。
- 入力チャンネル選択 (Source Channel Selector): 各入力スロットに R/G/B/A から読み取るチャンネルを選択するドロップダウンを追加しました。これまで入力テクスチャの Red チャンネルしか読み取れませんでしたが、カラーテクスチャや既存のパック済みテクスチャから任意のチャンネルを抽出できるようになります。例えば既に作成済みの ORM マップの G チャンネル(ラフネス)だけを別テクスチャに差し替えるといった作業が、事前のチャンネル分離なしで行えます。
- グレースケール形式(G8/G16/R16F/R32F)の入力では選択は無視され、唯一の輝度値が使われます。
- 選択値はプリセットに保存されるため、ワークフローごとに固定の組み合わせを再利用できます(既存プリセットは欠落フィールドを Red として読み込みます)。
- RGBA32F の全チャンネル保持: 32bit float カラーテクスチャを入力した場合に、これまで Red チャンネルしか保持していなかったのを R/G/B/A すべて保持するように変更しました。チャンネル選択と組み合わせて使用できます。
- プリセット管理: ツールUI上部にプリセットドロップダウンを追加し、チャンネルパッキング構成の保存・読み込み・削除が可能になりました。一般的なワークフロー向けの組み込みプリセットを搭載しています:
- ORM(デフォルト): R=アンビエントオクルージョン、G=ラフネス、B=メタリック — サフィックス
_ORM - MRA: R=メタリック、G=ラフネス、B=アンビエントオクルージョン — サフィックス
_MRA - Custom: ユーザーが手動で設定を変更すると自動的に選択されます。
- ORM(デフォルト): R=アンビエントオクルージョン、G=ラフネス、B=メタリック — サフィックス
- プリセットの永続化: ユーザー作成のプリセットは
Saved/TextureChannelPacker/Presets/に個別の JSON ファイルとして保存され、チームメンバー間での設定共有が容易です。 - 動的チャンネルラベル: プリセット切替時にチャンネル入力ラベルが自動更新され、各スロットに期待されるテクスチャの種類が表示されます(例: MRA の場合「Red Channel Input (例: メタリック)」)。
- プリセット対応のファイル名サフィックス: 自動生成される出力ファイル名が、ハードコードされた
_ORMではなく、アクティブなプリセットのサフィックス(例:_ORM、_MRA、_Packed)を使用するようになりました。
- スクロール対応UIとGenerate Buttonの固定表示: ツールウィンドウのコンテンツをスクロールビューで囲み、「Generate Texture」ボタンをウィンドウ下部に常時固定するようにしました。ウィンドウサイズに関わらずボタンが常に表示されます。
- 16K解像度サポート: 最大出力解像度を8192から16384に引き上げました(DirectX 11 および OpenGL 4.1 以降の制限に対応するため)。
- メモリ警告ダイアログ: 非常に大きなメモリを消費する可能性があるため、解像度が8192を超えるテクスチャを処理する際にユーザーへ続行確認を行う警告ダイアログを追加しました。
- 反転トグル: 各入力スロットのラベル横にチャンネルごとの Invert チェックボックスを追加しました。有効にするとチャンネル値が反転(
255 - Value)され、Roughness から Smoothness への変換などに利用できます。 - 非正方形テクスチャ対応: 単一の Resolution フィールドを Width × Height の個別指定に変更しました。UIアトラスなどの非正方形パックテクスチャに対応します。
- 上書き確認ダイアログ: 出力先に同名アセットが既に存在する場合、確認ダイアログを表示するようにしました。意図しないデータ損失を防止します。
- 圧縮設定リファクタリング: 圧縮オプションの内部管理を文字列比較ベースから enum/構造体ベース(
FCompressionOption)に移行しました。保守性とローカライズの安全性が向上します。
- メモリリーク (Memory Leak): テクスチャ生成がキャンセルまたは失敗した際に、
UPackageオブジェクトが適切にガベージコレクションされない問題を修正しました。TStrongObjectPtrを使用したRAIIパターンと適切なクリーンアップ処理を実装しました。
- 並列処理 (Parallel Processing):
ParallelForを使用したテクスチャチャンネルのリサイズ・変換処理のマルチスレッド化を実装し、生成速度を向上させました。 - キャンセル機能 (Cancellable Progress): キャンセルボタン付きの進捗ダイアログを追加し、テクスチャ生成処理を中断できるようにしました。
- 対応フォーマットの拡張 (Extended Format Support):
TSF_RGBA32F(Linear Color) 入力テクスチャのサポートを追加しました。
- スマート命名機能: 手動で編集したファイル名が自動生成によって上書きされる問題を修正しました。ユーザー入力を優先します。
- カラースペース: 生成されるテクスチャの
SRGBを強制的にfalseに設定し、パックされたチャンネルのリニア値を保証するようにしました。 - パッケージング:
.upluginにPlatformAllowListを追加し、モバイルプラットフォームでのパッケージングエラーを防止しました。
- Fab 準備: Fab ストアへの提出用に
.upluginメタデータ (EngineVersion, Installed) を更新しました。 - ライセンス: Copyright の年を 2026 年に更新しました。
- コア機能 (Core Features)
- RGBA チャンネルパッキング (赤、緑、青、および任意のアルファ入力に対応)。
- 入力テクスチャの自動リサイズ (高品質なバイリニア補間を使用してターゲット解像度に合わせます)。
- スマート命名機能: 入力テクスチャ名から出力ファイル名を自動生成します。
- UI & UX
- パスピッカーボタン (出力ディレクトリを簡単に選択可能)。
- 圧縮設定ドロップダウン (Masks, Grayscale, Default)。
- トースト通知 (成功/エラー時のフィードバック)。
- テクスチャスロットへのドラッグ&ドロップ対応。
- 完全な UI ローカライズ (エディタの言語設定に基づく英語/日本語切り替え)。
- 技術的な改善 (Technical Improvements)
- 対応フォーマットの拡張: 8bit/16bit グレースケール、および 16bit/32bit Float (SDF) テクスチャに対応。
- メモリ最適化: 大規模なテクスチャ (例: 8K) パッキング時のピークメモリ使用量を削減。
- パフォーマンス: ピクセルデータ処理における遅延割り当て (Lazy Allocation) の実装。
- バリデーション: 解像度制限 (1-8192) と入力チェックの強化。