登壇した山本氏は『鉄拳6』や『鉄拳タッグトーナメント2』などで背景・エフェクトのツールやコンバーターなどを開発していた。『鉄拳8』ではライティング環境のサポートや演出システムなどを担当している
開発環境はUE5.2。16.6ms/フレームでライトを運用した『鉄拳8』の演出方針
Unreal Engine 4により開発が始まり、製品版ではUnreal Engine 5.2が用いられたという本作『鉄拳8』。ライティングの演出で重視した点は、アート視点では背景やキャラクターを魅力的に見せること、ゲームデザイン視点では格闘ゲームとしてのキャラクターの視認性の向上です。その上で、演出の負荷を16.6ms/フレーム(60fps)に収めています。
本作ではDeferred Renderingを利用しているため、負荷のレギュレーションをキャラクター/背景/エフェクトに分けて設定するのが困難でした。そのため、負荷の上限を「シンプルな背景+キャラクター表示」で8ms、「背景表示」で10msと設定。このレギュレーションに従いキャラクターと背景を同時に表示すると約12ms以内に収まり、残りのリソースを演出に回すことができたと山本氏は語りました。
講演内では、本作のライティングについて、ステージ全体を照らす「背景ライト」、キャラクターに適用する「キャラクタライト」に大別して解説しています。
現実世界に近い&低負荷なライトは、UE標準搭載のアクタ「SunSky」で実現
演出の土台となる「背景ライト」について、アートチームから「現実のライトに近い環境下でデータを作りたい」や「いろんなモデルを破綻なく表示させたい」と要望があった一方、エンジニアとしては負荷を極力下げたい考えがありました。
そこで、アンリアルエンジン(以下、UE)にデフォルトで搭載されているライティング用のアクタ「SunSky」をベースに利用。現実に近いパラメータで調整を可能としました。一方で、数値調整が煩雑で、またエディタと相性が合わない面もあったといいます。
ライティングの確認は、モデルがPBR(Physical Based Rendering)として破綻がないか確認するための均一なライトを設定した環境と、現実のライトに近い環境の2種類で実施しました。
それぞれの画面の下部に表示されている緑色の帯は、EV(Exposure Value:露出値)のデバッグ表示。モデル確認環境(画像左)ではEV0、現実のライトに近い環境(画像右)ではEV13付近を示している
日中(画像左)/夜(画像中央)のシーンと、薄暗い屋内のシーン(画像右)におけるEVの比較。いずれのシーンもSunSkyにならってEVを設定しているが、屋内のシーンではディレクショナルライトを使用せずスポットライトで照らしている関係上、手作業で調整している
「SunSky」基準でマテリアルの調整を行うとエミッシブの値が大きくなるため、コンテンツブラウザに表示されるサムネイルや、DebugView、メッシュやマテリアルのPreview表示において白飛びが発生してしまいます。そこで、補正を施す仕組みを導入しました。
コンテンツブラウザのサムネイル表示については、マテリアルにサムネイル補正用のカスタムノードを仕込むことで、サムネイルでの表示時はエミッシブの数値を減少させる補正を施しています。
条件を満たした際、サムネイルに補正が入る仕組みとなっている
DebugViewでは、View.UnlitViewmodeMaskで判定を行い、補正をかける仕組みを取り入れています。
エミッシブに対して2種類の補正用ノードが組まれている。上段がサムネイルの補正(画像左)、下段がDebugViewの補正(画像右)を行う
メッシュやマテリアルのPreview画面で白飛びする問題に対しては、SkyLightとExposureが十分大きい専用のPreviewシーンを用意することで、想定する見え方になるよう補正しています。
時間帯などのライト表現の違いをサブレベル単位で変更
開発当初はLumenやNaniteの導入も検討しましたが、多量のパラメータ調整が必要なことや、当時Naniteには制約が多かった事情もあり、最終的にベイクを採用しました。
UEでは、1つのパーシスタントレベルに対して複数のライトパターンを設定してベイクできるほか、それぞれのパターンを「ライティングシナリオ」として保存し、ゲーム中に切り替えられます。
さらに本作では、時間帯による表示の変化などをサブレベル単位で同時に切り替えています。
ベイク処理は背景データの更新がJenkinsのジョブによってチェックされ、必要があれば再びベイクが実行されます。その際、標準のコマンドラインによるベイクでは、時間帯の変化などに応じた細かなサブレベルの切り替えが適切に行えません。そこで、Pythonのスクリプトによりサブレベルの切り替えを行っています。ベイクは毎晩1回ずつ更新され、急ぎの際は手動での処理も可能です。
同一マップで時間帯が変化する演出や、エリア移動によるライトの変更は、ライティングシナリオの切り替えにより対応している。切り替えるサブレベルはリストで管理され、アーティストが自由に設定可能
バトルの背景は全てライティングシナリオによるベイクを行っており、ライトが1つでもライティングシナリオとして設定している。バトルのシーケンス内で演出中に全く異なる背景に強制的に切り替わる場合もライトの切り替えが可能
本作の背景ライトのメリットとして、現実に近いパラメータで確認環境やデータを作ることができ、ベイクを利用することで負荷も抑制できた点が挙げられました。
一方で、ライトが一瞬で切り替わるシーンが多いことやライトベイクが前提であることからライトスケールの恩恵が少ないことや、屋内のライトや演出で切り替わった先の背景のライトを手動で設定する必要がある点がデメリットとして語られました。
登場時/バトル中/レイジアーツ、シーンごとにキャラクターの魅力を描き出す入念なライティング調整
バトル画面でキャラクターを鮮明に映し出すライティング
バトルシーンにおける「キャラクタライト」に関しては、アートチームから「キャラクターを格好良く見せたい」や「キャラクターの視認性を確保し、プレイに支障が出ないようにしたい」との要望がありました。
背景ライトのみの場合(画像左)と比較して、キャラクタライトを併用(画像右)することで、影が照らし出されて輪郭がはっきりと浮かび上がる
「キャラクタライト」は、以下の三点照明を基本としています。
〈キーライト〉
メインとなる一番明るい光源。本作においては、背景に設置したディレクショナルライトがこれに該当する。
〈フィルライト〉
影を目立たなくさせる補助的な光源。
〈バックライト〉
キャラクターの輪郭を際立たせるためのリムライト的な役割を果たす光源。
キーライトの位置は固定されており、フィルライトとバックライトは、キャラクターやカメラの動きに応じて追従します。キャラクターがどの位置・角度で表示されても、一定の明るさと視認性が確保されます。
キーライト/フィルライト/バックライトの配置イメージ
背景に固定されたキーライトのほか、3つのスポットライトを配置。負荷を抑えるためにスポットライトのCastShadowを全てOFFにしたことで、不要な影の発生を抑えられたといいます。
3つのスポットライトは、カメラとキーライトの向きに応じてパラメータを調整可能。順光(キーライトと同じ方向から見たとき)で見るシーンでは白飛びを抑えるよう光量が減少し、逆光の際は光量を増強できる。中間の場所ではパラメータが補間される
ゲーム中のカメラと同じ視点での編集を可能にするため、ゲーム中はCameraManager経由、エディタ操作時はViewportClient経由でカメラ位置を取得しています。
ライトの更新は、ゲーム中はTickで処理している一方、エディタ操作時はカメラが移動するタイミングのみに留めることで負荷を抑えています。
少ないパラメータ調整で多様な状況に対応できた点や、影なしのライトを使うことで負荷を抑制できた点がメリットとして挙げられた一方、背景ライトが変更されるたびに再調整を要したことが改善点だと述べられました。
登場シーン・勝利演出時のライト設定
キャラクターの登場・勝利演出シーンでは、カメラが至近距離でキャラクターを映します。このシーンはアーティストがキーライトの当たり方などを加味しつつ演出ライトを設定していきます。
使用しているのはスポットライト3つ。通常の影のほか、ContactShadowにより衣装や毛髪などの細かな影を表現でき、バックライト1つをキーライトと重ねて配置することで濃い影を落とす使い方も可能です。ただし、負荷を抑えるため、ContactShadowの使用は最大2つまでと制限しています。
ContactShadowをOFFにした状態(画像左)と、ONにした状態(画像右)の比較。グローブや前髪に影の違いが表れている
キャラクターやステージなどの組み合わせに応じて異なるライトの設定が存在します。それらはExcelで管理され、複数の演出の一括編集や、オフセット、コピーなどが容易に行えます。
Excelファイルの巨大化によりアーティストの負担が大きくなった反省点はあるものの、全てをシーケンサーで制御するのは現実的ではなく、シーンの管理には工夫の余地があると山本氏は語っていました。
Excelに記載したパラメータは、バイナリ変換を通してエディタに反映され、確認・微調整後にコピーしてExcelに書き戻す
既存のステージに演出ライトをそのまま当てると、背景ライトと重なり色が飽和して白飛びの要因になるため、ライトの影響度をコントロールできる仕組みを取り入れました。
ライトのパラメータを直接操作すると背景全体に影響を及ぼしてしまうため、ライトチャンネルを利用してシェーダー内でライトとキャラクターを判別し、個別に処理している
レイジアーツ発動予告・技ヒット時のライティング
レイジアーツ(必殺技)発動に関する演出では、発動予告パートと技のヒット後で異なるライト設定を施しています。
予告パートでは、バトルシーンで用いたキャラクタライトをベースに、輪郭を強調させるバックライトを赤と青に変更。キーライトの影響度を下げ、スペキュラーによる反射を抑えることで白いハイライトを抑制し、赤と青のライトを効果的に生かしています。
ライトの制御と同時にフォグを追加することで、背景の彩度を落としている
レイジアーツ発動予告パートにおけるライトの配置イメージ
予告シーンは激しいエフェクトを伴わないため、影にリソースを振ることが可能。バックライトのみ影の描写をONにしています。
レイジアーツがヒットした瞬間から影をOFFに切り替え、軽量なライト設定に変更。レンズフレア用のポイントライトを追加することで、派手な演出を生み出しています。
専用背景に遷移するレイジアーツは背景のオブジェクトが少なく、演出に多くのリソースを割けるため、アーティストが自由にライトを設定できるようにしています。
さらなる演出効果を目指したライティング補正処理
背景・キャラクターの質感を補正
キャラクターと背景の質感は、Material Parameter Collectionsを用いて調整しています。
補正なしの背景(画像左下)と、彩度を落とした状態(画像右上)や、カラー・ラフネスを調整した背景(画像右下)を比較した図
通常時のキャラクターの質感(画像左下)と、ラフネスを変更してスペキュラーを抑えたもの(画像右上)や、カラーを黒に変更してスペキュラーを残したもの(画像右下)を比較した図
キャラクター/背景のみ補正する効果はステンシルマスクでも再現できますが、前作の開発においてエフェクトと相性が悪かったといい、本作では積極的な利用は避けられました。
歪みエフェクトの利用時にバッファ部分とステンシルマスクがずれる、半透明エフェクトがキャラクターと背景にまたがる境界線で色味が変化するなどの問題が前作の開発時に発生したという
昼間の発光エフェクトも夜と同等の明るさを維持
現実に即したライトで背景を作成しているため、背景の明暗に伴い発光エフェクトの明るさが変化する現象が起こり得ます。その対策として、エフェクトのライトとマテリアルに補正を入れています。
ライトはNiagaraLightRendererで一括スケールが可能。マテリアルも同様に、Eye Adaptation(明暗順応)で一定の明るさを維持する処理が全エフェクト共通で組まれています。
レイジアーツを含む各バトルシーケンスにおける影の有無や、追加の演出ライト使用の有無をまとめた表
演出ライトと相乗効果を生むポストプロセス
本作では「登場演出の開始」「レイジアーツの発動」「シーケンスの遷移」などのイベントに応じて、ポストプロセスによるフィルターを適用しています。
フィルターは個別のActorとして実装されています。フィルターの各種パラメータはシーケンサーを用いて変化させています。
フィルターの例。RadialBlurがかかったもの(画像左)と、反転の効果(画像右)
作中で実際にフィルターが使用されているシーン。ブラーは壁や天井を突き破った時(画像左)、反転は特定の強力な技が当たった時(画像右)などに適用される
演出によっては戦闘時のマップから専用のマップに移動する場合があります。演出用のマップは、事前に演出効果が適用されています。
勝利演出の後に表示される止め絵は、勝敗決定後のイベント通知を受け取った瞬間にフレームバッファやマスクなどをキャプチャし、UMGで作成されたリザルト画面に画像として合成されます。
フィルターは演出ライトがある上で効果を発揮すると山本氏は語る
チェックシステム自動化やエディタのUI改善も。美麗なライティングを支えた負荷対策
定期的に必要となる負荷チェックについて、本作ではチェックシステムの自動化や、エディタ上で負荷を確認する際のUIの改善といった施策が実施されています。
シーンの負荷を日ごとに自動計測
キャラクターや背景の負荷は、Developmentビルドのパッケージを利用して自動的に計測されます。指定したシーンの負荷が毎晩計測され、翌朝その結果を閲覧できます。
処理落ちの自動検出システム
自動で対戦を繰り返してログを取得し、ゲーム進行の瞬間的な処理落ちをチェックします。DevelopmentビルドではCPU負荷による処理落ちが頻発したため、Shippingビルドを利用しています。
ヒッチはUEの標準機能であるStatコマンドで検出可能。どの負荷からヒッチとして判定するかは、コンソールコマンドで指定できます。
処理落ちが検出された場面には、エフェクトの削除やマテリアル負荷の見直しなどで対応。一方で、ヒッチが検出されない部分には豪華なライトを割り当てることができました。
スクリーンショットの取得機能は標準では搭載されていないため、独自に実装している
動的解像度により負荷を自動管理
予備的な機能として動的解像度を利用。指定した負荷のレギュレーションの中で余裕がある場合は、解像度が上昇するようになっています。
CPUが要因で処理落ちした際に解像度が下がらない事態が発生したため、危険な状態なら最速で解像度を下げる仕組みに変更したほか、負荷の上昇が見込まれる場面では事前に解像度を下げておくなど対策を施しました。
シーンが切り替わった瞬間や、演出開始フレームでやや重めのシーケンサーが走る時などに、CPUを要因とする処理落ち発生した
マップごとに細かな描画パラメータが設定可能
本作では、マップごとに背景の描画パラメータを細かく指定できるようにしています。
撮影用マップ(画像左)ではVirtual Shadowを有効化し、フォグも豪華に設定。バトル用マップ(画像右)では通常のShadowMapを使用し、フォグは軽量設定。そのほかのバトル用マップの背景も、それぞれ異なる設定を施している
品質はコンソールコマンドで変更可能。ただし、変更内容はゲーム全体を通して適用されるため、パラメータ変更や初期化を担う専用のActorが活用されました。
ゲーム中はBeginPlayとパラメータの適用、EndPlayで初期化が行われます。また、エディタ操作中にマップを開く際と退出時にも同様に適用と初期化が行われます。これにより、エディタ編集時とプレイ中で見た目の差がなくなり、複数のマップを行き来する際や一時的にマーケットプレイスのマップを開く際も正しく初期化が行われます。
キャラクターセレクトのマップやカスタマイズのシーンなどリッチに見せることが可能なマップに対しては、LODやTemporalAAのパラメータの変更も行っています。
マップを行き来するときのイベント通知を監視し、ブループリントで実装した関数を呼び出すようにしている。関数にはパラメータの変更や初期化処理が含まれる
キャラクター/マップ表示をスムーズに切り替えられるUI
本作のキャラクターは発売時点で32体。負荷の確認をスムーズに行うため、エディタ上でキャラクターを切り替えるUIをウィジェットブループリントで実装しました。
マウスでキャラクターを選択し切り替え可能。なお、キャラクターの顔アイコンは作中で実際に使用されているアセットをもとに作成している
マップを切り替える専用UIも用意。背景のサムネイル一覧を確認しながらパーシスタントレベルを変更できるほか、ライトの設定やサブレベルも切り替えられます。
背景のサムネイルは、開発当時の環境であるUnreal Engine 5.2のDetailsViewで表示している。最新版のUEにはアセットのサムネイルをそのまま使用できるパーツがあるため、サムネイルの一覧表示を比較的簡単に実装できるだろうと山本氏は語った
高級感あふれるライティングは、アーティストが自由に演出できる環境を整備することで生み出される
本作のメインメニューでは背後にキャラクターモデルが表示され、ユーザーの操作に応じてカメラやライトが切り替わります。
メインメニューのシーンには、ポイントライト2つにスカイライト1つを配置。また、シャドウマップの解像度やボリューメトリックフォグのクオリティを上げているほか、コンソールコマンドで描画設定の調整を行い、ライティング処理の品質を上げています。
メインメニューはUIが表示される程度で負荷に余裕がある
メインメニューにおけるキャラクタライトの配置イメージ
メインメニューには、カメラアングルが異なる複数のシーケンサーが用意されており、ユーザーの入力に合わせて再生されるものが切り替わります。また、シーケンサーごとに個別のライト/エフェクト/ポストプロセスボリュームが設定されています。
シーケンサーごとにDOF(被写界深度)のパラメータやライトエフェクトのON/OFFが切り替わる
講演の最後に山本氏は、本作の演出におけるライトの重要性に改めて言及しました。「アーティストの環境整備やシステムの自動化を進めたことで、魅力的な演出を生み出せた」とエンジニアとしての職務を振り返り、講演を締め括りました。
『鉄拳8』公式サイト『鉄拳8』における演出ライトシステムと負荷対策 | UNREAL FEST 2024 TOKYO
ゲーム会社で16年間、マニュアル・コピー・シナリオとライター職を続けて現在フリーライターとして活動中。 ゲーム以外ではパチスロ・アニメ・麻雀などが好きで、パチスロでは他媒体でも記事を執筆しています。 SEO検定1級(全日本SEO協会)、日本語検定 準1級&2級(日本語検定委員会)、DTPエキスパート・マイスター(JAGAT)など。