#contents

----
* 概要 [#x5bb8da2]
https://atnd.org/events/76761

* 資料 [#wae119cc]
- はじめてのAI〜 愛のあるAIを作ろう
http://www.slideshare.net/masahikonakamura50/ai-ai-62023284

- togetter: http://togetter.com/li/975139
- ゲームエフェクトデザイナーのブログ (新)
-- 「Technical Art of STREET FIGHTER V」レポート : http://effect.hatenablog.com/entry/2016/05/14/230254
-- 「VR×ロボ×美少女! UE4におけるVR向けの絵作りと最適化」レポート : http://effect.hatenablog.com/entry/2016/05/14/233840

* Technical Art of Street Fighter V [#j602f59e]
** 目標 [#p77dd766]
*** 高い視認性 [#g58795d7]
ハッキリしたシルエット(強そう、痛そう)
表情も大げさ
→ゲーム状況をプレイヤーにフィードバックする記号

*** 個性的な絵作り [#uc9bb085]
世界のタイトルと差別化。埋もれないためのNPR


** 実現手法 [#u965c3f0]
UE4.7.6を使用している。
*** キャラクター [#t34ea0c3]
ライトベクトルとポリゴン法線の内積に一工夫
→UE4はライトベクトルを使って計算していない

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

実際のマテリアル。
- Normalはテクスチャそのまま
- ベースカラー。良くあるカラーエディット。
→特殊なことをしていない

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

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

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


*** カメラ [#s587faf8]
端に行くと歪む
→コリジョンが分かりにくくなる

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


*** ポストエフェクト [#xbb0a60a]

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

左右に任意のピクセルをずらしたバッファを用意。
-n移動と、+n移動して-1して反転した画像を加算。これを上方向にも行いそれぞれを加算。

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


*** ライティング [#za637366]
関節光の協調

+ 背景のライト。SkyLight, Static Light
+ キャラライト。ステーショナリー。キャラクターを強調。2〜3灯。
+ 間接光。Indirect Lighting Cache/Enlihten。キャラクターにほしい影色を適用。
(※Enlightenはこれ? : http://3dnchu.com/archives/rt-gi-with-enlighten-and-ue4/ )

** 質疑応答 [#o46f9424]
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を作ろう [#vad4105d]
** AI Components [#k02dd98e]
- Pawn Senging
感覚を与える。視覚と聴覚を与えて、範囲内にいるアクターを自動的に検知できるようになる。
-- OnSeePawn:見えた
-- OnHearNoise:聞こえた
- Pawn Noise Emitter
-- Make Noise:AI用の音を発生させる。実際に音は鳴らない。
-- OnHearNoise:聞こえた
- AI Perception
知覚で検知。
オリジナルの感覚クラスを作成可能。
ドキュメントが無い。
-- AI Sight Config:敵、味方を分けたり。
- AI Perception Stimuli Source

** EQS [#geefe991]
EQS Testing Pawnを配置するとスコアを可視化できる。
まだ実験的機能なのでプロジェクト設定が必要。

** ゲームプレイデバッガー [#x16d9e04]
プレイ中にシングルクォーテーション?を押すと出る。
まだ実験的機能なのでプロジェクト設定が必要。


* スクウェア・エニックスにおける UNREAL ENGINE 4 を用いた人工知能技術の開発事例 [#x1dfe05b]

** 大阪スタジオのAIの取り組み [#o95d9bb9]
新しいゲームプレイをする為に技術を選定する。その逆ではない。

*** AI現代化アプローチ [#y15a4454]
- 有限状態マシン(FSM)からビヘイビアツリーに
-- 保守性
-- シンプルさ(同じ仕組みで100体以上のキャラクターを作れる)
-- 柔軟さ(ラピッド・イテレーション)
-- UE4のデバッグツールが優秀

- 古典的な位置選択からEQSに

** ブループリント上のAIツール [#abd029e7]

*** AIプロトタイピングの問題 [#l5b2b3f5]
-- モデルが完成する前に敵と味方のBTを構築する
-- レベルが完成する前にBTを。
-- BSP等で構築すると時間かかる

- 解決
-- AIテストキャラクター
-- BPベースの自動生成部屋
-- StaticMeshKit
--- (→モジュラーアセットの事?)

*** AIの自動テスト環境 [#k971936b]
- QAスタッフ不足
- 新しいAI機能の追加
- 手動テストだと時間がかかりすぎる


- ソリューション
-- 自動システムテスト環境
-- 再現可能なテスト環境→修正して再テスト可能
-- テストの成功/失敗を完全にカスタマイズできる
-- ログ、時間の遅延コントロールなど

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

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

** AI開発オーバービュー [#y96bf47a]

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

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

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

*** 再利用できるビヘイビアアセット [#ze7a566f]
- キャラクター特有のアセットを使わない。
-- そのモーションを持っていないキャラクターがそのビヘイビアを使えなくなる。
-- データドリブンの移動とアクションが必要
- どんなキャラクターにも再利用可能

- データドリブン
-- 歩く、飛ぶとかをデータ化しておく事で共通のビヘイビアが動かせる

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

*** コードドリブンからデータドリブン [#fb499d6d]
-- パラメーター化された攻撃=コピー&ペーストを減らす
-- 汎用的なビヘイビアを構築可能に
-- 移動も。歩き、飛ぶなどをデータに。


** ビヘイビアツリーとEQSの融合・拡張 [#c3ede44a]

*** EQSに基づいた動的な振る舞い [#k0fd2915]
+ Service: ターゲットを更新
+ Service: 目的地を更新[EQS]
+ Task: 目的地に移動

EQSクエリを切り替えるだけで振る舞いを変更できる。
- プレイヤーを囲む
- カメラに映る


** ユーティリティ・システムのAI [#mfa38417]
- Utility System
-- ファジーな意思決定。
-- 変更に適用。
-- 理解しにくい

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

誰を攻撃するべきか等に


*** EQSに基づいたメタAI [#df523601]
キャラクターの無いAI
複数体の中で、だれが攻撃するべきか
- AI Battle Director
EQSで誰が一番攻撃するのが面白いか。を計算。それぞれの個体に投げる。
(※チーム管理AI)



* VR×ロボ×美少女! UE4におけるVR向けの絵作りと最適化 [#u5114967]
UE4.10で製作
ワークフローの中心はマチネ

** VRの没入感を高めるために [#baaea9c1]
背景はPBRでキャラクターはアニメ的なシェーディング

- 疑似ライティング
-- 光源の角度と法線から疑似的に光の影響を表現
-- カーブアセットで光源の角度や光の色を時間で変動

-- 肌や髪はPBRを使用していない

- 目線をプレイヤーに追従
-- two bone IKで実現
-- 常時向けるのではなく、演出に合わせてブレンド率を切り替えて自然な目線

- 画面中央にレティクル(VRの視線ターゲット)に動きが無く、視認性が悪くて機能していない
-- レティクルの追従に僅かなディレイをいれた。カメラの後を追う感じ

- 自機の全身速度が速すぎてうまく敵に当たらない。
-- 速度が400km/hくらい
-- 進行方向の補正
-- 少しだけホーミング(Pojectile Movement Component)

- 頭を左右に動かしてミサイルを避けるのが難しい。
-- ミサイルの速度を下げても危機感が無くなる
-- ミサイルが近づいたらスローモーションに。(Set Global Time Dilation)視界の色も変えて危険を知らせる。


** 最適化 [#f037b6f2]
非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の新シェーダ [#xaf9048b]
- Shading Modelを変更=レンダリング計算式の変更

** Eye Shading Model [#ha5ba2d8]
Iris - 虹彩
+ 眼球全体のSSS
+ 角膜から虹彩に落ちるコースティクス


** Hair Shading Model [#qd076801]
- Scatter - 0.15〜0.5がベスト。
- Backlit, TangentOutputは未使用。廃止予定。
- 髪のSubsurface Shadingを簡易的に計算

- Maskedなのでディザを使用すること。
-- FXAAを使うとノイジーになる



* Realtime Cinematic Future: シーケンサーの登場 [#ie90d797]
- ショット
-- ドラッグ&ドロップで順番変更とかできる。
- テイク
-- 同じショットを複製して細かいパターンを作れる。撮影のTakeと一緒、撮りなおし的な。
-- Take4が良くなかったので、Take1に戻すなど出来る。

- ゲームプレイのキャラクター等ををシーケンサーに保存できる。
-- それをゲームプレイしたまま再生したりできる。

- ビデオにエクスポートする機能

- Subway Fightでのサンプルは近日

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