Sunflat のブログ

ソフトウェア開発についての話題が多いかも

背景が不透明な画像から、背景が透明な画像を作成する

ゲームのキャラクター作成に、終作六角大王やさし絵スタジオに付属の3D素材集をよく使っている。でも、六角大王では背景を透過にしてレンダリングした画像を出力できない。手動で背景を透過に加工すると、どうしてもエッジの部分が汚くなってしまう。

背景色を白にして出力した画像(白バック画像)と、背景色を黒にして出力した画像(黒バック画像)から、背景を透過にした画像を生成できるらしいので、ツールを作ってみた。(計算とかは、ここを参考に


ここに置いておきます。要Java1.5以降。Javaソースつき(BSDライセンス)。Windowsで動かしたけど、他OSでも「java MakeAlphaImg パラメータ」と実行すれば動くと思う。
http://www2.sunflat.net/files/MakeAlphaImg.zip

使い方

入力画像である、白バック画像を filename_w.png 、黒バック画像を filename_b.png という名前で置いておき、

MakeAlphaImg --png filename

と実行すると、filename.png というPNG画像を生成する(アルファチャンネル付き24bit PNG画像)。(入力画像がbmpの場合は MakeAlphaImg --bmp filenameで)

また、結果のチェック用に filename_a.png という画像も生成する。不透明度255のピクセルは白、不透明度0は黒、その他(半透明)は赤で出力するので、処理結果が正しいかちゃんと確認する。

ちなみに、六角大王Super6の仕上げレンダリング画像は、毎回微妙に結果が異なっている(ランダムノイズが乗る)みたいなので、上記のままではうまくいかない(本体の部分が若干半透明になってしまう)。「高画質」の設定で仕上げレンダリングして、

MakeAlphaImg --png filename --upperTrim 16

とかやると、不透明度の上側をトリミング(アルファ値 (255-16)以上の部分を、255にレベル補正)して、良い感じにしてくれるはず。

実行例は以下。保存してPhotoshopで拡大して見ると、エッジの部分に綺麗にアンチエイリアスがかかった状態で背景透過になっているのが分かる。

それにしても、六角大王Super6のGIレンダリング画像は綺麗だなぁ。