Unity DOTS 1.0 (5) Baking System、Baking phases 和 Baking World

Baking System

  • 一个 baking system在处理数据的方式上不同于baker。和baker一个一个处理components不同,它是进行批处理的,并且它可以经由job 和burst 大幅提升处理性能。
  • baking system是在entity创建完成后运行,所以它可以访问到所有初始创建的Entity,包括baker创建的。
  • baking system可以随意改变world,包括创建新的entity。但是在system中创建的entity,不会在场景Bake结束以后销毁;也就是在这个阶段创建的Entity是可以留在我们的世界里面的。
    你也可以来创建entity在多个Baking System之间进行数据传递,如果你希望这个entity在你这个bake场景结束以后有销毁你创建的entity,那么你创建entity就必须要在Baker里面创建,在Baker里面创建的entity(使用CreateAdditionalEntity方法来创建),就会在Baker结束以后销毁

创建一个Baking System

  • 给System做一个特定注解:[WorldSystemFilter(WorldSystemFilterFlags.BakingSystem)] attribute.有了这个注解,Baking 系统就会识别这个System,把它当作Baking System加入到的Baking World里面。

示例代码:给出了代码实现,给所有的有带有组件A的entity加一个tag component,如果一个entity没有组件A,但是又带了tag component,我们就把这个tag component从entity里面删除掉;

public struct AnotherTag : IComponentData { }[WorldSystemFilter(WorldSystemFilterFlags.BakingSystem)]partial struct AddTagToRotationBakingSystem : ISystem{public void OnUpdate(ref SystemState state){//查找出所有拥有RotationSpeed Component并且没有AnotherTagComponent的Entityvar queryMissingTag = SystemAPI.QueryBuilder().WithAll<RotationSpeed>().WithNone<AnotherTag>().Build();//然后批量添加AnotherTagstate.EntityManager.AddComponent<AnotherTag>(queryMissingTag);// Omitting the second part of this function would lead to inconsistent// results during live baking. Added tags would remain on the entity even// after removing the RotationSpeed component.var queryCleanupTag = SystemAPI.QueryBuilder().WithAll<AnotherTag>().WithNone<RotationSpeed>().Build();//然后批量删除AnotherTagstate.EntityManager.RemoveComponent<AnotherTag>(queryCleanupTag);}}

这个代码就实现了批量处理Entity。

Baking phases (阶段)

0. 执行PreBakingSystemGroup 分组内容

1. Entity 创建:

  • Unity会先创建出来场景里面的每个GameObject对应的entity, entity只是一个空的容器(internal metadata),没有ComponentData;

2. Baker phase:

  • 对Authoring GameObject做单个单个的转换,转换成ecs entity + component;执行我们每个数据的Bakers,来完成转换;同一种类型的Component转换的时候,使用同一种baker;EntityA, EntityB,但是都有Authoring Component使用同一个Baker;
  • Unity提供的组件数据都是使用系统自带默认的Baker来进行转换;
  • Unity执行Bakers的顺序是不固定的,所以Baker之间的相互依赖是不被允许的。不能在baker A Entity的时候去读取或更改B Entity的Component
  • 只能进行添加组件操作

3. Baking System phase:

  • 所有Baker执行完了后,进入Baking System阶段
  • 对所有的entity 与component来做批量的数据处理,提升性能。
  • 所有的Baking System只能在Baking过程中运行;可以通过注解[UpdateAfter, UpdateBefore, and UpdatelnGroup ]来标记执行顺序;
  • Unity 已经提供了一些默认的分组,按照这样的特定顺序;
    • PreBakingSystemGroup:在Baker之前来调用它分组下面的所有的system(这个组在Baker之前,是个例外);
    • TransformBakingSystemGroup:就在Baker之后,这个分组,可以用来做一些特定的数据转换。
    • BakingSystemGroup: 用户一般编写的所有的Baking System都会被放入到这个分组下。
    • PostBakingSystemGroup:你可以编写Baking System来做结束时候的一些处理。

Baking World

  • 我们每个Authroing Scene在Bake的时候都是独立分来来处理的;
  • 后台每次一个一个场景的来进行Bake处理;
  • 每个subscene,都会有2个World: Conversion world, Shadow worldConversion world。所有的Baker 与Baking System都是运行在它里面。
  • Shadow world:保存了上一次Baking的处理结果,可以通过比较看本次修改了哪些地方;
  • baking完成后,比较两次世界的变化,然后同步到main word(用户可见world)

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/pingmian/3241.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

实现printf功能代码效果

1、使用 vsnprintf 模拟 printf 功能 非宏定义情境下&#xff0c;可以用作开启通讯口调试功能 实际上是通过 vsnprintf 将接收到的 format格式化后解析到缓存区&#xff0c;这里存在缓存区大小限制&#xff0c;以及代码大小区别 #include <stdarg.h> #include "std…

Docker 备忘清单(二)

1、Docker 容器 1.1、启动和停止 docker start nginx-server 开始 docker stop nginx-server 停止 docker restart nginx-server 重启 docker pause nginx-server 暂停 docker unpause nginx-server 取消暂停 docker wait nginx-server 阻塞容器 docker kill nginx-server 发…

不墨迹,向媒体投稿不讲攻略,直接上方法

作为一名单位信息宣传员,我曾深陷于向媒体投稿的泥沼之中,饱尝了费时费力、审核严苛、出稿缓慢的苦涩,承受着领导急切期盼与自我压力交织的煎熬。然而,当我有幸接触到智慧软文发布系统,这一切困境如同阴霾散去,取而代之的是便捷流畅的投稿流程,以及领导满意、团队轻松的工作氛围…

探索常见经典目标检测算法:从YOLO到Faster R-CNN

目标检测是计算机视觉领域中的重要任务之一&#xff0c;它旨在从图像或视频中检测出目标的位置和类别。随着深度学习技术的发展&#xff0c;许多经典的目标检测算法相继出现&#xff0c;其中包括YOLO&#xff08;You Only Look Once&#xff09;、Faster R-CNN&#xff08;Regi…

Chrome为什么不用COOKIE

Chrome浏览器并不是完全不使用cookie&#xff0c;而是对第三方cookie的处理方式进行了调整。Chrome允许用户根据需要选择是否允许第三方cookie&#xff0c;或者在无痕模式下阻止它们。这样的设计旨在平衡用户体验、网站功能和隐私保护。 第三方cookie是在用户访问一个网站时&a…

parallels desktop 19密钥分享 附PD虚拟机安装教程 支持M/intel

PD19虚拟机安装破解教程 Parallels Desktop 百度网盘下载&#xff1a;https://pan.baidu.com/s/1ezQmJAjIx796NEr9WZbcOg 提取码: 8w61 &#xff08;地址容易失效&#xff0c;来之不易&#xff0c;务必点赞和收藏&#xff0c;如果失效了请到评论区留言反馈&#xff09; 注意&…

VPP 源码学习总结

当我们在VPP/plugins目录下注册了自己的node后&#xff0c; 肯定有一个node.func(), 那这个函数是如何执行到的呢&#xff1a; 1. 首先我们要看一下这个插件注册的时候做了什么&#xff0c; 假设node 如下&#xff1a; 编译成功后&#xff0c; 我们可以从函数vlib_plugin_earl…

Telegram mini app 登录小部件 | 自定义登录按钮 或 静默登录

先说我遇到的问题&#xff0c;我按照流程接入了 telegram 登录小部件&#xff0c;在 PC 或者 H5 可以拿到数据&#xff08;不管是选择回调函数还是回调地址的形式都可以&#xff09;&#xff0c;但是在 telegram mini app 中登录拿不到数据&#xff0c;在 telegram 中 我点击登…

常见排序算法(Java代码实现)

前言 学习算法和数据结构必备算法逻辑动态演示网站&#xff0c;收藏到就是赚到&#xff0c;链接: 数据结构动态演示网站 下面的代码单独理解会比较抽象&#xff0c;建议结合动态演示学习&#xff0c;更加直观 常见排序算法&#xff08;时间复杂度&#xff09; O(n^2)&#x…

【Nginx】(三) Nginx配置文件精解:从入门到精通的完整指南

Nginx&#xff0c;作为一款功能强大的 Web 服务器和反向代理软件&#xff0c;已经成为实现这些目标的行业标准。然而&#xff0c;Nginx的强大功能往往伴随着复杂的配置需求。对于想快速掌握 Nginx 配置的人来说&#xff0c;理解其配置文件的结构至关重要。 在本文中&#xff0…

RabbitMQ笔记(基础篇)

视频&#xff1a; MQ基础-01.RabbitMQ课程介绍_哔哩哔哩_bilibilihttps://www.bilibili.com/video/BV1mN4y1Z7t9?p1&vd_sourced0ea58f1127eed138a4ba5421c577eb1 一、RabbitMQ简介 1.同步调用 优势&#xff1a;时效性强&#xff0c;等待结果后才返回 劣势&#xff1…

虚拟化与Docker基本概念与Docker的安装

Docker Docker 是一个开源的应用容器引擎&#xff0c;它最初是用 Go 语言开发的。Docker 允许开发者将应用程序及其依赖、库和环境打包到一个可移植的容器中&#xff0c;这个容器可以在任何支持 Docker 的 Linux 或 Windows 机器上运行&#xff0c;保证了应用在不同环境之间的…

【行为型模式】备忘录模式

一、备忘录模式概述 备忘录模式定义&#xff1a;又称之为快照模式(Snapshop Pattern)或者令牌模式(Token Pattern)&#xff0c;是指在不破坏封装的前提下&#xff0c;捕获一个对象的内部状态&#xff0c;并在对象之外保存这个状态&#xff0c;这样我们就可以在需要的时候将该对…

STM32几种库的比较,HAL、标准库、LL库!

STM32是一系列由STMicroelectronics公司生产的微控制器系列。它们基于ARM Cortex-M内核&#xff0c;提供了广泛的性能和功能。STM32系列拥有多个型号和系列&#xff0c;每个型号都有不同的特性和功能。 STMicroelectronics提供了名为STM32Cube的软件生态系统&#xff0c;其中包…

【14-Ⅱ】Head First Java 学习笔记

HeadFirst Java 本人有C语言基础&#xff0c;通过阅读Java廖雪峰网站&#xff0c;简单速成了java&#xff0c;但对其中一些入门概念有所疏漏&#xff0c;阅读本书以弥补。 第一章 Java入门 第二章 面向对象 第三章 变量 第四章 方法操作实例变量 第五章 程序实战 第六章 Java…

InstantMesh:利用稀疏视图大规模重建模型从单张图像高效生成3D网格

作者&#xff1a;Jiale Xu&#xff0c;Weihao Cheng&#xff0c;Yiming Gao等 编译&#xff1a;东岸因为一点人工一点智能 InstantMesh&#xff1a;利用稀疏视图大规模重建模型从单张图像高效生成3D网格在这项工作中&#xff0c;我们提出了InstantMesh&#xff0c;一个开源的…

【C语言】红黑树详解以及C语言模拟

一、红黑树的性质二、红黑树的旋转操作三、红黑树的插入操作四、红黑树的删除操作五、红黑树的应用六、C语言模拟红黑树七、总结 红黑树是一种自平衡二叉查找树&#xff0c;它能够保持树的平衡&#xff0c;从而确保查找、插入和删除的最坏情况时间复杂度为O( l o g n log_n log…

批量控制教程-Ansible管理windows

背景 你厌恶要手动操作多台机器进行某些重复的操作吗&#xff1f;想象一下&#xff0c;在周五的晚上你想要下班了&#xff0c;但是你得在很多台机器手动发布一些东西&#xff0c;每台机器都要整半小时&#xff0c;整整8台机器&#xff0c;一晚上几个小时可以预见又没了。 ans…

LoRA: 大模型的低秩适配

笔记整理&#xff1a;陈一林&#xff0c;东南大学硕士&#xff0c;研究方向为不确定知识图谱规则学习 链接&#xff1a;https://arxiv.org/abs/2106.09685 1、动机 自然语言处理的一个重要范式包括在通用领域数据上进行大规模预训练&#xff0c;然后对特定任务或领域进行适应性…

CentOS命令大全

系统信息查询命令 在CentOS系统中&#xff0c;了解如何查询系统信息对于系统管理和性能监控至关重要。以下是一些基本而强大的命令&#xff0c;用于获取关于您的系统的各种信息。 1. uname - 获取系统信息 uname命令用于打印系统信息&#xff0c;例如内核版本、主机名等。使…