半透明でモコモコとした雲海を生み出すために

広告

2018年8月22日～24日の3日間、パシフィコ横浜にて開催される、日本最大級のゲーム開発者向けカンファレンスCEDEC2018。初日の22日には、“『ゼノブレイド2』のレイマーチングを使った雲表現”という技術者向けのセッションが行われ、モノリスソフト開発部の稲葉道彦氏が、特殊なグラフィックス表現の手法を紹介した。

稲葉道彦氏（モノリスソフト）

モノリスソフトが開発し任天堂からリリースされた、ニンテンドースイッチ用RPG『ゼノブレイド2』は、雲海に覆われた世界“アルスト”が舞台となっている。アルストを描くにあたって開発陣が目指したのは、波形のモコモコ感があり、海のようにリアルタイムに形状が変化し、半透明である……そんな3つの条件を満たす雲海の表現だった。

当初は、水面の表現によく使われていることから、雲海との相性もいいのではと考え、グリッドベースのポリゴンでの描画を試みたそうだ。だが、半透明の重なったポリゴンを正しく表示することができず、問題解決のためにはCPUとGPUに高い負荷がかかることが判明。また、煙などの表現に用いられるパーティクルも検討されたが、大量のパーティクルを表示する必要があり、負荷が高くなるので現実的ではないと判断された。

稲葉氏らは悩むうちに、当時流行りはじめていた、レイマーチングによる表現で解決できないかと思い至ったという。

光を行進させる“レイマーチング”で雲海をモデリング

レイマーチングとは、「おおざっぱに説明すると、光、つまりレイを行進させて制御する手法」と稲葉氏。演算によって画像を生成するレンダリング技術の一種だ。カメラからレイを飛ばし、レイが接触した物体の情報を取得して、モデリングを行なう。稲葉氏は球のモデリングについて、具体的に解説を行なった。

この球を大量に配置すれば、雲海のモコモコした形状は表現できると考えられたが、大量のコリジョン判定が必要になるため、負荷が高くなる。そこで、疑似的な球としてパーリン-ウォーリーノイズを使うことに。ノイズとは、おもに自然のものをよりリアルに見せるために用いられる技術。雲や水の表現でよく使われるウォーリーノイズに、炎や煙の表現などで多用されるパーリンノイズを合成し、より見た目が自然になることを狙ったそうだ。

そして、上層ほど薄くて下層ほど濃くなるよう、雲海の濃度を演算し、また、雲海の濃度とノイズを乗算して、雲海の透明度を求めたとのこと。その結果、半透明でモコモコとした雲海を表現することに成功した。

より自然な見た目にするために、さまざまな工夫が

ただし、そのままだと立体感が出ないため、ライティングが必要になる。稲葉氏は、法線のない雲海のモデルに対し、どのようにライティングを行なったのか、技術的な情報を共有した。

また、ライティング後の雲が硬く見えたため、パーリンノイズを追加して煙のような感じを出したことや、雲海がループしているように見えてしまう問題に、バリューノイズを使ったり、距離によってサンプリング値を変えて対処したことなどを解説。聴講するエンジニアに向けて、実際の計算式も示された。

ほか、雲海に穴をあけたような表現や、雲海を壁のように縦方向に配置する技術など、『ゼノブレイド2』で実際に使われたテクニックの数々が紹介された。

空や雲海上に浮かぶ雲にもレイマーチングが使われた

『ゼノブレイド2』では雲海のほかにも、空に浮かぶ雲や、雲海の上に浮かぶ雲が存在する。これらにも、それぞれレイマーチングが使われたことが説明された。

最後に稲葉氏は、レイマーチングによる雲の表現について、「いちばん大変だったのは最適化。見た目をキレイにすることは結構簡単で、ある程度の手法が決まれば、レイチェック（レイが行進した先に何かあるかをチェックする座標）の数を増やせば見た目はめちゃめちゃキレイになる。でも、それに応じて負荷が増加するので、どう妥協するか、どう高速化するかなどに、非常に時間がかかった」と振り返った。『ゼノブレイド2』の幻想的な世界の成り立ちを、垣間見ることのできたセッションだった。