表情差分の抽出と切り替え(Tightメッシュ対応編)
前回の記事で、 FullRectはフィル落とせないから微妙だなぁ、という結論を書いたのですが 表情差分を切り替えやすいメッシュを作りつつもTightメッシュ対応する方法を思いついたので実装してみました。
方法は結構簡単でして、 まず、表情差分領域を除外した領域をTightメッシュ化すべくSpriteに切り出します。 これは4枚のSpriteを使えば実現できます。
_Tight-L
, _Tight-R
, _Tight-B
, _Tight-T
が該当です。
この状態でSpriteのMesh TypeをTightに指定すると、
Unityが_Tight-L
, _Tight-R
, _Tight-B
, _Tight-T
それぞれに対してTightメッシュを切ってくれます。
あとは、表情差分用の板ポリと_Tight-L
, _Tight-R
, _Tight-B
, _Tight-T
それぞれに作られたメッシュを結合します。
今回はMesh.CombineMeshを使用しました。
生まれたメッシュがこちら
表情差分をコードで切り替えやすいシンプルな板ポリが顔にあって、 あとはTightメッシュできっちりフィルを落とせるのが見て取れます。 ちなみにこれで414頂点です。 2Dゲームは頂点シェーダよりピクセルシェーダに負荷がいきがちであることを考えると、 およそ400頂点増でここまで透明ピクセルを落とせるなら悪くないトレードオフに思います。
もちろん描画結果も問題なし
16頂点のFullRect版を使うかTightメッシュを使うかは選べるようにしました。 意外と満足のいく出来になってきたので、こんどはTightパッキングに挑戦してみようかな…