2008年の設立以来、「"Entertainment in Real life" エンターテインメントで日常をより楽しく、より素晴らしく」をMissionに掲げ、新しい発想のモバイルゲームを世に送り出し続けているコロプラ。同社は昨年からUnityのレンダリングパイプラインをUniversal Render Pipeline(URP)へ本格移行し、デモアプリの開発を通して様々な表現のR&Dを続けている。背景とライティングの拡張について紹介した前回に続き、今回はVFXに関わる取り組みについて、ユニティ・テクノロジーズ・ジャパンの大下岳志氏にモデレーターを務めていただき、同社エンジニアとアーティストの皆さんに語ってもらった。
関連記事
・ボリューメトリックフォグも、シャドウもブルームもあきらめない。コロプラにUnity URP移行の今を聞く
・「HDRPの表現をURPでも可能にする」URPへの移行を実現したコロプラの次の挑戦とは?
Recruiting Information
コロプラでは3Dアーティストを募集しています。当社はこれまで常に最新のテクノロジーと独創的なアイデアで、人々が見たことのない"新しい体験"を届けることに挑戦してきました。"新しい体験"を私たちと一緒にゼロから創りだしていただける3Dアーティストの方のご応募をお待ちしております。
ゲーム内での実装を見据えたデモアプリ開発
大下岳志氏(以下、大下):皆さま、第3回もよろしくお願いいたします。今回も進行役を務めさせていただきます、Unityの大下です。まずは自己紹介をお願いいたします。
桐山明人氏(以下、桐山):テクノロジー推進本部 技術研究部 開発効率化グループの桐山です。技術エンジニアとして技術調査や開発環境の整備を担当しており、今回のデモではプログラムディレクターを務めています。
丸野未奈氏(以下、丸野):テクノロジー推進本部 横断アート部 マネージャーの丸野と申します。今回のデモではエフェクトリードとして参加しています。
中田 充氏(以下、中田):テクノロジー推進本部 技術研究部 開発効率化グループのエンジニア、中田です。今回はエフェクトの実装に関して丸野と直接やりとりをしながら進めていきましたので、その立場からお話させていただきます。
大下:前回のインタビューでは、現在開発中の社内デモを例に、URPの拡張による背景やライティングの表現力向上の取り組みについて伺いました。今回は対象にエフェクトを取り上げていますが、理由をお聞きしてもよいでしょうか。
丸野:これまではライティングや背景周りの強化を、テクノロジー推進本部と協力しながら進めてきました。今回は、エンジニアとアーティストの協力が必要な領域という観点から、次に着手すべきはVFXだろうと判断しました。モバイルでどこまでリッチな表現ができるかを考えたとき、負荷検証も含めてエンジニアとの協業は必須となります。
大下:今回もデモのプレイ動画をはじめ、様々な技術資料を事前にお見せいただきました。これらはどういった経緯や手順で作業を進めたのでしょうか?
桐山:当初は社内の技術向上や教育、調査して開発するというノウハウを貯める目的でスタートしました。背景やライティングがリアルになれば必然的にエフェクトもつくり込む必要がありましたので、物理的な現象をしっかり考えた新しいロジックを構築したいと思っていました。
とはいえ、検証だけを行なっても、パフォーマンスや制作フローの問題、レベルデザインとの整合性などを検討しなければ、ゲームに組み込めるかどうかは未知のままで終わってしまいます。そのため、デモではなくプロジェクトとしてアプリ化を目指すことになりました。「煙を出したい、火花を出したい」など、検証したい技術ありきでしたが、アプリの中でしっかり実装することでゲーム内で使えるものであることを社内的にアピールし、他プロジェクトへの転用を促しています。
Houdiniによる破壊エフェクトをモバイルで実装
ランタイムの破壊エフェクト
大下:さっそくエフェクトの開発事例についてお伺いします。まずはランタイムの破壊表現について。木箱が壊れるサンプルでは、破片モデルにHoudiniを採用しているのでしょうか。
桐山:はい。Houdiniで破壊モデルを作成し、Unityにはもとのモデルと破壊後のモデルを両方ともアセットとしてインポートしてあります。力が加わった瞬間に破壊モデルに差し替えると同時に、破壊モデルに対してフォースの値を与えて吹き飛ばすというエフェクトになります。これに砂煙等のエフェクトを加え、一連のながれをひとつの破壊エフェクトとして実装しています。
大下:岩肌を破片が転がるなど、周囲とインタラクションがあるエフェクトの場合はこういったしくみが必要になりますね。Rigidbodyを用いて破片を飛ばす実装はオーソドックスだと思いますが、負荷を抑える工夫はされていますか?
桐山:破壊した際に破片の数を間引くことと、アニメーションを不自然にならない程度のタイミングで停止するという2点を工夫しています。映像オプションでHigh、Medium、Lowと設定を切り替えた際、端末スペックが低い場合はより多くの破片数を間引いて、高い場合は破片を多く残したままリッチな表現を行うという部分をランタイム側で判断しています。物理演算の停止は、約5秒を目安にしています。
丸野:最初はかなり多くの破片をUnityにインポートしてシミュレーションしていましたが、終盤になって負荷を抑えたくなり、結果として破片数を減らすこととなりました。一般的なDCCツールでのモデリングと異なり、Houdiniの場合は数値を一部変えるだけで破片数を変更できたので、ゲーム開発との相性は非常に良いと感じています。
Houdiniについては当初アーティストが興味本位で触る程度でしたが、現在はエフェクトアーティストの杉村昌哉氏と外部アドバイザー契約を行い様々な相談に乗っていただいており、開発や学習のスピードが大幅に上がりました。
桐山:エンジニアとしてHoudiniが触れるのは私くらいしかおらず、当初は「現代的なノードアプローチのDCCツールってこんな感じなんだ」と興味をもって触っておりましたが、本格的に使い始めると面白くて。前職時代から内製ツール開発やDCCとの繋ぎ込みなどのスクリプトを書いていたので、HoudiniとUnityの連携についても勉強しながらつくっていったかたちになります。
大下:素晴らしい協力体制ですね。また、ハードスペックに応じて負荷をコントロールするのはモバイルならではの試みで、コロプラでは以前からも追求されている部分かと思います。アニメーションを5秒で停止するというのは、物理的な挙動が収束するまでの時間ということですか?
中田:全ての挙動が収束するわけではありませんが、現実的なラインを考えて5秒決め打ちにしています。速く止めすぎると空中で破片が止まってしまいますが、全部アニメーションを走らせると重くなるので、その部分でバランスを取っています。
丸野:また、破壊のインパクトを強調するため、ポストエフェクトでもラジアルブラーを用いています。よくある手法ですが効果的で、これらをまとめて1つのエフェクトとしています。
ベイクによる破壊エフェクト
大下:続いて、ベイクによる破壊表現について教えてください。これはどういったシーンで使用が想定されるものでしょうか。
丸野:先ほど紹介した木箱の破壊はステージに配置するためにRigidbodyを使っていますが、特定の箇所のみで使われる破壊演出はアニメーションをベイクして対応しています。Houdini上でアーティストがやりたい破壊表現を追求し、より細かく演出をコントロールしています。
桐山:木箱はプレイヤーが破壊する感触を楽しむもので、ベイクの破壊演出は見た目の迫力を楽しんでいただくというのが目的です。ただ、こうした演出の場合、背景に途中で変更が入ると、アニメーション自体をつくり直す必要があります。
今回はHoudiniを用いたことで、破壊シミュレーションに際してモデルの入れ替えなどが容易になり、イテレーションが高速化しました。背景班としては最後までオブジェクトを細かく調整したいので、終盤でのモデル変更もあり得ます。こうした際、Houdiniだけで破壊シミュレーションを再度行い、改めてベイクすることで、負担なく要素の差し替えが可能になります。
丸野:破壊対象の樽や壁などはDCCツールでモデラーが作成し、背景と一緒に書き出してもらって、それをHoudiniにインポートして破壊エフェクトを作成しています。その後FBXエクスポートして、Unityで活用するながれとなっています。
エフェクトのためのシェーダ開発
衝撃波エフェクト
大下:先ほどの破壊シミュレーションなどはUnity標準機能では表現しきれない部分だと思いますので、非常に効果的だと感じました。続いて「衝撃波エフェクト」ですが、これはシェーダ拡張の事例でしょうか。
丸野:Uber Shaderをさらに拡張して制作した事例です。Uber Shaderに最大3枚のベーステクスチャやランプテクスチャ、歪みや頂点アニメーションが集約したカスタムシェーダになります。シェーダは数が多くなりがちですが、機能が集約していることで一通りのエフェクト表現を単一のシェーダで可能にしています。使いたい機能だけをONにするイメージなので、これも軽量化に役立っています。
中田:ライティング関連を中心に機能追加も数多く行なっています。ライト影響のON/OFFやライト影響の強度、露出の影響なども設定可能で、これによって背景に馴染みやすいシェーダになっていると思います。
大下:アサイン先はオブジェクトでしょうか?それともパーティクル?
中田:パーティクルシステムにシェーダを適用したマテリアルを入れています。パーティクルに対して様々な効果が付与できます。
丸野:また、Visual Effect Graph(以下、VFX Graph)で粒子表現も行なっています。数年前からUnityにはShader Graphが実装されていますが、従来これをモバイルに入れ込むのは困難でした。今回は検証を目的として、既存のパーティクルシステムでは難しい表現の粒子エフェクトを制作しています。なお、パーティクルシステム(Shuriken)にはUber Shader、VFX GraphにはShader Graphで開発したシンプルなシェーダを用いています。
桐山:VFX Graphはアーティストの方に表現や試行錯誤をお任せして、エンジニア側はあまり手を入れていません。その間、エンジニアはUber Shader開発を行なっていました。量産期にエンジニアの手が空かない場合もありますので、アーティストだけで制作が可能なVFX Graphは開発フロー上の分業化という意味でも役に立っています。
丸野:また、ゲーム中では火花が機械から飛び散って地面に衝突するという、スクリーンスペースを用いた衝突判定も行なっています。火花の表現はかなり良いものが作れたと思っています。
桐山:スクリーンスペースの衝突判定自体はVFX Graphの基本機能だけで実装できました。あれだけの量のパーティクルを屋根に当てて跳ね返すというのはモバイルでは事例が少ないと思いますので、満足のいく出来になりましたね。
Explosionシェーダによる爆発エフェクト
大下:続いて爆発エフェクトについて、テクスチャシートをベースにした表現だと思いますが、特徴を教えてください。
中田:爆発を急ピッチでつくらないといけない、というスケジュールの都合でShader Graphで爆発専用シェーダを作ったというのが経緯です。Explosionシェーダは「Emission」「Smoke」「MDC1」「MDC2」「Normal」という5種類の素材を使用し、Emissionの強度調整が可能なシェーダとなります。
桐山:ライティングが特徴です。通常、エフェクトにライティングを施す場合、ビルボードだと立体ではないため光による表現ができません。ノーマルマップで凹凸のようなものをつくることは可能ですが、さらにその先の表現として、MDC(Multi-Directional Contributions:立体情報をテクスチャのRGBに埋め込んだもの)を用いて立体感のあるライティングを実現しています。
大下:ノーマルマップを使うことによって光源からのシェーディングは可能だと思いますが、MDCだとそれ以上の表現ができるということでしょうか。
桐山:ノーマルマップで可能なのは表面のシェーディングだけです。今回はHoudiniを用いて、正八面体の向きから光を当てた8方向分のライティング結果を出力して合成することで、立体的な陰影が可能になっています。正面以外の、例えば上や後ろのシェーディングも可能です。
中田:煙の奥から光が透けて入ってくるような表現すらできるようになっています。
桐山:ノーマルは法線情報なので、煙だろうとプラスチックだろうと同じ情報になります。これに対してライティングを行なった結果は、ロコイド状の煙にせよ硬質なプラスチックにせよ同じシェーディングになってしまいます。MDCはHoudiniのシミュレーション結果自体をテクスチャに焼き込んで使えるため、非常に細かなディテール、質感が表現できています。デメリットはテクスチャ枚数が増えるため、メモリを圧迫するところです。
中田:もともとHoudiniを使うアーティストから「MDCだとHoudiniからすぐに出力できるので、こちらを使えないか」という相談があり、そこから開発を始めたシェーダです。その意味では、アーティストの要望を踏まえた、協力体制での実装といえますね。なかなか情報が少なくて苦労しましたが、特殊なテクニックや関数は必要ないため、実装方法さえわかればShader Graphだけで構築可能でした。
背景とエフェクトを馴染ませるためのライティング
大下:続いて、エフェクトの多光源ライティングについてお伺いします。
中田:複数光源をエフェクトに当てたい場合の方法は複数ありますが、例えばURPであれば頂点単位で4つまでライティング情報をもつことができます。ただ、頂点単位だとビルボードでは使えません。本当に頑張るなら、本来はピクセルシェーダで全ての点光源を計算する必要がありますが、現実的には難しいため、今回はコンピュートシェーダで簡易的に計算することで近い表現を実装しました。
しくみとしては、コンピュートシェーダでエフェクト周囲の6方向に対してポイントライトを当てた結果を書き込んだキューブマップを作成し、これをエフェクトが参照するというものです。複数光源が当たっているかのようなシェーディングを得ることができます。
大下:コンピュートシェーダの中でリアルタイムに行なっているのですか?
中田:毎フレーム、エフェクトの位置と点光源の位置を見て計算しています。わかりやすくキューブマップとは言いましたが、実際は1ピクセル分の色の配列で、カラー情報を6ピクセル分書き込んでいるというだけです。また、背景との馴染ませ方を考えて、露出補正というかたちで明るさの増減ができる仕様になっています。
丸野:背景は場所ごとに雰囲気が大きく変わり、ライティングもGIなど複数の要素が絡むため、同じエフェクトをそのまま置くだけでは背景に馴染ませることができませんでした。これを解決するために、ライトとGIのパーセンテージをアーティスト側がコントロールできるようにしていただき、いろいろなところに煙を置いてみて、最も馴染む設定を見つけた後は数値を固定化して運用しています。また、カメラの露出によってエフェクトの明暗をカーブによって調整できたので、これも試行錯誤して統一的な設定をつくっています。
桐山:PBRのため、ファンタジックな演出、衝撃波などの非現実的なもの以外の物理的な挙動、例えば土煙や火花はエンジニア側でしっかりサポートして、デフォルトの状態で現実に沿うような馴染み方を模索できたらなお良かったとは思っています。今回はアーティストに後から調整を頑張っていただいた部分も多かったので、今後はファンタジックな演出の方にアーティストの全力を注げるよう開発環境を整備したいですね。
アーティストとエンジニアの距離が近い開発体制
大下:これまでお話をお伺いして、アーティストとエンジニアの距離が非常に近いと感じました。普段開発作業をしながらR&Dに近い開発を行うのは大変だと思いますが、どのような業務バランスで行なっていたのでしょうか。
桐山:こちらのプロジェクトに専任で関わることは難しいので、作業分担は適宜発生していました。後任に引き継いで、やり方を教えながらシェーダ開発をしたり、作業途中で後輩とバトンタッチしたり、人員をスイッチしながら進めていったかたちです。このドキュメントと実装を見ながら、これをやってみてね、という感じですね。もともと教育の側面をもつプロジェクトでしたので、そこはポジティブに捉えています。
バグフィックスやタイトル運営などを円滑に進めるという仕事もやりがいがありますが、未知のものを調べて実装して、ようやくモバイルで動いた、という部分に関心をもつエンジニアも社内には多い印象です。ただ、社内で長く続いているプロジェクトが増えてくると、新しいことへ挑戦するチャンスも減っていきます。だからこそ、こういった実験的なプロジェクトが活きてきます。「デモアプリの方で手伝うことはないですか?」という自発的な姿勢を多くのエンジニアが見せてくれたので、その意味でも価値あるプロジェクトになったと思います。
丸野:開発中のゲームを格納するサーバがあって、常に最新のアプリを遊ぶことができます。私の近くでも「モバイルでここまでできるんですね!」と驚いてくれるメンバーが多くて、既に開発に使えないかという問い合わせも入っています。
大下:技術開発はプロジェクトと離れてしまうことも多いですが、人員がスイッチすることで開発側が技術を自分ごとと捉えることのできるメリットもありそうですね。挑戦しがいのある、非常に良い現場だと感じました。最後に、皆さんがコロプラで一緒に働きたい人物像について教えてください。
中田:先ほどのMDCの事例もそうですが、アーティストが「この方がやりやすい、こうしたい」というアプローチで一緒に開発することが多いです。提案があれば、エンジニアも「こういう技術があるのか!それは面白そう!」と、モチベーション高く仕事ができます。その意味では、モチベーションが高い方、提案できるような技術力をもつ方が来てくれると、今回のような楽しい開発がまたできるのかなと思っております。
桐山:新しい技術を追求しようという気持ちはエンジニアもアーティストも強くもっていますし、それを会社として促進する動きもあります。コロプラにはコンシューマ業界や映像業界からのエンジニアが集まってきていて、様々な知見や技術をモバイルアプリに落とし込んでいくという部分に注力しています。モバイルゲーム開発に新しい技術を採り入れる文化と、それを支える人材が数多く在籍する会社ですので、こういった場所に興味がある方がいればぜひよろしくお願いいたします。
丸野:私は前職が映像業界で、映画やCMなど映像作品でライティングやコンポジットなどをジェネラリスト的に担当してきました。ゲーム業界に入ったのは7年前で、その当時はテクスチャサイズが限られていたり、メモリ容量が少ない中でどう表現するかを考えたり、制限の中でどうつくっていくかに注力していましたが、今は映像業界でやっていたことがダイレクトに活かせるようになりつつあります。リニアワークフローもゲーム開発で採り入れられており、差はどんどんなくなってきています。私がそうだったように、映像業界で働いてきた人を教育して新作で活躍してもらうようなフロー構築も行なっていますので、一緒に新しいことに挑戦していきましょう!
Recruiting Information
コロプラでは3Dアーティストを募集しています。当社はこれまで常に最新のテクノロジーと独創的なアイデアで、人々が見たことのない"新しい体験"を届けることに挑戦してきました。"新しい体験"を私たちと一緒にゼロから創りだしていただける3Dアーティストの方のご応募をお待ちしております。