はじめてのai~ 愛のあるaiを作ろう

46
フフフフフフ フフフフフフフフフ フフ フフ フフフフフ AI フフフフ AI フフフフ Unreal Fest 2016 フフ

Upload: masahiko-nakamura

Post on 16-Apr-2017

13.863 views

Category:

Engineering


0 download

TRANSCRIPT

Page 1: はじめてのAI~ 愛のあるAIを作ろう

フリーランス ゲームクリエイター中村 匡彦

はじめての AI ~愛のある AI を作ろう

Unreal Fest 2016 大阪

Page 2: はじめてのAI~ 愛のあるAIを作ろう

自己紹介

名前 : 中村 匡彦

ネット上では主に alwei という名前で活動中。

Twitter では『 @aizen76 』でやっています。

元々はゲームプログラマー。 2 年前から独立してフリーに。

関西圏を中心に UE4 コミュニティの拡大させるために活動中。

Page 3: はじめてのAI~ 愛のあるAIを作ろう

自己紹介

著書

Unreal Engine 4ブループリント逆引きリファレンス

翔泳社様より絶賛発売中

技術ライターみたいなこともやります。比較的いつでもお仕事募集中です。

Page 4: はじめてのAI~ 愛のあるAIを作ろう

今回のお題は『 AI 』

Page 5: はじめてのAI~ 愛のあるAIを作ろう

UE4 の AI 機能群

ビヘイビアツリーブラックボード

AI Controll

er

ナビゲーションメッシュ

EQSAI

Components この他にもまだあります

Page 6: はじめてのAI~ 愛のあるAIを作ろう

AI の概略図

AI Controlle

r

ビヘイビアツリー&ブラックボード

キャラクター これらはそれぞれ別物として機能

Page 7: はじめてのAI~ 愛のあるAIを作ろう

キャラクター

UE4 上では『 Character 』クラスのことを指します。

『 Pawn 』クラスでも OK ですがここでは『 Character 』に。

AI としては見た目やコリジョン部分を担当します。

アニメーションはスケルタルメッシュにお任せ。

基本的にロジックは実装しません。

ここに AI の仕組みを乗せていくことになります。

Page 8: はじめてのAI~ 愛のあるAIを作ろう

AI ControllerAI の心臓部です。

AI に対する指示系統全般を担当。

『 Character 』に所有させることによって、 AI として機能。

ナビゲーションメッシュの機能もここに。

ビヘイビアツリーの起動も AI Controller から行います。

全ての AI 機能のまとめ役。

Page 9: はじめてのAI~ 愛のあるAIを作ろう

ビヘイビアツリー & ブラックボード

『ビヘイビアツリー』

AI 自体の行動ロジックを決める仕組み。

ノードツリー形式に AI がどう思考するか可視化。

『ブラックボード』

AI の記憶領域(メモリー)。

AI 内で各種情報を共有する際に利用されます。

この二つはお互い密接に関連性があります。

Page 10: はじめてのAI~ 愛のあるAIを作ろう

AI のセットアップ

まずはそれぞれのアセットを新規作成。

AI Controller やビヘイビアツリーを作成しておく。

詳しい手順は公式ドキュメントにあります。

『ビヘイビアツリーのクイックスタート ガイド』

https://docs.unrealengine.com/latest/JPN/Engine/AI/BehaviorTrees/QuickStart/index.html

Page 11: はじめてのAI~ 愛のあるAIを作ろう

ナビゲーションメッシュ

AI にレベル上のメッシュのどこが通過可能かを教える仕組み。

UE4 では『 Nav Mesh Bounds Volume 』というアクターを

配置すると自動的に生成。

『 P 』キーを押すと緑色で可視化。

あとは『 Move To 』ノードなどを

使用するだけで利用可能。

Page 12: はじめてのAI~ 愛のあるAIを作ろう

ビヘイビアツリーの仕組み

ルートノードから始まり、必ず左側から実行し、右側へ。

ひとつ実行が終わると親ノードに戻り、次の子ノードを辿る。

実行順序を変えることはできません。

ナビゲーションメッシュを使用しなくてもビヘイビアツリーを利用すること自体は可能です。

Page 13: はじめてのAI~ 愛のあるAIを作ろう

ビヘイビアツリーノード

Page 14: はじめてのAI~ 愛のあるAIを作ろう

ルート

ビヘイビアツリーで最初に実行される親ノード。

何かをするわけではないですが、

ビヘイビアツリーを実行するために

なくてはならないノード。

すべてはここから。

Page 15: はじめてのAI~ 愛のあるAIを作ろう

コンポジット

各ノード間を繋ぎ合わせるために利用可能な唯一のノード。

最も重要とされるのが

『 Sequence 』と『 Selector 』

のふたつのノード。

このノードによりフローの

分岐が可能となる。

Page 16: はじめてのAI~ 愛のあるAIを作ろう

タスク

AI 自体が実行する作業をまとめたノード(紫色)。

主に AI はタスクを自作して、

それらを繋ぎ合わせていくことで

制御を行うことになります。

作業が完了、もしくは失敗と判断

した場合、次のタスクへ移行。

Page 17: はじめてのAI~ 愛のあるAIを作ろう

デコレーター

各ノードにくっ付けて利用可能となるノード(青色)。

条件を設定することが可能で、

必要に応じて子ノードの実行を

強制的に停止したり、

キャンセルすることができる。

Page 18: はじめてのAI~ 愛のあるAIを作ろう

サービス

デコレーターと同じくノードにくっ付けます(緑色)。

タスクとは別作業を並列に何か

してほしいという場合に利用。

AI の状況を監視したい等のケース

によく利用されます。

標準ノードはほとんどない。

Page 19: はじめてのAI~ 愛のあるAIを作ろう

まずはコンポジットとタスク!

何はともあれ、まずはコンポジットとタスクを理解しましょう!

このふたつのノードさえ理解していれば、

とりあえずなんとなくでもビヘイビアツリーは使えます。

不便だなと感じてきたらデコレーターとサービスも併用し、

『あ、こりゃ便利や!』と思ったらそれで十分です。

Page 20: はじめてのAI~ 愛のあるAIを作ろう

フロー制御( Sequence )

Sequence ノードを使うとタスクを左から順番に実行します。

ひとつでも失敗が発生すると

実行を停止して親ノードに

処理を戻します。

全てのタスクが成功を返すと

Sequence も成功を返します。

Page 21: はじめてのAI~ 愛のあるAIを作ろう

フロー制御( Selector )

Selector も左から順にタスクを実行しますが判定が違います。

こちらはひとつでも成功

すると親ノードに処理を

戻してしまいます。

全てのタスクが失敗すると、

Selector も失敗を返します。

Page 22: はじめてのAI~ 愛のあるAIを作ろう

タスクの成功・失敗の判断

分岐に利用するタスクの成功と失敗の判断は、

『 BTTask_Blueprint_Base 』クラスにある『 Finish Execute 』

というノードを使用して判断します。

引数ピン『 Success 』により、

成功・失敗を判断し、タスク実行を

終了して次のタスクへ移行します。

Page 23: はじめてのAI~ 愛のあるAIを作ろう

フロー制御まとめ

『 Sequence 』

・子ノード全てが成功を返す→ Sequence も成功を返す

・子ノードいずれかが失敗を返す→ Sequence も失敗を返す

『 Selector 』

・子ノード全てが失敗を返す→ Selector も失敗を返す

・子ノードいずれかが成功を返す→ Selector も成功を返す

Page 24: はじめてのAI~ 愛のあるAIを作ろう

変数共有の仕組み(ブラックボード)

各ブループリント内でタスク、サービスなどで変数を

利用する場合には『ブラックボード』を使用します。

Page 25: はじめてのAI~ 愛のあるAIを作ろう

変数共有の仕組み(ブラックボード)

『 Set ~』『 Get ~』を使って『 Key 』に指定した変数を作成し、

そこに値を代入、取得すれば AI 内での変数共有が可能に。

Page 26: はじめてのAI~ 愛のあるAIを作ろう

AI 作成の実践

Page 27: はじめてのAI~ 愛のあるAIを作ろう

AI Components

Page 28: はじめてのAI~ 愛のあるAIを作ろう

AI Componentsコンポーネントとして AI 用のものが用意されています。

・ Pawn Sensing コンポーネント

・ Pawn Noise Emitter コンポーネント

・ AI Perception コンポーネント

・ AI Perception Stimuli Source コンポーネント

Page 29: はじめてのAI~ 愛のあるAIを作ろう

Pawn Sensing コンポーネント

AI に Sense (感覚)を与える

ことができるコンポーネント。

『視覚』と『聴覚』を感じる

ことが可能となり、

範囲内にいるアクターを

自動的に検知できるように。

Page 30: はじめてのAI~ 愛のあるAIを作ろう

Pawn Sensing コンポーネント

『 OnSeePawn 』 & 『 OnHearNoise 』イベントで通知。

Page 31: はじめてのAI~ 愛のあるAIを作ろう

Pawn Noise Emitter コンポーネント

『 Make Noise 』で音を実際に発生させる。

『 OnHearNoise 』イベントで AI が音を検知可能。

Page 32: はじめてのAI~ 愛のあるAIを作ろう

AI Perception コンポーネント

Pawn Sensing コンポーネントは Sense (感覚)で、

AI Perception コンポーネントは Perception (知覚)を検知。

知覚はより複雑な感覚検知が可能となる。

AI Perception Stimuli Source コンポーネントを使うと

登録する Sense Class を指定することができる。

Page 33: はじめてのAI~ 愛のあるAIを作ろう

AI Perception コンポーネント

オリジナルの感覚クラスが作成可能で汎用性重視。

デフォルトで用意されている『 AI Sight Config 』クラスでは

敵、味方、それ以外を見分けることが可能。

更に視界に入ったアクターだけではなく見失った場合でも

そのアクターを通知することができる。

Page 34: はじめてのAI~ 愛のあるAIを作ろう

AI Perception コンポーネント

Pawn Sensing コンポーネントと比べて、直感的ではない。

使い方もドキュメントは存在せず、ソースコードを読んで

理解できる人でないと

使いこなすのは難しい。

Epic Games が拡張前提の設計で

作っているようなので今後に期待大。

Page 35: はじめてのAI~ 愛のあるAIを作ろう

Environment Query System

Page 36: はじめてのAI~ 愛のあるAIを作ろう

EQS (環境クエリーシステム)

レベル上から情報を収集し、必要な情報を AI へと

回答(クエリー)を与えてくれるシステム。

例えば、広いマップ上のどこへ移動するのが最適か?

敵に囲まれた時、どこへ逃げるのが最適か?

なるべく弱ってて、なるべく近くにいるのはどの敵か?

簡単に情報を収集してスコア形式で受け取ることが可能。

Page 37: はじめてのAI~ 愛のあるAIを作ろう

EQS (環境クエリーシステム)

プレイヤーから逃げるのに、最適な位置を探しだす EQS の例。

距離やトレース情報、

内積による角度計算を行い、

その位置へは到達可能かを

EQS が判断してスコア化する。

スコアが最も高いものを利用する。

Page 38: はじめてのAI~ 愛のあるAIを作ろう

EQS の視覚化

『 EQSTestingPawn 』を作成して配置するとスコアを可視化可能。

Page 39: はじめてのAI~ 愛のあるAIを作ろう

EQS の要素(ジェネレータ)

アイテムと呼ばれる、位置やアクターを生成するモノ。

ジェネレータが生成した、アイテムをスコア付けして、

最も高いものをビヘイビアツリー上で受けとることが可能。

EQS において最も重要な部分。

Page 40: はじめてのAI~ 愛のあるAIを作ろう

実際にスコアをつけるためのテスト基準。

このテストで最も良いスコアをだしたアイテムが

結果としてビヘイビアツリーへと返る。

距離や内積やトレースなどの標準のテストがあり。

テスト次第で AI が賢くなったりバカっぽくなったりする。

EQS の要素(テスト)

Page 41: はじめてのAI~ 愛のあるAIを作ろう

EQS の要素(コンテキスト)

ジェネレータやテストで基準となる何か。

例えばプレイヤーを基準に動きたいという場合には、

プレイヤーをコンテキストとして AI に与えて、

プレイヤー位置などを EQS の判断材料とすることが可能。

コンテキストはアクターとして取得できれば何でも OK です。

Page 42: はじめてのAI~ 愛のあるAIを作ろう

ゲームプレイデバッガー

Page 43: はじめてのAI~ 愛のあるAIを作ろう

ゲームプレイデバッガー

実行中に『’』キーを押すと AI のデバッグ機能が起動。

※英語キーボードのみ。日本語キーボードはコンソールコマンド『 EnableGDT 』をプレイ中に入力するとゲームプレイデバッガーが起動します。

Page 44: はじめてのAI~ 愛のあるAIを作ろう

ゲームプレイデバッガー

ビヘイビアツリーや EQS のスコアやナビゲーション情報など、

あらゆるものを視覚化。

リアルタイムに確認可能なので、

実行しながら AI の動作検証が

可能となっています。

一部エディタの環境設定が必要。

Page 45: はじめてのAI~ 愛のあるAIを作ろう

まとめ

UE4 の AI 機能を軽くみてきました。

実はまだ他にも AI の機能があります。(群集 AI とか)

UE4 の AI は今もまだ発展途上という感じですが、

一部は既にかなり実用的なものばかりです。

ぜひこれらの AI 機能を使って可愛い AI を作ってあげてください!

Page 46: はじめてのAI~ 愛のあるAIを作ろう

ご静聴いただき、ありがとうございました!