mieki256's diary



2014/02/15() [n年前の日記]

#4 [unity][cg_tools] RGBA4444に変換できるツール

Unity上で16bitカラーフォーマットと言うと、RGBAがそれぞれ4bitの画像を示すようで。テクスチャの「Format」で「16 bits」を選択すれば一応16bitカラーになるのだけど、下位4bitを問答無用で切り捨てているような感じで、グラデーション部分のマッハバンドが目立ってしまい、かなりとんでもない状態に。

ディザをかけながら減色した画像をあらかじめ用意することで。そのあたりの問題は緩和できるはずだけど。しかし、そんな変換をしてくれるツールは存在するのだろうか…?

有償ソフトを使う事例。 :

ググってみたところ、有償ソフトならそういう機能を持っているようで。

_Unityで、もっとキレイな16bitカラーテクスチャを使おう! | OPTPiX Labs Blog
_OPTPiX imesta for Mobile & Social | ウェブテクノロジ

OPTPiX imesta は、1ヶ月あたり、24,800円〜35,000円の使用料が必要らしい。

_TexturePacker features

複数の画像を一つの画像(スプライトシート)にまとめてくれる、TexturePacker にも、RGBA4444 をサポートした減色機能があるらしい。値段は…現時点では4,204円と表示されてた。

フリーソフトを使う事例。 :

フリーソフト・無料ソフトではできないのかな、と思ったけれど、一応 GIMP を使ってできるらしい。そういう変換処理をするスクリプトを公開してくれている方が。ありがたや。

_16-bit (was ARGB4444) Dither Script | GIMP Plugin Registry

導入・使用方法は以下の通り。
  1. dither16bit.scm と Grayscales.zip をDL。
  2. dither16bit.scm は、GIMPのユーザフォルダ\scripts\ 以下にコピー。
  3. Grayscales.zip は解凍して、中に入ってる .gpl を、GIMPのユーザフォルダ\palettes\ 以下にコピー。
  4. GIMPを起動。画像を開く。画像 → モード → Dither to ARGB 4444 という項目が増えているので、それを選べば変換してくれる。
スクリプトの中身は覗いてないけど、おそらく、やってることは、以下の動画と同じではないのかなと想像。

_How to create a texture optimized for conversion to RGBA-4444 - YouTube

動画中では、 RGBAチャンネルを分解して、それぞれを、ディザとカスタムパレットを使いつつ減色。RGBAとして再合成 ―― といった作業をしてるように見えた。

ただ、そもそもGIMPの減色機能は、品質的にちとよろしくない印象もあって…。それでも、フリーソフトで一応こういう変換作業ができるのは、ありがたいなと。

Unityを拡張する事例。 :

Unityを拡張して、ディザを使った減色をすることもできるらしい。

_keijiro/unity-dither4444 - GitHub

一応試してみたのだけど。どうも上手く行かず。ファイル名末尾に「Dither」とついてるテクスチャが対象になるはずだけど…。
  • 該当テクスチャのテクスチャタイプが、強制的に「GUI」になってしまって変更できない。
  • 関係ない、他のいくつかのテクスチャも、テクスチャタイプが強制的にGUIになってしまう。
Unityのバージョンが上がったことで関連部分の仕様が変わって、不具合が出るようになったのかしら…。あるいは、元々こういう動作をする拡張、なのかな…。そのへん分かりません。

ImageMagickでもRGBA4444に変換できそう。 :

_ImageMagick - View topic - bad alpha in -remap from RGBA8888 to RGBA4444 で、それらしいやり取りが。しかし英語なのでよく分からず…。

色々試してたら、たぶんできた、ような気がする。環境は Windows7 + ImageMagick 6.8.7-10 Q16 (x86 2013-12-08)。
convert uranus.png -channel RGBA -separate ( -dither FloydSteinberg -remap 16graycolor.gif ) -channel RGBA -combine uranus_im_rgba4444.png
  • uranus.png が入力画像ファイル名。uranus_im_rgba4444.png が出力画像ファイル名。
  • -channel RGBA -separate で、R,G,B,Aチャンネルに分解。
  • その後に続く「 ( 〜 ) 」で、分解された各チャンネルに対して個別にこの処理をせよ、と指定。
  • -dither FloydSteinberg で、フロイド-スタインバーグ方式のディザを指定。
  • -remap 16graycolor.gif で、16graycolor.gif の中で使われている色で置き換える(減色する)ように指定。
  • -channel RGBA -combine で、R,G,B,Aチャンネルを一つの画像に合成。
括弧については、Windows上のDOS窓内だから、そのまま「(」「)」を書いてるけれど。どうやら *NIX上ではシェルの問題で「\(」「\)」と書かないといけない模様。

remapに使ったgif画像(16色分=4bit分)も置いておきます。ただ、パレットデータは、「0xf0f0f0」といった形がいいのか、「0xffffff」といった形がいいのか、ちと分からなかったので両方用意してみたり。Unity上で下位4bitを単に切り捨てているのであれば、どちらでもいいのだろうけど。

16graycolor_f0.gif
_16graycolor_f0.gif (パレットの下位4bitは0。例: 0xf0f0f0)

16graycolor_ff.gif
_16graycolor_ff.gif (パレットの下位4bitは上位4bitと同じ。例: 0xffffff)

前述の掲示板で、サンプルとして上がってた画像に対して、自分も処理をしてみたり。

オリジナル画像。
uranus.png

ImageMagick の変換結果。
uranus_im_rgba4444.png

GIMP + dither16bit.scm の変換結果。
uranus_od_gimp.png


以下、参考にしたページ。

_Quantization -- IM v6 Examples
_Aggressive Engineer: ImageMagickのconvertコマンド > separateオプション, combineオプション
_ImageMagickを使おう
_フロイド-スタインバーグ・ディザリング - Wikipedia
_ディザ - Wikipedia

以上です。

過去ログ表示

Prev - 2014/02 - Next
1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28

カテゴリで表示

検索機能は Namazu for hns で提供されています。(詳細指定/ヘルプ


注意: 現在使用の日記自動生成システムは Version 2.19.6 です。
公開されている日記自動生成システムは Version 2.19.5 です。

Powered by hns-2.19.6, HyperNikkiSystem Project