戻る:アニメ編(その二) |
描画と一時描画
ここまで、エフェクトブースターでは一時描画と描画の二つのフェイズがあるという、案外知られていない(活用している人は体験的に知っているが、あまり明言されたことのない)エフェブの動作について説明してきました。
今回は、両者の動作の違いについて、また動画を用いた検証とともに説明します。
サイズと位置
前回の「親父横移動アニメ」の完成版に、少し手を加えてみます。
JPY ファイルを指定した背景変更コンテントで・・・
幅を 632 → 316 へと 1/2 にしてみます(高さは変更なしです)。
このとき、一時描画はどう変わるでしょうか。
何も変わりません。
次に、配置する位置をずらします。
縦横とも 100 ピクセルずつずらしました。
このとき、一時描画はどう変わるでしょうか。
何も変わりません。
以前基礎編(その四)で、描画(静止画としての背景描画)は通常の画像をセルとして配置したのと同様の振る舞いをする、ということを説明しました。
つまり、サイズを変更すればそれに応じて伸縮し、位置を指定すれば適宜ズレると・・・例えば 400*260 ピクセルで指定された冒険者の宿の画像 AdventurersInn.bmp も、それを含む JPY ファイルが本来の 50% のサイズで背景コンテントに配置されたなら、実質的には 200*130 ピクセルで表示されるわけです。
しかし、一時描画はまったく異なる挙動をします。
配置したセルのサイズがどうであれ、width パラメータおよび height パラメータの数値そのままで表示されるのです。
animeposition パラメータも同様です。このパラメータは配置されるセルのサイズや寸法の影響を一切受けません。セルではなく、CardWirth の画面そのものに対しての座標を示しています。
一時描画は絶対座標、描画は相対座標とでもいうところでしょうか。
これだけでも、一時描画と描画は CardWirth の内部的に異なる扱いをされている、ということがわかるはずです。
裏技
既に発表されたシナリオを分析していると、この一時描画と描画の挙動の違いを利用したテクニックを見かけることがあります。
それは JPY ファイルを 0*0 ピクセルのセルとして設定する というものです。
推測するに、これは(前回までに説明した)一時描画の後に予期しない描画が残るという、副作用を回避するためのものでしょう。
つまり一時描画はセルのサイズに影響を受けないので問題なく動作し、かつ一時描画後の描画は 0*0 であるために何も表示されないというわけです。
特に推奨もしませんが、知っておいて損はないテクニックです。
ただし表示されないからといって内部的には画像の処理が行われていることには違いないので・・・つまり visible=0 が指定されない限り、CardWirth エンジンは背景画像に当該するセクションの画像を全て貼り付ける処理を行った上で表示していないので、無駄なことをしているとはいえます。
処理速度や負荷が気になる方は visible=0 を指定するのが無難です(今時の PC なら大丈夫だろうとは思いますが)。
カードとの関係
CardWirth の画面は背景画像にカード画像(メニューカードやパーティカード)が重なる形で表現されます。
一時描画は、このカード画像が重なった画面に対して作用する特徴があります。つまり、カードの上に重ねて描写することが可能です。
これは通常の(背景としての)描画ではできない、一時描画にのみできることです。
ただしこの一時描画は永続性を持たず、最終的には一時描画フェイズの終了とともに消えてしまい、下のメニューカードが元通り表示されます。
以下に例を示します。画面全体を黒一色にフェイドアウトしますが、メニューカードが再表示されるタイミングが一時描画終了のタイミングそのものです。
フェイドアウト/フェイドインについては、アニメ編(その七)で取り上げる予定です。
[init] セクションと一時描画
[init] セクションが単なる背景ではなく、特殊な(あるいは不可思議な)機能を有していることは基礎編(その九)で紹介しましたが、一時描画においても通常の描画とは異なる意味を持っているようです。
- [init] セクションの一時描画は一時描画フェイズの一番最後に実行されます。
- JPY ファイルでのセクションの並び順に関わらず、一番最後に実行されます。
- ただし、[init] という名前のセクションが二つ以上あるとき、二つ目以降の [init] セクションは並び順に従って一時描画されます。
- セクション名が重複する際の挙動については基礎編(その四)で説明した通りです。最初の定義のものだけが有効で、二つ目以降の定義は無視されます。
- 通常描画では [init] セクションに指定された画像加工パラメータ(colormap や filter 等)が全セクションに影響を及ぼしますが、一時描画にはその機能(不具合?)はありません。
- 各セクションに指定された画像加工パラメータは、各々に対してちゃんと動作します。
つまり一時描画を含む JPY ファイルが含まれた背景変更コンテントは、以下のように動作します。
- JPY ファイルにおける一時描画
- 背景変更コンテント全体で、上から順に通常描画
- JPY ファイル内では(セクションの並び順に関わらず)[init] セクションが優先して描画され、他の画像はその上に重なる
- JPY ファイル内では [init] セクションに指定された画像加工パラメータが全てのセクションに適用される
これまで見てきたように、[init] は単なる背景ではなく、エフェクトブースターの描画機能において特別な意味を持たされていて*3、しかもその意味は制作者以外には汲み取りづらいものがあるようです。
それを踏まえた一般的なアドバイスとしては [init] セクションを一時描画に使わないほうがいいというほかありません。
単に「背景として表示する」だけなら [init] 以外のセクションでも実現可能ですので(最初の方に表示したい画像のセクションを置けばいいだけです)、そうすることをお勧めします。
まとめとおさらい
今回のポイントは以下の通りです。
- 一時描画と(通常の)描画には異なる点が多い
- 一時描画は配置されたセルの位置やサイズに影響されない
- 一時描画はカードの上から描画できる
- [init] セクションでの一時描画には意味不明な挙動が多いので、一時描画に使わないのが無難
一時描画の一般的な挙動についての説明(というか動作検証ばかりになってしまいましたが・・・)は今回で一区切りとし、次回以降はアニメのために使い勝手のよいパラメータの説明と、それを用いた事例の紹介を行う予定です。
戻る:アニメ編(その二) |
*1 厳密には二つ目以降の [init] セクションも含む
*2 厳密には最初に登場する [init] セクションのみ
*3 あるいは JPY メーカーとの不可思議な関係性において
コメント
最新を表示する
NG表示方式
NGID一覧