メインコンテンツまでスキップ

「Update」タグの記事が4件件あります

全てのタグを見る

TexTransTool v1.0.0 についてと歴史と今後

· 約17分
Reina_Sakiria
TexTransTool Developer

こんにちは! Reina_Sakiria だよ〜!

今回は、v1.0.0 になるに伴って v0.10.0 と同じように概要とかを書いてくのと、以降時の注意点や、今後のセーブデータの方針。そして、歴史や今後について書いてくよ〜!

v1.0.0 へのアップデートの際の注意事項

v0.10.x から

セーブデータに関わる変更点は存在しないため、マイグレーションの必要がなく、そのまま全てのセーブデータが保たれた状態でアップデート可能です!

v0.9.x ~ v0.3.1 から

v0.10.x を経由し、 v0.10.x へのマイグレーションを行ってから、v1.0.0 にアップデートしてください!

ヒント

マイグレーションを行う前に、Project の バックアップを強く推奨します。

備考

v1.0.0 では v0.8.x またはそれ以前のセーブデータはすべて破棄されているため、 v0.10.0 を経由する必要があります。

今後のセーブデータの方針

実験的ではない機能、たとえば SimpleDecal や AtlasTexture などは セーブデータの破壊的変更が、行われなくなり。マイグレーションする必要がなくなります。

ただし、実験的機能はその限りではなく、Migrator にて追記されていますが、マイグレーションが用意される機能の場合は 2 マイナーバージョンの範囲でマイグレーションが可能になります。

実験的機能を使用しているならば、マイグレーションが用意されている破壊的変更がそのマイナーバージョンに存在するか否かを Changelog などから参照するよう、お気をつけてください!

TexTransTool の歴史

丁度いい機会です。ある程度記憶を頼りにまとめておきます!

はじまり

2023年 3月~4月

ある日 ... TTT の歴史は私(Reina_Sakiria) が AAO: Avatar Optimizer を見つけたことから始まります。

私は、もともとアバターモデラーであり、自分自身が FBX によく変更を加え、その変更に耐えることができる Prefab Variant を使用していて、 Prefab の解凍 にはじめからかなり強い忌避感を持っていたため、Moduler Avatar のモジュール的な改変やビルド時に結合する仕組みが非常に魅力的だと思い、 MA を発見した当初(UnityPackage で配布されていた頃)から自作アバターや自作のアクセサリーに組み込んでいました。

そこで現れた AAO は MA にて示されたビルド時に処理を行う非破壊のやり方で、AAO は Mesh を結合することを可能にしていました。

それは、分けたほうが扱いやすさのが上がる Mesh をモデルの時点では分割しておき、ビルド時に結合するという、扱いやすさとパフォーマンスの両立を実現できるということ。

私は、それが テクスチャ にもほしいと思ったんです!

モデルの時点では、ある程度の粒度にテクスチャを分割しておき、テクスチャファイル(.clip や .psd など)の複雑度を下げたり、そもそも UV を作るときの並び替えをできるだけ楽をし、どれだけ空白を作ろうが、人が書きやすい配置を優先で UV を作れるようにし。

それを、ビルド時に全て回収し、必要に応じてテクスチャを結合する仕組み。

備考

複数のテクスチャ を 一つのテクスチャ にまとめることを アトラス化 と言います。

そんな強力なツールが私は欲しかった。

それと

私は、AAO を見つける以前から。アトラス化を Blender の ベイク を使用し非常に面倒な手順を踏みやっていたことがあり、それを以前からやめたいとも思っていました。

ですが、 MA のような非破壊的適用は、MA 以外はできないと思っていて、でも AAO は何故か MA と同じように非破壊的動作や、 VRCSDK にブロックされないコンポーネントの付与ができています。

つまりそれは、MA 以外の存在が MA のような非破壊的適用が可能であるということ。それを AAO を見たときに私は初めて知りました。

こうした、「ビルド時アトラス化がほしいという思惑」と「MA 以外の存在が非破壊的動作が可能であること」を知り、私は 非破壊テクスチャアトラス化ツール の開発を決意しました。

非破壊アトラス化の実現 TexturAtlasCompiler v0.0.0-Beta (2023年 4月頃)

はじめに、非破壊ツールを作るにあたって、AAO の調査をすることから始めました。

なぜ MA のようなビルド時実行や VRCSDK にブロックされないコンポーネントの追加が可能なのか。

AAO は OSS です。なので中身を見ることにしましたが、そこにあったのは MA のコードでした。

どうやら (当時の) AAO は MA のコードをコピーすることによって可能になっていたようです。

MA のコードを解析したところ、 VRCSDK に何故か IVRCSDKPreprocessAvatarCallback というコールバックを受け取る手段があり、 VRCSDK にブロックされないコンポーネントの追加は (当時) VRCSDK にリフレクションでアクセスし、コンポーネントのホワイトリストに追加することで解決されていました。(...治安がやばいね!)

なお後者に対しては、少した頃に VRCSDK から IEditorOnly が追加され、いい手段で回避が可能になったようです。いい話!

非破壊ツールの作り方は理解できなので次は アトラス化 それ自体の開発なのですが、それに関しては AtlasTexture のドキュメント ReinaSakiria's-Note にて詳しく書かれているのでここでは省きますが。

やったらできました。(... ? 、まぁできたので Happy!)

そうして AtlasSet と言うコンポーネントを1つを持つ TexturAtlasCompiler v0.0.0-Beta1 ができました!

ついでに作られたデカール TexTransTool v0.1.0 (2023年 6月頃)

ある日、AtlasTexture のための技術を転用すれば テクスチャを貼り付けるような表現が可能であることに気づきました。詳しくは SimpleDecalReinaSakiria's-Note にて詳しく書かれています。

これは、言うなれば、非破壊的に色改変やテクスチャ改変が可能になるという可能性でした。

そうして生まれた SimpleDecal。 しかし、その時のツール名は TexturAtlasCompiler であり、持つ機能が名前を超過したため、もう少し領域の大きい名前が必要になりました。

その時の核となる技術には 2つの UV 間 を転写する 内部名称 TransTexture があったのもあり。

  • Tex (テクスチャ、 Texture の省略形)
  • Trans (Transform や Transfer など、一意には定まらないが、テクスチャを超越をさせること)
  • Tool (道具)

という形で、 TexTransTool という名前に変更し、SimpleDecal が追加された TexTransTool v0.1.0 をリリースしました!

アップデート

v0.2.x (2023年 6月下旬)

おそらく、非破壊ツールで初めての リアルタイム反映 なプレビューを SimpleDecal に実装しました!

それを実現する仕組みは、今使用されているものとは違い Shader によるエミュレーションであり、目安程度にしかならなければ、複数同時プレビューも不可能ですが、これが 非破壊ツールのリアルタイムプレビューの先駆けだったと思います。

他にも、 AtlasSet の更に優れた UV 並び替えアルゴリズムが追加されたりなどがありますが、このバージョンから VPM にて配布されています!

v0.3.x (2023年 9月頃)

全てのコンポーネントの動作が高速化し、以前まで事前 Compile が必要だったのが必要なくなりました!

それまでは、ビルドする前に設定の変更や追加した場合 Compile を実行し、アトラス化やデカールを適用したテクスチャやメッシュを生成していたのですが必要がなくなりました!

この高速化には AAO の作者(anatawa12)からの助言によって可能になっていて、分単位かかっていた アトラス化や 5秒ぐらいかかっていたデカールが、秒単位や0.1秒単位レベルにまで早くなったため、ビルド時に全ての処理を行うことが現実的になりました。 THX!

それと AtlasSet の名前が作り直しとともに AtlasTexture となり今の TTT と同じ名前になりました。

他にもいろいろ、変なものも含め追加されていますが、特筆すべきなのは SimpleDecal に アイランドカリング が追加されたことですね。

これは 後に IslandSelector となるものですが、これが TTT の Decal 系で 部分的に色を帰るなどこの都が可能になり、TTT で可能な色改変の表現力を飛躍的に大きくするものでした!

それと、この頃から AAO の作者(anatawa12) からの PullRequest の提供により Prefab Override を生成しながら行っていた Preview が AnimationMode を(若干悪用な気もしますが)使用することで、Prefab Override を生成せずにプレビューが可能になっています!

これによって本格的に非破壊的な色改変に必要なものが揃ってきていたのを感じていました。

v0.4.x (2023年 10月頃)

ここらへんから マイナー 1つ ごとの変更点が肥大化し始めます ...

このバージョンは様々な変更があるのですが、特筆するならば、コンポーネントを動作させるに必要なものが大幅に減りました。

以前までは ビルドを受け取るマーカーだったり、マーカーとつながるグループの中に居ないといけなかったのが、そのコンポーネント単体で、アバター内に存在するだけで動作するようになりました!

少し前に NDMF が誕生していて、これに対応した最初のバージョンであったり。

他にも、SimpleDecal などのコンポーネントのリアルタイムプレビューが複数同時にプレビュー可能になり、非常に利便性が向上したりしています。

このあたりで、少しづつ、TTT を使う人が増え始めた気がしますね!

このバージョンは Unity2019 に対応する最後のバージョンでもあるので、それも相まって v0.4.5 (v0.4 系の最終バージョン) のダウンロード数は他に比べて非常に多かったのを覚えています。

v0.5.x (2024年 1月頃)

VCC のバグが治るのを待っていたが、しびれを切らし、ワークアラウンドを適用しアップデートをリリースしました。

このバージョンで非常に大きいのはなんと言っても、実験的機能の TTT PSD Importer でしょう。

PSD を TexTransTool が独自に開発しインポーターによって同時に追加された MultiLayerImageCanvas とそれに連なる TTT のコンポーネントに変換し、PSD のレイヤーレベルの改変を可能にし、ペイントソフトがなくとも PSD を扱うことを可能にしました!

正直、この TTT PSD Importer は実験的機能ながら、 TTT の開発者である私が一番使用している機能です。

他にも、プレビューの仕組みが改善されたり、NDMF 無しの非破壊適用機能が削除されたりなど様々ありますが、詳しくは Changelog を参照してみてください!

それと TTT PSD Importer の詳しい生まれについては TexTransToolPSDImporterReinaSakiria's-Note を参照してね!

v0.6.0 (2024年 3月頃)

非常にたくさんの PSD の再現性の向上が行われています。

私が普段使用している衣装などが TTT によって再現できるようになったのもこの頃からですね!

まぁ ... かなり大変だったですが ...

ここで、記事に取り上げられる事があったりと、とても驚いたのを覚えています。

v0.7.0 (2024年 5月頃)

なんと、クリスタ系の PSD の色合成の再現性が向上し、フォトショップで再現不可能な PSD すらをも TTT は再現が可能なものができたりなどもしましたが、特筆するならば。

  • AtlasTexture が NDMF の Optimizing Phase にて動作するようになったこと
  • SimpleDecal から IslandCulling が切り離され IslandSelector が追加されたこと
  • グラデーションに特化した Decal の SingleGradationDecal が追加されたこと

IslandCulling から切り離され生まれた IslandSelector は、同時に追加された SingleGradationDecal と合わせて、非常に細かく、アバターにグラデーションを適用することを可能にしていて、これらコンポーネントによって、(実験的機能ではあったものの)非常に手軽にちょっと高度な色改変が可能になっています!

ほかにも、 実験的機能に TextureConfigurator という、非破壊的にテクスチャの圧縮設定やサイズを変えることが可能なものが追加されていて、軽量化ツールとしての利便性も向上しています。

このバージョンからマイナーバージョンごとに更新の動画を作るようになりましたね!

v0.8.0 (2024年 9月頃)

このバージョンはなんと言うか、 AtlasTexture に非常にたくさんの機能追加削除変更が行われたのと、なんといっても。

NDMF Preview への対応!

TexTransTool の扱いやすさはこの NDMF Preview 以前と以後では大きく違います!

Prefab を表示するだけで、アバタアップデートーの色改変が全部表示される。本当に NDMF Preview は TexTransTool を使った改変に対して、とても革命的でした。

この頃から TTT への Contributor が増えていて、私としては非常にありがたかったですね! Thank you for Contributors!

v0.9.0 (2025 2月頃)

v0.8.0 頃からですが、TexTransTool のコンポーネントは、モジュール的に使用できるという仕様に変更しています。

そうしてみた時、 SimpleDecal がモジュール的に使用できないのに、SingleGradationDecal がモジュール的に使用できているので、そのあたりの仕様の共通化にともない SimpleDecal のモジュール的に使用可能にする変更が入りました。

ほか、SingleGradationDecal や IslandSelector、(長いこと放置されていた)TextureBlender が実験的機能から外れたり、更に PSD の再現性が向上していたりします。

もっと特殊な IslandSelector や 過去に存在していた MaterialModifier が PR の提供により リメイクされ強力なコンポーネントとなって復活していたり、 AAO との連携機能が追加されてたり ... 様々。

余談ですが、ここのあたりで TTCE-Wgpu が生まれ、 TTT が Unity を脱出する足がかりが生まれていたりします。

v0.10.0 (2025 5月頃)

v0.10.x は v1.0.0 に向けて AtlasTexture の持つ機能を整理する方向に強く走っています。

今後が保証できないものや AtlasTexture である必要のないものを 別のコンポーネントに切り離し、削除したりなど。

ほかには、TexTransTool の Core となる部分が TexTransCore と言う別パッケージに分離していたり、実験的機能で少し面白い物が追加されていたりもしますね!

そういえば NDMF の API を用いた アニメーションによるマテリアルの置き換えにも、少しだけ対応が PR の提供によって追加されています。

そして、このバージョンは TexTransTool 最後の開発中マイナーバージョンになります。

正式リリースと今後

TexTransTool v1.0.0 、リリースにまで 2年 もかかってしまいました。

TexTransTool の開発を始める前は、他(MA や AAO などの)非破壊ツールの開発者のような プログラマー としての強力なバックグラウンドがあるわけではなく、当時は プログラマー としては一年にも満たない未熟者だったのもあり、私(Reina_Sakiria) のプログラマーとしての成長に伴い、紆余曲折を繰り返していたり、無限に脱線し続け、巨大化していたりと。ここまで時間がかかってしまいました。

私自身、TexTransTool のおかげで、私のプログラマーとして大きく成長できたように感じますが

今後の、私自身の成長のため、とある思惑のため、TexTransTool ではないプロダクトの開発に既に着手しています。(それが表に出せるようになるには時間がかかりますが ...) それによって TexTransTool の開発ペースは今までのペースではなくなります。

少なくとも、1つの機能追加アップデートでありえない量の機能追加をするのはもうしません!!!

告知の際に書くことや何を特筆するかに非常に困ることもしばしばあったため、あまりするべきではありません。もっと粒度を細かくするべきでした。(反省)

今後の機能追加など、予定されているものは マイルストーン にありますが、以前よりもかなり粒度を絞るようになっています。

今後、どれくらいの間隔でマイナーバージョンアップデートができるかわかりませんが、TexTransTool はアップデートを行っていく予定です!ちょっとだけ楽しみにしていてね!

それと、TexTransTool のセットアップ済みアセットを販売しようかな、とも考えています。 v1.0.0 以降は安定した機能に破壊的変更を作らないので、アセットの配布というのが現実的になったのもあるためです!

(それと、多少は開発にかかったお金の回収やもっとたくさん他のアバターもほしいので!)

TexTransTool v0.10.0 について

· 約12分
Reina_Sakiria
TexTransTool Developer

こんにちは! Reina_Sakiria です!

v0.9.0 に引き続き Changelog の詳細な解説を適用にやってゆこうかな〜!

すべてを一覧したい人はこっち〜

変更点について

今回の主となる AtlasTexture の話しから!

  • AtlasTexture の LimitCandidateMaterials は削除されました (#923)

これ使ってる人いるの ... ? 私は使ってなかった。

  • AtlasTexture の MergeReference に対して割り当てられていた場合にも置き換えが登録されるようになり、アトラス化後のマテリアルを対象にコンポーネントが動作可能になりました (#900)

これによって MaterialModifier などがマージ後のマテリアルなどに動作できるようになったから、もっと細かく調整できるかも ... ?

  • AtlasTexture がアトラス化するとき、大幅に重なったアイランドが、結合可能なときは結合されて扱われるようになりました (#900)

これにより以前よりも再配置後の配置効率が上がると思う。

  • AtlasTexture TextureFineTuning の MipMapRemove は廃止され、 MiMap が追加されました (#900)

名称が分かりづらいし、今後のために少し命名を変える必要がありました。 MipMap を削除したいときは、この MipMap から UseMipMap を false にするようにね!

  • AtlasTexture MergeMaterial は削除され、割り当てたときに、すべてのマテリアルをそれに結合する AllMaterialMergeReference に変更されました (#900)
  • AtlasTexture MargeMaterialGroup が stable としてマークされました (#900)

マテリアル結合周辺の大幅な変更に伴い Group の stable 化も同時に行われたよ! 具体的に挙動の変更は、結合時参照を設定しないとマージができないような仕様になったという側面がある。不定に頼らないこと。

  • AtlasTexture の TextureFineTuning の初期設定が NormalMap などを考慮に入れた設定になりました (#900)

いくらか lilToon 向けのノーマルマップ周辺の調整 (例えば NormalMap を リニア なテクスチャにさせたりなど) がデフォルトで生成されるようになったから、以前よりも初期設定で見た目が維持されやすいかも!

  • AtlasTexture が非正方形なテクスチャを対象にアトラス化したときに Padding の計算が正しく行えていない問題を修正しました (#900)

VRoid系が踏みまくっていたこのバグは、再実装に伴い解決しました。やったね!

  • AtlasTexture の "_MainTex" 以外のプロパティに自動的に最大サイズを割り当てる機能は削除されました (#900)
  • (Experimental) AtlasTexture に アトラス化対象のテクスチャの最大サイズを割り当てる AutoTextureSizeSetting が追加されました (#900)

以前は自動で設定していたんだけど、邪魔になることが多かったから実験的機能に戻しました。そもそもこの自動サイズ調整はデフォルトの TextureFineTuning を消さないと出てこないからまず機能してなかったというのもあるし ...

  • (Experimental) AtlasShaderSupport は削除されました (#900)
  • (Experimental) AtlasShaderSupport の代わりに ITTShaderTextureUsageInformation が追加されました (#900)

AtlasTexture にアトラスか可能な対象を明示するとともに焼き込みの処理をも行う AtlasShaderSupport は削除されて、 ITTShaderTextureUsageInformation という AAO の ShaderInformation のほぼパクリ API で アトラスか可能な対象の明示のみを行う存在になったよ!

そもそもね、 ScriptableObject で、あの無限にフリーダムしてくれる Shader の焼き込みを表現しようなどということが無茶だったんですよ。そんなわけで、 AAO の ShaderInformation を少しいじるだけで対応できる ITTShaderTextureUsageInformation に代わりました。

でもそれだと lilToon とかのテクスチャの焼き込みが行えなくなったわけだけど、その焼き込みを行う別のツール
ReinaS'lilToonNDMFUtilityLNU lilToonMaterialNormalizer として移動したから気をつけてね!

それと v0.9.0 からのマイグレーション時に ReinaS'lilToonNDMFUtility が存在する場合は LNU lilToonMaterialNormalizer を自動で追加するマイグレーションが走るから AtlasTextureBakeProperty を使用している人は Project に追加することを推奨するよ!

  • AtlasTexture BakeProperty は削除されました。代わりとなる機能は ドキュメントを参照してください。 (#900)

まぁそういうことで BakeProperty は削除されました!

TTT v0.9.0 から内部実装の Unity からの切り離しの都合もあり、ほかシェーダーの再現を TTT のサブシステム上でやりづらくなったのもあってね。

  • (Experimental) AtlasTexture WriteOriginalUV と OriginalUVWriteTargetChannel は削除されました (#900)

AtlasTexture がやる必要がないからTTT UVCopy に移動よ〜!!!


  • TexTransTool のコードの Core である部分が TexTransCore に移動し、TexTransCore に依存するようになりました。 (#888)

これはね、TTCE-Wgpu などの都合もあって C# generic な部分の実装を全部別のレポジトリに移動しました! まぁ通常開発側にならなければ特に何変わらないから機にしなくていいよ。


  • DirectX11 環境で GTX10 や GTX9 系で様々なコンポーネントが正常に動作しない問題を修正しました (#929)

これ私が RTX 2060SP 環境で開発していたのものあって全く壊れていることに気づけなかったんですよね、まぁ DirectX11 の API のドキュメントを見てみると壊れることが自明にわかる実装をしていたので RTX 2060SP がなぜか動いてしまっていたというのが正しいべきなんだけど、そのあたりの API の扱いを修正して正常に動作するようになったよ!

(これ正しくバリデーションをしていない Unity の責任である説はある気がしてきたけど ... まぁええか)


  • TexTransTool の Project に対する設定 (例えば言語設定など) が Tools/TexTransTool/Menu から開くことが可能な Window に移動しました (#932)

Tools/TexTransTool/* にあった設定項目を Menu に移動しました。

ここの Menu の項目って動的に追加する手段がないから楽に実装できる代わりに結構扱いづらいのよね、なので全部べつの EditorWindow に移動する形になりました。

(これによって言語の追加が動的に行えるようになって Happy!)


  • TextureBlender などの テクスチャ選択の部分での選択モード Relative は削除され Absolute だけになりました (#938)

これを有効に使ってるケースが、少なくとも私にはないし v1.0.0 に向けて変な機能は削っていく方針なので、消されました。


  • Decal系の HighQualityPadding は削除されました (#939)

死ぬほど重たいし、いずれ 常に HighQualityPadding のレベルにするから。


  • TexTransGroup は削除されました (#941)
  • TexTransGroup の削除に伴い、PhaseDefine 配下にないコンポーネントは上から順にフェーズごとに実行される、TexTransGroup が存在するときと同様の実行順になるように変更されました (#941)

元々不定の扱いをしていたのは、今後の最適化のためではあるもののあまり意味がないだろうと判断したのでその使用を削除、それに伴い TexTransGroup も削除されたよ!

基本は上から順の実行であることは覚えておこうね!


  • NormalMap は TTT の内部では常に RG で扱われるようになりました (#943)

ダウンスケーリングアルゴリズムがアルファを見る関係で GA にノーマルの情報を詰められると困るのですよ! そんなわけで最終的な圧縮時にいくらかなんとかするようにして、 TTT の内部では NormalMap を常に RG にするようになったんだ〜 まぁ内部的な話で通常知らなくていいことだけどね!


  • IslandSelector は、実行化時に無効化されていた場合に、無効化されるようになりました (#945)

TTT のコンポーネントがだいたい持つ法則に合わせるようにしました。

ただ無効化されている時に AND する時にスキップされているわけではなく、何も選択していないセレクター状態になってるからあまり良くない状態なのよね ... バグと行ってもいいからしばらくしたら修正されてるかも。


  • TexTransTool に 日本語と英語 以外の言語を追加できる API が追加されました (#959)

とある PullRequest中国語 (簡体字) って言うのかな? 言語の追加のの提案があったのだけど、私が 日本語 ギリ ... ? 英語 しかできないから、それ以外の対応をするのはコスト的に重いからこれをマージはできなかったんだ。

でも、ほか言語での使用を禁じたいわけでもないから、 TTT 唯一の Stable な Public API として言語の追加をできるようにしたよ!


  • NDMF の対応バージョンが v1.7.0 以上に変更 (#962)
  • TexTransTool が NDMF によるビルドの場合に Animation によって追加されるマテリアルに対して ほぼすべてのコンポーネントが影響を与えられるようになりました (#962)
  • TexTransTool が NDMF によるビルドの場合に MA MaterialSetter によって追加されるマテリアルに対して ほぼすべてのコンポーネントが影響を与えられるようになりました (#965)

NDMF v1.7.0 にて追加された アニメーションのAPI を用いて、 TTT のコンポーネントがアニメーションに存在するマテリアルへ影響を与えられるようになったよ!それと、 MA MaterialSetter の方にも。

これらの実装は PR によって提供されてるよ、Thank you Ao_425!


  • インスペクターから 実験的機能の警告 や VRAMに影響を与えることを示すIcon などの表示を非表示にできる設定が追加されました(非表示にできるだけであり、実態には何ら影響しません) (#963)

Ao_425 さんによる PR で提供されてるよ、ただ表示消すだけだからそれによって起こることには気をつけるようにね!


これ以下はすべて Changelog-Experimental だよ!


  • AtlasTexture の持つ実験的機能のほぼすべてが AtlasTextureExperimentalFeature に移動しました (#900)
  • SimplDecal の持つ実験的機能のすべてが SimpleDecalExperimentalFeature に移動しました (#924)

v1.0.0 に向けて、マイグレーションの仕組みの都合で別のコンポーネントに切り離す必要があったんだ ... まぁそういうこと!


  • MaterialModifier の Utility などで Shader の変更が加味されていなかった問題が修正されました (#921)
  • MaterialModifier が RenderQueue をオーバーライドできるようになりました (#922)

PR by Ao_425

そういえば MaterialModifier はまだもう少しいじりたいところはありますよね!


  • TTT UVCopy という UV をコピーすることが可能なコンポーネントが追加されました (#926)

AtlasTextureWriteOriginalUV の代替として生まれたコンポーネントです。 TTT v1.0.0 に向けて AtlasTexture から切り離された存在とも言えます。

これと MaterialModifier を使用することで NormalMap2nd などに UV1 を使わせる形で移して AtlasTexture の対象外にするみたいなことがやりやすくなるね!


  • TTCE-Wgpu がプロジェクトに存在する時に TTT の ConfigMenu から Backend として Wgpu を選択することが可能になりました (#934)

TexTransCore へと分離したおかげで Package として存在が可能になった TTCE-Wgpu を実用できるように、 Config から操作できるようになったんだ〜! これで Linux + NVIDIA GPU + UnityEditor + OpenGL の環境で無理やり TexTransTool を正常に動作させることができる...!


  • IslandSelector や AtlasTexture のターゲティングに IsActiveInheritBreaker が干渉できるようになりました (#945)

IsActiveInheritBreaker をいくらか他の場合でも影響するようになったよ!まぁ使いすぎには注意ね!

まとめと今後

今回の Update は v1.0.0 に向けた機能の整理の側面がかなり強いです。それと、AtlasTexture を v0.9.0 から使用している TTT の独自エンジンでの再実装。

その整理の都合で別コンポーネントに行ったり、別のツールに行ったり ... はたまた削除されたり。でも、もう stable とマークしたコンポーネントに破壊が来るのはこれが最後でしょう。次のバージョンは TexTransTool v1.0.0 です!

TexTransTool v1.0.0 にて行うことというのは特に考えていません。マイグレーションのポリシーが少し変わると思いますが、それだけでしょう。v1.0.0 のブログでは何を書こうかな ... ?

TexTransTool v0.9.0 について

· 約29分
Reina_Sakiria
TexTransTool Developer

どーもどーも! Reina_Sakiria です!v0.8.0 に引き続き詳細な Changelog の解説をやってゆくよ~!

すべてを一覧したい人はこっちね

ひとつづつ見ていくよ~

変更点について

このあたりは、 TTT のコンポーネントの動作するか否かや順序制御にまつわる変更だね !細かく見ていこうか

  • テクスチャやマテリアルの範囲を切り分けることができる DomainDefinition が追加されました (#626 #802)

SubDomain のという概念を生やして、アバター内で同一テクスチャを使用しているオブジェクトに対して片方にだけ Decal を適用するような動作をできるようにしようかとも考えたんだけど、メンテナンスコストや必要性の低さなどを理由に断念、結局実装が破棄されたのでしまったので SubDomain 機能を失ってしまって DomainDefinition は VRChat-Avatar 用途では何の効果も持たなくなっちゃった

まぁでも TTT-WorldExtension にて効果を持つ存在になります。 VRChat-Avatar 以外の環境でとりあえず動かすためのマーカーとしての運用に今後はなるでしょう。 ちなみに 過去の TTT のバージョンにはこれに近い存在があったりもしましたが今とは結構違う形だったかも。

  • 親の GameObject が無効な場合でも それの配下のコンポーネントが動作するようになる IsActiveInheritBreaker が追加されました (#626)

これは、新規コンポーネント。 GameObject ヒエラルキー的に無効な場合でも動作できるようにするハック的なコンポーネント、このあたりのヒエラルキー的に無効か否か関連の内部的な API はもう少しいい感じにして AtlasTexture やほかコンポーネントに対しても動作するようにしたいところだなぁ

  • TexTransGroup や PhaseDefine がお互いどちらかが子になるような条項が発生した場合、一番上段に存在するほうの効果が優先されるようになりました (#626)

今までは PhaseDefine が勝ったり、TexTransGroup が効果範囲を広げたりと、微妙にややこしいから一番上段の効果が優先でそれ以下は何の意味も持たない形に破壊的変更しました。 気を付けてね!

  • コンポーネントを入れ子の状態にすると、入れ子にされたコンポーネントは動作しなくなるようになりました (#626)

これは AsLayer を実装するために必要で、 v0.8.0 から警告を表示していたものが実装された形だね。 今後は TTT のコンポーネント配下に TTT のコンポーネントを入れた場合動作しなくなるから気を付けてね!

  • TextureStack のマージタイミングが全フェーズの直後に行われるように変更されました (#626)

これは ... DomainDefinition の追加に伴って SubDomain の概念が一度追加されたときに、すべてのフェーズの終わりに行う必要があったからこうなったのだけど ... SubDomain がキャンセルされちゃったから、ただただ全フェーズの終わり(直後)に行われるようになったという形だね!

まぁマージが行われるタイミングが増えたのでトリッキーなことが以前よりもしやすくなったかも ... ?

  • TextureStack のマージタイミングの変更に伴い NDMF-Preview のオンオフできるフェーズの単位が細かくなりました (#626)

一つ上のマージタイミングの変更に伴い NDMF-Preview のフィルターが細分化された影響で NDMF Preview のオンオフできる単位が細分化されたんだ~

  • TexTransGroup や PhaseDefine が 子の一段目までを保証していたのが、再帰的にすべての子まで保証するようになりました (#802)

これは ... TexTransGroup や PhaseDefine が入れ子になった場合の挙動変更に伴い、一段目の拘束の必要性はないなとも思って、外しました! これからは最上段の効果が再帰的にすべての子まで効果が及ぶよ!


AAO との API 連携関連だね~

v0.8.x のパッチに cherry-pick しちゃったからここに書くのもなんだけど ...

  • AAO:Avatar Optimizer の RemoveMeshBy*** と併用した時に AAO の API を用いて AtlasTexture が不要な領域をアトラス化しないようにする連携機能が追加されました (#670)

AtlasTexture と AAO の RemoveMesh 系を使っていると無駄が若干出るのを回避できるってかんじだよ~!

  • AAO:Avatar Optimizer と AtlasTexture を併用した時に UV を退避し AAO の API に報告し、 AAO の UV を使用する機能と互換性を保つ機能が追加されました (#687)

AtlasTexture と RemoveMeshByMask の互換性問題を回避できるんだ~!

ちなみに、ここにしかまだ書いてないのだけど(このブログを書いた時点では) ... TTT NegotiateAAOConfig というものがあってこれを AvatarRoot につけることでこのあたりの挙動を調整できるんだよね、まぁ使うことないだろうけどなんかあったら使う必要が出るかもしれない ... ?


  • TexTransTool のほとんどのコンポーネントの処理使用される VRAM使用量が削減されました (#672)
  • (Experimental) MultiLayerImageCanvas の処理時に必要な VRAM 使用量が大幅に削減されました (#672)

これはね ... TexTransTool のコア部分の大幅な書き換えの影響だね!代替のコンポーネントが少し削減されたと思う。 それと同時に MultiLayerImageCanvas は内部的な実装も大幅に変わって、通過レイヤーフォルダーの取り扱いが改善されてかなりメモリの消費量が減ったんだ!いい感じなの!

ちなみに MultiLayerImageCanvas の内部実装は TexTransCoreEngine(TTCE) とか呼んだりしてるインタフェースの操作になってるんだ~これによって、 MLIC の処理が抽象化されたインターフェイスへの呼び出しとなって、 Unity の グラフィック API を呼び出すものにしたり、はたまた TTCE-Wgpu という Wgpu を呼び出す実装に差し替えて、 Unity を完全に捨てた状態で動作できるようにもなったんだ~!


  • BlendTypeKey の ポップアップ のラベルが日本語化されるようになりました (#676)
  • (Experimental) 実験的な機能として、HLSLで特定の関数を記述し .ttblend にすることで ScriptedImporter 経由で 合成モードの追加が可能になりました (#676)

BlendTypeKey こと合成モードの仕組みが書き換わって 特定の拡張子で シェーダー を書くと追加できるようになったんだけど、その時にコメントに情報を埋め込む軽い方言のようなものを実装したからそこで合成モードの日本語の表示名とかを書き込めるようにしたことでポップアップのラベル日本語化化可能になったんだ!

合成モードは日本語じゃないとなじみがない物が多くて、あった方が非常に良いとも以前から思っていたからうれしいのよね! まぁ私 TTT を 1年以上使用しているわけだから ... もう英語名に慣れてしまってどっちでもよくなってしまったんだけど ...


  • SimpleDecal の SideCulling が BackCulling に名前変更されました (#692)

これね ... ややこしいから BackCulling って感じで裏面がカリングされることを分かりやすくした感じ!


  • SimpleDecal や SingleGradationDecal の内部実装が通常のレンダリングを用いたものから ComputeShader 実装になり、パディング生成が v0.2.x の頃のような高品質なものになりました (#727)

TexTransTool のコア部分の書き換えに伴い、レンダリングパイプラインを使いずらかったのもあり、今の私だったら、パディング生成が可能な UVtoUV のコンピュートシェーダーを高速に実装できると思って、実装したんだ~!

結果的に同等レベルの速度で動作してると思う!(調査してない) 技術的には先祖返りなんだけど、パディングの生成に関しては昔の方がよかったからね~!それを高速で出来ているかやかなりいい感じってわけ!


  • 一部の場合で Material が一時アセットだった場合に複製せずにテクスチャを置き換えるようになりました (#744)

内部的な API を新しいものを使わせるというのもあるけど、これによって無駄なマテリアルの複製が走らなくなったからビルドは若干早くなったし、これの影響で NDMF Preview の方も少し高速化ができたんだ!


  • SimpleDecal に Select Mode が追加され 既存の方法は Manual に そして新規に、範囲内であれば自動で選択され、マテリアルでフィルタリングも可能な Auto が追加されました (#753)
  • SimpleDecal の MultiRendererMode は削除され、デフォルトで複数レンダラーを選択可能になりました (#753)
  • (Experimental) SingleGradationDecal にも RendererSelectMode が追加され SimpleDecal のような レンダラーを手動で指定する事が可能になりました (#753)
  • (Experimental) SingleGradationDecal がデフォルト設定では 無効なレンダラーに対して描画しないようになりました (#753)

これは SimpleDecal と SingleGradationDecal のレンダラー選択関連の共通化だね! これによって SimpleDecal でしかできなかったレンダラー直接指定が SingleGradationDecal でも使用できるようになったり、 SingleGradationDecal しかできなかった マテリアルベースでの選択が、 SimpleDecal でも使えるようになったんだ~!

まぁこれによって SimpleDecal のデフォルト設定は結構動作が重くなっちゃったんだけど ... まぁ仕方ないね、今後もっと最適化するからそれで ...


  • AtlasTexture が誤って Renderer.enabled が無効なレンダラーを IncludeDisableRenderer が無効な場合に含めてしまっていた問題を修正 (#756)

ずーーーっと見落としていたバグ、気を付けようね!


  • TexTransTool の内部処理で使用される RenderTexture の Format を指定できる設定 InternalTextureFormat が Tools/TexTransTool に追加されました (#774)

TexTransTool のコア部分の大幅な書き換えのおかげでできるようになったから調節できるようにしました! これによってメモリ消費量と引き換えに内部処理が以前よりも高品質にできるよ!やったね!


  • Migrator ウィンドウにて、マイグレーションする必要のない Prefab が選択できたり、実行対象に含まれてしまう問題を修正 (#779)

細かい挙動のバグ修正だね!


  • Packages 配下にある Scene を誤ってマイグレーションしてしまっていた問題を修正 (#779)

NDMF Preview のための Scene を触ってしまったりと ... ちょっとあれだったから、そもそも Packages 配下にあるものには触らなくなりました。

まぁそこら辺に TTT のコンポーネントがあるとも思えないし ... ね!


  • NDMF Preview にて 同一フェーズ に限り、 MaterialOverrideTransfer などのマテリアル改変系コンポーネントの影響でプレビュー範囲が変わるコンポーネントが正しい範囲で行われるようになりました (#806 #828 #830)

実装によって遅くなったり無限ループしたりと、様々あったのだけど ... NDMF Preview の方からがうまくこの問題に対して対処出来たら ... うれしいなぁ

まぁひとまずはこの同一フェーズに限りの特殊仕様を用いてプレビューできるようにしましょう!

これがいつまで保証されるかは謎です。

というかこれ実験的機能の方の ChangeLog に書くべきですね ...


  • 色合成をしない特殊な色合成、 ExtraColorBlending に属するいくつかの色合成が追加されました (#812)

私が エミッションマスクなどを作るのに使っていたいくらかの物を TTT の方に移植と、ついでになんか面白そうなのを新規実装しました! それぞれ名前の通りなので適当に使ってみてね!

ちなみにすべてに共通しているのはアルファブレンドを行わないことだよ!


  • MaterialModificationPhase と PostProcessingPhase が追加されました (#826)

これは MaterialModifier がデフォルトだと MLIC よりも遅く動作してしまって困るから、(元々使用者の意志で指定するべきだと考えていたけれど、適当にやる場合はかなり早期できでないと厄介だとおもったために追加された、でもトリッキーなことをしたい場合は自分で実行フェーズを定義させるようにね!) NearTransTexture のために、かなり遅めで Decal系が終わった後のフェーズで勝つ後処理を意味するフェーズが欲しかったかが目に追加されました。


  • VRAM容量 (テクスチャーメモリやメッシュ) に影響を与えうる設定項目に対して、アイコンが表示されるようになりました (#839)

TexTransTool の禁忌的な行為として、暗黙的な VRAM の増加というものがあるんだけど ... これは裏を返せば、明示すれば VRAM を増加させてもよいということ。

それはそうとしても影響するか否かがわかりやすくあるべきなので追加されたよ!詳しい基準についてはドキュメントの方に書いたからそっちを見てね!


  • SingleGradationDecal が Experimental ではなく、 Stable としてマークされました (#848)

SingleGradationDecal やそれで可能な SimpleDecal の使い方が非常に多く見られた上、 SingleGradationDecal はこれである種 完成ではあると思ったので実験的機能の扱いを外しました!

  • IslandSelectorAND(NOT,OR,XOR) と Box(Sphere,Pin)IslandSelector が Experimental ではなく、 Stable としてマークされました (#848 #865)

SingleGradationDecal の安定化、実験的な機能を外れるに伴い IslandSelector も stable なものがないと困るので、ある程度歴史がある物の中で IslandSelector の実装が変わっても挙動が確実に変わらない存在をこのタイミングで安定的機能という扱いにすることにしました。


  • SimpleDecal がポリゴンに対して非常に小さい場合に、PolygonCulling が有効な場合正しく張り付けることができない問題が修正されました (#851)
  • SimpleDecal の PolygonCulling は修正に伴い削除されました (#856)

これはね、 SimpleDecal のポリゴンの内外判定が酷い物からましなものになった影響で、 Decal に対して非常に大きいポリゴンに対しても正常に張り付けれるようになったから、それの回避用のプロパティの削除とともに修正したんだよね~!


  • TextureBlender が Experimental ではなく、 Stable としてマークされました (#857)

なんでこれが今まで 安定的機能 じゃなかったのか ... ?

まぁ忘れ去られていたのが主な原因ですが、シンプルで単機能。それでいてできることはあるし、上位互換の MLIC もいるからこれはずっとこれのままという形で安定的機能の扱いになりました!


  • SimpleDecal の IslandSelector が Experimental ではなく、Stable としてマークされました (#865)

SingleGradationDecal の安定化に伴い IslandSelector も Stable になったわけなので SimpleDecal でも IslandSelector を使用する機能が Stable 扱いになったよ!


  • SingleGradationDecal のインスペクターのインデントが一部正しくなかった問題が修正されました (#868)

ただのバグ修正やね~!


これ以下は全部 Changelog-Experimental なものだよ~!


  • TTT PSD Importer の PSD の出力元ソフトウェアの判定をオーバーライドできる、 ImportMode 設定が追加されました (#675)
  • TTT PSD Importer の PSD の出力元ソフトウェアに応じて PassThrough や Clipping が調整されるようになりました (#675)

一部のエッジケースにて、その挙動をそれぞれで完全に再現は無理なのでインポート時点で補正することで再現できるようにします!

それに伴って ImportMode を任意にいじれるようにもなったけどほとんどの場合は使用する必要がないかな ... デバッグ用のレベルかも。


  • 16Bit 32Bit の PSD をインポートとビルドができるようになりました (#675)

そんなする必要ないと思うけど、対応したんだ~でも 8Bit PSD に比べると無茶苦茶ビルド重いだろうから ... まぁ動くよって感じね!


  • PSD の古い 色相/彩度 の色調調整レイヤーの追加情報 KeyCode "hue " が誤っていて認識されていなかった可能性のある問題を修正 (#675)

検証したわけではないんだけどただただ誤っていたから修正した


  • クリスタの 色相・彩度・明度 色調調整レイヤーを再現する HSVAdjustmentLayer が追加されました(#678)
  • PSD の ImportMode が ClipStudioPaint に自動決定またはオーバライドされていた場合 HSLAdjustmentLayer が HSVAdjustmentLayer としてインポートされるようになりました (#678)

フォトショとクリスタの間に互換性なんてない ... いいね

フォトショの 色相・彩度 とクリスタの 色相・彩度・明度 は別物でした ...

クリスタのそれを再現するものを作って、その PSD がクリスタだった場合はそっちにインポートするという挙動に変わるようになって再現度が以前よりも上がったよ!やったね!


  • TTT PSD Importer はインポートのタイミングでプレビューを生成せず、必要になったタイミングで生成するようなりインポート自体の速度は大幅に高速化しました。(#727)
  • PSD からインポートされたレイヤーは ComputeShader で解凍されるようになり、プレビューの生成やビルドが高速化しました (#727)
  • TTCE-Wgpu が プロジェクトに存在した場合、PSD からインポートされたレイヤーのプレビュー生成が並列で行われるようになり大幅に高速化するようになりました (#727)

これはね~ 8BitPSD のレイヤーの解凍を GPU 上でやるようになったんだよね!これによってビルドが大幅に早くなったんだけど、その都合で PSD のインポーターから GPU が使用できない都合で インポート時にレイヤーのプレビューを作れなくなったから、プレビューなどで使用されるタイミングに生成するようになったんだ~

ちなみにそのプレビューは TTT の独自で管理していて、 ライブラリの中に net.rs64~ て感じのフォルダが生成されるようになってるはず~

ちなみに! TTCE を用いたバックエンドの差し替えによってレイヤーのプレビューの生成の時でも TTCE-Wgpu を使用することができるようになって、それを使用すれば Unity のシングルスレッド制約から解放されて、プレビューを並列で生成できるようになったから、TTCE-Wgpu があるときは レイヤーのプレビュー生成が速くなるんだ~でも現実的に TTCE-Wgpu を導入する方法はなく、開発者でもない限りできないから今のとこ理意味はないけどね ...


  • シーンビューからエイムすることでアイランドを選択できる AimIslandSelector が追加されました (#764)

新規アイランドセレクターとして、本当のレイキャストができる AimIslandSelector を追加したんだけど、命名に関しては混乱を避けるために RayCast は使わなかったのよね そのため IslandSelector に RayCast という名を冠すものがいないかも。

  • RayCastIslandSelector は PinIslandSelector に名前が変更されました (#764)

PinIslandSelector は前々からやってることが RayCast かというなら少し怪しかったので名称が変更になったんだ~!

  • マテリアルの参照をベースにアイランドを選択できる MaterialIslandSelector が追加されました (#764)

IslandSelector の内部 API の変更に伴いできるようになったから追加してみた! そんないるかわかんないけど ...


  • SimpleDecal の DepthDecal 機能が内部実装の変更により、レンダラーごとではなくすべてのレンダラーで統一された Depthバッファー を参照するようになりました (#764)

AimIslandSelector のため(一番手前という概念のため)ではあるのだけど、 Decal系の描画をすべて一括で行うようになってから、 Depth バッファーも同一のものにできるようになったからそれでいい感じにすることにしたんだ~

ここに書くのもなんだけど ... SimpleDecal から Depth 機能は正直剥がしてもっと別のいい形にしたい気持ちも少しある ... それこそ MLIC に AsLayer で入れてしまえば複数 Decal や 別の Depth をうまく扱う存在と連携させることが可能になるから ... それで良いのでは ... ?


  • Decal系は Preview の場合 HighQualityPadding が無効化されるように変更されました (#764)

HighQualityPadding が死ぬほど重たくなっちゃった影響と、HighQualityPadding の価値がかなり薄れたというのもあって、事故らないようにするために無効化しました。

まぁそもそもデフォでクオリティはかなり高くなったから HighQualityPadding 自体いるかどうかも怪しいけど ... まぁ一応ね

いやこれ今のうちに HighQualityPadding を実験的機能に移すべきだな


  • RendererIslandSelector が NDMF Preview で正常に動作しない問題を修正 (#764)

修正が遅れてしまってちょっと申し訳ないかも ... MaterialIslandSelector が追加できるようになる内部API の変更が必要だったから v0.8.x のパッチにはできなかったのよね


  • TTT PSD Importer は PSD の ImageDataSection の画像を PSDImportedImageDataSectionImage としてインポートするようになりました (#772)

まぁその ... レイヤーがなく一枚の画像だけを持つ PSD が存在するようで ... そういった PSD を引き出せるようにするための応急的な処理にすぎないかな、その一枚の画像だけを持つ PSD の時にこれをレイヤーとして生成するような仕組みはないからそれも必要だけど ... いつか作らないとね


  • TTT PSD Importer は 32bit PSD と 16bit PSD のプレビューが可能になりました (#772)

32bit、16bitの PSD はビルドだけができる状態が開発中の時にあったんだけど、ちゃんとプレビューできるようになったんだ~やったね!


  • 一つの子となる IslandSelector を基に IslandSelect の範囲を広げて選択できる、 IslandSelectorLink系 コンポーネントが 4つ 追加されました (#777)

これは、特定のアイランドの選択から何らかの種類で同じものをすべて選択したことにできる物。

時に便利な時が出て来ると思うけど、私はまだそれを見出していない。まぁ使ってみれば便利かも ... たぶん。


  • SubMeshIslandSelector が SubMeshIndexIslandSelector に名前が変更されました (#777)

SubMeshIndex を基準に選択している(つまり特定の SubMesh だけを選択するものではない)というのもあってややこしいために名前の調整をしました。


  • TTT PSD Importer に PSD ImportMode SAI が追加され、出力元が SAI であるとみられる場合に自動判定されるようになりました (#781)

一応 VRChat 向け 3D モデル のテクスチャを書くのに使っている人が一定数みられたので対応を生やしました。

ちなみに SAI が空っぽのレイヤーに対して、赤のチャンネルが4つあると書きこんでくる謎の仕様を逆手にとって判別しています。 (この謎仕様に破壊されたパーサーは非常に多いかもしれない ... しらんけど)


  • SingleGradationDecal や YAsixFixedGradientLayer にて、境界の色がにじむ問題を修正 (#786)

バグ修正ではあるんだけど ... 今どうなってたっけ ... ? まぁ大丈夫でしょう


  • MaterialModifier がゼロからリメイクされ、マテリアルをその場で変更し差分をオーバーライドとして非破壊的に適用できる機能を持って、新規コンポーネントとして復活しました (#788 #807)

Thank you Ao_425

いつも通りのマテリアルのインスペクターで差分で保持しながら編集できる ... 昔の私があきらめ、結果的に MaterialOverrideTransfer と変わった案、私が Ao_425 にそのことを詳しくいったわけでもないのにそれが完ぺきに実現されていてびっくり!

名前被りはちょっとあるのだけど、以前に存在した MaterialModifier の名前も継承して新規追加!やったね!

ちなみに別物なので 旧MaterialModifier からのマイグレーションはありませんというか 旧版使ってるやつなって私以外いないでしょ! ... しらんけど。


  • マテリアルのコンテキストメニューから MaterialOverrideTransfer と MaterialModifier が追加できる MenuItem が追加されました (#792)

Ao_425 によって提供された

レンダラーとかの下に表示される マテリアルのインスペクターから出せるコンテキストメニューから マテリアル編集系がこれによって出せるようになったよ~

便利だね!


  • 非常に実験的なコンポーネントとして、ポリゴンの最接近点からテクスチャを転写するようなことができる NearTransTexture が追加されました (#816)

これが入った beta のリリースが私の ツイートの中で一番の伸びをしておりびっくり。 ある程度需要がありそうだな~ってところを叩いたら想像以上に需要があってちょっと怖いかも。

今のところ使い勝手は最悪なので内部実装のリファクタリングも含めもっときれいに実装して、インターフェイスも IslandSelector をベースに使い勝手を良くしたところかな~

今使うんだったらセーブデータが吹っ飛ぶ覚悟でよろしくね!


  • MaterialOverrideTransfer は UnDefinedPhase から MaterialModificationPhase に属するフェーズが変更されました (#826)

そんな意味ある気もしないけどこっちの方があるべき場所だからね!


  • 二つの色を指定し、その色差をテクスチャに適用する ColorDifferenceChanger が追加されました (#827)

パ ... とある、VRC アバター向けのテクスチャ改変用の色変更ツール にインスパイアされて作られたもの。

TTT の既存の SybSystem を雑に用いて 30分 ぐらいで作ったけれど、 AsLayer ができることによる価値がだいぶ大きい部類のコンポーネントかも。

動作原理は単純で、対象の代表となる色と目標となる色の差分を全体に適用することで、目的の色にいい感じに近づけることができるという物。単純だけれど、お手軽な色の調整手段としては優れている。


  • MaterialModifier や TextureConfigurator を右クリックをした GameObject 配下のマテリアルやテクスチャすべてに対して コンポーネントを一括で生成できる Generate が追加されました (#833)

Ao_425 によって提供された

一括生成していじりたいものだけ有効化して使っていく感じっぽい、こういった細かい便利機能はあってもよいからね!


  • TextureBlender や ColorDifferenceChanger を MultiLayerImageCanvas のレイヤーとして扱うことのできる AsLayer が追加されました (#834)

MLIC の利便性をさらに向上させるうえ、今後の新規コンポーネントを作るときの実装にも影響を与えるであろう存在。

TTT のコンポーネント が TTT のコンポーネント の子となった時に動作しなくなる仕様の変更はこれのためにある!

TextureBlender の AsLayer は PSD での改変への移行のために、 ColorDifferenceChanger は MLIC との親和性の向上のため。

TextureBlender はシンプルなレイヤーとして、 ColorDifferenceChanger は内部名称 Grab 系と呼ばれる色調補正系のレイヤーとして動作できる。


  • MultiLayerImageCanvas に連なるレイヤーの LayerMask が、 TTT ImportedLayerMask マスクなどの別種類のレイヤーマスクを選択することが可能になりました (#834)

今までその手段を露出させてなかったんだけど、後述する LayerMask のため、選択可能になりました!


  • SimpleDecal や SingleGradationDecal が AsLayer でレイヤーとして扱うことが可能になりました (#837)

AsLayer 第二弾!

特定のレイヤーにクリッピングする形でデカールを貼り付けたり、デカールにデカールをクリッピングしたりと、デカールのできる幅がさらに広がるね!


  • レイヤーに対して使用できるレイヤーマスクとして、 IslandSelector をマスクにすることが可能な IslandSelectAsLayerMask が追加されました (#838)

IslandSelector を用いて PSD のレイヤーの範囲を制御できると便利ですよね!実現しました!

これのために LayerMask を選択可能にしたまである。


  • 距離ベースでグラデーションをかけることができる、 DistanceGradationDecal が追加されました (#847)

一応作っては見たけど ... SingleGradationDecal がただ距離ベースになっただけかも。

いずれこれを複数個つなげて ChainedDistanceGradationDecal とかを作るかもしれん。


  • (Imported)RasterLayer や LayerFolder(非Passthrough) などの、ImageLayer に限り、LayerMask 等も加味した単体プレビューが表示されるようになりました (#849)

一部の物は動作しないけど、一部のレイヤーしか内容が見れなかったりマスクの内容がわからなかったりといったものを改善する形でプレビューの実装自体も書き換わっていい感じになったよ!


  • VRAMの増加と引き換えに元のテクスチャの解像度を超越できる、ParallelProjectionWithLilToonDecal が追加されました (#851)

一応作ってはみたけれど ... TTT の範囲ではない、誰か持って行って別のツール作ってほしいな ...


  • EverythingUnlitTexture が追加されました (#859)

ColorDifferenceChanger 等で、シェーダーの影響がない原色がとりたいときがあるのでそれのために追加されました!


  • PreviewIslandSelector が追加されました が、NDMF 側のバグにより一時無効化されています。(#859 #879)

一時的に無効化されてたりとちょっとあったけど、 IslandSelector の一つを適当にプレビューできる機能。

ただ、今のところ白く塗ってハイライトするだけなのでもう少しハイライトする色を変えれるようにしたりなどを考えたいところ ...


  • MultiLayerImageCanvas もレイヤーのようなプレビューが表示されるようになりました (#870)

上記のレイヤープレビューの続きでもあるわね、 MLIC であるトップレベルでもプレビューできるようになった、いい感じだね!

まとめと次期バージョンについて

今回はたくさんの実験的機能の追加や、一部コンポーネントの安定化など ... AtlasTexture 等にはノータッチなものの核となる部分が差し変わっていたりと、今までのマイナーアップデートの中でもかなりな内容ですね ... またかなりな大きさになってしまった。(何なら一番大きいまである)

次期バージョンの話をしましょう!

次期バージョンこと v0.10.0 は v0.9.0 もてノータッチだった AtlasTexture とその周辺に、安定化を目指した改修、リファクタリングなどをメインに行います。(逆に色改変系にはノータッチになるでしょう)

新機能や実験的機能の追加は極力抑える方針、そしてそれのバグ修正などが落ち着いた v0.10.x を v1.0.0 にする予定です!

ここで一度マイグレーションを区切る可能性が高いですね、それと実験的機能に関しては私が困るというのもありマイグレーションを行いたいので、安定的なコンポーネントに対してマイグレーションの機能を無効化させるような改修も必要になるね!

目新しい物は出ないと思うけど、 v0.10.0 は気長にね~

まぁでも私は ... ちょっとだけ休憩してから v0.10.0 の開発に取り掛かろうかな ... !

TexTransTool v0.8.0 について

· 約31分
Reina_Sakiria
TexTransTool Developer

どーも! Reina_Sakiria です!

今回適当に v0.8.0 にやったことを自分自身も忘れてしまうこともあるので見返せるようにとか、純粋に面白いからこのようなものを書いてみることにしました!

結構 TTT に詳しい人しかわからないような内容になっているかもしれません...許してね!

v0.8.0 にて行われた変更点すべてはこの、

変更記録にすべてがあります。

このブログではそれを適当に意図とか書きつつその内容を書いていくね!

ちなみ...結構思想とか適当に書いてるのでやばいこと言ってても許してね...

NDMF

  • NDMF-Preview に対応 (#516)

v0.8.0 の目玉の一つ! NDMF-Preview への対応!

アバターに D&D した瞬間からプレビューが動作するなどの、非常に強力で今後のテクスチャ非破壊改変のしやすさが大幅に上がるね!とってもうれしい! 異種混合同時プレビューも可能で Modular Avatar とも同時にプレビューできるようになるんだ!

少し先かもだけど、AAO: Avatar Optimizer とも同時にプレビューできるようになるだろうから絶対 MA v1.10.0 にアップデートしようね! そうすれば NDMF v1.5.0 も同時にインストールされるから!


  • NDMF-Preview の場合が テクスチャースタックをマージした時 Texture2D へのコンバートを行わないようにし高速化 (#526)

これは上記 NDMF-Preview の場合内部的に RenderTexture のままにしておけばプレビューが軽くなるってだけの話だね!

Texture2D へのコンバートって遅いからね...


  • NDMF v1.5.0 以上がプロジェクトに存在する場合 Preview、RealTimePreview のボタンは NDMF-Preview の フェーズ単位で有効化、無効化のボタンになるようになりました (#593)

これは、既存のプレビューを行っていたボタンを NDMF のプレビュー単位レベルで制御できるものに置き換えたんだ!

別に置き換えないこともできるけど、既存のプレビューと NDMF プレビューが混じってしまうと混乱を生むし、わかりずらいからね!


  • NDMF の v1.3.0 以降で NDMF 要求バージョンを満たしていない場合に NDMF Console に警告を表示するようになりました (#643)
  • NDMF の v1.3.0 以降で NDMF 要求バージョンを満たしていない場合に NDMF Console に表示される警告にデスクリプションを表示するようになりました (#644)

NDMF が必要なバージョンを下回っている場合に NDMF-report を用いて アバタービルド時に警告を発生させるだけの話だね!


  • NDMF の対応バージョンが v1.3.0 以上に変更 (#516)
  • NDMF の対応バージョンが v1.5.0 以上に変更 (#593)

NDMF-Preview への対応の際に旧バージョンとの互換性を持つのが面倒くさくなったからドロップしました!

以前は NDMF v1.0.0 から最新までのサポートをしていたのですが...まぁ MA とか AAO も同時にみんなアップデートするだろうし、そこまでして古いバージョンへのサポートを維持する必要もないかなって思って、切り捨てることにしました!


  • 一部のコンポーネントの子となり取り扱われるコンポーネントが NDMF-Preview で追加や削除が正しく反応しない問題を修正 (#569)

ただのバグ修正やね...特にいうことなし!

まぁリリースされるバージョンでは MultiLayerImageCanvas が正しくプレビューできるってだけの話!


  • NDMF v1.4.1 などの NDMF 非対応バージョンがプロジェクトが存在する場合に警告が発生しない問題を修正 (#619)

ちょっと上で、サポートバージョンの切り上げが発生したから、警告を正しく出さないといけないよね!

AtlasTexture

  • AtlasTexture の アイランド再配置結果の詳細を NDMFConsole にレポートする機能を追加 (#531)

結局 アトラス化した結果、縮小が発生したのか...とかいろいろ、私は目視で適当に見て見当をつけれるけどそれも完ぺきではない

だから、アトラス化した結果がどうなるかっていう情報を出すのには価値があるんだ!

AtlasResult

上部の空き領域 はどれくらい満杯に詰まってるかがわかる値で 0 に近ければ満杯、 1 に近ければまだ余裕があるってこと!

優先度に応じた縮小 0倍が 優先度に応じた縮小が完全に行われた、 1倍が優先度に応じた縮小が 行えなかった OR 必要なかった ってことだね!

全体的な縮小 1倍 が縮小されていない、値が小さくなるにつれて、まとめる量が多く面積が溢れて解像度が足りなくなっていると考えていいね!

累計再配置計算回数 再配置実行時間 これはそんな意味なくて、どれくらいの回数計算したかとかかった時間ってだけ。

これ後で ドキュメントの方にいい感じに書かないといけない気がするわね


  • AtlasTexture TextureFineTuning ReferenceCopy の TargetPropertyName がリストに変更されコピー対象を複数指定可能になりました (#532)

リファレンスコピー が複数のプロパティ に対して行えるようになったよ!やったね!

以前は一つずつしか指定できなかったからね!


  • AtlasTexture の _MainTex 以外のプロパティで アトラス化対象だった場合、アトラス化後のサイズが自動的にそのプロパティのテクスチャの最大サイズが割り当てられるようになりました (#550)

これは、今まで メインテクスチャー以外もすべて アトラス化後のサイズが アトラステクスチャーサイズと同じになるんだけど、それをそのままにすると VRAM の増加を招くんだ...それを抑えるために、 最初から AtlasTexture には メインテクスチャー以外を 512 にリサイズする 詳細設定が付与されているんだ。

でも、もうちょっと正しく設定できると思って、そのプロパティで使用される最大値が割り当てられるようにしたんだ!

一応今後もデフォルト設定のリサイズは消えないけど、ちゃんと VRAM の変動量を見る前提でそのリサイズを消してみてね!


  • AtlasTexture で生成されるテクスチャーの MipMap 生成が Unity標準ではなく、アルファを加味したもを使用するようになりました (#558)

これね! TTT では Unity 標準の MipMap 生成はランタイム向けっぽくて品質があんまり良くないから Compute shader で独自実装したの!

これによって 透過を使用したテクスチャとかのミップマップに変な色が混じるのを抑えたりできるんだ!


  • AtlasTexture に BackGroundColor が追加され、初期設定で白色に背景色が設定されるようになります (#558)

この背景色設定は、MipMap だったり、テクスチャのVRAM上での圧縮の時などに影響するんだ...

MipMap の話は上の MipMap生成がアルファを加味するようになったから透明色にすると関係のない色が混じるのを抑えらりできるって話なんだけど...圧縮の方は下の方に書いてると思うからそっち読んでね!


  • AtlasTexture TextureFineTuning MipMapRemove に MipMap を削除しないように上書きすることを可能にするための IsRemove プロパティを追加 (#561)
  • AtlasTexture TextureFineTuning Remove に 削除しない等に上書きすることを可能にするために IsRemove プロパティを追加 (#613)

これは、削除する範囲から、削除しない一部を定義できるようにしたかったってだけの話だね! 以前は、削除する定義を覆す方法がなかったから...


  • AtlasTexture の選択候補の表示が、マテリアルのグループ化された状態で表示されるようになりました (#564)

そもそも マテリアルは AtlasTexture 内部で グループ化して扱われるんだ...(だいたい v0.7.0 ごろからそうなってる)

例えば髪の毛のマテリアルと、髪の毛の透過マテリアルなどが良くグループ化されるんだけど、 こういうやつらを同一として扱わないと...エッジケースだけど、余分なテクスチャの領域を使用してしまい、無駄が発生するんだ。

だから、テクスチャが衝突しないものは同一として扱って、違うマテリアルでも同じアイランドが割り当てられることがあるんだけど...その場合 大きさの優先度がの値が複数になっちゃうんだ

その場合 AtlasTexture は平均をとって大きさの優先度を定めるのだけど、そのあたりどこが同一(グループ)として扱われてるかわかるようにしないと不便だよねってことで表示されるようになったよ!


  • AtlasTexture の PixelNormalize 実験的機能から外れました! (#585)

以前へ実験的機能だったけど、これが無いと著しく解像度が落ちてしまう衣装が見られたから、超雑な実装を書き直して正しくしてデフォルトで有効化にしました!

以前のバージョンから使っている人は無効化されたままだけど、有効化してみてね!


  • AtlasTexture のアイランド再配置に失敗した場合にエラーログを出力するようになりました (#586)

さすがに、何も言わず壊れた状態にするのは良くないねって思って...


  • AtlasTexture の NFDHPlasFC が外側のパディングを消去し再配置効率が上がりました (#588)
  • AtlasTexture の NFDHPlasFC が外側のパディングが半分になり、再配置効率が上がりました (#640 #648)

外周に余白が見えているとさすがに無駄だからそれを消しました! ちょっと消しすぎちゃって問題が出たからちょっと巻き戻しが入ったけどね!


  • AtlasTexture が レンダラーのマテリアルに Null が含まれている場合でもアトラス化の対象にできるようになりました (#612)

この仕様って...古い TTT の頃の使用をただただ引きずっていただけなのよね...だから消しました!

これからは一部に Null が含まれていても、該当部分がアトラス化されないだけで問題なくアトラス化できるよ!


  • AtlasTexture の影響範囲が TargetRoot に影響されなくなり、インスペクターのマテリアル表示制限の機能のみに変更 (#516)

これ結構内部的には大幅な変更だし、以前の状態を再現することはできいのよね...

でもこの変更をしないと アバターの外 に AtlasTexture を設定して放置してしまうケースを排除しずらいから必要だったし...

なにより、これによって 設定済み AtlasTexture を D&D で導入することで軽量化させる動作が可能になるんだ!

あと、最初の無駄な手順の排除ができるからとてもいい感じ!


  • AtlasTexture TextureFineTuning の PropertyNames でスペース区切りの複数指定が行える仕様は削除され、リストに変更されました (#532)

この... CustomPropertyName を有効にして スペース区切りでプロパティ名を入れることで複数指定するとかいう...ありえんわかりずらい隠し仕様みたいなやつを削除しました。

今後は代わりにリストで複数指定できます。 やったね!

TargetPropertyName


  • AtlasTexture TextureFineTuning Compress のフォーマットクオリティで決定されるフォーマットがアルファの使用有無を加味したものになるようになりました (#558)

背景色設定が追加された所以でもあるんだけど...以前はアルファとか全く加味せずにフォーマットを決めていたところを、加味するようになりました。

具体的には 以前 Low Normal High が適当に DXT1/BC1 DXT5/BC3 BC7 に決め打ちされていたのが、アルファの有無で Low Normal がそれぞれ DXT1/BC1DXT5/BC3 分岐するようになりました。

これによって背景色が透明なままだと透明な場所が一切なくても、 DXT1/BC1 にならなくなってしまうから、背景色を完全に透明じゃない色にする必要があり... でもそうしてしまうと MipMapに関係ない色が混じってしまうから、そのあたりをユーザーに制御させるべきなので、 背景色設定と実験的詳細設定機能として Discard Alpha が追加されています。


  • AtlasTexture TextureFineTuning Compress を新しく生成した時の値を変更しました (#561)

その部分の値が初期化値が決められておらず、ひどい状態だったので決めてデフォルト値を扱いやすい物にしたよ!


  • lilToon の [Optional] 系を誤って 通常のlilToonの対応で認識してしまい、例外が発生する問題を修正 (#520)
  • lilToon の宝石シェーダーが誤って 通常の lilToon としてサポートされていた問題を修正 (#598)

誤った対象をデフォルトの lilToon と認識してしまうと...例外の原因だからね!


  • SubMesh よりも多くの MaterialSlot がある場合 AtlasTexture のメッシュノーマライズで、誤ったサブメッシュで複製される問題を修正 (#521)

これ...マジで Unity の サブメッシュの数より多いマテリアルの使用を私が理解していなかったがゆえに起きたバグ...

一番最後のサブメッシュがずっと伸ばされるような感じみたいだね。


  • AtlasTexture の IslandFineTuning が Null な場合や IslandSelector が Null の場合に例外が発生する問題を修正 (#530)

ただのハンドリング忘れ。


  • AtlasTexture の TextureFineTuning Resize が AtlasTextureSize よりも大きい解像度に変更できていた問題を修正 (#550)

高い解像度が欲しいなら、アトラステクスチャーサイズから上げてください。


  • AtlasTexture でアトラス化されたテクスチャが他UVを参照していたり無効だった場合に割り当てないようになりました (#565)

これによってちょっとトリッキーなことができるようになったのよね!

例えば lilToon の NormalMap2nd は別UVを指定できるから UV1 を指定して、AtlasTexture の WriteOriginalUV を UV1 に向ければ、アトラス化から除外した状態にしてそのまま使うことができるのよね!


  • AtlasTexture の アイランド再配置 NFDHPlasFC が 上の列から見た空き空間の計算を誤った値にしてしまいアイランドが重なって見た目が変わってしまう問題を修正 (#591)

マジでエッジケースだったんだけど...このあたりの計算が以前から間違っていたらしい

怖すぎ!!!


  • AtlasTexture の lilToon _MainTexHSVG のベイクが正しく行われない問題を修正 (#611)
  • AtlasTexture lilToonSupport の TextureBake で MatCap が使用されていない場合 MatCapBlendMask が白色になってしまう問題を修正 (#634)
  • AtlasTexture lilToonSupport の _Main3rdTex の使用可否判定が誤っていた問題を修正 (#634)

シェーダーサポートはつらいよ...私 lilToon しか使ってないからほかシェーダーが使いたいなら自分で対応を書いてね!

ちょっと前からスクリプタブルオブジェクトでできるから...まぁそのあたりまだまだ不安定だけどね


  • AtlasTexture の TextureFineTuning Compress が ReferenceCopy などが行われた場合に誤った形式で圧縮される問題を修正 (#654)

圧縮が即時実行されないがゆえに、同じテクスチャに複数、"この形式に圧縮して!" ていう命令を発生させてしまったがゆえに、ハッシュの順番だから(恐らく)名前順的に一番最後の命令が優先され、誤った形式で圧縮されることがありました。

このバグ...恐らく結構前から存在してると思われる...怖いね.......

調べところ... v0.5.0 のころからっぽいね....

私が見つけたわけではなく、報告によって発見されたものなのだけど...こういうことがあるから人からの報告って重要なのよね...

まじで...ご報告に感謝!

そのた

  • 部分的マイグレーションが可能なウィンドウ追加と、ツールバーとマイグレーション通知から開けるようになりました (#620)

TexTransTool が、今後ももう少し破壊的変更を繰り返すことに対する覚悟でもある... v1.0.0 はいつになるんだろうね!

それはそうとして...部分的にマイグレーションを走らせるための特別なウィンドウが追加されました!

Migrator

画像はマイグレーション済みだからちょっとグレーアウトしてるけど、プレハブバリアントの階層ごとに少しネストされたような表示になってたりもします。

この時、できるだけまとめてやることを推奨します...特にバリアントなどは根元から一気にやることを推奨します。

あと、 絶対にバックアップするようにね!!! どうなってもこの TexTransTool は MIT license で 無保証 なツールだからね!!!

まぁ..このツールを使う人はある程度上級者でありトラブルシューティングなどができると思って開発しまいますが...まぁそうでなかったとしたら 私を含む強い人に聞いたりしながら頑張りましょう!


  • v0.9.0 にて廃止される予定のコンポーネントの入れ子状態に警告を発生させるようになりました (#629)

次のマイナーでは SimpleDecal を MultiLayerImageCanvas のレイヤーとして扱うみたいなことを考えているので(検討している)

かなりの挙動変更なので事前に警告を発生させることにしました。


  • 実行できない場合などの information などが以前よりも細かく出力されるようになりました (#630)

何も言わずに、何もしない状態になるよりかは...多少何か言って、何もしない状態になったほうがいいかなって思って!


  • SimpleDecal のスケールが反転しているときにヘルプボックスを表示するようになりました (#631)

SimpleDecal はスケール反転などが起きると SideCulling が表向きの方をカリングしちゃったりするから、それを明示するための存在が必要だった。


  • 二のべき乗の値を想定する入力欄がポップアップに変更 (#516)

以前から二のべき乗の値をせってすべき場所は適当な値を入れた場合、二のべき乗に補正されていたんだけど...あんまりこの仕様は知られていないっぽいからポップアップでの選択式に置き換えました。

だけど以前のほうが好きな人もいるかもしれんし...8196とかの入力ができなくなったから、以前の状態に戻せる設定とかを作ろうかなとも考えている。


以前は独自に書いてたんだけど、ありえないほどめんどくさかったから優秀な奴を引っ張ってくることにした!

ありがとう! Makihiro さん!


  • ReferenceResolver は削除されました (#517)

D&D で使えるようにしたかったから追加された存在だったけど...プレビューができなかったり、私が忘れるレベルで使用されていなかったものなので消しました。

何なら今後は デフォルトでコンポーネントが D&D で動くように設計を変えていく方針だから、もういらないね!


  • SimpleDecal でリアルタイムプレビュー中に IslandSelector を割り当てた時に IslandSelector の調整でプレビューが更新されない問題を修正 (#525)
  • プレイモードに入るときなどのビルド時にコンポーネントが新しく生成したが、最終的に使用されていないテクスチャが Null となりテクスチャ圧縮のタイミングで例外が発生する問題を修正 (#581)
  • SimpleDecal の適用対象のレンダラーのマテリアルに Null が含まれている場合に例外が発生する問題を修正 (#612)
  • UnsafeNativeArrayUtility の不要な using で Android ビルドにてコンパイルエラーが発生する問題を修正 (#641)
  • 圧縮設定を None などの圧縮しない形式にした場合に誤って MipMap が Unity標準の物で再生成されることがあった問題を修正 (#649)

ただのバグ修正やね!いうことなし。


  • GameObject/TexTransTool から生成した GameObject がレコードされて終らず、元に戻すを行っても消えない問題を修正 (#602)

右クリックから生成したのを巻き戻しできない問題がったのだけど Ao_425 さん が直してくれました!ありがと!


  • マイグレーションの時に、拡張子が .Unity となっているシーンが存在するとマイグレーションに必ず失敗する問題を修正 (#620)

これ私悪くないと思うんだけど...


  • マイグレーション終了時のシーン復元処理で、すべてのシーンがロード状態で復元されてしまう問題を修正 (#657)

私が基本的にひとつのシーンにプレハブを消したり置いたりしてる運用で、シーンを複数ロードするやり方をしていないから全く知らなかった...

Thanks Gomorroth!

実験的機能

  • AtlasTexture に TextureFineTuning を個別に行う TextureIndividualFineTuning が追加 (#532)
  • TextureIndividualFineTuning の調整用ウィンドウ TextureFineTuningManager が追加 (#532)

以前までのやつはまとめての調整に適しているけど、それだとやりずらい場合があるから...個別調整用の仕組みを追加しました!

この個別調整用ウィンドウで行える TextureIndividualFineTuning のほうが TextureFineTuning よりも強い(後に適用)ので、そのプロパティのテクスチャのサイズとかを適当に書き換えたりとかできるんだ!

あと、どんな感じのサイズになるか...とかの情報もプレビューできるから便利だね!

ただ...個別調整用ウィンドウを閉じずに AtlasTexture の方の編集はしないようにね...そのあたり変更は全く監視してないから。

何とかしたいものだけども...


  • SingleGradationDecal に SimpleDecal と同じ詳細設定が追加されました (#539)

私が実装をただただ放置してたやつだね...ありがと! Gomorroth!


  • AtlasTexture WriteOriginalUV の書き込むチャンネルを指定できる OriginalUVWriteTargetChannel が追加されました (#540)

以前は UV1 にしか書き込めなかったのを、別のチャンネルに書き込めるようにしたよ!やったね!

これでまた、何かトリッキーなことに使えるかも...?


  • 簡易的なグラデーションマップとして UnityGradationMapLayer が追加されました (#545)

改変用のレイヤーですね!

なぜ名前が Unity なのかっていうと、 Unity標準のグラデーションを使用しているから。

つまりこれは既存のペイントソフトの再現ではないから...いずれグラデーションマップレイヤーは増えます。


  • テクスチャの使用率をざっくりと調べることができる DomainTextureAnalyzer が追加されました (#546)

私は、適当にUVを見て、使用されてない個所などを感覚で見当つけたりできるけど...これは特殊技能に近いので、それを簡易的にざっくり行える機能ですね!

アバタールートを選択した状態で Tools/TexTransTool/DomainTextureAnalyzer を使用すると表示されるよ!

この時テクスチャの使用率やどこが使用されているかがさっくりと表示されるけど、これはアニメーションによる制御は全く加味してないから気を付けてね!

ちなみに、使用率が赤色だったら、ほぼ確実に AtlasTexture によって無駄が削減できるって考えていいよ! 黄色は微妙、白は逆に無駄が増えるから、ちゃんとどうなるか見ながら AtlasTexture を設定してね!


  • AtlasTexture に同じテクスチャが割り当てれる場合に ReferenceCopy を自動で設定する AutoReferenceCopySetting が追加されました (#550)
  • AtlasTexture にテクスチャが衝突しない場合に MergeTexture を自動で設定する AutoMergeTextureSetting が追加されました (#555)

アウトラインカラーなどのほとんどのケースで同じテクスチャが使用されている場合に、自動でリファレンスコピーを設定してくれる実験的機能。

あと...衝突しない場合に MergeTexture を自動設定できる実験的機能も追加されました!衝突するか否かは機械的に見たほうがわかりやすいからね!

正直手動でやった方がリファレンスコピーはいい場合があるから...個別調整用ウィンドウから結果を見ながら使ってみてね!

ちなみに...マテリアルマージをする場合はあんまり動作しない(または完全に動作しない)場合があるから気を付けてね!


  • AtlasTexture TextureFineTuning に別のプロパティとテクスチャを適当に統合する MergeTexture が追加されました (#555)

マージマテリアルをしないなら、別のプロパティのテクスチャとくっつけちゃえば、衝突しない場合問題がないからね!

マテリアルを横軸として、プロパティが縦に並んでるとしたら、縦軸でのテクスチャのマージになるわけだけど...結構めんどくさいから自動設定を個別調整用ウィンドウで見ながら補正する形でやるのを推奨します。


  • AtlasTexture に DownScalingAlgorism が表示されるようになりました (#558)

表示されるだけっすね...いずれ意味を持つでしょう。


  • AtlasTexture TextureFineTuning にアルファチャンネルを最大値に塗りつぶし、アルファの情報を破棄する DiscardAlphaChannel が追加されました (#561)

MipMapには背景色がにじんでほしくないが、圧縮の時は不透明なテクスチャとして扱ってほしい場合に使用するものですね!

うまく使ってください1


  • TextureConfigurator にダウンスケール時にアルファを加味してサイズを縮小するかどうかのオプション DownScalingWithLookAtAlpha が追加されました (#573)

ノーマルマップの場合はアルファを加味してしまうとちょっと変になってしまう(二軸の情報の片方がアルファに入ってるから)ので、それ用ですね。

ノーマルマップを調整する場合はこれを外してくださいな!


  • 縦方向固定でグラデーションをそのままキャンバスに描画するレイヤー YAsixFixedGradientLayer が追加されました (#577)

これは、いずれ自由なグラデーションを実現できる存在にすることでしょう。

グラデーションレイヤーと対応するものとして...

でもこれの場合、 UnityGradientLayer になるべきじゃん!!!まぁそん時になったらグラデーションが違うグラデーションレイヤーが追加されると思う。


  • SimpleDecal に キャンバスの内容をそのままデカールにできる OverrideDecalTextureWithMultiLayerImageCanvas が追加されました (#579)

やばやば機能すぎる...でも PSD から持ってきた MLIC をそのままデカールとして使いたいときもあるよね...

でもこれ...参照じゃなくて、デカールの子のオブジェクトだった場合に変更するかもしれんね。


  • AtlasTargetDefine に MipMap の生成時などに使用される IsNormalMap が追加されました (#589)

定義しないといけなかったのよね... TextureConfigurator に追加された DownScalingWithLookAtAlpha と同じ意味を持ちます。


  • Gimp の着色と同じ効果を持つ ColorizeLayer が追加されました (#601)

要望を出したと人にいい感じに作ってもらいました! ありがとね Ao_425 さん!


  • AtlasTexture に アトラス化後のマテリアルに対して スケール(タイリング)とオフセットをリセットする TextureScaleOffsetReset が追加されました (#636)
  • AtlasTexture に アトラス化後のマテリアルに対して ベイクされたプロパティに最大値を割り当てる BakedPropertyWriteMaxValue が追加されました (#636)

_ST を使っているようなループテクスチャとかの類がアトラス化対象になった場合に、適用されてはいるがマテリアルの値がリセットされていないがために結局壊れる問題を何とかするための存在。

アウトラインとか、ベイクする場合最大値を割り当てないと正しく維持できないのだけど...それをするのめんどくさいので、それをどうにかする存在。

ちなみに...0~1のfloatのプロパティを焼きこむ場合に以前はアウトラインだけだったのが、ほとんどの物が最大値を書き込むようになったよ!

少しだけ値の劣化が減ったかもしれないね!


  • AtlasTexture に アトラス化後のマテリアルに対して 特定のテクスチャに対して割り当てを行わないようにできる UnsetTextures が追加されました (#637)

TTT はユーザーの意思であれば破壊は無限にして良い思想なので、ループテクスチャの類を元のテクスチャのままにしておくようなことをするための存在ですね!

見た目はちょっと変わるかもしれないけど、まぁこれを設定するということはそれを理解していると私は思っています。


  • SolidColorLayer Color の Alpha を無効化 (#544)

同じ意味を持つものが複数存在すると時に混乱することもあります。

Color が持つアルファと Opacity が完全に同じ意味でしかないので Color の側を消しました。


  • TextureConfigurator の圧縮設定のオーバーライドでフォーマットクオリティで決定されるフォーマットがアルファの使用有無を加味したものになるようになりました (#558)
  • TextureConfigurator の初期設定を変更 (#562)

AtlasTexture の TextureFineTuning Compress の内容に引きずられています。

内部的には同じものを用いているので当然の話。


  • AtlasShaderSupportScriptableObject AtlasTargetDefine の BakePropertyNames は BakePropertyDescriptions に変更され、UseMaxValue が有効ではない場合 BakeShader に Bake時に最大値が割り当てられなくなりました (#636)

AtlasShaderSupportScriptableObject のセーブデータ破壊案件、軽くマイグレーションを仕込みましたが初回は破壊されるので InternalDebug を用いて値を減らすことでマイグレーションを呼び出せます...頑張ってね!

それはそうとして MaxValue をベイク時に必要とするなら適切にチェックを入れてね。

ちなみに Color の物に対して行った場合の挙動は未保証です。 Float のやつだけにしてほしいかも~

いや何とかしろ案件でもある...


  • SingleGradationDecal でリアルタイムプレビュー中に IslandSelector を割り当てた時に IslandSelector の調整でプレビューが更新されない問題を修正 (#525)
  • LayerFolder に 空の GameObject が含まれると、実行時に例外が発生する問題を修正 (#538)
  • TextureBlender TextureSelector が Absolute の場合、SelectTexture を割り当てても実行できない問題を修正 (#560)
  • AtlasTexture TextureFineTuning MergeTexture で MergeParent を存在しないものに指定した場合に例外が発生する問題を修正 (#561)
  • SingleGradientDecal の適用対象のレンダラーのマテリアルに Null が含まれている場合に例外が発生する問題を修正 (#612)
  • AtlasTexture MaterialMergeGroup の MergeReferenceMaterial が Null の場合例外が発生する問題を修正 (#636)
  • IslandSelectorOR などの子のコンポーネントを使用する IslandSelector が、子のコンポーネントの削除や増加を監視し忘れていた問題を修正 (#659)
  • TextureBlender BlendTexture が空の状態で実行できない問題を修正 (#665)
  • TextureBlender などの TextureSelector が AbsoluteMode だった場合、レンダラー Null 例外や存在しないプロパティへのアクセスが発生していた問題を修正 (#665)

ただのバグ修正っすね...いうことなし!


  • TextureConfigurator で OverrideCompression は有効だが、OverrideTextureSetting が無効な場合に解像度や MipMap の有無が正しくないテクスチャが生成される問題を修正 (#573)
  • TextureConfigurator でもともとのテクスチャよりも大きい解像度を指定した場合に MipMap の0番あたりが黒くなってしまう問題を修正 (#580)

だれですか???こんな簡単に踏めるバグ作ったやつ???

まぁ私しかいないんだけどさ....


  • TexTransToolPSDImporter がインポートするレイヤーのプレビューTexture2D の圧縮形式が誤って DXT5 になっていた問題を修正 (#604)

DXT5/BC3 って...互換性を無視するなら BC7 のほぼ完全な劣化でしかなく...プレビューにわざわざ DXT5/BC3 を使うの自体が間違っていたのだ。


  • TTT PSD Importer 一部の PSD で ImageResourceBlock に Name が含まれている物の読み取りに失敗する問題を修正 (#632)
  • TTT PSD Importer 一部の PSD で 重複した色チャンネルを持つと主張する PSD の読み取りに失敗する問題を回避 (#638)

PSD のエッジケースを踏み抜きました!やったー!

まぁ...うん...あはは...PSDは共通規格じゃないんだよ。 それを見れば何とかなる仕様書なんてものはない。

ちょっとした感想と次やること

今回のアップデートは NDMF-Preview と AtlasTexture の追加使い勝手の改善はメインです。

AtlasTexture とかは虚無すぎる手順が消えたりしてとてもいい感じだし、それのおかげで D&D で適用するみたいなことができてとてもいい感じで良きなのです! あと、 NDMF-Preview はめっちゃ便利だからぜひ使ってみてね!

今後の事なんだけど... v0.9.0 は TTT の色改変系に注力する予定だよ!

高い可能性で SimpleDecal に大きな破壊的変更が入るだろうから...気を付けてね!

他にも Island の x軸分割とか結合とか、いろいろトリッキーなことをできるようにしたい。

詳細は レポジトリの Milestone にあるから見てみてね!

あと今後、TexTransTool は Unity ライブラリから、 C# のライブラリになろうとする計画が v0.9.0 から動き始めるから...いずれは Unity 以外の場所でも TTT の資産を持ち込めるのがとっても楽しみなんだ!

まぁこれは UnityEditor 上から使う場合は表面上はたいして変わらない話なんだけどね!

まぁ...そんなわけで、今後もしばらくは破壊的変更をしていくと思うけど今後も TexTransTool をよろしくね!