0 支持
3.7k 閲覧
(200 ポイント) Q&A
お世話になっております。

SpriteStudio6で作成したアニメーションプロジェクトをUnityにインポートして使用しております。

Unityの性質上そのままではテクスチャサイズが膨大となるため他テクスチャ同様圧縮設定によって容量を軽減させたいと考えております。

ですが、最大サイズを実際のサイズより小さくする以外でファイル容量が変わらないように見受けられます。

最大サイズを下げてしまうと画質が明らかに低下してしまうため、圧縮方式の変更によって対応したいと思っております。

また、インポートによって生成される画像だけを他プロジェクトに移動したところ圧縮が問題なく効いたため、アニメーション関連の設定によって

変更が効かないのではないかと考えております。

こちら、解決手段につきましてご教授のほどよろしくお願いいたします。

SpriteStudioバージョン: 6.3.2.1522

Unityバージョン: 2019.1.1f1
このページをシェアする

回答 1

0 支持
(5.0k ポイント)
編集

gg三浦 様

お世話になっております。SS6Player for Unity担当です。

> また、インポートによって生成される画像だけを他プロジェクトに移動したところ圧縮が問題なく効いたため、アニメーション関連の設定によって変更が効かないのではないかと考えております。

端的には、SS6Player for Unity(以降SS6PU)ではこのような制限をかけていないはずです。

直接テクスチャをフォルダなどにドロップした場合などと比較して、特別な設定をしているとすれば、(テクスチャインポータのInspector上での項目としては)

  1. 「Texture Type」が「Sprite (2D and UI)」になっている。
  2. 「Sprite Mode」が「Multiple」であるとともに「Packing Tag」が設定されている。
  3. 「(Advanced内)Generate Mip Maps」がチェックされていない。

1はビルドターゲットの制約やテクスチャ形式によっては、テクスチャがPOT(2のn乗ピクセル幅)で正方形しか使用できない場合などがあり、その際にUnityが自動的にテクスチャを補正するのですが……それで不都合な伸張が起こらないようにこのTypeに設定されています。

※基本的にテクスチャがPOTでない場合、動作機種などによっては正常動作しない場合があるので、できるだけPOTにすることを推奨しています。

2は主に「Convert to Unity-Native」モードでインポートした場合に使用される項目(スプライトの取扱の設定)なので、「SS6Player」モードではほぼ無視していただいて結構です。

3は通常SpriteStudioのデータにMip-Mapをかけることはしないと思われるので、チェックを外しています。


その上で、例えば当方でSS6のデータをSS6PUにインポートしたテクスチャの圧縮に関するインスペクタを出してみますと(インポート時の各種設定はデフォルトのままです)……

下記のように、各プラットフォーム毎で使用可能なテクスチャ方式が出現します。

これらの圧縮形式が出てこないということでしょうか?

※もしそうであるなら、何か(SS6Playerとは)別の要因な気がします。


一応、圧縮形式が出てこないものについて、下記を検証してみていただけないでしょうか?

  • PNGなどの汎用フォーマットであるか?(BC圧縮などの機種依存する形式ではないか?)
  • POT(テクスチャのピクセル幅が2のn乗)テクスチャである(必ずしも正方形である必要はありません)。
  • チャンネル(画像の色ビット深度)が8bit画像である。

※ただ、上記でなかったとしても圧縮形式の選択ができないことはないと思いますが……。


また、これは蛇足ではあるのですが……念のため。

昨今のGPUハードウェアでの圧縮形式は、ほとんどの場合「圧縮後のファイルサイズは一定」であることが多いです。

※BC圧縮(DXT含む・大抵の場合、非圧縮画像の1/4)・PVRTC圧縮(非圧縮画像の1/6か1/12)・ASTC圧縮(?x?でのブロックサイズによって圧縮率が変わります)など。


以上となります。

お手元の詳細な状況がわからないので、テンプレート的な内容になってしまい、申し訳ございません。

何卒今後ともよろしくお願いいたします。

(200 ポイント)

お世話になっております。

ご確認、ご説明いただきありがとうございます。

>これらの圧縮形式が出てこないということでしょうか?

いえ、圧縮形式は表示されており、適用も可能で警告等もありませんが、適用してもサイズが変わらないというのが正しいです。

適用しようとしている形式は「ASTC?x?」で、画像を直接ドロップした場合はこの適用でサイズが変わります。

また、画像を直接ドロップした場合との違いを改めて確認したところ、インスペクタ上で視認できる情報に差分があり、デフォルトの圧縮設定の時点で既に形式が違うようです。

こちら、参考になりませんでしょうか。

お手数ですが、ご確認のほどよろしくお願いいたします。

非圧縮

圧縮

(200 ポイント)

追加で、インポート経由と画像ドロップの差分です。

インポート経由

(5.0k ポイント)
編集

gg三浦 様

お世話になっております。

その情報の場合、Unityが現在どの情報で持っているか……のはずですので、

RGBA UNorm(Original)の場合ですと、非圧縮状態で扱っているかと思います(ですので、ファイルサイズは1024x1024x4バイトで4MB)。

※同じテクスチャをUnityのスプライトと共用したりした場合に、スプライトが切り離されて再パックかけられる可能性があるため、非圧縮で持っているんだと思います(ビルド後のサイズは指定された圧縮形式のサイズになるはずです)。

RGBA Compressed ~の場合は圧縮形式で扱っているので、ファイルサイズが(この場合は1/4)になっているかと思います。

もし、これが気になるようでしたら、SS6Player for Unityでインポートしたテクスチャの

  • 「Texture Type」をDefaultに設定
  • Advanced内の「Generate Mip Maps」のチェックを外す

ことを行うことで、スプライトアトラスとしての役割がなくなりますので、普通にドラッグ&ドロップした時と同じ表示になるはずです。

※投稿後に気づきましたが……上のサンプルのキャプチャ画像は、下の「Default」の場合に「Generate Mip Maps」のチェックを入れたままでしたため、0.3MBほど容量が増えています(これは私のキャプチャ時のミスです)が……単にMip-Map分増えてしまっているだけです。


ただし、(Defaultにすると)テクスチャがPOTでない場合やプラットフォームの都合でUnityが自動で(ビルド時に)正方形に伸長した場合に、意図しない表示になる場合があるので、その旨十分にお気をつけください。

お手数をおかけして申し訳ありませんが、今後とも何卒よろしくお願いいたします。

(5.0k ポイント)
このあたりをインポート時に切り替えられるようにするか……などについては、今後のバージョンアップの参考にさせていただければと思います。
(200 ポイント)
お世話になっております。

ご確認、ご教授いただきありがとうございます。

>「Texture Type」をDefaultに設定

こちらにて圧縮の適用を行うことができました。ありがとうございます。

一応確認させていただきたいのですが、「Texture Type」をDefaultにすることによってSpriteStudio側で問題が発生することはないと考えてよろしいでしょうか。

お手数ですが、ご回答のほどよろしくお願いいたします。
(5.0k ポイント)

gg三浦 様

お世話になっております。

> 一応確認させていただきたいのですが、「Texture Type」をDefaultにすることによってSpriteStudio側で問題が発生することはないと考えてよろしいでしょうか。

これについては、前述しました通り、
> 1はビルドターゲットの制約やテクスチャ形式によっては、テクスチャがPOT(2のn乗ピクセル幅)で正方形しか使用できない場合などがあり、その際にUnityが自動的にテクスチャを補正するのですが……それで不都合な伸張が起こらないようにこのTypeに設定されています。
というところでして……
  • POTでない
  • (プラットフォーム制限によっては)正方形でない
……テクスチャが、Defaultの場合にはUnityの都合の良い伸長(補正)方式を採りますので、SS6Player for Unityが扱っているテクスチャのUV値とずれてしまい、表示が崩れる場合があります。
※たいていの場合はUnityが補正時にテクスチャを「伸長したか」「余白を追加したか」によって状況が分かれます。
その点をご理解くださいますようお願いいたします。
何卒今後ともよろしくお願いいたします。
(5.0k ポイント)

少々古い情報(SS5Player for Unityのページになります)で申し訳ありませんが……

https://github.com/SpriteStudio/SS5PlayerForUnity/wiki#unity550%E3%81%AB%E3%81%A4%E3%81%84%E3%81%A6

ここに、(当時の)詳細が記載されています。

参考になれば幸いです。

(200 ポイント)
お世話になっております。

ご教授いただきありがとうございます。確認させていただきます。

今回は「Texture Type」をDefaultに設定することによって問題が解決されましたが、通常の画像をドロップした際、

「Texture Type」がSprite(2D and UI)となっていても問題なく圧縮されているため、

この部分単体の問題ではない気がします。

もしかしたらマテリアルを経由していることが原因の1つかもしれません。

もし今後「Texture Type」がSprite(2D and UI)のまま圧縮を適用することが可能な手段が見つかりましたら、機能に取り込んでいただけると幸いです。

以上、ご対応ありがとうございます。
...