■2024-03-16 (土) ウディタVer3.300でピクチャのZオーダー機能搭載!▼
これはちょっとした革命ですよ!
なんとVer3.300でウディタに
『ピクチャのZオーダー機能』が搭載されました!
コマンドは「エフェクト」コマンド内の「ピクチャエフェクト」内にあります!
「Zオーダー」というのは画像を表示する上下関係を指定するための順序設定で、
数値が大きいほどそのピクチャが前面に表示されるようになります。
分かる人にはここまでの紹介で十分だと思いますので、
必要な方はよければ最新版ウディタをDLしにいってください!
【WOLF RPGエディター公式ページへ】
◆ウディタ新機能 Zオーダーの具体例
そんなわけで今回はピクチャの「Zオーダー」の使い方の具体例をご紹介します!
まずは動画でご紹介! 今回の記事はこの動画の内容と
ちょっとしたオマケを文章で紹介してる感じなので、
この動画だけで終わっても十分です!
【Zオーダーの基本】
一番シンプルなZオーダーの例を挙げると以下のようになります。
ピクチャを表示した直後の「Zオーダー」は全部「0」です。
あるピクチャのZオーダーを「1」に変えると、
Zオーダー「0」の全てのピクチャより上に表示されます。
逆に「-1」にするとZオーダー「0」の
全てのピクチャより背面に表示されるようになります。
↓真ん中のウルファールのZオーダーを1にすると、
ピクチャ番号で負けてても前面表示に!

今回のZオーダー機能は
「こんな感じでピクチャ表示優先度の変更ができるようになったよー」
というだけなんですが、地味な機能でも便利な利用法がいろいろあります!
【Zオーダーを使えば見下ろし型のゲームで
キャラ全員をピクチャで出しても自然な前後関係が簡単に実現可能!】
以下の左の画像は、ピクチャ番号0~77にそれぞれ異なるキャラクターのピクチャを
78枚ほど出した画面です!
その各ピクチャの「Zオーダー」として
「そのピクチャの画面Y座標」をセットするだけで、右の画像のような
こんな自然な前後関係が表現できます! 後ろにあるほど背面表示!
(Zオーダーが大きいほど前面に表示されるので、
単純に画面Y座標を入れるだけで簡単にこうすることができます)
↓

これまでは、こういったことをやるのにVer3で実装された
「ピクチャのID移動」を毎フレームいっぱい使わないといけなかったため
「処理負荷」も「作成の手間」も大きくなっていましたが、
今後はZオーダーでラクに作れるようになります!
(なおウディタVer2台まで戻ると、あまりにめんどくさすぎて
こういうのをやれる人はごく一部だったでしょう。
それで3D演出を作ってた方には頭が下がります!)
【Zオーダーを使えば選んだカードを最前面に出すのも簡単!】
そして利用法2つめ!
Zオーダーについて理解できた人ならもはや言うまでもないでしょうけれど、
以下の画面のように、重なってるカードのうち「選択したカード」だけ
最前面に表示することも簡単に実現できます!

これは私の開発中の『片道勇者2』の映像ですが、
元は「ピクチャのコピー」処理で最前面表示を実現していました。
ただ、コピーだと別IDのピクチャができちゃって
そちら専用の処理を作らなきゃいけなくて
処理の統一性を維持しにくかったのです。
新バージョンからは、こういうところでZオーダーを有効に利用して
処理を簡単化できています!
今後も新しいゲームを作ることがあったら
もっといっぱい有効利用していきたいですね!
【Zオーダーの裏話!】
さて、ここからはZオーダー実装に関しての裏話です!
●負荷の話 Zオーダー使用時の重さはどうなる?
負荷の話ですが、Zオーダーを使うと以下の2点で処理負荷が増加します。
●1.「Zオーダーの変更」をした、あるいは「Zオーダー使用時にピクチャが増減した」フレームの終わりのみ、
「Zオーダーによるピクチャの表示優先度の再計算」が行われて
「イベント処理時間」が一瞬増える。
●2.Zオーダー使用時はピクチャ表示の処理が従来のものと違う処理に
切り替わるので以後の常時「描画時間」もちょっと増える。
といっても、私の環境ではピクチャを2000枚くらい出してZオーダーを設定しても
描画時間が常時【0.2~0.3ms】増えるくらいでしたので、
PC上ではそこまで負担にはならないと思います
(合計描画時間が16ms以上になると処理落ちし始めますが、
0.3msかかってもそのうちの2%の負荷なのでさほど問題にならないという意味)
なお、「ピクチャが増減せずZオーダーもいじられなかったフレーム」には
無駄な「表示優先度の再計算」はしていないので、従来と同じく
列の前から順にピクチャを出してるだけの「2」の切り替わり後処理も
原理的には従来と全く同じ負荷になると思ったんですが、
ほんのわずかな造りの違いによってうまく最適化できなかったのか
負荷が増えてしまっているようです。
こういうのがあるからプログラミング難しい!
なお、全ピクチャのZオーダーを「0」に戻すと描画処理が旧処理に戻るので、
ちょっとだけ「描画時間」を小さくできると思います。
●Zオーダー変更を1フレーム中にいくらやっても負荷はほぼ一緒!
ピクチャエフェクトの「Zオーダーの変更」を1フレーム中に
いくらやっても「Zオーダーによるピクチャの表示優先度の再計算」が
行われるのはフレーム終わりに1回だけなので、
そういう意味の負荷は「一定」です!
なので、「ピクチャのID移動・コピー」を使って前後関係を
調整していたときのように使用回数の面で遠慮される必要はありません!
毎フレーム2000個のピクチャにZオーダーを指定し直しても
それだけならほぼ問題ない負荷みたいなので、バンバン使ってください。
●全体の処理は思ったより軽くできました!&
旧ゲームには影響がないようにしました
Zオーダーの処理負荷の軽減はいろいろがんばりまして、
「ピクチャのIDコピー/移動」しまくるよりも
かなり少ない処理負荷で実装できました!
ピクチャ全てのZオーダーを毎フレーム変え続けても、
「ピクチャのコピー・移動」しまくって表示の前後関係を
整理するのに比べて半分以下の負荷になるんじゃないでしょうか
(3D演出をされている方の一意見だと、93%の処理数削減と
約8割の処理時間削減に成功してたっぽいコメントもいただきました)
ですが、それでもさっき言った通り私が把握してない負荷も増えてしまっているので、
ゲームエンジン作りって大変だなと思います。
こんな風に色んな機能を足していったら、
なぜかだんだんと重くなっていくんですよ!
それもあって、今回は「Zオーダーを一切使わない場合」は
そのまま以前の軽い描画処理を使うような切り替え処理にしてあります。
少しでも軽くしたい人は最初からピクチャ番号をうまくセットして、
Zオーダーを一切使わないようにすれば負荷も以前通りです!
というよりは、
『旧ゲームは最新のGame.exeを使っても新機能による負荷増大の影響を受けないのでご安心を!』
といったほうが適切かもしれません。
今回の新機能はほぼ無視できるほどの負荷とは言え、
新機能を使わない人まで追加の負荷増大に巻き込むのはかわいそうですしね!
新機能を搭載する際は、構造的に実現できないケースは除いて、
機能を使わない人にはなるべく負荷が上がらないようにする工夫も
可能な限り考えていきたいと思います。
ビジネスノートパソコンでもバリバリ動く軽量さがウディタ3の魅力なので!
ということで以上、Zオーダーについてのお話でした!
「ザツにピクチャIDを使って最後にZオーダーで表示順を変える」みたいな
扱い方もできますので、自作システムを作っておられる方の助けになればと思います!
「Zオーダーの変更」処理、使える人はぜひご利用ください!
2024-03-16 (土)
カテゴリ: ウディタ