IchiPixelでプレゼンしたこと
というわけで、さる3月24日、IchiPixelというゲーム開発者飲み会で、開発中ゲームのプレゼンをさせてもらった。
飲み会の場で他人と会話して情報交換して……みたいなコミュが苦手なフレンズは、もはや、マイクを手に入れてアナウンスするしか道は無いのである。やれやれだぜ。
プレゼンの内容は↓。
【Unity】ETC1(Split alpha channel)形式テクスチャをUIに使う
やること
Android環境において、アルファつきテクスチャ画像をETC1(Split alpha channel)形式でインポートし、UIで使う。その手順について。
手順
テクスチャインポート設定
- SpritePacker有効時のみ有効なので、
PackingTag
を設定。 - Formatを
RGB Compressed ETC 4bit
にする。 Compress using ETC1(split alpha channel)
にチェック。
ちなみに、ビルドするとこんな感じでログが出る。
シェーダ設定
デフォルトのUIシェーダはアルファ分離ETC1に対応していない。
そこで、ProjectSettings -> Graphic -> Always Included Shader listにUI/DefaultETC1
を登録しておくことで、適切なシェーダへの切り替えを行ってくれるようになる。
確認
じっきでおこなわないとひどいめにあう。
参考
【Unity】パーリンノイズで陽炎っぽいエフェクト
パーリンノイズによる陽炎めいたやつ pic.twitter.com/uUDwLtQ03E
— enu (@_enu) 2017年3月1日
コード
for Unity5.5.2f1
必要ファイル
パーリンノイズのコードは↓から。
【Unity】ダメージっぽい数字表示
Unity5.5.1p4
— enu (@_enu) 2017年2月18日
コード
BaseMeshEffect
を継承して作る。Shadow
コンポーネント等と一緒にアタッチすると変になったりするけど、処理順の問題なので、コンポーネントの順番を入れ替えれば良い。
【Unity】Z書き込みアリのSpriteシェーダ
UnityのSpriteシェーダはデフォルトだとZバッファに書き込みを行わない。
そこでデフォルトシェーダを改造し、Zバッファに書き込むシェーダを作成する。その手順。
Unityは5.5.1p3。
手順
1.デフォルトのシェーダを取得
Unityのサイトからビルトインシェーダをダウンロードする。
zipを解凍し、DefaultShaderExtra/Sprites-Default.shaderファイルがそれ。Unityにインポートする。
↓が今回のDL元。
2.名前変更
一行目、Sprites/Default
になってるのを分かりやすい名前に修正する。
今回はTSKT/Sprites/ZWrite
にした。
3. Queue変更
"Queue"="AlphaTest"
説明は↓のあたり。Rendering Orderの項目。
4. RenderType変更
"RenderType"="TransparentCutout"
5. ZWrite変更
ZWrite Off
となっているのをZWrite On
にする。
6. アルファテスト追加
frag
メソッド内に↓を追加する。0.5は適当な数値に調整すれば良い。
clip(c.a - 0.5);
これはいわゆるアルファテストで、αが一定以下のピクセルを破棄する。これがあるために、今回つくったシェーダでは半透明な領域やフチ部分は汚くなってしまう。
まあ、やらないと透明な領域までZバッファが書き込まれてしまい、欠けてほしくない部分が欠けたりしてまずいのだ。半透明は諦めよう。
ちなみにこんな感じで汚くなる。絶望的。
default
zWriteOn
できたコード
【Unity】水面エフェクト2D
やることはいたってシンプル。画面下半分に上半分を反転コピーするだけ。それっぽく見せるために色変えたりサインカーブつけたりすれば効果的だけど、その辺はデザインに依る。
水面エフェクト
— enu (@_enu) 2017年1月24日
© UTJ/UCL pic.twitter.com/PXgovJxh90
コード
【Unity】色分解しながら画面ゆらすエフェクト
色分解しながら画面ゆらし pic.twitter.com/gtrFTXjZGk
— enu (@_enu) 2017年1月16日
コード
色収差とでも言いたいところだけど、別にレンズ特性の再現とかやってるわけではなくてマジにRGBごとにゆらしてるだけなので。