Skip to main content

TexTransTool v0.9.0 について

· 43 min read
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 について

· 46 min read
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 をよろしくね!