グラフィックスを担うプログラマー。
制作部では、『マリオ』や『ゼルダ』、『ピクミン』といった任天堂を代表するゲームタイトルの開発を行っています。部内には、ディレクターを筆頭に、ゲームの内容を考えるプランナー、ゲームを動かすプログラムを書くプログラマー、キャラクターや地形をつくるデザイナー、BGMや効果音をつくるサウンドのメンバーが所属しており、私はプログラマーをしています。ひと言でプログラムといっても役割はいろいろで、ゲームを動かすシステムをつくる人もいれば、キャラクター選択や得点表示といったUI(ユーザーインターフェース)をつくる人、キャラクターを動かすプログラムを書く人もいます。最近では、ゲーム中のグラフィックスのさまざまな表現もプログラムによってつくられていて、私は主にこのグラフィックスを担当するプログラマーをしています。
常に新しいものに挑戦する楽しさ。
入社後すぐに関わったのは、ニンテンドーDSiにプリインストールされていた『ニンテンドーDSiサウンド』です。音楽に合わせて絵を動かす、ビジュアライザーと呼ばれる部分のプログラムを、DSiの3D機能を使ってつくりました。それからニンテンドーDSの『ゼルダの伝説 大地の汽笛』のプロジェクトに途中から加わることになりました。前作でも採用されていた地形のデータを自動生成するプログラムに、機能改善や新しい機能を追加する仕事に携わりました。
次に携わったニンテンドー3DSの『nintendogs + cats』というゲームタイトルでは、ゲーム中に出てくるミニゲームや、ARカードを前に置いてカメラで写すと犬の
映像が現れるARの遊びのプログラムを担当しました。カメラもARも扱うのはこの時が初めてだったので、まずはカメラを使って画像を撮る部分をつくって、そこからどうすれば立体処理できるか、ARで犬を表示するにはどうすればいいかを考えて実装していきました。ほかにも、人の顔を認識して飼い主を覚える仕組みが入っているんですが、そのプログラムも私の担当でした。新しいものに挑戦するのは楽しく、良い経験になりました。
マリオカート用にミドルウェアを最適化。
ニンテンドー3DSが登場した時期、『マリオカート7』の担当に加わりました。マリオカートシリーズは、伝統的になめらかな絵をつくることが目標のひとつに掲げられ、毎回それを達成してきたゲームタイトルです。メインテーマは、CPUをいかに効率的に動かして描画のクオリティを高めるか。社内外の開発チームに対して任天堂が提供している汎用的なミドルウェアには、『マリオカート7』では使用しない機能もいろいろ含まれています。そこで、まずはミドルウェアの全機能を理解したうえで必要な機能を整理し、デザインリーダーと相談をしながら必要のない処理を省いて、CPUが効率的に動くようプログラムを最適化していきました。当初はレース画面でカートを2台しか表示できなかったのですが、最終的に8台まで表示できるようになったことも、これらの作業により実現したことの一つです。
デザイナーが求める緻密な絵を追究した『マリオカート8』。
グラフィックス全般のプログラムを任されたのが、プロジェクトのキックオフから関わることになったWii Uの『マリオカート8』です。Wii Uでは画像処理能力の高いGPU(Graphics Processing Unit)が使えるため、これまでよりも高度なグラフィックス技術を活用することが可能です。私の仕事は、GPUの処理能力を効率良く使うために、制作部内でつくられている要素技術から必要に応じた技術を選択、または改良することでした。ゲームでは1/60秒といった短時間で1枚の絵をつくるため、プログラムの効率の良し悪しがそのゲームで表現できる絵の限界を決めてしまいます。「この表現を実現するにはどの技術の組み合わせが最適か」「同じ表現を実現するのに別の低負荷な手段はないか」など、デザイナーや要素技術をつくるチームと何度も話し合って調整していきました。
『マリオカート8』では、画面を分割して二人で遊ぶモードがあるんですが、一人モードと比べてグラフィックスの処理負荷が上がるため、一人モードの処理そのままでは限られた時間内に描ききれません。そこで、二人モードでは一部の効果を解像度を下げて処理したりして負荷を減らし、一人モードの時と同様の表現を実現しました。
またデザイナーからの要望の一つに、「キャラクターへGI(※)表現を採り入れたい」というのがありました。これをどうすれば実現できるのか、どういう技術が必要か要素技術をつくるチームと検討を重ね、その実装をゲームへ最適な形で組み込むことで、最終的にゲーム中のキャラクターにGIを当てることができました。他にも、ゲーム中にある「マリオカートTV」という場所では、ハイライト映像が流れる巨大スクリーンが発する光を、映像を見つめるMiiや周りの床に反映させることで、劇場のような雰囲気を作るといった演出も、手法から検討し実装しています。
※GI(グローバルイルミネーション):太陽などの光源から直接あたる光だけでなく、壁などで反射した光(二次反射光)等も考慮する照明アルゴリズムのこと
同じ目的をもって多職種のメンバーと頻繁にやりとり。
複雑なグラフィックスを扱うWii Uの『マリオカート8』に関わったことで、プログラマーとして知っておくべき知識の幅も広がりました。ゲームに最適なグラフィックスを目指すという目的はこれまでと変わりませんが、私自身が『マリオカート8』ではエフェクトやUIを含むグラフィックス処理全般を見る立場になったこともあり、デザイナーをはじめとするさまざまな職種のメンバーと頻繁にやりとりするようになったのが大きな変化でした。特に要素技術をつくるチームとは、よく話し合いました。学会などで発表された先端技術は取り入れ可能か、またどうやったらGPUをもっと効率的に動かせるか、課題はいくらでもあったので常に相談していました。任天堂ではハードウェアとソフトウェアをつくっている人が同じ建物内にいて、グラフィックス関連のエンジニアやプログラマーが集まる週1回のミーティングにも、ハードウェアをつくる人、ミドルウェアやライブラリをつくる人などさまざまな人が参加します。こういった多くの部署、職種との連携が、今回のプロジェクトでも機能したと思います。
遊びをより楽しめるグラフィックスのために。
私たちプログラマーに求められる大事なことの一つは、ゲーム機という、特定のハードウェアの中に、個々のゲームに求められるグラフィックスを表現する機能をうまく詰め込むことです。『マリオカート8』を担当したおかげで、その技術レベルはかなり高くなったと思います。より良いクオリティにこだわって努力した分、お客様から「面白い」「絵もキレイ」という反応があると、やはり嬉しいですね。
今後の目標といえば、グラフィックスに限らず、新しい遊びの企画を技術的な面から提案することです。任天堂では、たとえあるタイトルの開発中であっても、新しいプロジェクトにつながるような遊びのアイデアを、誰でも提案することができます。これまでの経験を活かして、今までにないような新しい遊びを提案できればと思っています。