【MMD】縁取りの出ないテクスチャの保存方法3【Krita】【透過部分の色を変えずにPNG保存】
閉じる
閉じる

新しい記事を投稿しました。シェアして読者に伝えましょう

×

【MMD】縁取りの出ないテクスチャの保存方法3【Krita】【透過部分の色を変えずにPNG保存】

2017-11-05 18:00

    (<追記>検証中のため修正がたびたびあるかもしれません。
    2017.11.5 先日公開した直後にいろいろとわかったことがあったため、いったん削除し内容を修正して再公開しました。バタバタしてしまってすみませんでした)

     いろいろな画像ツールで透過PNGや透過TGAを保存してPMXエディタのテクスチャビューで見て調べたところ、多くのツールでは容量圧縮のためか白か黒かまたは指定した色で透過部分を塗りつぶしてしまうことがわかりました。「透過部分の色情報を変更せずにそのまま透過情報だけ加えてPNG保存できるツールが欲しいなあ」と思っていたところ、Kritaというフリーウェアのペイントツールでできることがわかりました。(GIMPでもできることがわかりました。→GIMPでの解説はこちらar1359841


    Krita

    https://krita.org/jp/download-jp/krita-desktop-jp/
    高機能な画像編集ツールで、上記URLで無料のDesktop版がDL可能です。
    (この記事ではKrita ver3.3.1を使用しています。)


    1.Kritaを使う方法の特徴

     ・画像を「透過マスク」で透過させてPNG形式で保存すると、透過部分の色情報に変更を加えずそのまま透過情報だけ加えて保存できる

     ・画像の一部を削除して透過させてPNG保存すると透過部分を黒く塗りつぶしてしまうため、縁取りの出ないPNG画像を作るには画像編集時に削除ではなく透過マスクを用いて作成する必要がある
     ・透過マスクで透過したレイヤが複数あったり、非表示にしていても他のレイヤがある場合は透過部分を黒く塗りつぶしてしまうため、一枚のレイヤに画像をまとめて透過マスクで透過させ、他のレイヤは削除してから保存する必要がある

     ・輪郭が多色の場合、特にカラフルなテクスチャを切り抜いて作るよう
    な透過テクスチャに適した方法
     ・透過部分の色を単色でなく領域によって複数の色にしたい場合にも適した方法

     ・複雑な柄の場合、透過部分の不要なところは単色で塗りつぶしたほうがPNGファイルのデータサイズを小さくできるかも


    2.Kritaで「透過部分の色情報に変更を加えず」縁取りの出ない透過PNGを保存する方法

     MMDで作ったミクさんの次の画像をランダムな星形に切り抜いた透過PNGを作ってみます。(モデル:sm1654558 あにまさ様 ポーズ:im2727399 Rick様)



     (1) 切り抜く前の全体の色データの画像を用意する

     MMDからBMP形式またはPNG形式で出力し保存します。(このブロマガには縮小したものを載せていますが、実際の出力サイズは1024✕1024pxです)

     (2) 透過マスクとして使用するグレースケール画像を作成する

     (今回は切り抜く星形を作るのでIllustatorCS6を使いました) 

     (1)で出力したミクさん画像を画像編集ツール(IllustatorCS6)で読み込み、星形を配置して切り抜く位置を決めました。星型の輪郭だけ配置した様子はこんな感じです。



     透過マスク用のグレースケール画像は、透明にする部分を黒、不透明部分(表示させる部分)を白、半透明はグレースケールの色の濃さで透明度を表します。

     今回は星形に切り抜くので、星型部分を白、それ以外の領域を黒にした画像を作成します。星形のパスを白で塗り、背景にアートボード全体を覆う黒の正方形を配置します。この白黒画像を透過マスクとして使用します。



     この白黒画像のレイヤをミクさん画像レイヤの下に配置します。KritaはPSDファイルを読み込めるので、PSD形式で保存します。
    (IllustatorCS6からPSD書き出し時にはdpiの設定によっては解像度が変わってしまうことがあります。またKritaで読み込めないPSDもあるようです。そういう場合にはこの星の白黒画像だけをPNGファイルとして1024×1024pxで書き出して、Kritaに読み込んで合成することもできます)

     (3) Kritaで「透過マスク」を使って透過させる

     Kritaを起動し、「ファイル」→「開く」から先ほど出力したPSDファイルを読み込みます。


     ウィンドウにミクさんの画像が表示されました。右下のレイヤを見ると、上のレイヤにミクさん画像、下のレイヤに星の白黒画像があります。
     下の白黒画像のレイヤを選択して右クリックし、「変換」→「透過マスクへ」でこの白黒画像が透過マスクになります。



     このようにミクさん画像が星形に切り抜かれます。右下のレイヤのところでレイヤー1を確認すると、切り抜かれる前の元のミクさん画像のままになっています。

     この時に元画像レイヤとその透過マスク以外に、非表示であっても他のレイヤがあると透過部分が黒で塗りつぶされてしまいます。複数の透過マスクをかけたレイヤがある場合は一枚のレイヤとその透過マスク一枚にまとめ、不要なレイヤは削除してから保存します。


     (4) KritaからPNG形式で保存する
     

     「名前を付けて保存」または「エクスポート」でPNG保存できます。

     「ファイル」→「名前を付けて保存」で「Saving As」ダイアログボックスが開きます。ダイアログボックスの一番下の「ファイルの種類」から「PNG画像」を選択し、ファイル名を適切なものに変更して「保存」をクリックします。


     「PNG Export Options」ダイアログボックスが開きます。「アルファチャンネル(透過)を格納する」にチェックが入っていることを確認します。(「圧縮(ロスレス)」はファイルサイズを小さくしたい場合は数字を大きくしてください。)


     「OK」をクリックするとPNGファイルが保存されます。

     「ファイル」→「エクスポート」でも同様にPNG保存できます。


     (5) PMXエディタで確認してみる

     PMXエディタで材質タブから保存した透過PNGをテクスチャとして指定して、テクスチャビュー画面で透過部分がどうなっているか確認します。
     ここでは正方形の板ポリにテクスチャを貼り付けています。

    → テクスチャビュー画面は元の切り抜く前の画像のままになっています。
      モデルビュー画面では星形に切り抜かれていますが、縁取りの線は見えません。

     比較対象としてIllustratorからPNG保存した透過PNG2種(透過部分が黒に塗られたものと白に塗られたもの)にテクスチャを変更したものも用意しました。





     (5) MMDで確認してみる

     それぞれのテクスチャを貼り付けた板ポリモデルをMMDに読み込んで、ミップマップをオンにして確認してみます。

       左端(一番奥)が透過部分が黒に塗られたPNG
       中央がKritaで縁取りが出ないように保存したPNG
       右端(一番手前)が透過部分が白に塗られたPNG



     白背景で左端の透過テクスチャに灰色っぽい縁取りが、黒背景で右端の透過テクスチャの黒い部分にうっすら白っぽい縁取りが見えています。

     中央の透過テクスチャは左右と比較して縁取りは見えていません。
    → 「ミップマップをオンにしても縁取りの出ないテクスチャ」になっています。


    3.透過部分のうち不要な部分を単色で塗りつぶしてデータサイズを小さくする

     「ミップマップ使用時に縁取りが出ない」ためには透過部分と非透過部分の境界周囲に混色するような色がなければいいので、境界から離れた部分はデータサイズを小さくするために単色で塗りつぶしても問題ありません。

     ミクさんの星形切り抜き画像で言えば、下のように星形の周辺に余白をとって残りを塗りつぶすことができます。黒部分と元画像の境目はテクスチャが縮小されれば混色しますが、透過部分との境界からは十分離れているので透過テクスチャの輪郭には混色の影響が出ません。

    (もともとの星形を半透明のピンクで表示しています。20ピクセルほど拡大したそれより一回り大きい星形の範囲内だけ元の画像を残し、残りの部分を黒で塗りつぶしています)

     つまり下のような一回り大きい星形の範囲だけ元画像を残したものを、元の星の大きさの白黒画像を透過マスクにしてPNG保存しても、やはり縁取りの出ない透過PNG画像になります。

     
     このミクさん画像の例ではそれぞれのデータサイズは、PNG保存時の「圧縮(ロスレス)」設定を3としたときに

    元画像そのままを透過マスクしたPNGファイル → 465KB

    一回り大きい範囲だけ残してほかを黒で塗りつぶした画像を透過マスクしたPNGファイル → 303KB

    不要部分を黒で塗りつぶすことで約30%のデータサイズ削減ができました。

    (「圧縮(ロスレス)」の設定を最大の9にした場合も、351KB→242KBとやはり約30%の削減できました)

     どのくらい削減できるかはテクスチャサイズや元画像にもよるようですが、大きなサイズのテクスチャを多数使う配布データなどの場合でデータサイズが気になるようでしたら、まずPNG保存時の「圧縮(ロスレス)」の設定を最大に、さらにこういった一手間を掛けることでもう少しデータを小さくすることもできるようです。


    4.Kritaでも、透過画像の作成法によっては縁取りが出るPNG画像になってしまうケース

     Kritaで縁取りの出ないPNG画像を保存できるのは、「一枚のレイヤを透過マスクで透過させた」場合だけのようです。例えば画像の一部分を削除してそこを透過させた画像をPNG保存すると、透過部分は他の画像編集ツールのように黒で塗りつぶされます。

     例えば上のミクさん画像で、星の白黒画像のレイヤだけを表示し、その黒い部分だけを選択範囲にします。(「選択」→「色範囲より選択」で色範囲指定の選択ができます。「色の範囲」ダイアログボックスの左上の色選択で「影」を選択し、「選択」をクリックすると黒い部分が選択されます。「OK」をクリックするとダイアログボックスが閉じ、選択された部分を操作可能になります。)
     黒い部分だけ選択した状態です。


     そのまま白黒画像レイヤを非表示にして、ミクさん画像レイヤを表示させます。


     「編集」→「切り取り」、あるいは「Ctrl+X」で選択部分を切り取り削除します。


     ミクさんが星形に切り抜かれましたが、右下のレイヤを見ると「レイヤ―1」のプレビューでも切り抜かれたミクさん画像になっています。この状態でPNG保存すると透過部分が黒で塗りつぶされ、縁取りの出るPNGになります。

     縁取りが出ないようにするには、「透過マスク」を使って元の画像が透過する前のままレイヤのプレビューで見える状態でPNG保存する必要があります。

     すでに透過部分は削除して透過PNGを作ってしまった、あるいはほかの画像編集ツールで作った透過PNGはどうすればいいか、ということで次の記事で既存の縁取りの見える透過PNGを修正してみます。

    5.既存の「ミップマップ使用時に縁取りが見えるテクスチャ」を縁取りが見えないように変更する方法

     → こちらを参照してください。
    【MMD】既存の縁取りの出るテクスチャを縁取りが出ないようにする方法【GIMP】【Krita】
    http://ch.nicovideo.jp/suz5/blomaga/ar1351401




    広告
    コメントを書く
    コメントをするには、
    ログインして下さい。