Upgrade to Pro — share decks privately, control downloads, hide ads and more …

cocone Tech Talk vol.5 - Unity Dotsを使ってみた

7ed7c8dbd917b000d5eb633e3519c123?s=47 cocone
March 01, 2022

cocone Tech Talk vol.5 - Unity Dotsを使ってみた

7ed7c8dbd917b000d5eb633e3519c123?s=128

cocone

March 01, 2022
Tweet

More Decks by cocone

Other Decks in Technology

Transcript

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

  2. 2 Introductions 01 02 03 04 05 DOTSに関する簡単な説明 データ指向とECSの簡単な説明 今回テストした内容について

    どの程度高速化されたのか 現状で使うとしてどのような場面に使いたいか www.cocone.co.jp 2
  3. www.cocone.co.jp 01 DOTSに関する簡単な説明 What’s DOTS? 3 3

  4. www.cocone.co.jp 4 4

  5. What’s DOTS? www.cocone.co.jp Unity に今後実装される(予定)の 機能。 Data-Oriented Tech Stack の略称。

    データ指向型のPackage群。 DOTSに 含 まれるECSなどで、 CPUからメモリへのアクセスを 効 率 化 することが目的。 1 2 3 5 5
  6. 6 What’s DOTS? PICK UP ECS ! ECS JOBS メモリ

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

  8. 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
  9. 9 What’s ECS? さよなら、Monobehaviour 主題の通り (完全に捨てるわけではないが) やろうと 思 えば、 本

    当 にバイバイMonoできるが 非 推 奨 。 今回は普通に使います。 www.cocone.co.jp 9
  10. 0 What’s ECS? 基本的な作り www.cocone.co.jp SystemBase や ComponentSystem などを継承しEntityを作成する。 クラスの属性に、UpdateAfter

    などを 追 加 してクラスのOnUpdateがどのタ イミングで呼ばれるか制御を行う。 OnUpdate 内のFor Each の引数が 存 在 すればこの 処 理 が 行 われる。 この引数は、ComponentData を継承 して作成されたもの限定。 1 2 3 10
  11. 1 What’s ECS? ComponentData の注入 www.cocone.co.jp Player Character Translation Rotation

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

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

    Inputs NpcCharacter Translation Rotation NpcTag Entity が NpcTag を持っていない時 && Entity が Translation を持っている時 に実行される。 13
  14. 9 What’s ECS? さまざまなオプション www.cocone.co.jp 関数名 説明 WithName デバッグ用に使うことが多い (

    処理に 名前をつける ) WithNone 指定したコンポーネントデータが含ま れる場合、処理を実行しない。 WithoutBurst バーストコンパイル無効化 WithStructuralCha nges 処理中にEntity 関連の変更がある場 合に必要 よく使う4点。 14
  15. 9 What’s ECS? 初期化のサンプル www.cocone.co.jp 15

  16. 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
  17. www.cocone.co.jp What we have tested 17 03 今回テストした内容について

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

    (+サクサク動く)
  19. www.yourwebsite.com 普通にプロトタイプを作ってみた時の課題点 1 FPSが平均して5〜8 (Win / Mac) シーンの 切 り

    替 えが 長 すぎ る。 ユーザーが好き勝 手に服 装 を変更しまくる Phisicsがやたら 重 い( 気 がする) (インスタンスを作るとさらにFPS低 下) 単純にいつもの作り方に飽きた 1 2 3 4 5
  20. 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
  21. 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を削除 解決方法
  22. www.cocone.co.jp 22 ゲームシーンの初期化 4 GameObject に紐づけたインスタンスから初期化 1 2 3 サブシーンに

    初 期 化 用 ゲームオブジェクトを 作 成 (サブシーンに追加したものは自動的にEntity化) IConvertGameObjectToEntity を継承したスクリプ トを追加。 必要なパラメータをインスペクターで入力して完了。 サブシーンに追加したものは全て Entityに変換される。
  23. www.cocone.co.jp 23 実際に利用したソースコード 4

  24. 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 で注入!
  25. www.cocone.co.jp 25 InitSystemを作成しキャラを生成 4

  26. www.cocone.co.jp 26 そんな感じでテストしたい項目を追加 4 項目 • 3Dキャラクタアニメーション関連 • ネットワーク周りの処理 •

    Physics 関係 • 重力 • 慣性 • ロープ • 無 重 力 • 操作関係 • カメラ 処 理 などなど……
  27. 04 どの程度高速化されたのか www.cocone.co.jp How fast was it?? 27

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

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

    12 Mac + Burst 平均FPS : 17 ~ 29 Mac + Burst + ECS 平均FPS : 47 ~ 60
  30. 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以外平均値
  31. 05 現状で使うとしてどのような場面に使いたいか www.cocone.co.jp What kind of situations would you like

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

  33. www.cocone.co.jp 33 参考文献など 4 各種ページ名等 •UnityDots公式ページ •SpatialOS •Unity DOTS 入門

    (1) - 従来のUnityの設計をDOTSの設計に変換 •Rival Dots
  34. www.cocone.co.jp 34 終わり 4 ご静聴ありがとうございました♪