Pokémon TCG Pocket: カジュアル ゲーム向けに Vulkan のみの開発を採用

Pokémon TCG Pocket のゲームタイトル ロゴのスクリーンショット。

ポケモン トレーディング カード ゲーム(TCG)は、世界中で 30 年近く楽しまれてきました。最近リリースされた Pokémon TCG Pocket は、物理的なカードを必要とせず、いつでもどこでもポケモンの収集やバトルを体験できるように設計されています。スマートフォンでこのゲームをプレイできることが、ユーザーの間で広く人気を集めている要因となっています。

カジュアルなトレーディング カード ゲームのように見えますが、Pokémon TCG Pocket は複雑なシェーダーを使用しているため、コンパイル時間を短縮することが大きな課題となっています。この問題に対処し、高品質のグラフィックスとスムーズなゲーム体験を実現するため、Android 版の Pokémon TCG Pocket では、次世代のグラフィック API である Vulkan を採用しています。

このドキュメントでは、ポケモン TCG Pocket 開発チームが Vulkan を採用した理由、直面した課題、Vulkan が提供するメリットについて詳しく説明します。

図 1. Pokémon TCG Pocket のゲームプレイ シーン。

Vulkan を採用する理由

当初、Pokémon TCG Pocket 開発チームは OpenGL ES を使用する予定でした。しかし、将来性のあるグラフィック API である Vulkan を採用することにしました。Vulkan を選んだ主な理由は次のとおりです。

  • 長期的なアプリ管理: Android で Vulkan が主流のグラフィック API になりつつある傾向を踏まえ、チームは長期的なアプリ管理に Vulkan が最適であると判断しました。
  • 低スペック デバイスでの安定したパフォーマンス: 幅広いユーザーにスムーズなエクスペリエンスを提供するには、低スペック デバイスでの安定したパフォーマンスが不可欠です。Vulkan の CPU 負荷を軽減する機能により、フレームレートとバッテリー消費量が改善されることが期待されます。
  • リリース後の大規模な変更を回避する: リリース後に OpenGL ES から Vulkan に切り替えると、大幅な変更が必要になり、ユーザー エクスペリエンスが中断される可能性があります。最初から Vulkan を採用することで、このような大幅な変更の必要性を軽減できました。

Unity で Vulkan を実装する

Pokémon TCG Pocket では、ゲームエンジンとして Unity が使用されています。Unity では、ワンクリックで Vulkan を実装するための効率的なプロセスが用意されています。開発チームは Unity を使用して、特別なトレーニングを必要とせずに Vulkan をシームレスに統合しました。また、開発環境とツールに Vulkan 固有のアダプテーションがないため、費用対効果が高まりました。

Unity の Auto Graphics API
図 2. Unity の Auto Graphics API

Vulkan の実装における課題

Vulkan の実装は比較的簡単でしたが、開発チームはその後、いくつかの課題に直面しました。

  • デバイス固有の問題: 一部のメーカーのドライバでは、OpenGL ES と比較して Vulkan での安定性が低く、デバイス固有の問題が発生していました。
  • ミドルウェアでの Vulkan のサポートが不完全: 一部のミドルウェアでは Vulkan が完全にサポートされていないため、ミドルウェアの更新を待つ必要がありました。

開発チームは、経験豊富なコンシューマ ゲーム デベロッパーのチームを結成してトラブルシューティングを行う(低レベルのグラフィック API やカスタム エンジンに精通しているため)、Google チームや Unity チームと連携して個々の問題を解決するなど、複数の戦略を通じてこれらの課題に対処しました。デバイスの互換性を拡大するため、テストには中程度から古いハイエンド デバイス(2 ~ 3 年前にリリースされたデバイス)が含まれ、推奨されるデバイスの仕様が決定されました。

Vulkan の利点

Vulkan の採用により、Pokémon TCG Pocket には次のようなメリットがもたらされました。

  • シェーダーのコンパイル時間の短縮: Vulkan では、シェーダーの数が多くても、シェーダーのコンパイル時間が大幅に短縮されました。たとえば、OpenGL ES のコンパイル時間は 1 秒を超える可能性がありますが、Vulkan レンダリングではこれは問題になりません。
  • 対応デバイスの範囲の拡大: フレームレートとバッテリー消費の改善により、対応デバイスの範囲が広がり、より多くのユーザーがスムーズに利用できるようになりました。
  • Vulkan 検証レイヤによるテレメトリーの改善: Vulkan 検証レイヤは、問題の根本原因の特定に非常に役立ち、Vitals ANR/クラッシュ レポートから提供されるデータを補完しました。

デベロッパーへのメッセージ

Pokémon TCG Pocket 開発チームは、プロジェクトで Vulkan の使用を検討しているデベロッパーに次のようなアドバイスを提供しています。

  • Vulkan は、シェーダーのコンパイル時間を短縮するだけでなく、パフォーマンスを大幅に向上させます。
  • vkQuality を使用して OpenGL ES にフォールバックすると、ポケモン TCG Pocket ではまだ使用されていませんが、デバイスのサポートを拡大できる可能性があります。

まとめ

Pokémon TCG Pocket の開発チームは、Vulkan を採用することで、幅広いデバイスでグラフィックを最適化し、すべてのプレーヤーがスムーズで魅力的なエクスペリエンスを楽しめるようにしました。継続的な機能の追加と将来の可能性の進化により、Vulkan は今後さらに多くのメリットをもたらすことが期待されます。