「Portal」をNINTENDO64に移植した開発者による解説動画が公開される

「Portal」をNINTENDO64に移植した開発者による解説動画が公開される

  • GIGAZINE
  • 更新日:2023/11/21
No image

2007年にPCでリリースされ、その後Xbox 360やNintendo Switchにも移植されたアクションパズルゲームの傑作「Portal」をNINTENDO64でプレイできるようデメイク、つまりあえてレトロ風にリメイクしたYouTuberのジェームス・ランバート氏が、制作秘話を語る動画を公開しました。
How I optimized Portal to run on the Nintendo 64 - YouTube

今回ランバート氏が挑戦したプロジェクトは、単にPortalをNINTENDO64で遊べるようにするというもの。

No image

ただの移植ではなく、NINTENDO64の振動パックにも対応させています。

No image

以下が、ランバート氏です。

No image

NINTENDO64のコントローラーを持って「Portal」のプレイを開始。よく見ると、メニューがスペイン語になっています。

No image

まだ翻訳は完璧ではありませんが、字幕をさまざまな言語に切り替えることができるようになっているとのこと。

No image

ランバート氏が本作の制作にあたって行ったことの1つは、コンパイラの最適化です。

No image

コンパイラとは、コードをプログラムに変換するプログラムのこと。これを最適化することで、コンパイルやプログラムのビルドにかかる時間が短縮され、バグの特定も容易になります。

No image

NINTENDO64版Portalをプレイしつつ説明するランバート氏によると、最適化によって発生するバグもあるので、最適化を有効にするのには不安もあったとのこと。しかし、幸いにも特に問題は起きませんでした。さらに、ランバート氏はコードにボトルネックがないかどうかを確認するため、処理が詰まっているところを特定する「プロファイリング」を行いました。

No image

当初、ランバート氏は物理演算がゲーム処理に負担をかけていると予測していましたが、プロファイリングのおかげでレンダリングに時間がかかっていることがわかったとのこと。そこで、ランバート氏は見えているオブジェクトだけをGPUに送ってレンダリングするようにしました。

No image

ところが、オブジェクトが画面に表示されているかをCPUにいちいちチェックさせていたので、今度はCPUが働き過ぎになってしまいました。

No image

そこで、ランバート氏は境界ボリューム階層(BVH)という手法を導入しました。BVHとは、近くにあるオブジェクト同士を「境界ボックス」で1つのグループにまとめて扱うことです。

No image

「境界ボックス」と呼ばれていますが、単にオブジェクトを詰めた箱というわけではありません。

No image

「境界ボックス」はどちらかというと、複数のオブジェクトを収めることができる最小の箱だとランバート氏は説明しています。

No image

これにより、境界ボックスをひとつチェックしてそれが視界内なら箱の中のオブジェクトをすべてレンダリングし、外側ならレンダリングを省略するという処理が実現し、パフォーマンスを犠牲にすることなくCPUとGPUの処理を最小限にすることができました。

No image

ランバート氏はこの処理でフレームレートを大きく向上させることができました。動画では、再生開始から7分20秒のあたりで見ることができます。

No image

そんなランバート氏にもテストチェンバー11は難しいらしく、解説しながら「こんなの不可能だよ」とこぼしています。

No image

移植のもう1つのポイントが、振動パックのサポートです。

No image

これにより、ポータルガンを発射するとコントローラーがブルブルと震えるようになりました。

No image

しかし、振動パックには内部のピンの接続が振動で途切れて震え始めたら止まらないという問題があったので、対応には苦労したとのこと。

No image

振動を止めるのに3回コマンドを送信するなどしましたが、うまくいかなかったので、振動させるべきではない時は1フレームごとに振動パックを止めるコマンドを送るという力業で対応しました。

No image

コントローラーにコマンドを送るには、ただでさえ往復で約2ミリ秒かかります。これに振動パックの管理も加わったので、最終的に1フレームあたり約10ミリ秒、つまり各フレームの3分の1はコントローラーの管理に費やすことになったとのこと。

No image

解説中に、光の粒子が不自然な挙動をして「新しいバグを見つけちゃったよ」とこぼすランバート氏。

No image

コントローラーの話に戻ると、実際のところコントローラーの管理にかかる時間は待機しているだけのアイドルタイムだったので、ランバート氏はコントローラーのスレッドを分離することで、待機中はCPUを開放して別の処理を行えるようにしました。こうして、ランバート氏はNINTENDO64版Portalを振動パック対応ソフトにすることができました。

No image

この記事をお届けした
グノシーの最新ニュース情報を、

でも最新ニュース情報をお届けしています。

外部リンク

  • このエントリーをはてなブックマークに追加