後藤弘茂のWeekly海外ニュース
認識処理や物理演算などが揃うPlayStation 4のSDK
(2014/11/20 06:00)
バージョン2世代に入ったPS4のSDK(Software Development Kit)
PlayStation 4(PS4)のシステムソフトウェアはバージョン2世代に入り、機能が大幅に拡張された。それに対応して、ソフトウェア開発者向けのSDKもバージョン2世代にパワーアップしている。SDK 2.0からは、システムソフトウェア2.0から追加された新機能がサポートされた。
具体的には、ネットワーク越しの協力プレイを可能にする「Share Play」や、システムソフトウェアの背景やアイコンをカスタマイズできる「PlayStation 4 テーマ」、ビデオ編集アプリケーションの「SHAREfactory」、ゲームプレイ映像をYouTubeにアップロードできる「YouTubeシェア」といった機能がSDK側でもサポートされた。
こうしたバージョン2.x世代のSDKの機能は、9月に開催されたゲーム開発者向けカンファレンスCEDECで公開されたが、この時に、PlayStation 4 SDKの他の興味深いライブラリ群についても説明された。特にSCEの特色が出ているのが、画像認識系のライブラリだ。
多彩な画像認識系のライブラリを提供
PS4はオプションで2眼のカメラ「PlayStation 4 Camera」が販売されている。SCEは、この2眼カメラに合わせた画像認識SDKを提供している。2眼カメラから被写体の位置の深度(Depth)情報を得る「libDepth」ライブラリや、画像認識系の「Vision Library」などだ。これらのライブラリによって、PS4ではカメラを使った多彩な認識処理が容易に利用できるようになる。
libDepthライブラリは、PS4のオプションの2眼カメラを使った位置情報生成ライブラリだ。2個のカメラで撮影した画像を使い、カメラ間の視差を使って物体までの距離を算出する。距離(=深度/Depth)データの生成は、ソフトウェア処理で行なう。「Xbox One」の「Kinect」のようなハードウェアで実装した深度検知機構とロジック回路は持っていないためだ。
通常、2眼カメラからのデータによる距離測定をCPUによるソフトウェアで行なうと遅延が大きくなりリアルタイム性が損なわれる。そこで、libDepthでは、距離計算を演算能力の高いGPUコアで行なわせることで、深度データを生成するまでの遅延を1.5msに程度に抑えている。60fpsの画面表示の場合、1フレーム当たりの時間は16.7msであるため、libDepthによる深度検知は1フレーム時間の約10分の1で実行できることになる。
セッションでは、カメラあたり640×400ドットの画像データ入力から、160×100ドットの深度データに出力するデモを行ない、1.5msまでに落とし込んでいることを示した。
PS4 APUによるソフトウェア処理の利点は、柔軟でスケーラブルであること。特殊な深度検知ハードウェアを使わないため、コスト的にも安く上がる。しかし、弱点もある。
PS4のlibDepthは、カメラからの画像から深度を計算するため、MicrosoftのKinectの深度測定と異なり、カメラ側の光源からの照射を行なわない。現在のKinectは、カメラ側から照射する赤外線の反射を深度の測定に使うため、測定する場所の照度に影響されない。それに対して、PS4のlibDepthの処理はカメラからの画像情報だけを使うため、暗所では深度測定の精度が落ちるという弱点がある。
初期のSDKでは、10lux程度の照明では、実用的な深度データを得られなかったという。10luxは非常に暗いが、欧米のリビングルームではこの程度の暗さでゲームプレイをする場合も多いため問題となる。しかし、現在のSDKでは、アルゴリズムが改善され充分な深度が計算できるようになっているという。
UIに使いやすいピークトラッカー
libDepthは、カメラベースのユーザーインターフェイス(UI)への応用ができる。1つは、手検出&追跡。ユーザーが突き出した手を、深度情報の「ピーク」をトラックすることで検知する。つまり、深度データで最も手前に来ている部分を検知・追跡する。この場合は、ピークだけを発見すればいいため、検知が非常に簡単という利点がある。
ピークトラッカは単純であるため、照度をぎりぎりまで落としても、検知が可能だ。CEDECで講演した豊禎治氏(株式会社ソニー・コンピュータエンタテインメント)は「ピークトラックだけなら、部屋の照明を全部消してTVからの照明だけでも検知できる。高いフレームレートで安定的にピークを取ることができるので、非常にスムーズなユーザーインターフェイスができるだろう」と説明した。手をポインタとして使ったジェスチャによるユーザーインターフェイスが容易に可能となる。
UIとして使うことができるもう1つのライブラリ機能はヘッドトラッカー。これは深度情報を使って頭の大きさと形状のものを検知して追跡する。顔認識を行なうのではなく、単純に頭の形状とサイズで判断する。かなり激しく頭を動かしても確実に追跡するデモを行なった。
ARにも応用ができる画像認識ライブラリ
SCEが提供するカメラ系のライブラリは深度検知のlibDepthだけではない。画像認識系の「Vision Library」としてさまざまなライブラリを提供している。
顔認識の「libFace」は、人間の顔のパーツを認識する。libDepthのヘッドトラッカーライブラリが、深度から頭の形を認識するのに対して、libFaceは頭のそれぞれの要素を画像から認識する。ユーザーの顔の位置や向き、また目や鼻、口といった各パーツ、笑顔など表情や年齢や性別などの属性も認識するという。SCEはPS3時代から連綿と顔認識のデモを行なって来たが、PS4のVision Libraryではその成果が提供されている。ユーザー顔の特徴を抽出して個人を特定するだけでなく、認識データを使ってユーザーに似た顔のゲームキャラクタを自動生成したり、属性をゲーム内で利用したり、表情からユーザーの状態を検知してゲームに反映するといった利用が考えられるという。
libDepthのピークトラッカーでは深度データから手の先を検知するが、画像から手の形状を認識するライブラリも「libHand」として提供されている。グーやパーといった、手の形状まで認識できるという。ピークトラッカーと組み合わせることで、より正確に手の認識が可能になる。
面白いライブラリでは平面形状を検知する「libSmart」がある。これは、カメラ画像から平面物体を認識し、その位置と傾きなどの姿勢のデータを算出する。libSmartは、実際にはAR(拡張現実)系のライブラリとなる。例えば、実世界の平面の床の位置を検知することで、床の上で動くバーチャルARキャラクタの正確な動作を生成してカメラ画像に重ねることが可能となる。
このライブラリの応用として紹介されたのは「ARダイナミックライティング」と呼ばれるテクニックだ。これは、カメラから取り込んだ実世界の画像にARのCGを重ねる場合に、リアルなシェーディングを行なう手法だ。ARのオブジェクトの陰影が、実世界の光の当たり方と異なると、ARの画面に違和感が生じる。CGが浮いて見える不自然な映像となる。
そこで、実世界の画像から実際の光源の位置や強さ、色などを推定し、それを実世界画像に重ねるARのCGに反映するという。実世界に合わせた光源でシェーディングすることで、実世界の画像と違和感なく融け込むARが可能になる。ただし、これも処理が重ければ使いにくい。そのため、非常にシンプルで効率的なアルゴリズムを考案したという。
具体的には、実世界の床面を傾きも含めて検知、床面を3×3に分割して重み付き平均を計算して輝度の高い方向に光源があると判断する。また、色の平均を取ってライトの色とする。実際にはライティングの検知をやりやすくするために、懐中電灯で床を照らす。これは実際のゲームではユーザーに操作させる形になるだろう。
2眼を使ったヘテロデュアルカメラ
PS4の2眼カメラ向けにはこうしたリッチなライブラリが提供されている。また、2眼カメラは、視差による深度情報を得るだけでなく、別な使い方ができる。豊氏が説明したのは「ヘテロ(異種)デュアルカメラ」手法で、左右のカメラの設定を変えて特殊な撮影を可能にする。
具体的には露出を左右で変えることが考えられるという。例えば、動きの速い物体を撮影する場合、片方のカメラのシャッタースピードを速くして速い動きを捕らえ、もう片方のカメラで通常撮影をして重ね合わせる。速い動きを撮影しようシャッターを速くすると、画像が暗くなってしまう。しかし、通常の撮影の画像も同時に撮ることで、動きの速い物体と周囲の両方を良好に撮影できる。
また、2眼の設定を変えることで、ユーザーの認識も容易にしている。PS4のコントローラを持つプレイヤーを、片方のカメラを通常の設定にして顔認識によるアイデンティフィケーションを行ない、もう片方のカメラでライトブラーを検出してコントローラの位置を正確に検出する。
ちなみに、PS4のカメラにはこうした認識処理を容易にするために、ハードウェア的に工夫がなされている。ピラミッドスケーラをハードウェアで実装しているため、複数の解像度の画像を低遅延で取得できる。具体的には、カメラの最高解像度1,280×800ピクセルから、その半分の640×400ピクセルの解像度、そこからさらに半分と、ピクセル数を段階的にスケールダウンできる。そのため、認識処理のように、全ピクセルを演算すると難しい場合も、ノーコストで解像度を落とした画像を得ることができる。最適なピクセル数にまで落とし込んでおいてから効率的にソフトウェア処理を行なうことができる。
PS4向けの物理シミュレーションライブラリ
PlayStation SDKでは、PS4アーキテクチャに最適化された物理シミュレーションライブラリも提供されている。メモリフットプリントが圧迫されることを嫌うゲーム開発向けにコンパクトなローレベルAPIになっている点が特徴。外部エンジンの移植ではなく、完全にSCE内製で作っているため、PS4にバリバリに最適化していると豊氏は説明する。また、ライブラリのアルゴリズムも非常に特殊なものとなっている。
SDKでは、GPUベースの物理シミュレーションとCPUベースの物理シミュレーションの組み合わせで提供している。ゲームロジックに絡む細かな制御が必要な物理をシミュレーションする場合はCPU、エフェクトのようにゲームロジックと直接絡まず膨大な物体のシミュレーションが必要な部分にGPUを使う。両物理シミュレーションを連携させて使うこともできる。
GPU物理シミュレーション「GPU Physics」は、剛体シミュレーションの全パイプラインをGPU側に実装しているという。通常はGPUのような並列プロセッサでの効率的な実装が難しい部分もGPUに載せた。爆発や崩壊のようなエフェクトに使う、膨大な演算が必要な大規模シミュレーションに向けたソリューションだ。GPUのシェーダプロセッサを使うため、CPUと比べると10倍以上高速になる。
CEDECのセッション中のデモは、まず単純なボックス型剛体のコリジョンシミュレーション。CPUの場合は、剛体1,000個をフレームあたり約30秒で演算し、30fpsぎりぎりだった。それに対してGPUの場合は、10倍の剛体10,000個をフレームあたり3分の1の時間の約10msで演算し、60fpsを軽く維持できる様子が示された。もちろん、パーティクル複合体として複雑な形状の物理シミュレーションも可能。PlayStationのデモでお馴染みの黄色いアヒル人形なら、4,000羽をシミュレートできるという。
このほか、地形のような複雑な形状に適用しやすい「Signed Distance Field」もライブラリで提供される。これらシミュレータは、SDKのサンプルとしてソースコードが開発者に提供される。
PS4アーキテクチャと物理シミュレーションエンジン
CPU物理シミュレーション「Physics Effects」は、ゲームロジック、つまり、プレイヤに直接関わるような物理のシミュレーションに使う。現在のゲームで多いオープンワールド、つまり、広大なゲーム空間でユーザーが自由にプレイできるタイプのゲームに対応するために、広い空間でも演算精度を維持できるようにしたという。また、物理的に相互作用するはずのゲーム内物体が、見かけ上の衝突時に衝突判定が発生しない「コリジョン抜け」が発生することを防ぐため「コンティニュアスコリジョンディテクション」を実装した。
PS4のGPU物理シミュレーションは、PS4がAPU(Accelerated Processing Unit)アーキテクチャを採用したことで、実装が容易になった。言ってみれば、PS4アーキテクチャの具体的な成果だ。PLAYSTATION 3(PS3)では、GPUは汎用コンピューティングには使えなかったため、CPUであるCell Broadband Engine(Cell B.E.)の演算プロセッサ「SPU(Synergistic Processor Unit)」を物理シミュレーションに使うなどしていた。それに対して、PS4では、AMD開発のGCN(Graphics Core Next)GPUコアを汎用コンピューティングに使うことができる。
AMD GPUアーキテクチャでは、GPUコアはCU(Compute Unit)で構成される。豊氏は「PS3のSPUに当たるのがGPUのCU。グラフィックスだけでなく物理演算にも使える」と説明。PS3時代よりもプログラミングを容易にすることに気を配ったを語った。
SCEはPS4向けにGPUコアをカスタマイズし、より汎用に使えるように汎用タスクのフェッチ&管理ユニットである「ACE (Asynchronous Compute Engine)」を拡張している。PS4のGPUコアは、ピークで1.8TFLOPSの単精度浮動小数点演算パフォーマンスだが、それを細粒度で物理シミュレーションに使うことができる。PS3時代と比べると、はるかに強力な演算能力が汎用に使えるようになった。
また、豊氏はPS3ではCPUとGPUで物理メモリが分割されていたのに対して、PS4では統合メモリとなり、CPUとGPUが自由にメモリを使うことを強調。「PS4では、全メモリが、どこをとってもフラットに速い。そのために、非常にコストをかけたがGDDR5を使った。ここがPS4の優位だ」と語った。
しかも、APUアーキテクチャのPS4では、CPUとGPUは仮想メモリ空間を共有しており、CPUとGPUの間のデータの受け渡しはポインタで可能だ。そのため、CPU物理とGPU物理の両シミュレーションを連携させることが容易となる。また、AMD GPUアーキテクチャでは、物理コンピュートとグラフィックス描画の混在実行が可能で、ゲーム中で使いやすいという利点がある。
音声認識ライブラリも提供
このほか、PS4では音声認識のライブラリ「PSVR」もSDKとして提供されている。これは、カメラに入っている指向性のアレイマイクに対応したライブラリだ。こちらも物理シミュレーションエンジンと同様に自社開発のライブラリだ。
音声コマンドに最適化されており、開発者は認識させたい対語を「グラマー」と呼ぶ形式で定義する。つまり、特定の音声を、どういう単語として認識すればいいかを定義する。マイクから入力された音声データの中で、グラマーで認識された単語が返される仕組みとなっている。グラマー作成のためのツールもSDKとして提供されている。
対応する言語は日本語、米国英語、英国英語、フランス語、イタリア語、ドイツ語、スペイン語。サーバー側での認識ではなく、完全にローカルで動作する。PS4のシステムソフトウェア自体の音声コマンド認識に使われているのがこのライブラリだ。
PlayStationの世代の積み重ねの歴史は、ライブラリの充実の歴史でもある。PlayStationをスタートさせた当初は、SCEはライブラリなどソフトウェア開発力が非常に弱く、PlayStation 2でもライブラリは散々だった。PlayStation 3(PS3)もXbox 360と比較してライブラリの弱さをよく指摘された。しかし、4世代目のPS4になって、ライブラリありき的な開発へとシフトすることができたように見える。