CF2.5の目玉機能の一つにHWA(Hardware Acccerelation/ハードウェアアクセラレーション)があります。
旧来のMMF2アプリケーションは、殆どの処理をCPUで行っていました。簡単に言うと、イベントの数式処理だけでなくグラフィック処理もCPUの計算処理で行っていたということです。それ故に、オブジェクト数が多かったり拡大縮小・回転等をすると重くなり、処理に限界がありました。
HWAを利用することにより、グラフィック系の処理をGPU(グラフィックボード)が行うようになり大幅に処理が軽くなります。拡大縮小・回転はほぼノーストレスで行えます。
- 30秒で分かる MMF2 と F2.5 の処理速度の違い - YouTube
MMF2日本語版(HWAなし)とCF2.5(D3D9)の比較動画です。
HWA自体は以前から、英語版MMF2では利用可能でした。しかしUnicode向けには作られていなかったため、Unicode版であった日本語版MMF2では利用できないままでした。*1今回、CF2.5にてようやくUnicode版のHWAが実装され、日本語版MMF2で作られたアプリもCF2.5で実行すればHWAを効かせて動作させることができるようになりました。
ここで紹介するHWAは基本的にWindows EXEアプリケーション向けの機能です。他のプラットフォームでは、非対応(SWFなど)もしくはそれぞれのプラットフォーム独自のGPUアクセラレーションがあります(iOSやAndroidなど)。
HWAの利用方法
アプリケーションプロパティのRuntime optionsのDisplay ModeをDirect3D 9もしくはDirect3D 8に設定するだけです。
Direct3D 9モードでは後述のエフェクトが利用可能です。Direct3D 8モードではエフェクトは利用できませんが、D3D9より少し処理は軽い感じです(ただし古いGPUで表示バグあり)。
エフェクトについて
Direct3D 9モードでは、従来のインクエフェクトの他に、ピクセルシェーダ(PS)を用いたエフェクト(シェーダエフェクト)が使用可能です。
エフェクトの設定はフレームプロパティやレイヤープロパティにもあり、フレーム全体やレイヤー単位でエフェクトをかけることができます。
シェーダエフェクトはエクステンションのようにユーザーが開発可能になっており、本家フォーラムでは既に多数のエフェクトが公開されています。
エフェクトは、そのエフェクトが使用するピクセルシェーダ(PS)のバージョンをGPUがサポートしていなければ使えません。殆どはPS2.0ですが、稀に3.0以上などもあります。
- Blend Coefficient
アルファブレンディングの値を設定します。HWAでは半透明の設定はエフェクト選択のリストから別れてここになりました。エフェクトを掛けながら透明度を変更することができるようになりました(一部のエフェクトでは無効)。
エフェクト選択画面のStandardにあるSemi-transparentは旧製品で作成したファイルとの互換性のためにあり、通常は使いません。
- RGB Coefficient
RGB補正を掛けることができます。
Tips
- 使用する画像のサイズを2のべき乗に合わせる
2のべき乗(2,4,8,16,32,64,128,256,512,1024...)
Direct3Dモードでは画像がGPUに送られる際、2のべき乗サイズにリサイズされます。画面に表示する時には元のサイズで表示されるので、オブジェクトの画像が2のべき乗サイズ丁度でなくても問題ありません。
しかし、2のべき乗のサイズを考慮に入れることで、メモリの使用量を節約することができます。
もし少しの修正で小さい方の2のべき乗サイズに合わせられるならそうしたほうが良いです。
ちなみに縦横のサイズは同じでなくても構いません(16x32や64x32でもOK)。
HWAの仕様
- 古いGPUでは表示が崩れる場合がある
古いGPUでは、ツールのバグ以外にGPU自体の機能の不足等により正しく表示されない場合があります。
- 表示できる画像の最大解像度に制限がある
HWAではGPUがサポートするテクスチャサイズ以上の解像度の画像は表示されません。
巨大な1枚絵を使用する場合は注意してください。
以下、代表的なGPUの最大テクスチャサイズです。- Intel GMA:2048x2048
- NVIDIA GeForce:4096x4096、8192x8192、16384x16384(世代による)
- AMD Radeon:4096x4096、8192x8192、16384x16384(世代による)
- グラフィック系エクステンションについて
一部のグラフィック系エクステンションはHWAでは動作しない物が存在します。
前述のエフェクトで代用可能なものはそちらに切り替えることをお勧めします。
- サブアプリケーション絡みでバグがある
HWAアプリでサブアプリを使用する場合、プロパティのDisplay as spriteを有効にしないとフルスクリーンモードで表示されませんが、これを有効にすると、特定状況において実行時にオブジェクトが表示されないバグがあります(報告済み)。