2015年6月20日土曜日

攻撃速度測定の方法

この記事は、検証の方法についてです。
結果だけ知りたいという人や検証の方法に興味ない人は、読む必要はありません。
スルーを推奨します。

変身LV制限緩和のイベントを利用して、LV80、LV75、LV55の攻撃速度を測定します。
片手斧1本、片手斧2本、両手斧、槍、ダガー、片手剣
測定方法を試行錯誤した結果です。
現時点では以下の方法としましたが、指摘・疑問・他の方法等があればコメントや連絡フォームからお願いします。
  • 測定方法
    • 自動攻撃を受ける動画を撮影して、攻撃を受けたキャラのHPが減ったF位置から次のHPが減ったF位置までを測定する。
      • 1Fずつ確認して、攻撃を受けたキャラのHPが減ったF位置を連続で記録。
      • 命中していない攻撃はF位置不明として記録し、次の命中した攻撃のF位置から推定する。
    • ※方法を考えてくださった猫気質なリネ記録さんとそのニコ生のリスナーの方々に感謝します。
  • 検証動画撮影
    • VMwarePlayerを利用して2PC同時での撮影
    • 左側(ホストOS)が攻撃側、右側(VMwarePlayer)が攻撃を受ける側
    • 自動攻撃で放置
    • 24FPSで撮影
      • リネージュは24FPSらしい。ソースは不明。
      • 結果から見ると本当に24FPSなのか怪しく思える。ネットワークを介したゲームのプログラムに詳しい人とかなら何かわかるのかな?
    • ダメージ発生フレームが安定しない理由
      • VMwarePlayerでの2PC&動画撮影によるパソコンへの高負荷と、ネットワークの遅延でダメージ発生フレームが安定しないが、試行回数を増やすことで対応。
      • ネットワークの遅延はどういう環境でも起こりえる。管理人のネットワークはKDDIのマンション光回線なのでこれ以上の改善は難しい。一般的なネットワーク環境として問題無いと思う。
      • 管理人のPCのスペックがしょぼいため、VMwarePlayer側の処理がちょくちょく止まるように見える。HPが減るという結果にはどれ位影響があるか不明。
      • PCスペックが良ければもっと安定するかもしれない。
        • リネージュは古いゲームのため、シングルスレッドの性能が重要。
        • 管理人のPCは、コア数は多いがシングルスレッドの性能が低い(通常2G、TB時2.6G)ので、特にVMwarePlayer側の描写が止まることがある。
        • 最近のCPUであれば、コア数とともにシングルスレッドの性能もあるので止まることはないと思う。
      • 攻撃側と攻撃を受ける側を入れ替えた場合も試したが、更にダメージ発生フレームが安定しなかった。攻撃が発生したという結果を生む側の方が重要である為ではないかと思う。
    • 撮影環境
      • HyperCam2で撮影
      • 2画面並べて1248*480。
        • 後になって1280*480で撮影すればよかったと後悔・・・。
      • 管理人の環境ではビデオコンプレッサー:「フルフレーム(非圧縮)」。
      • HyperCam2でビデオコンプレッサー:自動選択で24FPS撮影するとでコマ落ちしていたため。
      • ファイルサイズがバカでかくなるので注意。
  • 測定結果データフォーマット
    • ブログ資料にアップ。
    • 攻撃1回のフレーム数 = (攻撃終了フレーム位置 - 攻撃開始フレーム位置) ÷ 攻撃発生回数
  • アップ動画
    • 検証ソースとして分かりやすい形にするため、撮影動画の1Fを1秒とした動画に変換。
    • AviUtlの拡張編集プラグインでの操作。
      • 撮影動画を1F毎の静止画に変換。
        • 撮影動画を読み込む。
        • タイムスタンプ追加。
          • X:90、Y:-165、サイズ:34、表示形式:7
        • 1Fを1枚の静止画としてBMP出力。
          • プラグイン出力→拡張編集AVI/BMP出力(RGBA)
          • ファイルの種類をBmpFileに変更。
      • 変換した静止画を1FPS動画として読み込む。
        • 拡張編集プラグインのタイムラインで右クリック。
        • 新規プロジェクトの作成。
          • 画像サイズを撮影した動画のサイズに合わせる。
          • フレームレートを1FPS。
        • 拡張編集プラグインのタイムラインで右クリック。
          • メディアオブジェクトの追加→動画ファイル。
        • 動画ファイルの設定ウィンドウの左下の参照ファイルをクリック。
          • 出力した連番BMPファイルの開始ファイルを選択。
        • ※再生速度が100のときは、1画像ファイル=1フレームになる。再生速度が10のときは、1画像ファイル=10フレーム。
      • これで1F→1秒に変換した動画が完成
        • 撮影動画の1F=1秒なので、ここでタイムスタンプを追加するとフレーム数のカウンターになる。
          • X:230、Y:-165、サイズ:34、表示形式:3、初期値:1
          • フレーム数の初期値は1なので注意。
      • 管理人は検証を5セット行ったので、一つの動画にまとめる。
        5回分の撮影動画を1つにした場合のタイムラインの例
        • テキスト追加
          • X:-610、Y185、サイズ34、内容:計測 N回目(NN:NN:NN~NN:NN:NN)
        • 動画全体としてのタイムスタンプ追加
          • X:30、Y:202、サイズ:34、表示形式:7
        • 無圧縮の一つの動画に変換
          • プラグイン出力→拡張編集AVI/BMP出力(RGBA)
          • ファイルの種類をAviFileのまま変更なし。
        • イベントを利用した変身の動画は、後々わかるようにテキスト追加。
      • 最後にYouTubeアップ用動画に変換
        • 中途半端な解像度なので、1280*720に変換。
        • 1FPS動画になっているので5倍速などに変更するときはFPS変換が必要。
        • 動画をAviUtlで読み込む時に読み込むファイルに合わせるのチェックを外し、変更する倍速のFPSにする。
        • あまりに数が多いので変身LV毎にまとめる。
        • まとめるとかなり長い動画になるので、各区切りをテキスト追加。
      • 各フレームを確認できる元動画を保存するため、検証5セットの動画を圧縮変換する。
        • 保存先はGoogleDrive
        • 圧縮は以下の方法。
          • プラグイン出力→拡張編集AVI/BMP出力(RGBA)
          • ファイルの種類をAviFileのまま変更なし。
          • ビデオ圧縮→圧縮プログラムでXvid MPEG-4 Codecを選択
          • これで1h動画でも30MB以下に変換される。
    • 検証動画の例(等倍速)
      • 24FPSで撮影した動画の1Fを1秒に変換した動画の等倍速です。
        画面上部のタイムスタンプとカウンターが、撮影動画のタイムスタンプとフレーム数になります。
        5回分の計測を一つにまとめてあります。
    • 検証動画の例(5倍速)
      • 24FPSで撮影した動画の1Fを1秒に変換した動画の5倍速です。
        画面上部のタイムスタンプとカウンターが、撮影動画のタイムスタンプとフレーム数になります。
        5回分の計測を一つにまとめてあります。

0 件のコメント:

コメントを投稿