5月8日、9日の2日間に渡ってUnityユーザー向けイベントであるUnite 2017 Tokyoが東京国際フォーラムで開催されました。

Unite 2017 Tokyoは、Unityユーザーのためのテクニカルな講演やブース出展が数多く行われる、国内最大のUnityカンファレンスイベントです。

https://unite.unity.com/ja/2017/tokyo

このTech Inside DrecomにもいくつかUnityに関する技術情報を掲載していますが、ドリコムではゲーム開発にUnityを利用しています。

ドリコムでは例年このUniteに参加していますが、今年も行きたい!という声を挙げた10名以上のエンジニア、デザイナ、プランナが、会社支給の参加チケットを片手に多くのセッションに参加してきました。

本エントリでは、いくつかのセッションをピックアップして、参加者目線での感想や所感を記しています。

セッション概要と所感

Unity最適化講座 ~スペシャリストが教えるメモリとCPU使用率の負担最小化テクニック~

Unity TechnologiesのIan Dundore氏による、メモリとCPU のパフォーマンスチューニングの Transform, Animator, Physics の切り口から改善するテクニックの詳解。
英語セッションでしたので、下記一部のページを和訳しています。

CPU における Transform の仕様と問題について

  • 全ての GameObject が持つ
  • 変更が生じた場合、C++ レイヤでイベントのメッセージングが発生する
  • 親の GameObject が変わった場合 (world 座標が変化する場合) は、更に多くの内部的なイベントが発生する
  • 直接 position, rotation を更新する他に、AnimatorPhysics による変更も起こりうる
  • 1回の変更で1つのメッセージングが発生

    • transform.position = pos; // これで一回
    • transform.rotation = rot; // これでもう一回
  • このメッセージはヒエラルキー上にネストされている全ての GameObject に再帰的に送られる

    • Transform だけでなく、Physics, Renderer, Particles などにも送られる
  • 5.6 からは transform.SetPositionAndRotation というメソッドが用意されるので、そちらで緩和できる
  • 単一の Unity-chan だけでも 150 の Transform が存在する
  • Inspector 上の Rig のオプションには Optimize GameObject という項目がある

    • 内部的なマルチスレッド処理のためにアニメーションデータを最適化する
    • 子要素から不要な Transform を抑制することが出来る (除外リストも作成可能)
    • スキンメッシュ(アニメーション?)のマルチスレッド処理を許容するようになる

CPU における Physics の仕様と問題について

  • 主なボトルネックは物理シミュレーションとレイキャストなどによるサンプリング
  • コストは物理世界の複雑さと物理オブジェクトの密度に比例する
  • コライダの種類によってコストが異なる

    • BoxSphere は安く、Mesh は高い (単純なポリゴン数)
  • レイキャストなどは以下のステップで処理され、3番目の処理が最もコストが高い

    • ワールド座標に基づいて衝突する可能性のあるコリジョンのリストを作る
    • コリジョンのレイヤに基いて不要と判断したコリジョンを取り除く
    • 残ったすべてのコリジョンをテストして実際に衝突するコリジョンを抽出する
  • Unity のレイヤでできるチューニング
    • レイキャストの距離に制限をかける
    • Physics レイヤを使いこなす
    • Physics の fps を下げる
  • RigidBody の移動は Transform ではなく固有のメソッドを利用すること

    • MovePosition()MoveRotation()

所感

Unity のパフォーマンス的な弱点にフォーカスしているように感じました。
ほぼすべてのアプリが共通して抱える問題として Transform が挙げられていたので、アプリケーションのパフォーマンスを見る上での着眼点として有益な情報でした。
また、メモリプロファイラは率先して使っていくべきと感じました。

「サガ スカーレット グレイス」におけるUI開発事例

株式会社スクウェア・エニックスの片田氏による、サガの紹介と、サガのUIをどのように開発したかの手法についてセッション。

所感

プロジェクトの状態や状況によっては、プログラマー・UIデザイナー間の作業分担があいまいな部分になることも考えられる為、どのように折り合いをつけているのか興味がありました。

講演内容は、「作業フロー」の話ではなく、「UIのシステム構築」の話だったので、期待していたのとは少し異なりましたが、これはこれで学ぶものがありました。
ただ、Viewの部分を独自に実装していて課題も残っていたので、UnityでMVCを実現させる方法も模索した方が、講演を聞く側としてはためになると感じました。

最適化をする前に覚えておきたい技術

ユニティ・テクノロジーズ・ジャパンの黒河氏による、最適化の基礎に関する特にUnity初心者は必聴、必読の講演。

所感

講演内容がとてもまとまっていて、原因調査へのアプローチ、実際の調査方法が分かりやすくまとまっています。アプローチ方法だけでも、目を通す価値はあると感じました。
負荷原因に関しては、Unity依存で無ければ基本的な内容でもありますので、基礎知識として把握しておくべき内容ではないでしょうか。

同日の公演で有りました、以下の公演内容も目を通しておくことをおすすめいたします。

『Shadowverse開発事例』 ~美麗カードが動く!制作テクニックのすべて~

株式会社Cygamesの大道氏、島村氏両名による、Shadowverseにおける【開発体制・ワークフロー】、【プレミアムカード作成】、【最適化と開発効率化】のエンジニアとデザイナにおける工夫に関する事例のセッション。

所感

「クオリティ」「物量」「コスト削減」を実現するために、熱量の高い工夫をしているのが素晴らしかったです。個人的にこういった工夫は好きなので、とても刺さる内容で満足しました。
Cygamesさんは、プロジェクト単位でのKPTノウハウを横転していく印象があるので、そういった体制をドリコムでも取り入れられないかと考えていこうと感じました。

おわりに

当日発表された講演スライドの多くはSlideshareに公開され、講演動画も順次公開される見込みです。

講演スライドを見るだけであれば現地に足を運ぶ必要はありませんが、登壇者による口頭での補足は講演スライドには含まれていませんし、講演後には登壇者と対面で質疑応答する時間が別途用意されています。また、出展ブースは現地に行かなければ見ることができないものです。

このように少なからず現場でしか得られない体験もありますので、興味はあるけれど二の足を踏んでいる方は、一度参加してみると良いのではないでしょうか。
早割で¥20,000、当日券で¥30,000と決して安価ではありませんが、少なくとも日頃からUnityに触れている方であれば、十分にその価値があるものだと思われます。

最後になりますが、ドリコムではUnityに興味のあるエンジニア、デザイナ、プランナを募集しています。

今回のUniteを始めとして、勉強会や各種セミナーへの参加を支援する制度もありますので、ご興味ありましたら、採用ページまたは Wantedlyをご覧ください。