勉強会のレポート(メモ)です。
参加したのはこちら、「Event for Diverse Game Engineers #4 」です。
edge.connpass.comハッシュタグ : #TokyoEdge2019
- タイムスケジュール
- #1「UE4のためのより良いゲーム設計を理解しよう!」
- #2 「基礎から学ぶ!UE4でC++を交えたAI開発、興味ないですか?」
- #3 「キャリアプラン?何それおいしいの?」
- LT1. 「初海外で英語が出来なくてもノリで行く、GDC3日間の旅」
- LT2. 「UnityでAddComponentするだけで3DViwerを作れた話」
- LT3. 「できる! VRM for UE4」
- タイムライン
タイムスケジュール
時間 | 内容 |
---|---|
13:15 | 開場 |
13:30-13:40 | 挨拶とインターネットイニシアティブ様より会場説明と会社紹介 |
13:45-14:40 | 「UE4のためのより良いゲーム設計を理解しよう!」 |
14:40-14:50 | 10分休憩 |
14:50-15:40 | 「基礎から学ぶ!UE4でC++を用いた交えたAI開発、興味ないですか?」 |
15:40-15:50 | 10分休憩 |
15:50-16:25 | 「キャリアプラン?何それおいしいの?」 |
16:25-16:35 | 10分休憩 |
16:35-16:50 | 「初海外で英語が出来なくてもノリで行く、GDC3日間の旅」 |
16:50-17:05 | 「UnityでAddComponentするだけで3DViwerを作れた話」 |
17:05-17:20 | 「できる! VRM for UE4」 |
17:20-17:25 | 閉会の挨拶 |
17:25-17:40 | 会場片付け |
18:00-20:00 | 懇親会 |
#1「UE4のためのより良いゲーム設計を理解しよう!」
まずはゲーム設計について
設計における基本
まずは何を考えて設計するのか。
「再利用性」、「汎用性」、「使いやすさ」、「依存関係の低さ」
これらを考えないとゲーム開発後半で仕様変更や追加に対応できなくなってします。
ゲームにおける前提として、パフォーマンスを考えないといけない。
パフォーマンスと設計は両立できない。
PCならまだしも、モバイルやコンシューマではきつい。
まずはよい見本を探す
良い設計を覚えるには良い見本を見ましょう
UE4で良い見本となるのは「Action RPG」「Robo Recall」です
後は過去の資料など
設計思想についてUE4においてはGameplay Frameworkがあります。
これらを使いこなすといいでしょう。ドキュメントを読んでおくといいです。
設計における3つの考え方
オブジェクト指向
一般的なソフトウェア設計手法
コンポーネント指向
オブジェクト指向と両方同時に使われることが多い。
原則としてプリミティブな機能を1つ持たせる、そして簡単に付け外しできる。
メッセージ
メッセージを飛ばして情報をやり取りする
これは依存関係をもたない、お互いがお互いをしらなくてもよいというのが特徴です。
MVCモデル
UE4では既に近い設計がされています。
基本的にこれらは一方向にのみ飛ばす。
再利用性
一定のルールを守る必要があります。これを守ったのがコンポーネント。
なのでコンポーネントを増やしていくことによって再利用性が高くなります。
ルール
・外の処理には依存させない
・ひとつのコンポーネントにはシンプルな機能をひとつ
・簡単に取り外しがきくようにする 外しても動くように
・外の処理を利用する場合、メッセージを使う
UE4では再利用しやすいものがたくさんあります
アクターコンポーネントなど
最初から再利用前提で作らなくていいです。
作った後再利用可能かを検討しましょう。
攻撃処理やアイテム管理など、うまく切り取れれば後で使いまわすことができます。
依存関係
設計するうえで悩む部分、何かに依存するということは設計の幅を狭めてしまう。
UE4で依存関係を確認するにはリファレンスビューワーで見れます。
この依存関係をなるべく断ち切る。
何も考えないと後から切れなくなってしまうことも。
対処法
・複雑なアセットを参照しない
多くのアセット情報を持つブループリントを直接参照しないこと
・キャストをなるべくしない
ブループリントはかなり手軽に他の情報にアクセスできるが、これによって依存関係が簡単に増えてしまう。
・同じボリュームの変数を作成しない、
基本戦略
メッセージを使うことを考えましょう。インターフェースを使いましょう。
カプセル化
インターフェースを使うことでオブジェクト間が抽象化されることで、カプセル化され依存関係が発生しません。
タグの利用
タグというのは単純な文字列。
文字なので依存関係が発生しない。パラメータの情報を持たせることもできる。
Gameplay tag
複雑なタグを管理したいときに使いましょう。
ハード参照とソフト参照
参照は2つあります。リファレンスビューワーで確認可能。
ハード参照
通常は全てハード参照。
依存関係にあるものが全てメモリに展開されます。
できればハード参照させたくないが、規模が小さいものやインディーゲーム程度なら大丈夫。
ソフト参照
こちらはちょっと特殊。
AssetManager
これをつかうことによってどのように参照されているかを知ることができます。
この辺を意識することでロード時間を短縮することができます。
イベントドリブン
イベントが発行されて、それで処理を行うという考え。
イベントが発生するまでは処理が行われない。
Tick依存による設計
ループの中で処理をするやり方。昔ながらのやりかたで設計が楽。
しかしTick自体は重たい。ただのループではなく、裏でいろいろやっているので重い。
なのでTickをまずは切りましょう、
じゃあTickなしでどうするのか、これはイベントドリブンで解決します。
ブループリントでは使いやすいが、C++では使いづらい。
BPとC++
C++のメリット、BPのメリットはたくさんあります
よくある誤解としてBPは本当に遅いのか。
これは半分正解で半分間違い。
実際はC++で作った機能をブループリントで呼び出すのは問題ない。
まずはC++にする前にBPがネックになっているのか、プロファイラーで確認しましょう。
ハードコード
C++上で値を直接書き込むこと。これをすると調整を一気にやりにくくなる。
公開すればいいというものではないが、プログラマー以外が触るのが面倒
C++からのアセット参照に注意しましょう。
C++ではFinderを利用するとメモリを消費したり起動時間が伸びたりします。
理想的な設計を目指すために
依存関係を少なく、取り回ししやすいようにする
・アクターは単体で動作するようにする
・キャラクターのAIはUE4の優秀なAI Controllerクラスを使いましょう。簡単に変更することができます。
・依存部分を外部から注入
依存部分はアクターが抱えないようにする
外部へリクエストする、または外から与えられるようにする
まとめ
設計のお手本を見ましょう
設計指向を理解する
再利用性をあげる
依存関係に注意
イベントドリブンを意識する
#2 「基礎から学ぶ!UE4でC++を交えたAI開発、興味ないですか?」
基礎から学ぶ!UE4でC++を交えたAI開発、興味ないですか? - Speaker Deck
皆さんはAIの開発はどのように行っていますか?
今回はキャラクターAIをやっていきます。
キャラクターAIは人間のような知性を持つかのように行動するAI。
知能のリアリティとは何か
ユーザが期待する行動をAIに蓄積させる飛鳥がある
感情を表現するための演技
環境を認識していいるように見せたり
AIのボキャブラリを充実させることでゲーム自体の没入感が増します
反射
敵からの攻撃を避けたり、回復させたり、人間のような反射行動をとらせる。
群れ制御
NPC同士の衝突、障害物の回避をさせる。環境や相手を認識させること。
じゃあどういうアルゴリズムを使えばいいのか。
いろいろありますがUE4ではステートベースとビヘイビアベースが主になります。
ステートベースAI
現在の状態や行動を元にして、設定してある遷移条件で次の行動を決定する。
制御の切り替えは高速だが、拡張性は乏しい。
よくあるのがEnumで制御すること。
ビヘイビアベース
ノード配置し今取れる行動で次の行動を考えること。
UE4でのAI開発に使えるもの
・AI Controller
・Behaviour Tree
・Black Board
AIが収集したデータ、敵の位置や優先目標などを保存しておく場所。
・Navigation Mesh
経路探索
・EQS
複数の条件式を与えて、最もスコアの高い情報を求めてくれる機能
・AI Perception
センサをつけること
UE4でのノードの種類
・タスク
ノードの末端
行動をつかさどるノードのこと
・コンポジット
タスクの実行順番を決める中間ノード
・サービス
子ノードが実行されている間、指定した毎秒にサービスノード内の処理を実行することができる
・デコレーター
条件式として使用できるノード
サービスとデコレーターは複数個つけることができます
・ルート
全ノードの頂点
ノードは左から右へ処理されていきます。
よむねこで作ったAIのTipsをQittaで公開しています。
もっと詳しく知りたい時は三宅さんの本を読みましょう。
おそらくこれ
人工知能の作り方 ――「おもしろい」ゲームAIはいかにして動くのか
#3 「キャリアプラン?何それおいしいの?」
キャリアプランとは、
キャリアとは取り組んだ結果ではなく、労働の継続的なプロセスとどういう風に生きていくかという生き方そのもの。
みなさんに伝えたいこと
その1 姿勢
・最初は技術バカを目指してください
ただし、真正面からは戦わない ニッチ分野や迂回戦術でいきましょう。
・選んだ分野でも、さらに範囲を絞るのもアリ
キャラクターモーションの中でも、二足歩行のみやモンスターのみなど。
そのうえで根っこを抑える。
その分野の第一人者、有名人になる。
いないと困る人、全部を握っている人を目指す。
・技術者は管理職を嫌う
しかし管理者になると、予算・人員・権限がもらえます。
やりたいことができるようになります。
・変化を恐れない、受け入れる
仕事は変わる、上司は変わる、会社も変わります。
一つの分野でトップをとっても、10年後にはその分野自体消えるかもしれない。
生き残れるのは強いものではなく変化に適応できるもの。
・複数の選択肢を持つ
複数のプロジェクト、部署を兼任。
社内、社外、業界の仕事とやっていきましょう。
同人、ボランティア 十分得るものはあります
とはいえ何でもOKではない
その2どう選択するか
・好きなことをやろう
すきなことをやる人は本当に強い
しかし、それが金になるのか将来ためになるのか悩むことがあるのかもしれない
未来なんか誰にもわからない、気にしないでやろう
・人に頼まれたことをやろう
頼まれるということは、他の人よりも自分が適任と思われているということ。
自分の実力が発揮できることであれば、好きなことでなくともやってみるといい、
少なくとも、客観視での検証は終わっている。
またやり始めたら、まるで自分が望んでいたかのようになる。
・事実は変わらない
あなたの希望や望みは現実世界(プロジェクト)に何一つ影響がない。
金や名誉欲につられるとまず失敗する。
自分ひとりで解決できることは失敗する要因にはならない
最終的に目指すべきゴール
・消えていくものに固執しない
金とか地位とか友人とかどうでもいい
vimとかemacsとかどうでもいい
・最終的には名前しか残らない
作品、本、Webサイトなど。なので悪いことをしてはいけない。
名を残すことが大事。
その為にも今の健康メンタルが最優先です。
それをやった結果、未だに平社員、でも幸せです。
LT1. 「初海外で英語が出来なくてもノリで行く、GDC3日間の旅」
本人がキャンプのため動画のみのLT。
動画は後でYoutubeにアップされるそうです。
LT2. 「UnityでAddComponentするだけで3DViwerを作れた話」
スマホ向けの3Dゲームで、3Dキャラクターを表示するビューワーが欲しい時。
Unityは使えるがサイエンスなものは苦手という方に。
スライドが公開予定なので、詳細はそちらをどうぞ。
公開されました。
おまけ リリースするまえにやっておいた方がいいこと
勢いが徐々に止まるようなバネをいれる。
3Dモデルが長物などを持っている場合は、対象物に合わせてスケールする必要がある。
LT3. 「できる! VRM for UE4」
できる! VRM for UE4 / VRM4U-UE4 - Speaker Deck
UE4でVRMを扱うときはVRM4Uを使います。
UniRVのようなもの。
インポートするだけで使えます。そういうツールです。
GitHubで公開しているツールです。
なのでUE4ユーザもVRM界隈を盛り上げていきましょう。Unityでよくね
タイムライン
急遽、サンフランシスコ国際空港で撮り直ささましたw
— 荻野雄季@GDC2019 (@YuukiOgino) March 21, 2019
案内の音声が入る、斬新なLTになりそうです
16分くらいかな、だいぶ端折らないといけないけなかったので、だいぶ説明不足です。
日本に帰国後、詳細な説明をのせたのを撮り直してYouTubeにアップします #TokyoEdge2019
良い設計をするためには良い見本を探す
— ダリア (@daria_nicht) March 23, 2019
UE4では「Action RPG」や「Robo Recall」のプロジェクトがおすすめ
どちらも無料でDL可能
困ったときに非常に参考になる
#tokyoedge2019
設計における3つの考え方
— ダリア (@daria_nicht) March 23, 2019
・オブジェクト指向
カプセル化、継承、多態性の3つの特徴を持ち、ゲームに限らず広く普及している設計手法
・コンポーネント
原則としてプリミティブな機能を一つだけ持つという考え方
簡単につけ外しができるのが特徴。
#tokyoedge2019
#TokyoEdge2019 pic.twitter.com/0wRYmFzYzZ
— ヒラカワ@サイバーコネクトツー (@hirakawa_CC2) March 23, 2019
#tokyoedge2019 / “UE4 ブループリント インターフェースについて - Let's Enjoy Unreal Engine” https://t.co/cuOuYhaUSG
— prototechno (@prototechno) March 23, 2019
アクターは独立させる
— 荒川新一 (@ShinichiArakawa) March 23, 2019
ポーズとかは入力側で制御する#TokyoEdge2019 pic.twitter.com/pvpD2F1QXV
つぎは今日イチ楽しみにしてた、ろっさむさんによるue4でcppでAI!#tokyoedge2019 pic.twitter.com/ryuuyeDptv
— おかわり はくまい (@OkawariHakumai) March 23, 2019
知能のリアリティとは?
— alwei (@aizen76) March 23, 2019
敵が近くにいる時は間合いをとったりする。
感情を表現するための演技?
視線追跡で環境を認識しているように見せたり。
AIのボキャブラリーを充実させて感情表現の伴った行動を実現させることでゲーム自体の盛り上がりが変化する。
#TokyoEdge2019
UE4でAIを実装するために用意されているもの。
— alwei (@aizen76) March 23, 2019
AI Controller
ビヘイビアツリー
ブラックボード
ナビゲーションメッシュ
EQS
AI Perception#TokyoEdge2019
本格的にやるなら始めからc++で書く
— 荒川新一 (@ShinichiArakawa) March 23, 2019
#TokyoEdge2019 pic.twitter.com/TdO28QHfGm
取り組む姿勢
— 荒川新一 (@ShinichiArakawa) March 23, 2019
最初は技術バカを目指す
●スキルで殴る
●馬鹿正直にやらず人の少ない分野で戦う
●さらに狭く特化させる
#TokyoEdge2019
根っこを抑える。
— alwei (@aizen76) March 23, 2019
その分野の第一人者になる、有名になる。
居ないと困る人・全部を握ってる人。
管理職も嫌がらない。(予算とか人員とか権限とか得られるものも多い) #TokyoEdge2019
好きな事をやってる人は強い!!#TokyoEdge2019
— akoto (@_akoto_) March 23, 2019
同人誌の宣伝!入門XAudio2!まだ予約数10!! #TokyoEdge2019
— alwei (@aizen76) March 23, 2019
あっ、始まったのね
— 荻野雄季@GDC2019 (@YuukiOgino) March 23, 2019
本人はここです(ふもとっぱらキャンプ場) #TokyoEdge2019 pic.twitter.com/wZS5CltPmR
Unity 3DViewerの実装終えてからの所感
— Takashi Shibahara (@digitasi) March 23, 2019
操作に大きな速度が入ったときのカメラ移動制限対策や
モデルの大きさにあわせてカメラ内に全部が収まるような補正も必要#tokyoedge2019
すごい!
— おかわり はくまい (@OkawariHakumai) March 23, 2019
VRMをドラッグアンドドロップでue4に簡単にインポートできる!
シェーディングも違和感なさげ。#tokyoedge2019
今日は色んな方に助けて頂いてなんとか無事終了しました。久々すぎて手際悪くてごめんなさい、でも楽しんで頂けたならよかったです!登壇してくださった方、お手伝い頂いた方ありがとうございました〜!
— ろっさむ (@4_mio_11) March 23, 2019
また開催しようと思うのでよろしくお願いします〜 #TokyoEdge2019
間違っている箇所、消してほしいツイートがありましたらコメントにお願いします。