Amazon Web Services ブログ

Tag: GameDev

アセットライブラリにおける課題:機械学習を利用したプロダクションパイプラインの高速化

利用したいテクスチャをライブラリから探す作業は非常に手間がかかる作業です。Amazon RekognitionやAmazon Machine Learning APIを利用することで、テクスチャへのタグ付けを行い、高速な検索が実現できます。 ゲーム開発では一般的に”painter’s pallet(画家のパレット)”として扱われるテクスチャやシーンを扱う巨大なアセットライブラリを持っています。これらは3Dのランドスケープや地形を表現するために利用されており、データの選択によって世界観をを変えることができるため、非常に重要なものとなります。テクスチャによっては実生活の風景や漫画の陰影、セル画調での世界滅亡の風景などを自由に表現することができます。 膨大な数のデータが保存されているライブラリから、何千ものテクスチャを選ぶことも珍しいことではありません。その場合、まれに正しいタグが付与されていなかったり、ファイルやフォルダ名に依存することで生じる誤解などが問題となります。より正確性を向上するために、正確なタグ付けを手作業によって行うことは非現実的でとてつもない作業になるでしょう。 正確なタグ付けを実現するために、1人または複数人でデータを確認し、意見を集め、その情報によって各ファイルにタグ付けをする必要がありますが、どんなシナリオでも非常に多くの時間がかかります。 しかし、機械学習を利用したAmazonの画像認識サービスであるAmazon Rekognitionを使えば、これらの作業を非常に簡単に高速に行うことができます。アーティストがファイルを開くのに40秒かかり、画像を見て意見を集め、複数のタグを書き込んでデータベースに格納する場合、5,000ファイルを処理するのに約55時間を要します。Amazon Rekognitionを利用する場合、画像のアップロードをバッチ処理することが可能で、私たちのテストコードでは200Mbpsの速度でアップロードしたところ3分未満で完了しました。 試してみましょう! もし1枚の画像で試す場合、こちらをご確認ください。画像をアップロードし、レスポンスを確認するだけです。 https://console.aws.amazon.com/rekognition/home?region=us-east-1#/label-detection もちろん、SDKもご利用になれます。こちらのページからインストールできるAWS SDKを利用します。 https://aws.amazon.com/tools/#sdk それでは、特定のフォルダで簡単なサンプルを動かしてみましょう。ご紹介するサンプルはフォルダの中のすべてのJPEG/PNGファイルをAmazon Rekognitionにアップロードし、メタタグをファイル名と一緒にSQLiteに保存します。また、簡単な検索機能も提供します。 今回はPythonを使ったシンプルな例をご紹介します。もしあなたがPythonのファンではない場合は、AWS SDKでサポートされているお好みの言語を利用いただくことができます。 まずはAWS SDK for Pythonをこちらの手順に沿ってインストールします。 https://boto3.readthedocs.io/en/latest/guide/quickstart.html 最も早い方法は”Boto3″パッケージのインストールです。 pip install boto3 また、AWSアクセスキーの設定をAWSマネージメントコンソール(https://console.aws.amazon.com)から行います。 [IAM]-[ユーザー]-[認証情報]-[アクセスキーの作成]をクリックしてください。 アクセスキーIDとシークレットアクセスキーをメモし、以下のクイックスタートの設定ファイルを編集してください。(Macの場合は”~/.aws/credentials”、Windowsの場合は”%USERPROFILE%\.aws\credentials”となります。) あとは数行のコードで実行することができます。 1. boto3のライブラリをインポートします。 import boto3   2.  利用するリージョンをRekognition APIに設定します。 def detect_labels(bucket, key, imagebytes=None, max_labels=6, min_confidence=70, region=”us-east-1″): rekognition = boto3.client(“rekognition”, region)   3. […]

Read More

P2Pからクラウドへの移行: For HonorとFriday the 13th The Gameがどのようにプレイヤー体験を向上させたのか

ゲーム開発者として、ローンチに至るまで情熱を絶やさずゲーム開発とファンコミュニティの育成に数年の歳月と投資をされてきたかと思います。最高のユーザー体験を提供することおいては、例えばネットワーク接続時のプレイヤーの待ち時間に対するバックエンドの選択肢等バックエンドインフラは一番の関心ごとではなかったかもしれません。 多くのゲーム開発者がピア・ツー・ピア(P2P)ネットワークでマルチプレイヤータイプのゲームを実現させています。開発当初は一見してコスト効果の高いソリューションに思えますが、我々は沢山の開発者がP2Pから クラウド上で可動する専用ゲームサーバー に切り替えられる案件を見てきました。ここでは、UbisoftやIllFonicのようなスタジオのFor HonorやFriday the 13th The Gameのチームが、なぜP2Pをやめクラウド上の専用ゲームサーバに乗り換えたのか、その理由のいくつかを見てみたいと思います 劣悪なレイテンシーと接続性からの脱却 P2Pネットワークでは同一エリアで強力なネットワーク接続があれば低レイテンシーな体験をプレイヤーにもたらしてはくれます。しかしながら、P2Pネットワークでの全体的なゲームのレイテンシーは、ホストとのネットワーク接続のレイテンシーに縛られます。 For Honorは、当初、P2Pネットワークモデルを採用してリリースされました。時間を経るに連れ、プレイヤーの体験に関してアーキテクチャの選択に起因するいくつかの問題がある事が明らかになり、セッションの移譲とNAT (Network Address Transaction) の問題解決やマッチメイキングとオンライン体験の安定性を得るために、UbisoftはAmazon GameLiftで稼働させる専用ゲームサーバモデルに移行する事を決定しました。 専用ゲームサーバは開発者側による細かな制御を可能にします。さらに、クラウド上でのホスティングを利用する事で、プレイヤーを低レイテンシーで安定したゲームサーバに接続する等の管理も容易にできるようになります。 ドロップアウト、ホストの優位性、マルチプレイヤーゲームのチート対策 プレイヤーは、ネット接続の問題、ゲームへの興味喪失等々様々な理由でゲームセッションからドロップアウトします。 ホストプレイヤーがゲームから抜けると、他の全てのプレイヤーのゲームの中断や瞬断を招きます。Friday the 13th The Game独自のユニークな非対称マルチプレイゲームではこの問題はより顕著でした。このゲーム内では、あの悪名高いジェイソンはマッチ中の他の全てのプレイヤーと敵対します。ホストプレイヤーがジェイソンに倒された場合に、墓からの観戦は望まずゲームからドロップアウトしてしまうので、全てのプレイヤーのゲームが中断してしまっていました。 P2Pネットワークでは不正やチートも容易にできてしまい、ホストはレイテンシー的に優位になる事が多々ありました。また、専用サーバモデルアーキテクチャに比べ、ホストプレイヤーのPCが認証を行うP2Pモデルではチートの検出も容易ではありませんでした。そして、ホストは他のプレイヤーに比べてレイテンシーが低いので度々優位になりました。専用サーバモデルを採用することで、ゲームの中断やチートの問題を抑え、全てのプレイヤーに平等なゲームプレイ体験を提供できるようになります。これらがIllFonicがAmazon GameLift上で専用サーバを稼働させるという選択をされ、マルチプラットフォーム(PC、Xbox One、PS4)間プレイを実現するに至った理由です。 UbisoftとIllFonicによるP2Pと専用サーバの知見がGDC 2018でシェアされました GameLiftチームによる「Exploring Trends of Multiplayer Game Infrastructure with Amazon Gamelift」セッションをぜひご確認ください。 UbisoftよりFor Honor開発者のDamien KiekenとRoman Campos Oriolaが、IllFonicよりFriday the 13th The Gameの技術ディレクターPaul Jacksonにより、彼らのバックエンドインフラやP2PネットワークからAmazon GameLift上の専用ゲームサーバへの移行に関してご紹介いただきました。また、Amazon GameLiftチームからもマルチプレイヤーゲームサーバのトレンドやマシンラーニング等も紹介されます。 GDC 2018 @ […]

Read More