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

    どの程度高速化されたのか 現状で使うとしてどのような場面に使いたいか www.cocone.co.jp 2
  2. What’s DOTS? www.cocone.co.jp Unity に今後実装される(予定)の 機能。 Data-Oriented Tech Stack の略称。

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

    内 でのデータ 配 置 と、 CPUによるデータアクセス 方 法 を 簡単に定義することができる。 マルチスレッドコードを 生 成 す る簡単な方法を提供。 高 速なネイティブコードを生 成 するために使用。 BURST www.cocone.co.jp 6
  4. 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
  5. 9 What’s ECS? さよなら、Monobehaviour 主題の通り (完全に捨てるわけではないが) やろうと 思 えば、 本

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

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

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

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

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

    処理に 名前をつける ) WithNone 指定したコンポーネントデータが含ま れる場合、処理を実行しない。 WithoutBurst バーストコンパイル無効化 WithStructuralCha nges 処理中にEntity 関連の変更がある場 合に必要 よく使う4点。 14
  11. 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
  12. www.yourwebsite.com 普通にプロトタイプを作ってみた時の課題点 1 FPSが平均して5〜8 (Win / Mac) シーンの 切 り

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

    初 期 化 用 ゲームオブジェクトを 作 成 (サブシーンに追加したものは自動的にEntity化) IConvertGameObjectToEntity を継承したスクリプ トを追加。 必要なパラメータをインスペクターで入力して完了。 サブシーンに追加したものは全て Entityに変換される。
  16. 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 で注入!
  17. www.cocone.co.jp 26 そんな感じでテストしたい項目を追加 4 項目 • 3Dキャラクタアニメーション関連 • ネットワーク周りの処理 •

    Physics 関係 • 重力 • 慣性 • ロープ • 無 重 力 • 操作関係 • カメラ 処 理 などなど……
  18. 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以外平均値