せまい部屋

web/gameエンジニアのweblog

UE4のNetwork Profilerさわりまで

※導入+αです

最近も4.17がリリースされのりにのってるゲームエンジン界隈もといUnrealEngineですが、ここ数ヶ月ネットワーク絡みのマルチプレイゲームを作ってるお陰もありNetwork Profiler機能を使ってみました。

docs.unrealengine.com

モチベーションはシンプルにパフォーマンス改善につながれば良いですし、自分の開発しているゲームがどれだけのネットワークIOがありそうなものか指標として知るのは大事ですねというところです。導入自体は公式ドキュメントの通りなので特になにもありません。今回は簡潔なサンプルでどういう数値が出て来るか見てみたいと思います。

準備

適当に挙動が見たいのでデフォの人型Pawnを使います。AnimStarterPackにあるUe4ASP_Characterをそのまま流用して、入力部分はキーボードで動かせるようによしなに調整。

f:id:takoji3:20170813210021p:plain

f:id:takoji3:20170813210112p:plain

何もない空間にAnimationStarterPackのHumanを2窓で2人出現させてみます。Replicationの設定は基本特に変更せずローカルなので特段何もなくきれいな感じです。この段階でCrouchingが同期されてないようでしたが今回はスルーです。

f:id:takoji3:20170813211602g:plain

実践

ひとまず何も考えずプロファイリングします。公式通りに netprofile enablenetprofile disable で適当な期間実行してログファイルが生成されたらNetworkProfiler.exeで開きます。

f:id:takoji3:20170813212558p:plain

f:id:takoji3:20170813212813p:plain

パラメータ自体はたくさん出力されていて便利そうですが実際どのあたりを見るといいんでしょうか…ゲームのほうを変えてみます。ホストからはスポーンと同時に各クライアントでプリントするような雑なRPC呼び出しをやります。これでいくらかプロファイル内容が変わると変化が出るので嬉しいですね。

f:id:takoji3:20170813213432p:plain

グラフの前にこれまた一例としてOutgoing Bandwidth Bytes/sGame Socket Send Bytes/s でフィルタして、1回目と定期的にRPC呼び出しした2回目を貼ってみます。

f:id:takoji3:20170813215512p:plain

f:id:takoji3:20170813215523p:plain

ざっくりですが双方とも帯域幅2kくらいオーダーが上がってる感じしますかね。個々のアクターのRPC呼び出し等細かいこともできるぽいのでもっと突っ込んでいくともう少しはネットワークがボトルネックになる場合の検証ができそうです。数値を視覚化することはできますが、実際改善に結び付けるのは大変そうな感じもしました。

まとめ

UE4のネットワーク回りはより効率的なReplicationの設定やRPC呼び出しの参考設計が足りず、自分の場合どうしても力押しで完成させる部分がでてきてしまいました。リッチなエフェクトや表現が作りやすい分ゲームとしてのボトルネックはそちら側である場合が多いかもしれませんが、特にネットワーク通信がゲームの肝になる場合は今回のようにきっちりした数値をとって検証、考察していくことが大事だと感じます。

UE4は用意されてる機能が多岐にわたるため裏の動作もよくわからず行った今回の数値も信憑性は微妙かもしれません。サンプルプロジェクトのMultiplayerShootoutと同様の状態で、ホストをlisten状態にして実際に接続するような形だとまた異なる結果がでるかもしれません。ですが、試行錯誤の手段が増えるという事で効果的に利用していけるとよいかと思います。