大規模CSゲーム
における
ライトマス運用
© 2016 SQUARE ENIX CO., LTD. All Rights Reserved.
斎藤 修
(株)スクウェア・エニックス
背景デザイナー
主に夢と希望あふれる感じの
タイトルを開発してます
© 2016 SQUARE ENIX CO., LTD. All Rights Reserved.
大規模 CS ゲーム
3点において起きた色々な問題を
共有させて頂きます
の
発表目的
© 2016 SQUARE ENIX CO., LTD. All Rights Reserved.
注意書き
今回お話する内容は「成功例」ではありません
あくまで「現在進行形」のお話です
チームは未だ挑戦中であり
今後フローは変更される可能性があります
より良い方法 より良い手段がありましたら
(この後すぐにでも)是非教えて頂けましたら幸いです
© 2016 SQUARE ENIX CO., LTD. All Rights Reserved.
ではまず ゲーム から
© 2016 SQUARE ENIX CO., LTD. All Rights Reserved.
© 2016 SQUARE ENIX CO., LTD. All Rights Reserved.
休憩室再現
© 2016 SQUARE ENIX CO., LTD. All Rights Reserved.
写真
© 2016 SQUARE ENIX CO., LTD. All Rights Reserved.
Unreal
Engine4
写真一見それっぽくライティング
できているように見えます…??
© 2016 SQUARE ENIX CO., LTD. All Rights Reserved.
Unreal
Engine4
写真
NG Lighting
© 2016 SQUARE ENIX CO., LTD. All Rights Reserved.
Unreal
Engine4
何がNGなのか?
© 2016 SQUARE ENIX CO., LTD. All Rights Reserved.
動くモノを置いてみると解ります
© 2016 SQUARE ENIX CO., LTD. All Rights Reserved.
© 2016 SQUARE ENIX CO., LTD. All Rights Reserved.
何が原因??
© 2016 SQUARE ENIX CO., LTD. All Rights Reserved.
PLV事前計算ライトボリューム
Precomputed Light Volume
© 2016 SQUARE ENIX CO., LTD. All Rights Reserved.
↑このツブツブ↑
© 2016 SQUARE ENIX CO., LTD. All Rights Reserved.
PLVPrecomputed Light Volumeとは
ライトマスでライティングした際
空間上に作成される
間接光の情報
© 2016 SQUARE ENIX CO., LTD. All Rights Reserved.
動くモノへのライティングは
PLVが使用されます
© 2016 SQUARE ENIX CO., LTD. All Rights Reserved.
PLVにエラーがあると
おかしなライティングがされます
© 2016 SQUARE ENIX CO., LTD. All Rights Reserved.
ゲームは大体動くメッシュがあるので
PLVも意識してライティングする必要があります
© 2016 SQUARE ENIX CO., LTD. All Rights Reserved.
ちなみにさっきのNGライティングの
原因はコレです
© 2016 SQUARE ENIX CO., LTD. All Rights Reserved.
コレ
© 2016 SQUARE ENIX CO., LTD. All Rights Reserved.
チームで行った対処法
© 2016 SQUARE ENIX CO., LTD. All Rights Reserved.
サンプリング方法を見直す
ライティング方法を見直す
© 2016 SQUARE ENIX CO., LTD. All Rights Reserved.
サンプリング方法を見直す
ライティング方法を見直す
© 2016 SQUARE ENIX CO., LTD. All Rights Reserved.
今回のエラー環境は
スタティックライトを使用して再現しました
© 2016 SQUARE ENIX CO., LTD. All Rights Reserved.
スタティックライトと
エミッシブライトはPLVにエラーを
起こしやすいライトです
© 2016 SQUARE ENIX CO., LTD. All Rights Reserved.
スタティックライト
PLVに直接光が格納される
エミッシブライト
PLVの精度が著しく悪い
© 2016 SQUARE ENIX CO., LTD. All Rights Reserved.
スタティックライト
PLVに直接光が格納される
エミッシブライト
PLVの精度が著しく悪い
© 2016 SQUARE ENIX CO., LTD. All Rights Reserved.
なので
スタティックライト
PLVに直接光が格納される
エミッシブライト
PLVの精度が著しく悪い
チームでは使用を
制限しました
© 2016 SQUARE ENIX CO., LTD. All Rights Reserved.
動くモノのあるとこでは
スタティック エミッシブ共に
原則使用禁止
© 2016 SQUARE ENIX CO., LTD. All Rights Reserved.
悲しいですが仕方ない……
© 2016 SQUARE ENIX CO., LTD. All Rights Reserved.
サンプリング方法を見直す
ライティング方法を見直す
© 2016 SQUARE ENIX CO., LTD. All Rights Reserved.
ILCQの設定
© 2016 SQUARE ENIX CO., LTD. All Rights Reserved.
ILCとは?
© 2016 SQUARE ENIX CO., LTD. All Rights Reserved.
ILC Indirect Lighting Cache
PLVを参照して
各動的メッシュに作成される
間接光のキャッシュ
© 2016 SQUARE ENIX CO., LTD. All Rights Reserved.
Point
バウンディングボックスの
中心1点でサンプリング
Volume
バウンディングボックスサイズで
5×5×5のグリッドを
作成してサンプリング
ILCQ
Indirect Lighting Cache Quality
© 2016 SQUARE ENIX CO., LTD. All Rights Reserved.
Point
バウンディングボックスの
中心1点でサンプリング
Volume
バウンディングボックスサイズで
5×5×5のグリッドを
作成してサンプリング
ILCQ
Indirect Lighting Cache Quality
© 2016 SQUARE ENIX CO., LTD. All Rights Reserved.
ILCQがPointだと
エラーが出てしまいますが…
© 2016 SQUARE ENIX CO., LTD. All Rights Reserved.
Volumeの場合
馴染みます
© 2016 SQUARE ENIX CO., LTD. All Rights Reserved.
© 2016 SQUARE ENIX CO., LTD. All Rights Reserved.
ただしDraw負荷が上がります
© 2016 SQUARE ENIX CO., LTD. All Rights Reserved.
負荷は参照するPLVの量に応じて増大しますので
あまり大きく 素早く動くモノなどは
気をつけた方が良さそうです
© 2016 SQUARE ENIX CO., LTD. All Rights Reserved.
ここで朗報
© 2016 SQUARE ENIX CO., LTD. All Rights Reserved.
先ほどの
2つのPLVエラーですが……
© 2016 SQUARE ENIX CO., LTD. All Rights Reserved.
篠山さんが対応してくれています
© 2016 SQUARE ENIX CO., LTD. All Rights Reserved.
スタティックライト
PLVに直接光が
格納されないようにする
エミッシブライト
PLVの精度を向上
© 2016 SQUARE ENIX CO., LTD. All Rights Reserved.
詳しくはご本人かUDNへ
© 2016 SQUARE ENIX CO., LTD. All Rights Reserved.
では次に
© 2016 SQUARE ENIX CO., LTD. All Rights Reserved.
CS
© 2016 SQUARE ENIX CO., LTD. All Rights Reserved.
CSコンシューマー開発といえば
厳しいレギュレーション
© 2016 SQUARE ENIX CO., LTD. All Rights Reserved.
例えばメモリ
© 2016 SQUARE ENIX CO., LTD. All Rights Reserved.
UnrealEngine4のテクスチャプール
デフォルトで1GB
1GB
© 2016 SQUARE ENIX CO., LTD. All Rights Reserved.
4Kテクスチャ50枚分
© 2016 SQUARE ENIX CO., LTD. All Rights Reserved.
そのうちどれくらいが
ライティングに使えるかと言うと…
© 2016 SQUARE ENIX CO., LTD. All Rights Reserved.
1/5 200MB
4K10枚分くらい
© 2016 SQUARE ENIX CO., LTD. All Rights Reserved.
これくらいの広さで?
© 2016 SQUARE ENIX CO., LTD. All Rights Reserved.
NO これくらいの広さで
© 2016 SQUARE ENIX CO., LTD. All Rights Reserved.
なので現開発チームでは……
© 2016 SQUARE ENIX CO., LTD. All Rights Reserved.
ライトマップ密度は
基本的に「青」に制限
© 2016 SQUARE ENIX CO., LTD. All Rights Reserved.
ライトマップ密度「青」ってどれくらい?
© 2016 SQUARE ENIX CO., LTD. All Rights Reserved.
1m≒5Pixel
© 2016 SQUARE ENIX CO., LTD. All Rights Reserved.
© 2016 SQUARE ENIX CO., LTD. All Rights Reserved.
どうしてもって言う時は
「緑」も使用可能です
© 2016 SQUARE ENIX CO., LTD. All Rights Reserved.
1m≒20Pixel
「赤」は?
© 2016 SQUARE ENIX CO., LTD. All Rights Reserved.
不可能です
1m≒80Pixel
© 2016 SQUARE ENIX CO., LTD. All Rights Reserved.
起きた事例
© 2016 SQUARE ENIX CO., LTD. All Rights Reserved.
設定ミスで真っ赤の状態で
アップされたマップ
© 2016 SQUARE ENIX CO., LTD. All Rights Reserved.
ライトマップだけで4GB
© 2016 SQUARE ENIX CO., LTD. All Rights Reserved.
テクスチャプールに入りきらず
エラーで見れない
© 2016 SQUARE ENIX CO., LTD. All Rights Reserved.
さらには重すぎて
サーバーアクセスエラー
© 2016 SQUARE ENIX CO., LTD. All Rights Reserved.
怒られる
© 2016 SQUARE ENIX CO., LTD. All Rights Reserved.
1GB以上のファイルアップしたら
警告メールが届くようになりました
1GB
© 2016 SQUARE ENIX CO., LTD. All Rights Reserved.
そして
© 2016 SQUARE ENIX CO., LTD. All Rights Reserved.
「青」マップだとどうなるか?
© 2016 SQUARE ENIX CO., LTD. All Rights Reserved.
ライトマップエラーが大量発生します
© 2016 SQUARE ENIX CO., LTD. All Rights Reserved.
ぶっ刺しエラー UVシームエラー
パディングエラー UVグリッドエラー
© 2016 SQUARE ENIX CO., LTD. All Rights Reserved.
適切なライトマップUV作成で
かなり緩和されますが……
© 2016 SQUARE ENIX CO., LTD. All Rights Reserved.
ある程度は
諦めざるを得ませんでした
© 2016 SQUARE ENIX CO., LTD. All Rights Reserved.
フォリッジのライトマップエラー
© 2016 SQUARE ENIX CO., LTD. All Rights Reserved.
円柱のライトマップエラー
ぶっ刺しエラー
© 2016 SQUARE ENIX CO., LTD. All Rights Reserved.
良い解決方法
ご存知の方いらっしゃったら
教えて下さい…
© 2016 SQUARE ENIX CO., LTD. All Rights Reserved.
もちょっと追加で
厳しい話
© 2016 SQUARE ENIX CO., LTD. All Rights Reserved.
先ほどこの規模で200MBと言いましたが…
© 2016 SQUARE ENIX CO., LTD. All Rights Reserved.
実際はもっと
切り詰める必要があります
© 2016 SQUARE ENIX CO., LTD. All Rights Reserved.
仮にこの規模のマップが
30ステージあるとしたら…
© 2016 SQUARE ENIX CO., LTD. All Rights Reserved.
ライトマップだけで
200MB×30=6GB
© 2016 SQUARE ENIX CO., LTD. All Rights Reserved.
Blu-rayディスク
1/4以上を占めます
© 2016 SQUARE ENIX CO., LTD. All Rights Reserved.
厳しいです
© 2016 SQUARE ENIX CO., LTD. All Rights Reserved.
ラスト
© 2016 SQUARE ENIX CO., LTD. All Rights Reserved.
大規模
© 2016 SQUARE ENIX CO., LTD. All Rights Reserved.
個人的に一番大変だと
思ったのがコレ
© 2016 SQUARE ENIX CO., LTD. All Rights Reserved.
大規模=働く人が多い
© 2016 SQUARE ENIX CO., LTD. All Rights Reserved.
大規模=働く人が多い
=ラインが同時に動く
© 2016 SQUARE ENIX CO., LTD. All Rights Reserved.
大規模=働く人が多い
=ラインが同時に動く
=ライティングする人が
二桁を超える
© 2016 SQUARE ENIX CO., LTD. All Rights Reserved.
そしてそれぞれ
手法も好みもバラバラ
© 2016 SQUARE ENIX CO., LTD. All Rights Reserved.
何か土台となるモノが
必要になりました
© 2016 SQUARE ENIX CO., LTD. All Rights Reserved.
そこで採用した手法
「照度ベースライティング」
© 2016 SQUARE ENIX CO., LTD. All Rights Reserved.
照度って何?
© 2016 SQUARE ENIX CO., LTD. All Rights Reserved.
「照度(しょうど、英: illuminance)とは、物体の表
面を照らす光の明るさを表す物理量である。 照度は
人間の感じる量を表す心理物理量のひとつである。
国際単位系(SI)における単位はルクス(記号: lx)
またはルーメン毎平方メートル(記号: lm m−2)が用
いられる。照度は光束発散度と同じ次元を持つが、
光束発散度は平面状の光源の指標であり、照度は照
射された側の指標である。」
© 2016 SQUARE ENIX CO., LTD. All Rights Reserved.
「文字通り、どれだけ対象物を「照らしている」かを表す指標であり、
机の上や部屋などの明るさを示すのに利用される。照度は右図のよう
に照らされる物体が光線に対して垂直でなく斜めであった場合、照射
される物体は暗くなってしまうので、法線ベクトルnをかけることに
よってそれを加味する。照度と光束の違いは、照射している物体の面
積を考慮するかしないかである。例えば、同じ光束を放つ電灯でも近
くにある本よりも、離れた場所にある本の方が暗くなる。これを照度
が低いと呼ぶ。光源となる電灯が単位カンデラで表されるのに対し、
机の上がどれだけ照らされているかを示すときにルクスが用いられる
のはこのためである。
目で感じる物体の単位視面積あたりの明るさは、距離には依存せず、
物体の照度に正比例する。しかし、物体の視面積が極めて小さい場合
は、同じ面積と照度の物体でも、目で感じる単位視面積あたりの明る
さは、距離の増加にしたがって減衰していく。」
© 2016 SQUARE ENIX CO., LTD. All Rights Reserved.
Wikipediaより引用
https://ja.wikipedia.org/wiki/%E7%85%A7%E5%BA%A6
「明るさ」の事です
© 2016 SQUARE ENIX CO., LTD. All Rights Reserved.
照度は人間の「感覚的な明るさ」の単位
© 2016 SQUARE ENIX CO., LTD. All Rights Reserved.
晴天
10万Lux
曇天
5000Lux
オフィス
500Lux
地下駐車場
30Lux
街灯
5Lux
月夜
0.1Lux
なぜ「照度」を使うのか?
© 2016 SQUARE ENIX CO., LTD. All Rights Reserved.
色々な人に聞かれたこと
「太陽ってディレクショナルライトの
Intensityでいくつくらい?」
© 2016 SQUARE ENIX CO., LTD. All Rights Reserved.
……わからない
© 2016 SQUARE ENIX CO., LTD. All Rights Reserved.
でもわからないままなのは
まずい…
© 2016 SQUARE ENIX CO., LTD. All Rights Reserved.
そこで手がかりにしたのが
「照度」
© 2016 SQUARE ENIX CO., LTD. All Rights Reserved.
実はUnrealEngine4のライトは
それぞれIntensityの基準が
バラバラなのですが
謎数値
謎数値
ルーメン
ルーメンと見せかけて謎数値
© 2016 SQUARE ENIX CO., LTD. All Rights Reserved.
「照度」は受光側の単位なので
何で照らされているかが問題になりません
© 2016 SQUARE ENIX CO., LTD. All Rights Reserved.
「照度」を基準にすれば
ポイントでもディレクショナルでも
太陽の値を出すことが出来ます
© 2016 SQUARE ENIX CO., LTD. All Rights Reserved.
「照度」を基準にすれば
ライトやマテリアルの種類を気にせず
ライティングができます
© 2016 SQUARE ENIX CO., LTD. All Rights Reserved.
では晴天時の太陽の
ディレクショナル値を出してみます
© 2016 SQUARE ENIX CO., LTD. All Rights Reserved.
ここからちょっと
つまらないかもしれません
© 2016 SQUARE ENIX CO., LTD. All Rights Reserved.
まずは
BaseColor=1.0 Roughness=1.0
Metal=0.0 Specular=0.0
の板を完全拡散面として配置します
© 2016 SQUARE ENIX CO., LTD. All Rights Reserved.
その1m直上に
ポイントライトを配置
© 2016 SQUARE ENIX CO., LTD. All Rights Reserved.
HDRVisualizeモードで
L値1.0を返すまでIntensityを上げます
© 2016 SQUARE ENIX CO., LTD. All Rights Reserved.
この時のポイントライトの
ルーメン値は約1966lmなので
1966/4π≒156.45lx
L値1.0の時 約156lxの照度である事が解ります
© 2016 SQUARE ENIX CO., LTD. All Rights Reserved.
次にディレクショナルライトを
真下に向けて配置します
© 2016 SQUARE ENIX CO., LTD. All Rights Reserved.
約3.15の時L値1.0を返すのが解ります
ここからディレクショナルライトのIntensityは
3.15の時 約156lxの照度になる事が解ります
© 2016 SQUARE ENIX CO., LTD. All Rights Reserved.
晴天時の照度は10万Luxです
© 2016 SQUARE ENIX CO., LTD. All Rights Reserved.
晴天
10万Lux
曇天
5000Lux
オフィス
500Lux
地下駐車場
30Lux
街灯
5Lux
月夜
0.1Lux
よって100000/156*3.14≒2012.8
が晴天時のディレクショナルライトの値です
© 2016 SQUARE ENIX CO., LTD. All Rights Reserved.
2012.8です
© 2016 SQUARE ENIX CO., LTD. All Rights Reserved.
EVは適宜調整して下さい
© 2016 SQUARE ENIX CO., LTD. All Rights Reserved.
このように
「照度」を土台にすると
各ライトの基準を作ることができます
謎数値
謎数値
ルーメン
ルーメンと見せかけて
謎数値
照度
© 2016 SQUARE ENIX CO., LTD. All Rights Reserved.
また「照度」を基準とすることで
現実世界をリファレンスに
しやすくなりました
© 2016 SQUARE ENIX CO., LTD. All Rights Reserved.
チームでは 日の出から南中までの
各時間帯の照度とIBLを計測し
© 2016 SQUARE ENIX CO., LTD. All Rights Reserved.
太陽高度、角度、色温度、光量、IBLの
相関したデータを取得
© 2016 SQUARE ENIX CO., LTD. All Rights Reserved.
各時間帯のライティング環境を
UnrealEngine4上で再現 精度を確認し…
© 2016 SQUARE ENIX CO., LTD. All Rights Reserved.
ライティングの基礎となる
ライトリグを作成しました
© 2016 SQUARE ENIX CO., LTD. All Rights Reserved.
これにより各自バラバラだった
ライティング手法が
ある程度統一
© 2016 SQUARE ENIX CO., LTD. All Rights Reserved.
初期ライト設計のコストを
減らすことができました
© 2016 SQUARE ENIX CO., LTD. All Rights Reserved.
しかし
© 2016 SQUARE ENIX CO., LTD. All Rights Reserved.
「照度」を基準とする事で
エラーも発生
© 2016 SQUARE ENIX CO., LTD. All Rights Reserved.
16bitの壁
© 2016 SQUARE ENIX CO., LTD. All Rights Reserved.
UnrealEngine4のGBufferは
1チャンネル最大16bitです
© 2016 SQUARE ENIX CO., LTD. All Rights Reserved.
16bitの最大値は「65535」
© 2016 SQUARE ENIX CO., LTD. All Rights Reserved.
先ほどの2012.8の
ディレクショナルライトの値で
Roughness0.0の球をライティングすると
© 2016 SQUARE ENIX CO., LTD. All Rights Reserved.
ハイライトの部分でシーンカラーの
輝度値がぶっ飛びます
Infinity!
© 2016 SQUARE ENIX CO., LTD. All Rights Reserved.
逆に0.001などにすると
デバッグ表示やギズモがぶっ飛びます
© 2016 SQUARE ENIX CO., LTD. All Rights Reserved.
「照度」を基準にする
=
「現実」を基準にする
© 2016 SQUARE ENIX CO., LTD. All Rights Reserved.
現実世界のHDR情報は
16bitには収まりきらない……
© 2016 SQUARE ENIX CO., LTD. All Rights Reserved.
悩ましいです
© 2016 SQUARE ENIX CO., LTD. All Rights Reserved.
良いライティングフローがあったら
是非教えて頂けましたら幸いです
© 2016 SQUARE ENIX CO., LTD. All Rights Reserved.
まとめ
© 2016 SQUARE ENIX CO., LTD. All Rights Reserved.
大規模
CS
ゲーム 動くものへのライティングは気をつけよう!
篠山さん早く何とかして
レギュレーションとっても厳しいです。
誰かライトベイクエラー助けて
照度ベースで頑張りました!
ギズモで失明しそうです
© 2016 SQUARE ENIX CO., LTD. All Rights Reserved.
長時間
ありがとうございました
© 2016 SQUARE ENIX CO., LTD. All Rights Reserved.
ご質問などありましたら
© 2016 SQUARE ENIX CO., LTD. All Rights Reserved.
UnrealEngine4はEpic Games社の商標または登録商標です。
PARAGONはEpic Games社の商標または登録商標です。
Blu-rayはブルーレイディスクアソシエーションの商標または登録商標です。
その他掲載されている会社名、商品名は、各社の商標または登録商標です。

大規模CSゲームにおけるライトマス運用