LoginSignup
1
0

More than 5 years have passed since last update.

DistaneFieldスタイルを装飾する

Posted at

前の投稿の続きです。
前のその1 http://qiita.com/harayoki/items/a8abbf48bac9d246787c
前のその2 http://qiita.com/harayoki/items/f88c439c18bc1881ace1

基本単色で使う事になるDistaneFieldスタイル適用画像ですが、いくつかの方法である程度の装飾が可能です。
ss.png

ここにデモがあります。
https://harayoki.github.io/StarlingDemoDistanceFieldStyle/demo2/index.html

スマホ向けに動画でもあげておきました。
https://www.youtube.com/watch?v=tr8RD4skF0w

ソースはここにあります。
https://github.com/harayoki/StarlingDemoDistanceFieldStyle/tree/qiita161224_2

詳しい解説

スクリーンショット 2016-12-25 22.07.25.png
等倍のこのドット絵をいくら拡大しても綺麗というのがDistaneFieldスタイルのすごいところです。つまりはベクター画像みたいなものですね。ただし単色。

スクリーンショット 2016-12-25 22.06.01.png
2倍表示(よりも大きくなっちゃったのはRetinaディスプレイでキャプチャーしたから。。)のこいつらは色を指定してあります。単色指定しかできないと思われてますが、頂点(4箇所)ごとの色指定ができました。

image.color = 0x0ff00; // 単色指定
image2.setVertexColor(0, 0xff0000); //左上
image2.setVertexColor(1, 0xff0000); //右上
image2.setVertexColor(2, 0xff0000); //左下
image2.setVertexColor(3, 0xff0000); //右下

スクリーンショット 2016-12-25 22.06.18.png
この3つが、DistaneFieldスタイルに備わっている装飾3つです。左から、枠線、影、発光です。それぞれ色指定も可能です。

sample.as
// 枠線
var style1:DistanceFieldStyle = new DistanceFieldStyle();
style1.setupOutline();
image1.style = style;
// 影
var style2:DistanceFieldStyle = new DistanceFieldStyle();
style2.setupDropShadow();
image2.style = style;
// 発光
var style3:DistanceFieldStyle = new DistanceFieldStyle();
style3.setupGlow();
image3.style = style;

(デモのようにアニメーションに適用する場合、影エフェクトのみ位置がチラチラずれる挙動を取ってしまうようです。)

これらのエフェクトはフィルターの場合と違い、描画負荷がほとんど増加しないという特徴があります。
これらのエフェクト3つは便利なのですが、重ねがけできないという制限があります。
エフェクトを組み合わせたい場合は、今まで通り重ねてフィルタを適用します。

スクリーンショット 2016-12-25 22.06.34.png
この画像は枠線スタイルに発光フィルターをかけたものです。標準フィルタにドロップシャドウとグロウが存在するのに対して、ズバリ枠線というものはないので、綺麗に描画されるDistaneFieldスタイルの枠線は重宝しそうです。

スクリーンショット 2016-12-25 22.06.40.png
こちら2つは自分が作った斜線フィルターと走査線フィルターを適用してみたものです。問題ありません。

スクリーンショット 2016-12-25 22.07.17.png
てんこ盛り6倍表示したものです。(枠線+4頂点着色+斜線フィルタ+発光フィルタ)なんだかわかりませんがとにかくすごい。

ここから下3つはちょっと変わった実験です。

スクリーンショット 2016-12-25 22.06.57.png
イメージに9スケールを適用して等倍表示してみました。内部で頂点が増えますので、それぞれに色指定が可能です。

スクリーンショット 2016-12-25 22.07.08.png
ただし拡大するとこう伸びますので、(正しく9スケールできてるという事)本来の大きく拡大しても綺麗という用途には使えませんね。

スクリーンショット 2016-12-25 22.07.13.png
なお、そもそもスプライトシートアニメと9スケールは同時使用すると描画が荒れます。

ドローコール数について

スクリーンショット 2016-12-25 22.43.54.png
DistaneFieldスタイルの同じエフェクトをつけた画像を並べていった場合ドローコールが増えません。違うエフェクトに切り替えるとドローコールが増えます。エフェクトなしに切り替えてもドローコールが増えますが、エフェクト色を透明指定する事で、エフェクトなし状態を再現できます。

締め

DistaneFieldのテクニックはStarlingコンテンツに限った話でなく、そもそもはコンシューマーゲーム界隈からでてきた技術なので、最近のゲームエンジンなどでも活用されてる例があるかと思います。そちらにもこの記事が参考となればと。

1
0
1

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
0