ハル研ブログ BLOG

仕事内容
執筆者:木村 タグ: プログラマーエンジニア

『星のカービィ Wii デラックス』の仕事 プログラマー編

©HAL Laboratory, Inc. / Nintendo

こんにちは! プログラマーの木村です。
現在、私はゲームの開発環境を作る部署に所属しており、この部署の大きな仕事の一つであるFratフレームワークの開発に参加しています。
私は主にグラフィックスに関するプログラムを担当しています。
このFratフレームワークは、『星のカービィ Wii デラックス』を含む、ハル研究所が開発するさまざまなゲームで使用されています。

ある日、『星のカービィ Wii デラックス』のチームから相談を受けました。
キャラクターに使われている輪郭線表現について、ゲーム中のさまざまな箇所で見た目の不具合が起きているのを何とかしたい、というものです。
輪郭線が途切れていたり、見えなくなっていたり……。
不自然な見た目の箇所があると、ゲームのプレイ中も気になってしまうものです。
そのため、私がヘルプとして本作の開発に関わることになりました。

起きていた問題

まずは、報告されていた不具合を1件ずつ自分の目で確認することから始めました。
一見同じに見える現象であっても、原因が異なることはよくあるので、時間をかけてしっかりと確認しました。
その結果、不具合のほとんどは「輪郭線の前後関係がおかしい」というものでした。

ここで、本作の輪郭線表現について説明しますと……
私がヘルプに入った当時、すでに背面法による輪郭線が実装されていました。
背面法とは、ゲームグラフィックスで輪郭線を実装する際によく使われる手法です。
元となる3Dモデルと同じ形の輪郭線モデルを用意し、これを少しだけ膨らませ、表裏を逆にして描画するというものです。

ただし本作の輪郭線は、さらに一工夫加えたものになっていました。
輪郭線が途切れる部分を滑らかにするため、元のモデルと交差する部分が薄くなって消える仕組み(デプスフェード表現)が入っていました。
ゲーム中のキャラクターモデルをよ~く見てもらうと、輪郭線がスッと消えていく箇所があるのが分かると思います。
このデプスフェード表現のために、輪郭線モデルは半透明で描画されていました。

ゲームグラフィックスにおいて「半透明」は扱いが難しいものです。
通常使われる不透明モデルと違い、半透明モデルは描画順によっては前後関係がおかしくなってしまうという問題があります。
本作では輪郭線モデルが半透明であったため、輪郭線と別の半透明モデル、もしくは輪郭線同士の前後関係がおかしくなっていました。

©HAL Laboratory, Inc. / Nintendo

問題への対処

原因が分かったので、次は具体的な対策について検討していきます。
輪郭線モデルに半透明を使うのをやめれば前後関係は正しくなります。
しかし、デプスフェード表現は本作の特徴的な要素なので、ぜひ残したいところです。
また、プロジェクトは終盤にさしかかっていたので、見た目が大きく変わる変更はできる限り避けたいという事情もありました。

検討の結果、4パターンの解決策をゲーム開発チームのリーダー陣に提案しました。
これらは見た目や処理負荷・作業コスト等がそれぞれ違い、「見た目は良いが作業コストが高い」というようなトレードオフがあるため、その情報も表にして提示しました。
こうすることで、グラフィックス技術の専門家でなくてもどの手法を選択すべきかの判断ができるようになります。
結果としては、作業コストは高いが、デプスフェード表現を維持できる手法を採用することになりました。

今回採用した手法について簡単に説明しますと、輪郭線モデルを描画する前に、輪郭線モデルの奥行き情報だけを先に書き込んでおくというものです。
通常、不透明モデルを描画する場合、モデルの色と同時に奥行き情報が書き込まれ、前後関係の判定(デプステスト)に使われます。
半透明では奥行き情報を書き込まないのが普通なのですが、今回は特殊な対応として書き込むようにしました。
これで、モデルの描画順に関わらず、前後関係を正しくすることができます。
……と書くと簡単そうに聞こえますが、実際はこの特殊な仕組みを成立させようとするとさまざまな問題が起こるため、長期間にわたり多くの実装を行うことになったのでした。

実装を終えて

実装ができたら、最終的な見た目についてゲーム開発チームのリーダー陣に確認してもらい、無事にOKをもらいました!
ゲーム内のさまざまな箇所の問題が一気に解決し、自然な見た目になったときは気持ちが良かったです。

グラフィックスに関するプログラミングでは、その結果がゲーム中の見た目にダイレクトに反映されます。
実装が上手くいき、綺麗になった画面を見るのはこの仕事の喜びの一つです。
(その一方で、失敗してノイズのような画面を見ることもありますが……)

また、デザイナーとの関わりが多い仕事でもあります。
自分が実装した仕組みをデザイナーに上手く使ってもらえると嬉しいですし、想像以上のものができあがって驚くこともあります!

最後になりますが、この仕事では優れた表現へのアンテナを張っておくことが重要だと思います。
新しい仕組みを実装する際にアイディアの元になりますし、デザイナーとも話がしやすくなります。
もしグラフィックスに関するプログラマーを目指す方がいましたら、参考にしていただければ幸いです。