スキンのパフォーマンスについて - exch-bms2/beatoraja GitHub Wiki

最終更新日 2018/1/17

スキンのパフォーマンスについて

ここでは、スキンデータの記述においてパフォーマンスに影響のあるポイントと、その改善方法について述べます。

ソースイメージの切り替えを少なくする

OpenGLでは、テクスチャの切り替え回数は描画パフォーマンスに大きく影響を及ぼします。 例えば、

{
    "source": [
        {"id":1, "path":"a.png"},
        {"id":2, "path":"b.png"},
],
    "image": [
        {"id":"1a", "src":1, "x":0, "y":0, "w":640, "h":720},
        {"id":"1b", "src":1, "x":640, "y":0, "w":640, "h":720},
        {"id":"2a", "src":2, "x":0, "y":0, "w":640, "h":720},
        {"id":"2b", "src":2, "x":640, "y":0, "w":640, "h":720},
    ]
}

というソースイメージ定義において、

    "destination":[
        {"id":"1a", "dst":[{"x":0, "y":0, "w":640, "h":720}]},
        {"id":"2a", "dst":[{"x":0, "y":0, "w":640, "h":720}]},
        {"id":"1b", "dst":[{"x":640, "y":0, "w":640, "h":720}]},
        {"id":"2b", "dst":[{"x":640, "y":0, "w":640, "h":720}]}
    ]

よりも、

    "destination":[
        {"id":"1a", "dst":[{"x":0, "y":0, "w":640, "h":720}]},
        {"id":"1b", "dst":[{"x":640, "y":0, "w":640, "h":720}]},
        {"id":"2a", "dst":[{"x":0, "y":0, "w":640, "h":720}]},
        {"id":"2b", "dst":[{"x":640, "y":0, "w":640, "h":720}]}
    ]

``

の方がテクスチャ切り替え回数は減少し、高速になります。

filter機能は極力使わない

filter処理自体が重いですが、filter ON/OFFによってシェーダーが切り替わるため、その回数もパフォーマンスに影響を及ぼします。 どうしてもfilterを使用する場合は、filterの切り替え回数が少なくなるように配慮して下さい。

以下加筆中

  • ソースイメージのサイズは(2のべき乗)×(2のべき乗)を推奨
  • ソースイメージの最大サイズはスペック依存。4096*4096までなら大体OK?(要検証)
  • ソースイメージはなるべくまとめる方が良い
    • 複数ファイル読み込みのオーバーヘッドがあるため
    • フォントイメージも同様