目录

  • 前言
  • DOTS是什么?
    • 核心Package
    • 游戏功能相关Package
  • 谁需要关注DOTS?
  • DOTS可以应用到哪些地方?
  • 为什么需要DOTS

前言


本文是Metaverse大衍神君的《DOTS之路》系列课程的学习笔记

DOTS是什么?


Data-Oriented Technology Stack(面向数据的技术栈)

从字面意义上来说DOTS是面向数据的技术栈

实际上Dots是由Unity的五个核心Package组成
它定义了一种全新的Unity代码编写模型
并在这些核心包之外提供了额外的游戏功能相关的Package和工具
是Unity下面向数据设计与编程的一整套解决方案

核心Package


  • The C# Job System:

    • 提供快速、安全和使用简单的编写多线程方式
  • The Brust Compiler
    • 优化C#代码的编译器
    • 可以编译生成比通过Mono或IL2CPP更快的代码
    • 并不止为DOTS而存在,同样可以编译Unity中的任何代码
  • Unity Mathematic
    • 一套可以在Job System中使用的数学库
    • 在Brust编译的代码中是经过特别优化的
  • Unity Collections
    • 提供常见的集合类型(列表、哈希映射表等)
    • 内存分配属于非C#托管类型
    • 可以在Brust编译代码中的Job System中使用
    • 这些基类类型支持安全检查,有助于他们在Job System中安全使用
  • Entities(Entity-Component System)
    • Entity对象是比GameObject更轻量、更高效的替代品
    • Entity并不承担任何代码
    • Conpoment只是片段数据集合
    • Entity和Componment都由System对应的代码单元处理

游戏功能相关Package


  • Entities.Graphics(1.0版本之前的Hybird Renderer)

    • 支持URP和HDRP的Entity渲染解决方案
    • 并不是为了优化GPU而是优化CPU上的性能而设计的
  • Netcode
    • 建立在五个核心包上的DOTS网络解决方案
    • 提供网络多人服务器功能、客户端预测等相关功能
  • Physics
    • 建立在五个核心包上的DOTS物理解决方案
    • 支持两个后端
      • Unity Physics(默认)

        • 无状态的确定性物理库
        • 适合多人网络游戏
      • Havok Physics
        • 有状态但不具备确定性的物理库
        • 更稳定功能也更强大
  • Animation(开发中)
    • 支持DOTS的Animation包
  • Audio(开发中)
    • 支持DOTS的音乐相关包

谁需要关注DOTS?


  • 技术负责人

    • 在技术选型与Unity项目中是否使用DOTS的重要决策人
  • 处理游戏逻辑部分的开发人员
    • 需要非常了解DOTS的代码编写与设计方式
    • 了解Brust编译的细节
  • 处理网络通信部分的开发人员
    • 需要非常了解DOTS的代码编写与设计方式
    • 了解Brust编译的细节
  • 处理动画部分的开发人员
    • 了解动画扩展包的使用
  • 处理物理模拟部分的开发人员
    • 了解物理扩展包的使用
  • 开发工具与工作流相关内容的开发人员
  • 技术美术
  • DOTS相关工具与插件的开发人员

DOTS可以应用到哪些地方?


多线程加载、通讯,以及充分利用多核并行计算的游戏类型

  • 具有大世界流式加载的游戏
  • 具有复杂的大规模模拟的游戏
  • 具有多种网络类型的多人联机游戏
  • 具有需要客户端模拟预测的网络游戏,如FPS

总之,只要是CPU Bound类的游戏都可以考虑用DOTS做并行优化

为什么需要DOTS


  • CPU、GPU、Memory以及带宽的发展速度的不均衡

    • 添加高速缓存结构Cache内存层级结构去弥补(L1、L2、L3级的CPU缓存)
    • 面向数据编程本身是对缓存友好的,可以极大程度增加缓存Cache的命中,提高效率
  • 摩尔定律 的延续与现代CPU设计主要依靠的是
    • 越来越好的工艺
    • 越来越多的核
    • 分工越来越细的处理单元与存储
    • SIMD/SIMT
  • 并行编程的发展,要么依赖特地的硬件,要么是针对科学计算设计的,几乎无法集成到Unity中

    • OpenMP
    • TBB(Intel Threading Building Blocks)
    • CUDA(Compute Unified Device Architecture)
    • OpenCL(Open Computing Language)
    • MPI/OpenMPI(Message Passing Interface)

【DOTS学习笔记】DOTS简介相关推荐

  1. Unity DOTS 学习笔记1 - ECS 0.50介绍和安装

    Unity DOTS 学习笔记1 - ECS 0.50介绍和安装 为什么学习这个技术 ECS的全称为Entity Component System,是最早由暴雪在GDC2017上提出的一个新的游戏设计 ...

  2. OptiX资料学习笔记1——简介

    OptiX资料学习笔记1--简介 OptiX引擎的现状 目前有三种开源的API支持NVIDIA的光线追踪功能,分别为: DirectX Raytracing (DXR) DX的光线追踪API Vulk ...

  3. PCL学习笔记-PCL简介

    PCL(点云库)学习笔记 1.简介 点云数据的处理可以采用获得广泛应用的Point Cloud Library(点云库,PCL库). PCL库是一个最初发布于 2013年的开源c++库,它实现了大量点 ...

  4. RNN学习笔记(一)-简介及BPTT RTRL及Hybrid(FP/BPTT)算法

    RNN学习笔记(一)-简介及BPTT RTRL及Hybrid(FP/BPTT)算法 本文假设读者已经熟悉了常规的神经网络,并且了解了BP算法,如果还不了解的,参见UFIDL的教程. - 1.RNN结构 ...

  5. 51单片机学习笔记1 简介及开发环境

    51单片机学习笔记1 简介及开发环境 一.51单片机 1. STC89C52单片机简介 2. 命名规则 3. 封装 (1)PDIP (2)LQFP (3)PLCC (4)PQFP 二.STC8051结 ...

  6. 【DOTS学习笔记】从第一个Jobs程序入门

    目录 前言 Unity Jobs System C# Jobs Systems Blittable Types VS Non-Blittable Types NativeContainers Nati ...

  7. Unity DOTS 学习笔记2 - 面向数据设计的基本概念(上)

    上一章,我们安装了ECS套件,也进行了一些介绍,但是比较笼统.没有一些基础知识储备,很难开始编写代码.本章首先翻译和整理了部分Unity官方的DOTS知识,需要对面向数据有更深刻的认识. DOD知识准 ...

  8. Python学习笔记一简介及安装配置

    Python学习笔记一 参考教程:廖雪峰官网https://www.liaoxuefeng.com/wiki/0014316089557264a6b348958f449949df42a6d3a2e54 ...

  9. 51单片机学习笔记-1简介及点灯

    51单片机学习笔记 文章目录 51单片机学习笔记 1. 51单片机简介 1.1 安装软件 1.2 单片机简介 2. LED灯 2.1点亮一个LED 2.1.1原理分析 2.1.2 创建工程 2.2LE ...

最新文章

  1. CentOS7.4到Elasticsearch一路坑(五)
  2. 电脑开机密码忘记了怎么办?
  3. 基于flink+clickhouse构建亿级电商全端用户画像平台训练营
  4. linux冷备机怎么切换,linux – 热备用主机vs冷备用主机?
  5. Linux 简单文本处理命令
  6. adfs服务器获取信息失败,在ADFS服务器上SAML LogOutRequest处理失败
  7. 荣耀2021年度手机颜值天花板首销!2699元起
  8. 卸载抖音,迎接一大波正在路上的“抖音”!
  9. mysql分组统计查询 张三_MySQL 怎样分组查询
  10. 加快网站速度的最佳做法_(1)最小化http请求
  11. SQL Server使用
  12. USB接口定义详解(图)
  13. 3dmax一键展uv_3Dmax批量展开场景物体的第二套UV
  14. 什么是二维码?为什么需要一个二维码?
  15. android edittext 下划线没了,关于android:如何在EditText中隐藏下划线
  16. MYSQL系列---默认隔离级别所引发的问题
  17. 数据结构—约瑟夫环问题(C语言版)
  18. GC 疑难情况问题排查与分析(上篇)
  19. oracle lag over 用法,lag()使用方法
  20. 在cmd下import cv2报错——OpenCV实现BRISK

热门文章

  1. PTA 天梯赛的善良(20分)[C语言]
  2. 【创业说】零经验接手APP运营推广,聊聊这两个月我是怎么熬过来的
  3. 软考和 PMP 哪个含金量更高点?
  4. IP根域名服务器以及域名服务器对国家安全的真正意义。
  5. 根域名服务器的一点理解
  6. 数值分析快速复习(1)——Matlab数值积分
  7. idea Register
  8. 网络流媒体--RTP和RTCP协议
  9. Advertising and public relations
  10. Beyond乐队20年 细数唱片12个“最”