ReinaS-64892 / TexTransTool

Non-destructive modification to Texture!
https://ttt.rs64.net
Other
67 stars 6 forks source link

TTT AtrasTextureにおいてノーマルマップが想定外に粗くなる #578

Open Narazaka opened 1 month ago

Narazaka commented 1 month ago

https://github.com/ReinaS-64892/TexTransTool/issues/572 の再オープンです。

TexTransTool 0.7.5です。

同様の事例でピクセルノーマライズを有効にしてもなお改善しない事例もありましたので再オープンします。 これはMainTexのほうが1KでNormalが4Kという逆転が起きているのでそこでなにかあったりする……?

image プレビュー image

4K設定にした image

MainTex 1K image Normal 4K image 発光テクスチャ image

MainTex プレビュー中 image Normal プレビュー中 image 発光テクスチャプレビュー中 image

Narazaka commented 1 month ago

crunch圧縮を切っても結果変わらず

Narazaka commented 1 month ago

1K/4Kの設定をしても上記の見た目と同様でした image

image

ReinaS-64892 commented 1 month ago

メインテクスチャーを超える解像度を持つノーマルマップ(つまるところメインテクスチャ以外のテクスチャ)ってあるのか...

基本的にアイランドの再配置を行う前に行われる、テクスチャサイズに応じたアイランドのスケーリングが メインテクスチャーを基準に行われているので...メインテクスチャ以上のサイズを持ったテクスチャが小さく扱われてしまうのはおかしくないですね...

Narazaka commented 1 month ago

近年の服ではむしろノーマルによって付与されるディテールがメインで、MainTexはシンプルみたいなやつもそこそこ数がある認識ですね。 デフォルトでサイズが逆転してるのは結構珍しいと思いますが、軽量化のためにテクスチャサイズを小さくするといった作業においてMainTexのほうがNormalより見た目を大きく変えずに小さくしやすいという事例は普通にあります。

Narazaka commented 1 month ago

またユースケースとして「服aをそのまま着たアバターA」と「服aの一部を流用して服bと組み合わせたアバターB」を作る時 アバターAのためには服aのMainTex 1K/Normal 4Kとするのが最適になる(UV全て使うのでTTTの必要は無い)ならば アバターBでTTT AtrasTextureにかけるために服aのMainTexを4Kにするというのもやりがたく……

ReinaS-64892 commented 1 month ago

まず AtlasTexture の方針は2つ以上のUVを生成はしないという方針で考えていて、それをするための別コンポーネントを考えています。 となれば、ノーマルマップのほうの解像度を維持するには、アイランドのスケーリングを大きいノーマルマップの方でしなければならないですが.... これはメインテクスチャーの暗黙的なアップスケーリングを意味していて禁忌でありやりたくないところ

テクスチャのインポート設定で大きくするか、TextureConfiguratorを使いほかに影響を及ぼさずにメインテクスチャーを明示的に大きくして テクスチャ詳細設定などで調整してほしいといったところ...

Narazaka commented 1 month ago

インポート設定は前述のユースケース記載の通り大きくは出来ないのでTextureConfiguratorを試してみましたが、なんかmitmap有効にすると変な風になる…… image image

あとプレビューが排他ならこれを確認するのはplayしかないですかね?

Narazaka commented 1 month ago

あと以下のようにTextureConfiguratorをAtrasTextureより前に配置すると後述のエラーが出て、逆順にすると恐らくTextureConfiguratorが適用されず劣化したまま変わりません(mipmapの設定によらない) image

System.ArgumentNullException: Value cannot be null.
Parameter name: texture
  at (wrapper managed-to-native) UnityEditor.EditorUtility.CompressTexture(UnityEngine.Texture2D,UnityEngine.TextureFormat,int)
  at net.rs64.TexTransTool.TextureCompress.CompressDeferred () [0x0002c] in .\Packages\net.rs64.tex-trans-tool\Editor\Domain\TextureManager.cs:154 
  at net.rs64.TexTransTool.TextureManager.CompressDeferred () [0x00001] in .\Packages\net.rs64.tex-trans-tool\Editor\Domain\TextureManager.cs:37 
  at net.rs64.TexTransTool.RenderersDomain.EditFinish () [0x00014] in .\Packages\net.rs64.tex-trans-tool\Editor\Domain\RenderersDomain.cs:161 
  at net.rs64.TexTransTool.Build.TexTransBuildSession.TTTSessionEnd () [0x00020] in .\Packages\net.rs64.tex-trans-tool\Editor\Build\AvatarBuildUtils.cs:64 
  at net.rs64.TexTransTool.Build.NDMF.TTTSessionEndPass.Execute (nadena.dev.ndmf.BuildContext context) [0x00001] in .\Packages\net.rs64.tex-trans-tool\Editor\Build\NDMF\TTTPass.cs:93 
  at nadena.dev.ndmf.Pass`1[T].nadena.dev.ndmf.IPass.Execute (nadena.dev.ndmf.BuildContext context) [0x00001] in .\Packages\nadena.dev.ndmf\Editor\API\Fluent\Pass.cs:64 
  at nadena.dev.ndmf.ConcretePass.Execute (nadena.dev.ndmf.BuildContext context) [0x00001] in .\Packages\nadena.dev.ndmf\Editor\API\Solver\PluginResolver.cs:36 
  at nadena.dev.ndmf.BuildContext.RunPass (nadena.dev.ndmf.ConcretePass pass) [0x00135] in .\Packages\nadena.dev.ndmf\Editor\API\BuildContext.cs:350 
  at (wrapper managed-to-native) UnityEditor.EditorUtility.CompressTexture(UnityEngine.Texture2D,UnityEngine.TextureFormat,int)
  at net.rs64.TexTransTool.TextureCompress.CompressDeferred () [0x0002c] in .\Packages\net.rs64.tex-trans-tool\Editor\Domain\TextureManager.cs:154 
  at net.rs64.TexTransTool.TextureManager.CompressDeferred () [0x00001] in .\Packages\net.rs64.tex-trans-tool\Editor\Domain\TextureManager.cs:37 
  at net.rs64.TexTransTool.RenderersDomain.EditFinish () [0x00014] in .\Packages\net.rs64.tex-trans-tool\Editor\Domain\RenderersDomain.cs:161 
  at net.rs64.TexTransTool.Build.TexTransBuildSession.TTTSessionEnd () [0x00020] in .\Packages\net.rs64.tex-trans-tool\Editor\Build\AvatarBuildUtils.cs:64 
  at net.rs64.TexTransTool.Build.NDMF.TTTSessionEndPass.Execute (nadena.dev.ndmf.BuildContext context) [0x00001] in .\Packages\net.rs64.tex-trans-tool\Editor\Build\NDMF\TTTPass.cs:93 
  at nadena.dev.ndmf.Pass`1[T].nadena.dev.ndmf.IPass.Execute (nadena.dev.ndmf.BuildContext context) [0x00001] in .\Packages\nadena.dev.ndmf\Editor\API\Fluent\Pass.cs:64 
  at nadena.dev.ndmf.ConcretePass.Execute (nadena.dev.ndmf.BuildContext context) [0x00001] in .\Packages\nadena.dev.ndmf\Editor\API\Solver\PluginResolver.cs:36 
  at nadena.dev.ndmf.BuildContext.RunPass (nadena.dev.ndmf.ConcretePass pass) [0x00135] in .\Packages\nadena.dev.ndmf\Editor\API\BuildContext.cs:350 
ReinaS-64892 commented 1 month ago

MipMap のほうは普通にバグですね...二つめのNullExceptionはプレイモードに入るときなどのビルド時にしか発生しないバグですね...修正します。

ReinaS-64892 commented 1 month ago

あとプレビューが排他ならこれを確認するのはplayしかないですかね?

TexTransGroupPhaseDefinePreviewGroup を使用してください。(画像はTexTransGroup) image

ただ、前者二つは特別な意味を持ちます。今回のケースでは TextureConfigurator を AtlasTexture の前に動作させる必要があるので TexTransGroup を使うのが適切ですね、詳しい詳細はドキュメントを参照してください。