Slide 1

Slide 1 text

UNITY DOTS 使ってみた www.cocone.co.jp 1 1

Slide 2

Slide 2 text

2 Introductions 01 02 03 04 05 DOTSに関する簡単な説明 データ指向とECSの簡単な説明 今回テストした内容について どの程度高速化されたのか 現状で使うとしてどのような場面に使いたいか www.cocone.co.jp 2

Slide 3

Slide 3 text

www.cocone.co.jp 01 DOTSに関する簡単な説明 What’s DOTS? 3 3

Slide 4

Slide 4 text

www.cocone.co.jp 4 4

Slide 5

Slide 5 text

What’s DOTS? www.cocone.co.jp Unity に今後実装される(予定)の 機能。 Data-Oriented Tech Stack の略称。 データ指向型のPackage群。 DOTSに 含 まれるECSなどで、 CPUからメモリへのアクセスを 効 率 化 することが目的。 1 2 3 5 5

Slide 6

Slide 6 text

6 What’s DOTS? PICK UP ECS ! ECS JOBS メモリ 内 でのデータ 配 置 と、 CPUによるデータアクセス 方 法 を 簡単に定義することができる。 マルチスレッドコードを 生 成 す る簡単な方法を提供。 高 速なネイティブコードを生 成 するために使用。 BURST www.cocone.co.jp 6

Slide 7

Slide 7 text

www.cocone.co.jp What’s ECS? 7 02 データ指向とECSの簡単な説明

Slide 8

Slide 8 text

8 What’s Data Oriented Design? データ指向型設計 CPUとメモリの処理速度は、すごいズレがある。 その処理の差を埋めるために、メモリを考慮して プログラムを 作 成 する 設 計 方 法 。 つまり、L1キャッシュのキャッシュラインへ うまくデータが載るように設計を行う。 www.cocone.co.jp Main Memory L3 Cache L2 Cache L1 Cache CPU / Registers 1 cycle 12 cycle 200More :( 36 cycle Core i7-4770 8

Slide 9

Slide 9 text

9 What’s ECS? さよなら、Monobehaviour 主題の通り (完全に捨てるわけではないが) やろうと 思 えば、 本 当 にバイバイMonoできるが 非 推 奨 。 今回は普通に使います。 www.cocone.co.jp 9

Slide 10

Slide 10 text

0 What’s ECS? 基本的な作り www.cocone.co.jp SystemBase や ComponentSystem などを継承しEntityを作成する。 クラスの属性に、UpdateAfter などを 追 加 してクラスのOnUpdateがどのタ イミングで呼ばれるか制御を行う。 OnUpdate 内のFor Each の引数が 存 在 すればこの 処 理 が 行 われる。 この引数は、ComponentData を継承 して作成されたもの限定。 1 2 3 10

Slide 11

Slide 11 text

1 What’s ECS? ComponentData の注入 www.cocone.co.jp Player Character Translation Rotation PlayerTag Inputs プレハブから作成したEntityに対して、 各種必要なComponentDataの注入を行う。 この場合、プレイヤーを作成しているので、 ・操作するためのEntity Inputs ・Player 識別用の PlayerTag を追加している。 11

Slide 12

Slide 12 text

2 What’s ECS? プレイヤーとNPCの差① www.cocone.co.jp Player Character Translation Rotation PlayerTag Inputs NpcCharacter Translation Rotation NpcTag 全てのEntity のうち Translation を持っているもの は実行される。 12

Slide 13

Slide 13 text

3 What’s ECS? プレイヤーとNPCの差② www.cocone.co.jp Player Character Translation Rotation PlayerTag Inputs NpcCharacter Translation Rotation NpcTag Entity が NpcTag を持っていない時 && Entity が Translation を持っている時 に実行される。 13

Slide 14

Slide 14 text

9 What’s ECS? さまざまなオプション www.cocone.co.jp 関数名 説明 WithName デバッグ用に使うことが多い ( 処理に 名前をつける ) WithNone 指定したコンポーネントデータが含ま れる場合、処理を実行しない。 WithoutBurst バーストコンパイル無効化 WithStructuralCha nges 処理中にEntity 関連の変更がある場 合に必要 よく使う4点。 14

Slide 15

Slide 15 text

9 What’s ECS? 初期化のサンプル www.cocone.co.jp 15

Slide 16

Slide 16 text

9 What’s ECS? これらを駆使して作るのがECS www.cocone.co.jp Player Character Translation Rotation PlayerTag Inputs Animation Clip Camera Physics Action などなど 1 2 3 指定したコンポーネントデータをEntityが持っている 場合にのみ処理が行われる。 上記の組み合わせによって処理したくないEntityは WithNone で除外。 そして小さい関数ブロックがたくさんできる。 16

Slide 17

Slide 17 text

www.cocone.co.jp What we have tested 17 03 今回テストした内容について

Slide 18

Slide 18 text

www.cocone.co.jp 18 32人で遊ぶ3Dスマホアクションゲーム 4 この 前 提 条 件 をクリアしたかったのである。 (+サクサク動く)

Slide 19

Slide 19 text

www.yourwebsite.com 普通にプロトタイプを作ってみた時の課題点 1 FPSが平均して5〜8 (Win / Mac) シーンの 切 り 替 えが 長 すぎ る。 ユーザーが好き勝 手に服 装 を変更しまくる Phisicsがやたら 重 い( 気 がする) (インスタンスを作るとさらにFPS低 下) 単純にいつもの作り方に飽きた 1 2 3 4 5

Slide 20

Slide 20 text

www.cocone.co.jp 20 なのでDOTS を利用して作成する 4 利用した各種パッケージ 以 下 の 通 り、 大 体 最 新 版 を 利 用 している。 scriptablebuildpipiline はAssetBundleビルド用。 ※DOTS を利用する場合、RenderPipline の使用は必須。 名前 バージョン Animation 0.9.0-preview.6 Unity NetCode 0.6.0-preview.7 Unity Physics 0.6.0-preview.3 Hybrid Renderer 0.11.0-preview.44 Entities 0.17.0-preview.42

Slide 21

Slide 21 text

www.cocone.co.jp 21 なのでDOTS を利用して作成する 4 導入にあたっての注意 System.Memory と com.unity.searcher@4.7.0 でバッティングする。 Multiple precompiled assemblies with the same name System.Memory.dll included or the current platform. Only one assembly with  the same name is allowed per platform. (Assets/Plugins/System.Memory/lib/net45/System.Memory.dll) 1.Library/PackageCache 内のSearcher をコピーして削除 2.Package直下にベタ貼り 3.Searcher内のSystem.Memory.dll,System.Buffer.dll, System.Runtime.CompilerService.Unsafe.dllを削除 解決方法

Slide 22

Slide 22 text

www.cocone.co.jp 22 ゲームシーンの初期化 4 GameObject に紐づけたインスタンスから初期化 1 2 3 サブシーンに 初 期 化 用 ゲームオブジェクトを 作 成 (サブシーンに追加したものは自動的にEntity化) IConvertGameObjectToEntity を継承したスクリプ トを追加。 必要なパラメータをインスペクターで入力して完了。 サブシーンに追加したものは全て Entityに変換される。

Slide 23

Slide 23 text

www.cocone.co.jp 23 実際に利用したソースコード 4

Slide 24

Slide 24 text

www.cocone.co.jp 24 ゲームシーンの初期化 4 クラスの構造 SceneInitAuthoring :Mono,IConvertGameObject Entity,IDeclareReferencedPr efabs + Convert : void + DeclareReferencedP refabs : void SceneInitData :IComponentData + float FixedRate + RigitTrans MCSpwn + RigitTrans NPCSpwn + Entity MCPrefab + Entity NPCPrefab +float3 CameraForward SceneInitData コンポーネントを SceneInitAutoring で注入!

Slide 25

Slide 25 text

www.cocone.co.jp 25 InitSystemを作成しキャラを生成 4

Slide 26

Slide 26 text

www.cocone.co.jp 26 そんな感じでテストしたい項目を追加 4 項目 • 3Dキャラクタアニメーション関連 • ネットワーク周りの処理 • Physics 関係 • 重力 • 慣性 • ロープ • 無 重 力 • 操作関係 • カメラ 処 理 などなど……

Slide 27

Slide 27 text

04 どの程度高速化されたのか www.cocone.co.jp How fast was it?? 27

Slide 28

Slide 28 text

www.cocone.co.jp 28 比較方法 4 3プロジェクトで検証 1 ECS等関係なしのプロジェクト 2 ECSプロジェクト 3 ECS+Burstのプロジェクト

Slide 29

Slide 29 text

www.cocone.co.jp 29 ※ガチガチの計測ではないです。 4 ※カメラ内にとらえたポリゴン数の多少のずれはあります。 Mac 平均FPS : 6 ~ 12 Mac + Burst 平均FPS : 17 ~ 29 Mac + Burst + ECS 平均FPS : 47 ~ 60

Slide 30

Slide 30 text

www.cocone.co.jp 30 ※ガチガチの計測ではないです。 4 各種パラメータにかなりの差が…… プロジェクト MaxFPS MinFPS CPU Render Thread Mono(通常) 12 6 116.4ms 129.1ms Mono + Burst 29 17 36.2ms 16.4ms ECS + Burst 60 47 17.1ms 10.9ms Burstがすごいのでは? FPS以外平均値

Slide 31

Slide 31 text

05 現状で使うとしてどのような場面に使いたいか www.cocone.co.jp What kind of situations would you like to use it in? 31

Slide 32

Slide 32 text

www.cocone.co.jp 32 DOTS関係は変更が多いことに留意 4 おすすめ項目 •ネットワーク関係 •通信処理 •同期処理 •イベントを発行してmono側へ •Physicsの計算関係

Slide 33

Slide 33 text

www.cocone.co.jp 33 参考文献など 4 各種ページ名等 •UnityDots公式ページ •SpatialOS •Unity DOTS 入門 (1) - 従来のUnityの設計をDOTSの設計に変換 •Rival Dots

Slide 34

Slide 34 text

www.cocone.co.jp 34 終わり 4 ご静聴ありがとうございました♪