DOTS是什么

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

Unity 使用的5个核心包:

  1. The C# job system
    提供快速安全的多线程操作
  2. The Burst compiler
    优化C#代码的编译器,能够编译生成比mono或者L2CPP更快的代码。可以编译Unity中的任何代码
  3. Unity Mathematics
    这是一套可以在JobSystem中使用的数学库,他提供的功能在Burst编译时有特别优化。
  4. Unity Collections
    提供常见的数据类型,如list、hashmap等,内存分配属于非C#托管类型,可以在JobSystem中使用,支持安全检查,并且被Burst编译优化。
  5. Entities ( Entity-Component System )
    GameObject的轻量替代品, 主要是数据,没有逻辑

游戏功能相关的额外包

  1. Entities.Graphics ( Hybird Renderer )
    这是URP和HDRP的Entity渲染解决方案。是优化CPU而非GPU。
  2. Netcode
    DOTS网络解决方案,具有多人连线功能、客户端预测功能等。
  3. Physics
    物理解决方案
  4. Animation(WIP)
    DOTS支持
  5. Audio(WIP)
    DOTS支持

Data-Oriented Design(DOD)面向数据设计

  • 面向对象设计→面向数据设计
  • DOD本质:面向内存/缓存友好的设计
    • 需要考虑需要什么数据,以及如何在内存中更好的构造数据,以便CPU更有效的访问数据。

由于CPU的三级缓存设计结构,如果在某一级缓存没有命中时,向下一级缓存获取时花费的时间开销会是几倍到几十倍的时间开销

缓存Cache的3C与3R

3C 3种产生miss 的情况

  • Compulsory misses:首次读取数据时,不可避免的Miss
  • Capacity misses:缓存空间不足时,连续使用期间访问数据过多的话,无法保存所有活动的数据
  • Conflict misses:发生访问冲突时,由于数据映射到相同的缓存行,导致缓存的抖动(实际数据访问不连续)

3R 3种优化方案

  • Rearrange:重新排列(代码、数据)︰更改布局以增加数据空间的局部性
  • Reduce:减少(大小、缓存行读取)︰更小更智能的格式、压缩
  • Reuse:重用(Cache lines):增加数据的时间(和空间)的局部性

Unity DOTS学习 前置知识(一)相关推荐

  1. Unity DOTS学习 前置知识(二)

    ECS 架构和一些专用术语 Entity-Component-System 实体组件系统(ECS )架构 遵循组合优于继承的原则 面向数据设计 弱耦合 常被应用在游戏开发上 本质:组合的是数据数组而非 ...

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

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

  3. Unity DOTS学习导航

    DOTS学习的相关内容,会在该系列文章中更新 系列文章目录 一.ECS是什么 本篇文章目录 DOTS学习的相关内容,会在该系列文章中更新 系列文章目录 前言 为什么要使用Dots? 1.0 传统方式问 ...

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

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

  5. Netty学习前置知识(一)

    文章目录 前言 Netty 介绍 Netty 使用场景 互联网行业 游戏行业 大数据领域 Java IO模型 IO模型 BIO,NIO,AIO场景分析比较 Java BIO 编程 Java BIO介绍 ...

  6. Unity游戏开发前置知识

    本文适合有一定C#基础的初学者. 设计模式 含义:帮助我们降低对象之间的耦合度常用的方法称为设计模式.使用设计模式是为了可重用代码,让代码更容易被其他人所理解,保证代码可靠性,使代码编制真正工程化,这 ...

  7. unity DOTS的学习总结之Job System应用——绘制曼德勃罗集合

    接上回:DOTS的学习总结之Job System的介绍,这次就利用之前了解知识来做点效果. 上回在这:unity DOTS的学习总结之Job System 说到并行处理,那最适合拿来做实验的就是一些分 ...

  8. 学习社会工程学需要什么前置知识

    学习社会工程学不需要特定的前置知识,但是有一些相关的知识和技能可以帮助您更好地理解和掌握社会工程学,包括: 社会学知识:了解人类社会.群体行为和社会关系的基础知识,对理解社会工程学的基本原理和技巧有很 ...

  9. lbm 弛豫时间_学习格子 Boltzmann 方法(LBM)该如何入门,需要有哪些前置知识?...

    前段时间做过一些LBM相关的工作,正好借此机会分享一下我当时从零开始的LBM入门之路. 在接触LBM之前,我主要用有限体积法(FVM)来做一些流体力学以及流固耦合的问题.但苦于每次画一个畸变程度小的网 ...

最新文章

  1. 防火墙iptables介绍
  2. 十八、oracle 角色
  3. windows系统解决github.com访问超时
  4. 你还以为,除了你自己就没有人懂你女朋友吗?
  5. leader选举的源码分析-FastLeaderElection
  6. Yaas上传附件的技术实现
  7. python支持向量机回归_Python中支持向量机SVM的使用方法详解
  8. What he did
  9. [ZigBee] 7、ZigBee之UART剖析(ONLY串口发送)
  10. 抽象方法vs虚方法 c# 1613719040
  11. Dubbo源码分析:ProxyFactory
  12. 惊喜!想要高清背景壁纸图片素材,看这里
  13. angularJS限制 input-text 只能输入数字
  14. go 302不记录cookie_gin pprof 记录日常操作
  15. “跨国视频造假窝点”曝光!这个大规模数据集,帮AI揪出99%换脸视频
  16. 用vsftp建立个人ftp站点
  17. SQL导出excel数据
  18. java-word转pdf时的异常积累
  19. Tungsten Fabric中文社区介绍
  20. 微软的teredo服务器,win10系统通过teredo连接ipv6的操作方法

热门文章

  1. shell数组赋值总结
  2. 实训日记(四)——ssm框架搭建
  3. c语言 10 -n次方,【零基础搞定C语言——10】
  4. NRF52832学习笔记(27)——非易失性存储器控制器NVMC
  5. c#(服务器)与java(客户端)通过socket传递对象_C#(服務器)與Java(客戶端)通過Socket傳遞對象...
  6. 正则表达式校验密码必须是包含大、小写字母、数字、特殊符号且12位以上(含)
  7. Python编写一个函数,用于判断用户输入的字符串是否由小写字母和数字构成。
  8. python通过openni获取奥比中光Astra Pro的深度值和RGB图像
  9. 奇数阶反对称行列式等于0
  10. 速度=价值,金融行业对华为云CDN的极致喜爱