Unity DOTS Baking与Baker详解

这篇具有很好参考价值的文章主要介绍了Unity DOTS Baking与Baker详解。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

Unity DOTS Baking与Baker详解

  最近DOTS终于发布了正式的版本, 我们来分享一下DOTS里面Baking 与Baker的关键概念,方便大家上手学习掌握Unity DOTS开发。

  Unity DOTS开发模式,为了让大家在”创作”游戏的时候使用原来组件方式来编辑游戏场景与资源,同时Unity提供了一种Baking机制,把普通的GameObject数据转成ecs模式下的entity数据,程序运行的时候,直接加载转换好的ECS模式的数据。在深入了解Baking与Baker机制之前,我们先熟悉几个概念:

  • Authoring: 英文单词是”创作”的意思,上文提到ECS模式开发的时候创作游戏节点可以使用原来的方式,再通过baking转换。所以那些待转换成ecs 模式的GameObject与Component被称为Aurthoring。
  • Authoring Scene: 要转换的传统的GameObject与组件所在的场景称为Authoring Scene。
  • Authoring Component: 待转换的传统模式下的组件。
  • Authoring GameObject: 待转换的传统模式下的GameObject。
  • Baking: 指的是把传统GameObject+组件数据转成ecs模式下所需要的数据的过程。
  • Baker: 指的是某种Authoring转ECS模式的具体执行者与执行逻辑。

  有了这些概念以后,接下来我们来详细地分析Unity DOTS的Baking与Baker。

Unity DOTS Baking 机制核心剖析

  Baking是一个单向不可逆的过程,主要是负责把传统的GameObject+Component数据转换成ECS模式下的Entity+Component数据。在DOTS开发模式下,数据可以分成两种,一种是创作数据Authoring data,一种是运行时的ECS模式的数据runtime data。Authoring data灵活,直观,方便我们的创作(即以前的创作模式),ecs模式下的运行数据runtime data,高效,运行时能快速地生成entity数据。Baking这个过程是发生在编辑模式下,在游戏运行之前就完成了Baking转换,游戏中直接使用bake好的数据即可。如果在游戏中做Baking转换,那么会消耗游戏的运行性能。

  • Authoring Data: 当你在编辑你的游戏项目应用的时候,像传统的脚本,资源,以及其它的一些游戏数据的依赖,这种编辑方式非常灵活,方便用户查看,与使用。这些编辑的数据,我们叫做Authoring data。
  • Runtime Data 是ECS模式运行的时候需要的数据,当你运行程序时,作为游戏数据来进行处理。这种模式的数据有高效的性能与高效的存储。它是为计算机运行处理而设计,换句话说对开发者的直观性,没有传统的GameObject模式那么友好。

authoring bake执行时机,游戏开发,Unity3d,游戏引擎,unity,游戏引擎,游戏开发,unity3d

  开发者需要在Unity里面把Authoring Scene作为SubScene加载进来,当编辑Authoring场景中的Authoring 物体时,Baking过程会被触发,并在后台完成。

  Baking有两种模式:

  • Full Baking(全局Baking): 对Authoring Scene里面的所有物体做Baking操作。
  • Incremental Baking(增量Baking): 只对变化了的物体进行Baking操作。

  当整个Authoring Scene被导入的时候,会触发Full Baking。FullBaking是在编辑器的后台模式下处理的,运行的时候不带任何的GUI界面。当一个场景需要被Baking的时候,编辑器就在后台启动执行Baking。Baking是异步操作的,Baking的时候不影响你正常的Unity的操作。但是第一次打开场景的时候可能需要等几秒钟,等场景Bake好后,后面再使用就会快很多。Full baking 只会发生在 ECS data需要加载的时候,不会发生在创作与编辑 GameObject的数据的时候。以下一些情况会导致Full Baking:

  1. 烘培好的ECS模型下的 entity场景数据不在磁盘上,就会发生Full Baking。
  2. Authoring Scene的内容被修改,同时烘焙好的entity scene数据(Runtime Data)过期。
  3. 如果baking code 在编译Baker代码后发现包含了一个 [BakingVersion] 的attribute (特性), 这个意味着 bake代码被改变了,entity scene 过期了,就会引发full baking。
  4. Baking code 的 [BakingVersion] 的属性被修改了,会导致full baking。
  5. Project Setting里面的关于Entities 的设置有改变,会导致full baking。
  6. 在inspterctor 检查器中,点击了 "ReImport"重新导入subscene, 会导致full baking。
  7. 你在编辑器的 Preferences (偏好设置)清理了baking cache,会到导致full baking。Full Baking会输出一些文件到存储到硬盘上,当编辑器运行程序会加载这些文件。

  当使用subscene机制, 加载一个"创作场景"的时候,同时也初始化了 incremental baking。当在场景中执行一个incremental baking 的过程时,意味着当你编辑一个 "创作创景"的时候,可以直接访问和使用你的baking的结果。它只针对变化的数据与组件进行Bake。

Unity DOTS Baker 机制核心剖析

  本身Baking这个过程也是基于ECS模式的,一个简单的 Baking system(baking算法) 需要一个 Baker 从场景中读取里面的"authoring data",并把数据生成到entity 的组件中。创建一个Baker, 新建一个类 Baker, 模板的参数类型就是要转换authoring components的类型。 "authoring components" 创作时候的组件一般都是用的Unity的Comoponent, 通常情况下就是MonoBehaviour。一个Baker定义了一个Bake的函数方法,这个方法把要转的authoring component 作为参数输入到函数。Baker函数通过参数获取authoring component 的数据,从而转成entity component数据。如果Unity 执行一个full baking, 它会把authoring scene 所有的 "authoring components"全部baker执行一次,完成数据转换。增量更新,只会 bake 那些自己或依赖被修改的 authoring组件, 只有这些组件的Baker才会被调用。

  每个组件数据的Baker还需要向系统来注册它执行时候的依赖关系,这样当它依赖的数据发生变化的时候,才会触发这个组件的Baker调用。默认情况下一个Baker只能访问一个 authoring component,但是有时候仍然需要从其它的组件, GameObjects 或者各种各样的资源, 所以整个baking 处理需要知道这些依赖关系,如果其它的这些对象改变了,那么这个baker也需要重新执行。例如,如果是一个 authoring GameObject 是一个cube, Unity在bake的时候,就会把这个entity 渲染成一个cube,如果这个authoring GameObject 随后被修改成了一个 球体, 那么 ECS也必须要相通地做出改变,要把这个entity渲染成球体,这个就意味着unity要删除以前早期的Cube Entity, 并创建一个新的球的entity,或者改变entity让他显示一个球体。又比如 一个GameObject 有一个材质, 依赖一个 scriptable object。Baker需要定义一个资源依赖,这样才能确保资源 scriptable object被改变的时候,这个object 会被重新Baker。整个过程全部都是自动发生的,我们普通开发者可以不用管。

  最后给大家展示一个普通MonoBehaviour Component的Baker,代码如下:

ECS Component:
publicstructDependentData:IComponentData
{
    publicfloatDistance;
    publicintVertexCount;
}
Authoring Component:
publicclassDependentDataAuthoring:MonoBehaviour
{
    publicGameObjectOther;
    publicMeshMesh;
}

//定义从Authoring Compongt到ECS Component的Baker:
publicclassGetComponentBaker:Baker<DependentDataAuthoring>
{
    // Bake的时候调用Bake函数
    publicoverridevoidBake(DependentDataAuthoringauthoring)
    {
        // 声明所需要Baker的依赖关系
        DependsOn(authoring.Other);
        DependsOn(authoring.Mesh);

        if(authoring.Other == null)return;
        if(authoring.Mesh == null)return;

        vartransform = GetComponent<Transform>();
        vartransformOther = GetComponent<Transform>(authoring.Other);

        if(transform == null)return;
        if(transformOther == null)return;

        varentity = GetEntity(TransformUsageFlags.Dynamic);
        AddComponent(entity,newDependentData
        {
            Distance = Vector3.Distance(transform.position,transformOther.position),
            VertexCount = authoring.Mesh.vertexCount
        });
    }
}

  今天分享到这里,关注我们,学习更多的最新Unity DOTS 进阶与实战相关的知识.


  尊敬的准VIP客户:

  我们Unity DOTS课程也正式发布了,我们课程经过9年多的更新与迭代,已经涵盖了Unity 开发中遇到的绝大部分问题,涵盖了Unity主程序进阶,升职加薪所需要的系统的知识体系,主流游戏类型的重点难点技术解决方案。我们的老师10:00~23:00提供实时解答与回复,包含但不限于客户端+服务端。相信我们提供的游戏开发技术服务能很好的帮助到您。选择我们的VIP课程,您肯定不会后悔!有兴趣请 + 企.鹅.裙 428 540 563


  下面是DOTS的VIP课程前18节视频,免费观看

Unity DOTS进阶与项目实战(B站18集)

第001课DOTS的环境安装与准备事项

第002课 DOTS的核心机制与概述

第003课DOTS的SubScene

第004课Component的概述与普通组件的Baker

第005课System与SystemGroup概述

第006课DOTS中的ECS核心概念总结

第007课Baking系列之Baking与Baker详解

第008课Baking系列之BakingSystem与BakingWorld详解

第009课FilterBakingOutput与PrefabsInBaking

第010课BlobAsset核心机制分析

第011课Aspect核心机制分析

第012课 StructChange核心机制详解

第013课Managed与Unmanaged Component详解与性能分析

第014课ShareComponent核心机制与性能分析

第015课CleanupComponent核心分析

第016课 Dynamic Buffer Component详解与分析

第017课Tag与Chunk Component详解与分析

第018课Enableable与Singleton组件详解与分析文章来源地址https://www.toymoban.com/news/detail-854807.html

到了这里,关于Unity DOTS Baking与Baker详解的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • DOTS Unity.Physics物理引擎的核心分析与详解

    最近DOTS发布了正式的版本,同时基于DOTS的理念实现了一套高性能的物理引擎,今天我们来给大家分享和介绍一下这个物理引擎的使用。 Unity.Physics 的设计哲学 Unity.Physics是基于DOTS设计思想的一个高性能C#物理引擎的实现,  包含了物理刚体的迭代计算与碰撞检测等查询。Unity.

    2024年03月18日
    浏览(42)
  • Unity场景优化工具:Mesh Baker 基础教程(贴图篇)

    目录 前言 一、Mash Baker是什么? 二、使用步骤 1.打开场景 2.将Texture Baker添加到场景中 3.使用Texture Baker生成贴图集 4.烘焙新的模型并使每个模型独立 总结 模型贴图整合是3D游戏中美术资源优化的重要环节,我们通常把多个模型的贴图集成到一张2048大小的贴图集中,以达到减

    2024年02月02日
    浏览(27)
  • DOTS介绍+Unity DOTS-MAN小游戏项目实战

    DOTS是Unity在17年左右提出的一个概念,其核心是ECS。 提示:以下是本篇文章正文内容,下面案例可供参考 全称:(Multi-Thread)Data-Oriented-Tech-Stack (多线程式)数据导向型技术堆栈 实体组件系统(ECS) - 提供使用面向数据的方法进行编码的框架。在Unity中它通过Entities软件包进行分发,

    2023年04月13日
    浏览(27)
  • Unity DOTS技术

    目录 一.概述 二.DOTS详解 1.开发环境搭建 2.简单ECS程序  2.调试功能 3.常用API  4.系统之间的互相干扰 5.实体Entity的创建查找删除 6.使用批处理Gpu Instancing优化性能 7.World,System,Group 1)World 2)System 3)Group 8.组件Component介绍 1)组件Component的添加修改删除 2)ShareComponent 3)状态

    2024年02月05日
    浏览(36)
  • Unity Dots学习内容记录

    DOTS未来的潜力还是挺多的,目前已经陆续有项目局部投入该技术,追求硬件到软件的极致性能。 主要是记录下学习unity dots技术的过程吧。 DOTS全称Data Oriented Tech Stack,面向数据的技术堆栈。 是由Unity的下面几个技术栈组成 1.Entities(ECS,Entity-Component Data-System) 2.JobSytem(多线程作

    2024年04月15日
    浏览(41)
  • 留个档,Unity Navigation. 动态创建NavMesh,动态Bake NavMesh, 动态烘培NavMesh

    运行时,动态创建NavMesh,动态Bake NavMesh, 动态烘培NavMesh 根据unity官方的demo,解析一下,发现动态创建NavMesh导航并不难. 其实只需要 网格信息,还有 需要创建的范围即可。 可以认为是固定公式了 简化写法如下,是不是需要缓存某些信息,就看具体逻辑实现了 程序学无止尽。

    2024年02月13日
    浏览(24)
  • Unity DOTS1.0安装

    2023年6月10日更新: 2022.3 Entities1.0 manifest.json添加一句

    2024年02月15日
    浏览(26)
  • Unity 万人寻路(dots版本)

    时间:2023-7-29 北京下雨,公司停电,回家早了,更新一下。 寻路模块,还是前前后后,打磨了2个月,中间穿插着搞很多其他的功能,有些螺旋迭代的味道。 进入正题: 设计团队,会从游戏性角度考虑,提出很多需求。 1,单位之间的规避,模型不能穿插 2,建筑物规避,模

    2024年02月08日
    浏览(30)
  • Unity DOTS从原理到应用

    什么是DOTS? Unity的DOTS(Data-Oriented Technology Stack)是一种数据驱动的技术堆栈,旨在提高Unity游戏引擎的性能和可伸缩性。它使用C# Job System,Burst Compiler和Entity Component System(ECS)来组合和处理数据,让游戏运行更高效率。DOTS使开发人员可以使用最新技术来开发游戏,并在追求

    2024年02月11日
    浏览(30)
  • unity在使用Reflection Probe(反射探头)bake(烘焙)时,无法反射出范围內的物体。

    bake后发现反射探头还是原来的样子,解决办法以下: 打开lighting设置,观察最下面是否为图中这样   如果是,则点击旁边的cancel即可解决问题。     

    2024年02月12日
    浏览(25)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包