概要 †
https://atnd.org/events/76761
資料 †
Technical Art of Street Fighter V †
目標 †
高い視認性 †
ハッキリしたシルエット(強そう、痛そう)
表情も大げさ
→ゲーム状況をプレイヤーにフィードバックする記号
個性的な絵作り †
世界のタイトルと差別化。埋もれないためのNPR
実現手法 †
UE4.7.6を使用している。
キャラクター †
ライトベクトルとポリゴン法線の内積に一工夫
→UE4はライトベクトルを使って計算していない
BPでライトベクトルを使って、マテリアルを使用してみた
→今世代ではライトが多い、LightProbeも多い。
→使わない
実際のマテリアル。
- Normalはテクスチャそのまま
- ベースカラー。良くあるカラーエディット。
→特殊なことをしていない
- タッチの再現
- エッジ・色境界の協調
- 色、彩度のコントロール
背景 †
ドット絵時代。背景の奥行きを出すために
ヒストグラムを出しても暗部しかない
- Multi Color Grading
複数のLUTを使用できるように。最大4枚。横2枚奥行き2枚。
ポストプロセスマテリアルで実装。
カメラ †
端に行くと歪む
→コリジョンが分かりにくくなる
- Fix Projection
カメラの歪みを逆に計算して、キャラクターの頂点に適用する。
完全に適用すると立体感が無くなるので、0.5くらい
エッジの協調
RGBの差がはっきりしたところにエッジを乗せる
左右に任意のピクセルをずらしたバッファを用意。
- n移動と、+n移動して-1して反転した画像を加算。これを上方向にも行いそれぞれを加算。
ノーマルマップと合わせて、タッチに滲みを与える
ライティング †
関節光の協調
- 背景のライト。SkyLight, Static Light
- キャラライト。ステーショナリー。キャラクターを強調。2〜3灯。
- 間接光。Indirect Lighting Cache/Enlihten。キャラクターにほしい影色を適用。
(※Enlightenはこれ? : http://3dnchu.com/archives/rt-gi-with-enlighten-and-ue4/ )
質疑応答 †
Q. FixProjectionでVertexShaderで表示をずらすとコリジョンずれるのでは?
A. 格闘ゲームは特殊。そもそもコリジョンと表示は別々。コリジョンは2Dベース。なのであまり影響がない。
Q. カラーグレーディング、どの段階で掛けてる?
A. BeforeTranslucency。トーンマップを行う前なので調整難しい。
更にこの後、UE4標準のカラーグレーディングがかかることもある。
Q. FixProjectionをコードでやった理由。
A. 当時UE4のバージョンが若かった。マテリアル関数でやるとなんか重かったので、コードで実装した。そのまま引き続き。
Q. UE4を使ってネックになった部分
A. 一杯ある。物理が弱いので試行錯誤した。
物理はストリートファイター4が綺麗。物理のLimitが決めれるけど、UE4はぶっ飛ばす。言う事効かない。
Q. 必殺技とかのエフェクト周りで何か工夫しているか。波打ってるやつとか。
A. Maya↑でFulidで作ったのをメッシュ化してる。骨入れてる。追従させてる。ちょっとデータ見つからない。
はじめてのAI〜 愛のあるAIを作ろう †
AI Components †
- Pawn Senging
感覚を与える。視覚と聴覚を与えて、範囲内にいるアクターを自動的に検知できるようになる。
- OnSeePawn:見えた
- OnHearNoise:聞こえた
- Pawn Noise Emitter
- Make Noise:AI用の音を発生させる。実際に音は鳴らない。
- OnHearNoise:聞こえた
- AI Perception
知覚で検知。
オリジナルの感覚クラスを作成可能。
ドキュメントが無い。
- AI Sight Config:敵、味方を分けたり。
- AI Perception Stimuli Source
EQS †
EQS Testing Pawnを配置するとスコアを可視化できる。
まだ実験的機能なのでプロジェクト設定が必要。
ゲームプレイデバッガー †
プレイ中にシングルクォーテーション?を押すと出る。
まだ実験的機能なのでプロジェクト設定が必要。
スクウェア・エニックスにおける UNREAL ENGINE 4 を用いた人工知能技術の開発事例 †
大阪スタジオのAIの取り組み †
新しいゲームプレイをする為に技術を選定する。その逆ではない。
AI現代化アプローチ †
- 有限状態マシン(FSM)からビヘイビアツリーに
- 保守性
- シンプルさ(同じ仕組みで100体以上のキャラクターを作れる)
- 柔軟さ(ラピッド・イテレーション)
- UE4のデバッグツールが優秀
ブループリント上のAIツール †
AIプロトタイピングの問題 †
- モデルが完成する前に敵と味方のBTを構築する
- レベルが完成する前にBTを。
- BSP等で構築すると時間かかる
- 解決
- AIテストキャラクター
- BPベースの自動生成部屋
- StaticMeshKit
AIの自動テスト環境 †
- QAスタッフ不足
- 新しいAI機能の追加
- 手動テストだと時間がかかりすぎる
- ソリューション
- 自動システムテスト環境
- 再現可能なテスト環境→修正して再テスト可能
- テストの成功/失敗を完全にカスタマイズできる
- ログ、時間の遅延コントロールなど
AIが意図通りに到達しなければ、画面にランプを表示してPG以外でも分かりやすいように
AI毎に環境ボックスを用意して、ワールドに一杯配置。一斉にテストを走らせる?
AI開発オーバービュー †
- ビヘイビアツリー
- EQS
- 攻撃選択
- 移動選択
- EQS Based Behaivior
- データドリブンの移動/攻撃
ビヘイビアツリー †
- FSM:ステートを遷移する条件をそれぞれのアクションに記述していく。
- どういう風に防御ステートに入るかを各アクションに記述する必要がある。
- BT:ROOTから全部流れている。アクションに入る条件を記述する。
大きくなればなるほどビヘイビアツリーの方が分かりやすくなる。
再利用できるビヘイビアアセット †
- キャラクター特有のアセットを使わない。
- そのモーションを持っていないキャラクターがそのビヘイビアを使えなくなる。
- データドリブンの移動とアクションが必要
- どんなキャラクターにも再利用可能
- データドリブン
- 歩く、飛ぶとかをデータ化しておく事で共通のビヘイビアが動かせる
EQS †
- 古典的だと
- 隠れる位置等を事前計算していた
- レイキャストでの地形判定なので、複雑な地形はできない
コードドリブンからデータドリブン †
- パラメーター化された攻撃=コピー&ペーストを減らす
- 汎用的なビヘイビアを構築可能に
- 移動も。歩き、飛ぶなどをデータに。
ビヘイビアツリーとEQSの融合・拡張 †
EQSに基づいた動的な振る舞い †
- Service: ターゲットを更新
- Service: 目的地を更新[EQS]
- Task: 目的地に移動
EQSクエリを切り替えるだけで振る舞いを変更できる。
ユーティリティ・システムのAI †
そのアクションを終えてからの経過時間(横軸)と行動力(縦軸)のグラフでどれが最適か
誰を攻撃するべきか等に
EQSに基づいたメタAI †
キャラクターの無いAI
複数体の中で、だれが攻撃するべきか
- AI Battle Director
EQSで誰が一番攻撃するのが面白いか。を計算。それぞれの個体に投げる。
(※チーム管理AI)
VR×ロボ×美少女! UE4におけるVR向けの絵作りと最適化 †
UE4.10で製作
ワークフローの中心はマチネ
VRの没入感を高めるために †
背景はPBRでキャラクターはアニメ的なシェーディング
- 疑似ライティング
- 光源の角度と法線から疑似的に光の影響を表現
- カーブアセットで光源の角度や光の色を時間で変動
- 目線をプレイヤーに追従
- two bone IKで実現
- 常時向けるのではなく、演出に合わせてブレンド率を切り替えて自然な目線
- 画面中央にレティクル(VRの視線ターゲット)に動きが無く、視認性が悪くて機能していない
- レティクルの追従に僅かなディレイをいれた。カメラの後を追う感じ
- 自機の全身速度が速すぎてうまく敵に当たらない。
- 速度が400km/hくらい
- 進行方向の補正
- 少しだけホーミング(Pojectile Movement Component)
- 頭を左右に動かしてミサイルを避けるのが難しい。
- ミサイルの速度を下げても危機感が無くなる
- ミサイルが近づいたらスローモーションに。(Set Global Time Dilation)視界の色も変えて危険を知らせる。
最適化 †
非VR状態で40FPS。これを90FPSに。
- stat unit
- CPUプロファイラ
- GPUプロファイラ
- CPU負荷を減らす
- ForEachLoop等のArrayElementsの取得を純粋関数を非純粋に。
- 意味がなかったもの
- ベクトル長の比較でLengthSquaredを使用
- 引数を参照にしてコピーコストを減らす
- ガベージコレクトタイミングで処理負荷が上がるので、ある程度下げないといけない。- GPU負荷を減らすカリング
- 自前の軽量--- カメラから一定の距離と角度は表示やアニメーションの計算を切る。
- プリレンダ向けのメッシュのリダクション
- 輸送機:80万*6 → 8万
- 味方:35万*11 → 15万
- 敵:20万*たくさん → 6万
- 味方機が沢山出るのはビルボードに
- アニメーションの計算負荷を抑える
- アニメーション必要がないメッシュはStaticMeshに
- アニメーションするメッシュも必要部分のみ。SkeltalMeshtoStaticMeshの併用。
- マテリアルのブレンドモードの最適化
- Deferred Renderingが半透明オブジェクトとは相性が悪い
- 木の重なりが多く、Maskでも重い。→Maskを使わず、ポリゴンで形状を表現。
- ダイナミックシャドウの調整
- 近いアクターはCastShadowをON、一定距離以上はOFFに。
Kiteの少年と学ぶUE4.11の新シェーダ †
Eye Shading Model †
Iris - 虹彩
- 眼球全体のSSS
- 角膜から虹彩に落ちるコースティクス
Hair Shading Model †
- Scatter - 0.15〜0.5がベスト。
- Backlit, TangentOutputは未使用。廃止予定。
- 髪のSubsurface Shadingを簡易的に計算
Realtime Cinematic Future: シーケンサーの登場 †
- ショット
- テイク
- 同じショットを複製して細かいパターンを作れる。撮影のTakeと一緒、撮りなおし的な。
- Take4が良くなかったので、Take1に戻すなど出来る。
- ゲームプレイのキャラクター等ををシーケンサーに保存できる。