概要

https://atnd.org/events/76761

資料

纏め記事

Technical Art of Street Fighter V

目標

高い視認性

ハッキリしたシルエット(強そう、痛そう)
表情も大げさ
→ゲーム状況をプレイヤーにフィードバックする記号

個性的な絵作り

世界のタイトルと差別化。埋もれないためのNPR

実現手法

UE4.7.6を使用している。

キャラクター

ライトベクトルとポリゴン法線の内積に一工夫
→UE4はライトベクトルを使って計算していない

BPでライトベクトルを使って、マテリアルを使用してみた
→今世代ではライトが多い、LightProbeも多い。
→使わない

実際のマテリアル。

  • Normalはテクスチャそのまま
  • ベースカラー。良くあるカラーエディット。
    →特殊なことをしていない
  • タッチの再現
    • ノーマルマップに筆のタッチの再現。2Dベースの再現。
    • ストリートファイター4:ちりめん皺
    • 5ではノーマルマップの解像度が大きくなってフィルターが乗りづらい
      →タンジェントスペースをオブジェクトスペースに変換してフィルターをかける。
      「SNAPart」でフィルターをかけた(※これ? http://www.pandashop.jp/a/special-price/snap-art-4 )
      フィルターの荒さを4段階作成して、テクスチャの部位毎に
      フィルタが細かい→情報量が多い→視線を誘導できる。
  • エッジ・色境界の協調
  • 色、彩度のコントロール

背景

ドット絵時代。背景の奥行きを出すために
ヒストグラムを出しても暗部しかない

  • Multi Color Grading
    複数のLUTを使用できるように。最大4枚。横2枚奥行き2枚。
    ポストプロセスマテリアルで実装。

カメラ

端に行くと歪む
→コリジョンが分かりにくくなる

  • Fix Projection
    カメラの歪みを逆に計算して、キャラクターの頂点に適用する。
    完全に適用すると立体感が無くなるので、0.5くらい

ポストエフェクト

エッジの強調
RGBの差がはっきりしたところにエッジを乗せる

左右に任意のピクセルをずらしたバッファを用意。

  • n移動と、+n移動して-1して反転した画像を加算。これを上方向にも行いそれぞれを加算。

アウトラインを表示するだけでなく、ノーマルマップと合わせて、タッチに滲みを与える

ライティング

関節光の協調

  1. 背景のライト。SkyLight, Static Light
  2. キャラライト。ステーショナリー。キャラクターを強調。2〜3灯。
  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上でFluidで作ったのをメッシュ化してる。骨入れてる。追従させてる。ちょっとデータ見つからない。

はじめての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のデバッグツールが優秀
  • 古典的な位置選択からEQSに

ブループリント上のAIツール

AIプロトタイピングの問題

  • モデルが完成する前に敵と味方のBTを構築する
  • レベルが完成する前にBTを。
  • BSP等で構築すると時間かかる
  • 解決
    • AIテストキャラクター
    • BPベースの自動生成部屋
    • StaticMeshKit
      • (→モジュラーアセットの事?)

AIの自動テスト環境

  • QAスタッフ不足
  • 新しいAI機能の追加
  • 手動テストだと時間がかかりすぎる
  • ソリューション
    • 自動システムテスト環境
    • 再現可能なテスト環境→修正して再テスト可能
    • テストの成功/失敗を完全にカスタマイズできる
    • ログ、時間の遅延コントロールなど

AIが意図通りに到達しなければ、画面にランプを表示してPG以外でも分かりやすいように

AI毎に環境ボックスを用意して、ワールドに一杯配置。一斉にテストを走らせる?

AI開発オーバービュー

  1. ビヘイビアツリー
  2. EQS
    • 攻撃選択
    • 移動選択
    • EQS Based Behaivior
  3. データドリブンの移動/攻撃
  • キャラクターAIはプログラマーとデザイナーで構築

ビヘイビアツリー

  • FSM:ステートを遷移する条件をそれぞれのアクションに記述していく。
    • どういう風に防御ステートに入るかを各アクションに記述する必要がある。
  • BT:ROOTから全部流れている。アクションに入る条件を記述する。

大きくなればなるほどビヘイビアツリーの方が分かりやすくなる。

再利用できるビヘイビアアセット

  • キャラクター特有のアセットを使わない。
    • そのモーションを持っていないキャラクターがそのビヘイビアを使えなくなる。
    • データドリブンの移動とアクションが必要
  • どんなキャラクターにも再利用可能
  • データドリブン
    • 歩く、飛ぶとかをデータ化しておく事で共通のビヘイビアが動かせる

EQS

  • 古典的だと
    • 隠れる位置等を事前計算していた
      • 動的な地形を扱えない
    • レイキャストでの地形判定なので、複雑な地形はできない

コードドリブンからデータドリブン

  • パラメーター化された攻撃=コピー&ペーストを減らす
  • 汎用的なビヘイビアを構築可能に
  • 移動も。歩き、飛ぶなどをデータに。

ビヘイビアツリーとEQSの融合・拡張

EQSに基づいた動的な振る舞い

  1. Service: ターゲットを更新
  2. Service: 目的地を更新[EQS]
  3. Task: 目的地に移動

EQSクエリを切り替えるだけで振る舞いを変更できる。

  • プレイヤーを囲む
  • カメラに映る

ユーティリティ・システムのAI

  • Utility System
    • ファジーな意思決定。
    • 変更に適用。
    • 理解しにくい

そのアクションを終えてからの経過時間(横軸)と行動力(縦軸)のグラフでどれが最適か

誰を攻撃するべきか等に

EQSに基づいたメタAI

キャラクターの無いAI
複数体の中で、だれが攻撃するべきか

  • AI Battle Director
    EQSで誰が一番攻撃するのが面白いか。を計算。それぞれの個体に投げる。
    (※チーム管理AI)

VR×ロボ×美少女! UE4におけるVR向けの絵作りと最適化

UE4.10で製作
ワークフローの中心はマチネ

VRの没入感を高めるために

背景はPBRでキャラクターはアニメ的なシェーディング

  • 疑似ライティング
    • 光源の角度と法線から疑似的に光の影響を表現
    • カーブアセットで光源の角度や光の色を時間で変動
  • 肌や髪はPBRを使用していない
  • 目線をプレイヤーに追従
    • two bone IKで実現
    • 常時向けるのではなく、演出に合わせてブレンド率を切り替えて自然な目線
  • 画面中央にレティクル(VRの視線ターゲット)に動きが無く、視認性が悪くて機能していない
    • レティクルの追従に僅かなディレイをいれた。カメラの後を追う感じ
  • 自機の全身速度が速すぎてうまく敵に当たらない。
    • 速度が400km/hくらい
    • 進行方向の補正
    • 少しだけホーミング(Pojectile Movement Component)
  • 頭を左右に動かしてミサイルを避けるのが難しい。
    • ミサイルの速度を下げても危機感が無くなる
    • ミサイルが近づいたらスローモーションに。(Set Global Time Dilation)視界の色も変えて危険を知らせる。

最適化

非VR状態で40FPS。これを90FPSに。

  • プロファイリング
  1. stat unit
  2. CPUプロファイラ
  3. 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 - 虹彩

  1. 眼球全体のSSS
  2. 角膜から虹彩に落ちるコースティクス

Hair Shading Model

  • Scatter - 0.15〜0.5がベスト。
  • Backlit, TangentOutputは未使用。廃止予定。
  • 髪のSubsurface Shadingを簡易的に計算
  • Maskedなのでディザを使用すること。
    • FXAAを使うとノイジーになる

Realtime Cinematic Future: シーケンサーの登場

  • ショット
    • ドラッグ&ドロップで順番変更とかできる。
  • テイク
    • 同じショットを複製して細かいパターンを作れる。撮影のTakeと一緒、撮りなおし的な。
    • Take4が良くなかったので、Take1に戻すなど出来る。
  • ゲームプレイのキャラクター等ををシーケンサーに保存できる。
    • それをゲームプレイしたまま再生したりできる。
  • ビデオにエクスポートする機能
  • Subway Fightでのサンプルは近日

    ホーム 一覧 単語検索 最終更新 バックアップ リンク元   ヘルプ   最終更新のRSS