
話題の『Unity パフォーマンスチューニングバイブル』著者インタビュー
サイバーエージェント ゲーム・エンターテイメント事業部では、社内研修用の書籍『Unity パフォーマンスチューニングバイブル』のPDFを公開し、同時にオープンソース化しました。(詳細はこちら)モバイルゲーム開発においてパフォーマンスチューニングは重要ですが、その一方で、必要な知識が幅広く、体系的な学習が難しいという問題があります。ゲーム・エンターテイメント事業部ではこのような課題感から、パフォーマンスチューニングに関する知識を体系的にまとめた書籍として、『Unity パフォーマンスチューニングバイブル』を製作いたしました。今回は著者であるアプリボットのエンジニア2名に、執筆背景や今後の目標について話を聞きました。
<プロフィール>
(左)向井 佑一郎(Yuichiro Mukai)
2015年にサイバーエージェントへ新卒入社、アプリボットに配属。「Neir Re[in]carnation」のキャラクター制御などに関わりつつ、Lead Developer Experience(LDX)としてクライアントエンジニアの開発体験の向上に会社横断で取り組む。Unityをはじめとしたゲームに関する技術に触れることが好きで、会社有志の活動としてUniTipsや、個人でも毎週のUnityに関するニュースや記事をまとめたUnity Weeklyの運用を行う。
(右)中村 光寿(Teruhisa Nakamura)
ゲームプログラマーとしてキャリアをスタートし、アプリやアーケードゲーム開発を経て、2017年にアプリボットへ中途入社。「SEVEN’s CODE」でエンジニア兼ディレクターを担当。現在は新規タイトルでパフォーマンスチューニングやビルドパイプラインの構築などに従事。日本酒映画部部長。趣味はカレーと日本酒。
ーーーはじめに、普段のお二人の業務内容を教えてください。
向井 LDX(Lead Developer Experience)という役職で、アプリボットのプロジェクトで、主にUnityクライアントに関する効率化や基盤整理、アプリのCIなどを担当しています。
中村 開発中の新規プロジェクトで、システムチームでアセットのビルドパイプラインの構築や、それに付随するCI/CD、パフォーマンスチューニングをプロファイリングしながら課題を洗い出し、開発側への改善提案を行っています。また、システムチームとしてゲーム開発以外の部分も広く担当しています。
ーーーこれまではどのような業務内容に携わってこられたのでしょうか。
向井 2015年にサーバーサイドエンジニアとして新卒入社し、当時開発中だったプロジェクトのサーバー基盤の実装や、マルチサーバーの検証と実装を担当していました。2年目を過ぎたころにクライアントエンジニアに転向し、リリースまで開発に携わりました。主にインゲームの演出周りの実装や、アウトゲーム全般のリーダーを担当していました。その後、「NieR Re[in]carnation」のキャラクター制御を担当しました。
中村 アプリボットに入社する以前は、某コンシューマー会社でゲームアプリの開発と、アーケードゲームの開発に携わっていました。もともとつくりたいゲームがあり、つくれる環境を探していたときアプリボットと出会い、2017年に中途入社しました。入社当初は「SEVEN’s CODE」のエンジニアリーダーを担当しつつ、途中からディレクター業務も兼務し、主にディレクション業務を担当しつつインゲームの開発に携わりました。このころの経験を活かし、「NieR Re[in]carnation」ではサウンドとパフォーマンスチューニングの部分を主に担当しつつ、全体のコードレビューやサポートを担当していました。
ーーー本書の執筆に携わったきっかけを教えてください。
中村 SGEコア技術本部のメンバーと「社内のエンジニアにパフォーマンスチューニングのスキルを身につけてもらうためにはどうすれば良いか?」と議論した際、「教科書みたいなものがあったほうが良いのでは?」という話題になり、有志メンバーを募り執筆をはじめたのがきっかけでした。
向井 自分はメンバーを募っていたタイミングから参画しました。たまたま物理エンジンを触っていたこともあり、ひと通りのパフォーマンスチューニングも経験していたため、「せっかくなので、ぜひ書かせてください」と、手を挙げました。「パフォーマンスの良いコードをどのようにして書くか」に興味があり、個人的にそれらの調査や実践をしていたこともあり、すこしマニアックな部分や難易度の高い部分を執筆させていただきました。
ーーー本書は現場に即した知見が詰まっていると社内外でも話題になっていますが、どのように知見を広げていったのでしょうか。
向井 当時、開発現場で起こっていたことを一部メモしていたり、自分自身の記憶に残っていたものを一般化して書いた内容が多いですね。執筆を担当した物理エンジンでは、現場であまり触れる機会がなかったもののパフォーマンスに影響がありそうな箇所は自分で調査・検証し、追記しました。
中村 チューニングのためにプロジェクトに異動した当初は、向井さん含めエンジニア同士でかなり議論を交わしましたね。
向井 当時、自分がパフォーマンスチューニングについてあまり詳しくない状態でしたが、中村さんから様々な指摘をいただいたからこそ、パフォーマンスチューニングに興味を持ちました。物理エンジンでパフォーマンスの問題になりやすい部分は、形状など様々な要素が絡み合うため、中村さんとの協働をきっかけに関連する書籍を読み、事前防止策を練ったり、問題になりやすいところを積極的に改善しておこうというアクションに繋がったと思います。
中村 アプリボットに転職して初めてUnity(C#)を使うことになりました。知識として落とし穴があることは知っているつもりでしたが、最初に手掛けたタイトルがリリース当初とても重くなってしまい、当時はディレクター業務が中心ゆえ検証まであまり手をかけることができなかったことを強く反省しました。その後エンジニアとして必死に調べ改善を行い、最終的には理論上FPS120〜240くらいまでを出せるまで改善することができました。この経験から、他のプロジェクトで同じような事態を招かぬよう、自分が嫌われてもいいから口うるさく直してくださいと指摘するようになりました。
ーーーもともとパフォーマンスチューニングに興味があった、というよりも、プロダクトをよりよくしたい、という想いがはじまりだったのですね。
中村 そうですね。ひとつのプロダクトをつくり、直すという経験によって、一気にチューニングスキルは伸びたのかなと思います。個人でもゲーム制作をしているのですが、ゲームをリリースするためには色々と知っておかなくてはいけないことが多くて…。最終的にお客様の元にサービスを届け、ゲームをプレイしていただくことがモチベーションの源泉のため、リリースに向けてアクションをする過程で、学んだことが知識として身に付いたのだと思います。
ーーー向井さんはどのようにして知見を広げていったのでしょうか。
向井 自分も基本的にインプットは目標から逆算していると思います。Unity Weeklyというブログを執筆するために、Unityの最新情報やiOS/Androidなどガジェットに関する情報は、日々積極的にキャッチアップしています。スマートフォン業界は技術の進化に応じて開発スタイルや最適化の手法も変わる可能性があるため、新しい情報は比較的にすぐに取り入れられるよう工夫しています。Twitterももちろん見ますし、GPUに詳しいライターさんや、Unityの各分野ごとに詳しい方の記事も一通り目を通しています。
ーーー向井さんはどちらかと言えば同じ技術者のためのインプットを積極的に行われているのですね。一方で中村さんは、ゲームをプレイしていただくお客様のためにインプットをされていらっしゃる。
向井 そうですね。いい感じにまとめていただきました。(笑)
ーーーエンジニアとしての将来の夢や目標はありますか?
向井 過去を振り返ると、開発当初はいろんな問題にぶち当たり、泣きながら対応して何とかリリースを迎えた…という状況が多かったため、より高いクオリティのプロダクトを安定してリリースすべく、基盤を整理し情報を仕入れ、人材も育成していく、ということに挑戦していきたいです。また、Unity WeeklyをUnityに関わっている方にもっと読んでいただけるために、自分自身もよりUnityに関する知識を身につけ発信し、Unityがもっと盛り上がればよいなと思っています。
中村 自分がつくったプロダクトを通してお客様の人生に良い影響を与えるきっかけをつくりたいという想いがあります。それこそがこの仕事の面白いところだと思っているので、日々自分のスキルを磨き、「ゲームクリエイター」として、これからも幅広くゲームづくりに携わって行きたいと思っています。また、チャレンジングな試みとしてアプリボット第1号となる特許出願もできました。今後も新しいゲームを作るために、自分たちで発明していくようなアクションをどんどんやっていきたいです。「アプリボットではじめて」になるものをどんどん奪っていこうかなと思っています。(笑)
アプリボットは一緒に働く仲間を募集しております。
当社の採用情報にご興味がございましたら、以下URLからご参照ください。
https://www.applibot.co.jp/recruit/
2020年サイバーエージェントに入社。株式会社アプリボットに配属され、現在は新規開発のクライアントエンジニアリーダーを担当
この記事へのコメントはありません。