製作中ゲーム ~草創やる夫編~ (Pixiv Fanbox)
Content
~ この記事は以前別所で公開したやる夫はUnityでSpineアニメをジャギつかせたくないようですの再録です ~
「よしっ!キャラのステータスを配列で管理して生成する機能と、個別に指定可能なノックバック実装できたお!これで少しアクションゲの雰囲気出ればいいな!」
「それはそれとして、なーんかキャラの線がジャギってる気がするお…なんでだろう?」
「まーいっか!きっと気のせいだお!じゃあ次は作ったモーション確認しよう。出力サイズは…とりあえず原寸でいっか。パチュリー!出るぞ!ウッ!(Spineで出力する音)」
「ジャギがひどくなってる…?ひょっとして気のせいじゃない…?なぜだ…」
(出力サイズは…原寸……パチュリー…出る……ウッ………まさか……)
やる夫は知らなかった…Unityは画像を縮小するほどピクセルが荒れることに…
お絵かきツールと同様に拡大はダメでも縮小は綺麗に補正されると信じ込んでいた…
そしてカメラをズームしても画像がぼやけないよう高い解像度をそのままUnityに持ってきていた。
「原寸はジャギついているお…。予め0.25倍でSpine出力したのが一番綺麗だお…」
「じゃあ0.25倍で実装するお!」
「通常時は綺麗だけど、拡大時は当然ぼやけるお…ジャギかぼやけかどっちか妥協しなきゃいけないか……詰んだ…」
------- ざんねん!わたしのぼうけんはここでおわってしまった!--------
~後日~
「Unityなんだし解決できそうな方法いくらでもありそうだお…。Unity 縮小 ジャギー、検索検索……むっ?ミップマップ機能…?」
ミップマップとは?
違う解像度を予め用意して、自動的に適切な解像度に切り替える機能だよ!
遠くの小さい背景とかは低解像度で表示してゲームの重さを改善するよ!
「これだお!2Dでも使えるなら有効そうだお!使い方は、えーとGenerate Mip Mapsをオンにすればいいのか。勝った!第一部!完!」
「ぼやけて線がつぶれてるお…これなら0.25倍出力のほうが綺麗だお…」
「どうにか解決できないか…んー…MipMapには設定項目があるらしい…?これをいじれば…」
「だめだお…色々いじったけど、結局0.25倍のが綺麗だお…」
「UnityのMipmapは遠くの小さい画像を低解像度で表示するのが基本設計なのか?」
「小さい画像をくっきり映すには……。だめだ、わからない。詰んだ」
------- ざんねん!わたしのぼうけんはここでおわってしまった!--------
~後日~
「Unityが自動生成するmipmapは好きじゃないお。通常時は0.25を映して、ズームしたときだけ高解像度に切り替え、それだけでいいお…。なにか解決策はないか…ん、これは…」
mipmapで使用されるテクスチャを、距離によって見え方を変えてみる
「こ…!これ使えそうだお! そうか、Unityで自動生成されたmipmapを手動で上書きすればいいんだお!原理的には合ってるはず!よし、Spineのアトラス画像をフォトショで縮小して上書き…!勝った!第二部!完!!」
「バグってるお…! Spineで出力したのを上書きするのはだめか!」
「仕様外の方法に走ってる気がするし、諦めよう。詰んだ。」
------- ざんねん!わたしのぼうけんはここでおわってしまった!--------
~後日~
「Spineのフォーラム検索してみるお…。うん…?なんか似た症状の画像のトピックがある…?」
http://ja.esotericsoftware.com/forum/viewtopic.php?p=15772
「日本語でおk」
「グーグル翻訳によると…pngの透過にはストレートと事前乗算アルファの2種類の形式があって…それが一致してないとこういう症状が出る…と」
「原因ミップマップ上書きじゃない…? これを解決できればいける…?……でもどうやって…?」
「助けて!公式フォーラムー!!」
「日本語でおk」
「つまり…?劣化の少ないtif形式で出力するか、color.rgba = Color4(color.rgb * color.a,color.a)でストレートで出力したアトラスを事前乗算アルファに書き換えればええんちゃう?ってことかお?」
「tifで書き換えてみたけど上手く行かない…。じゃあミップマップ書き換えの時にストレートのアトラスを事前乗算アルファにすれば…」
「やッッたーーーーーーーーーー!!!!」
第三部ッ!! 完ッッ!!!
--------------------
■あとがき:
なぜ今回の更新をやる夫形式にしたのか自分でもよく分かりませんが、
天恵を授かったのが運の尽きだったと思うのです。
思いつきでやってもいいじゃない。にんげんだもの。 みつお