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

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

cocone
March 01, 2022

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

cocone

March 01, 2022
Tweet

More Decks by cocone

Other Decks in Technology

Transcript

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

    View Slide

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

    View Slide

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

    View Slide

  4. www.cocone.co.jp 4
    4

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

  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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

  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

    View Slide

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

    View Slide

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

    View Slide

  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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

  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

    View Slide

  21. www.cocone.co.jp 21
    なのでDOTS を利用して作成する
    4
    導入にあたっての注意
    System.Memory と [email protected] でバッティングする。
    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を削除
    解決方法

    View Slide

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

    View Slide

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

    View Slide

  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 で注入!

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

  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以外平均値

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide