DOTS(0) DOTS的5W1H问题

  1. 1. 5W1H
    1. 1.0.1. DOTS是什么
    2. 1.0.2. 谁需要关注DOTS
    3. 1.0.3. DOTS可以应用到哪些地方
    4. 1.0.4. 为什么我们需要DOTS
    5. 1.0.5. 什么时候DOTS1.0能正式发布
    6. 1.0.6. 我们该怎么样去学习DOTS

 

5W1H

  • What——DOTS是什么
  • Who——谁需要关注DOTS
  • Where——Dots可以应用到哪些地方
  • Why——为什么我们需要DOTS
  • When——什么时候DOTS1.0能正式发布
  • How——我们该怎么样学习DOTS

DOTS是什么

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

  • 实际上是通过Unity5个核心包来定义的一种全新的Unity代码编写模型,并在这些核心包之外,还提供了一系列游戏功能相关的额外包与相关工具,是Unity下面向数据设计与编程的一整套技术解决方案

  • 它的五个核心包包括 :

    • The C# job system : 用来提供快速安全和使用简单的编写多线程代码的方式,从而让开发者更容易地利用现代CPU的多核设计来处理并行任务
    • The Burst compiler : 这是一种优化C#代码的编译器,它可以编译生成比通过Mono或IL2CPP更快的代码,并且它并不只是为了编译DOTS代码而存在,它同样可以编译Unity中的任何代码
    • Unity Mathematics : 这是一套可以在job system中使用的数学库,它提供的功能在burst编译的代码中使用时是经过特别优化的
    • Unity Collections : 它提供了常见的集合类型,如列表、哈希映射表等,这些类型的内存分配属于非C#托管类型,可以在burst编译代码中的job system中使用,并且这些集合类型支持安全检查,有助于它们在job system中安全地使用
    • Entities(Unity ECS)(Entity-Component System) : 其中entity对象是GameObject更轻量、更高效的替代品,与GameObject和MonoBehaviour不同,entity本身并不承担任何代码,components也只是数据片段集合,它们都有对应的System代码单元进行处理
  • 其他游戏功能相关的额外包包括 :

    • Entities.Graphics(DOTS1.0之前的Hybird Renderer) : 它是一套支持URP与HDRP的entity渲染解决方案,值得注意的是,它并不是优化GPU上的性能,而是为了优化CPU上性能而设计的
    • Netcode : 这是一个建立在五个核心包基础上的DOTS网络解决方案,它提供了网络多人连线的服务器功能与客户端预测等相关功能
    • Physics : 同样是一个建立在五个核心包基础上的物理解决方案,这个包支持两个后端 : 默认的是Unity Physics包,它是一个无状态的确定性物理库,比较适合多人网络游戏;另外一个后端是Havok,这是一个有状态但不具备确定性的物理库,但相较而言这个库会更稳定,功能也会更强大
  • 其他还有一些目前正在开发中的与游戏相关的额外包

    • Animation(WIP)
    • Audio(WIP)

谁需要关注DOTS

  • 技术负责人
  • 处理游戏逻辑部分的工程师
  • 处理网络通信部分的工程师
  • 处理动画部分的工程师
  • 处理物理模拟部分的工程师
  • 开发工具与工作流相关内容的工程师
  • 技术美术
  • AssetStore中DOTS相关工具与插件的开发人员

DOTS可以应用到哪些地方

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

  • 这些都是一些多线程加载、通讯以及充分利用多核并行计算的游戏类型
  • 总结就是CPU-bound类的游戏应用都可以考虑应用DOTS来做并行优化。目前很多游戏的性能瓶颈并不在渲染,而在CPU,这就是我们为什么需要DOTS

为什么我们需要DOTS

  • CPU与Memory的速度发展不均衡以及带宽限制
    • 是靠添加高速的缓存Cache内存层级结构去弥补的
    • 如L1、L2、L3级的CPU缓存是最近十几年越加越多、越加越大的,甚至GPU上也为了效率采用了类似的设计
    • 即使这样,一些程序设计的不合理依然会造成Cache使用上低效,导致大型缓存收益边界效益递减
    • 而面向数据设计本身是面向缓存友好的,可以极大增加缓存Cache的命中,提高效率
  • 摩尔定律的延续与现代CPU设计
    • 越来越好的工艺,目前已经达到2nm极限了,那么提高CPU速度主要靠提高主频,提高功率的同时降低发热,在占用空间越来越小的同时通过增加核数做并行处理来提高处理能力,但需要做指令并行,改进编译技术的支持,才能发挥现代CPU设计的真正效能。这些条件下,如果你不去关心CPU指令与编译这一层是很难做到的,不要指望编译器能为你自动做这些事,编译器做的事很有限,程序性能的提升可远没有硬件提升这么快
    • 据统计,程序性能每18年才能提高一倍,比摩尔定律要慢得多。另外,游戏主机硬件的发展也是不遵循摩尔定律的,因为它们往往是固定的硬件
    • 所以DOTS是提供了一套更简单的面向数据的代码编写模型,用DOTS编写出的程序可以充分利用现代CPU多核的并行设计
  • 并行编程的发展
    • 并行编程库虽然有英特尔TBB(Intel Threading Building Blocks)、OpenMP、CUDA(Compute Unified Divice Architecture)、OpenCL(Open Computing Language)等很多,但它们要么依赖于特定的硬件,要么是针对于科学计算方面设计的,集成到Unity中使用几乎是不可用的
    • DOTS则充分考虑了游戏设计方面的需求,并在Unity中兼容了多平台多硬件的支持

什么时候DOTS1.0能正式发布

(略)

我们该怎么样去学习DOTS

  • 看 : 视频、官方文档、官方论坛DOTS区,官方Github中例子代码
  • 查 : 专业术语、相关概念、扩展资料
  • 学 : 五大核心包、游戏扩展包、三方扩展包与工具
  • 改 : 官方Github中例子、Unity Assets Store中的例子
  • 调 : 官方Github例子,自己的Demo
  • 写 : Demo,小工程、DOTS游戏
  • 交流 : 官方论坛,社交媒体群,评论区等