URP Entities Graphics Submesh 示例解析多子网格、多材质 GameObject 如何烘焙成多个 EntityEntityComponentSystemSamples【免费下载链接】EntityComponentSystemSamples项目地址: https://gitcode.com/GitHub_Trending/en/EntityComponentSystemSamples本篇基于 EntityComponentSystemSamples 仓库中 URP Entities Graphics 的 Submesh 示例场景讲解 Entities Graphics“每个 Entity 只能引用一个材质”这一约束下带有多个子网格sub-mesh、多个材质的单一 GameObject 在烘焙Baking时会如何被拆分为多个独立 Entity 的规则与验证方法。读完你可以清楚地在 Entities Hierarchy 中定位这些被拆分的 Entity并理解其背后的资产结构与场景组织方式。核心概念一个 Entity 只对应一个材质Submesh 示例的官方说明README.md给出了这个示例要演示的核心事实The scene contains a single GameObject which has a Mesh with three sub-meshes, and three separate Materials, one for each sub-mesh. As Entities support only a single Material per Entity, these kinds of GameObjects will be baked into several separate Entities, one per Material.也就是说这个场景里只有一个带渲染能力的 GameObject但它挂了一个包含 3 个子网格的 Mesh并为 3 个子网格分别指定了 3 个不同材质。由于 Entities Graphics 的数据模型中一个 Entity 只能绑定一个材质这类 GameObject 在从 GameObject 世界authoring烘焙到 Entity 世界runtime时会被拆分成多个独立的 Entity每个 Entity 对应其中一个材质。这正是混合Hybrid项目在把传统多材质模型转换到 DOTS 渲染时的一个典型行为你写入 Hierarchy 的一个对象读出来的 Entity 可能不止一个。理解这一点才能正确解释 Entities Hierarchy 中的“多出来”的层级。场景与资产结构用仓库文件还原示例的构成主场景与子场景Subscene组织示例由两个场景文件组成遵循该 URP 示例项目“GameObject 放在 SubScene 中”的通用组织方式参见 URPSamples 项目 READMESubmesh.unity主场景authoring 侧。其中包含一个地面 Plane、Main Camera、Directional Light以及一个挂载了 SubScene 组件的 GameObject。该组件的_SceneAsset引用了子场景资源AutoLoadScene: 1表示进入 Play Mode 时自动加载子场景。SubScene.unity子场景。其中只有一个名为Cubes的 GameObject这就是示例讨论的那个多子网格对象。项目 README 还说明了一个与验证方式直接相关的前提Unity renders GameObjects with Entities Graphics when a corresponding entity exists... For the GameObjects in the SubScene, this means that Unity renders them with Entities Graphics at all times; in Edit Mode, in Play Mode, and in the built player.即放在 SubScene 里的 GameObject在 Edit Mode、Play Mode 和构建后的 Player 中都会始终以 Entities Graphics 渲染。三个材质URP Lit 的 Red / Green / BlueSceneAssets 目录下的材质文件与子场景中的引用关系如下由MeshRenderer的m_Materials顺序与各.mat.meta的 GUID 交叉核对确认子网格序号材质文件GUIDBase Color渲染队列0Red.mat45b59214118ecdb448f7015259ff6d38(1, 0, 0)2000Opaque1Green.mat02e0265043393054c90dd96499c50df8(0, 1, 0.119)2000Opaque2Blue.matc45ea55d5584dec4d917f1447b823b5d(0, 0.706, 1)2000Opaque三个材质均使用 URP Lit 着色器shader GUID933532a4fcc9baf4fa0491de14d08ed7未启用来实例化m_EnableInstancingVariants: 0RenderType: Opaque。以 Blue.mat 为例其余两个材质结构一致仅_BaseColor不同。Cubes 网格一个 Mesh 里的三个分离立方体Cubes.asset 是标准的 Unity Mesh 序列化资产mainObjectFileID: 4300000即Mesh其m_SubMeshes恰好包含 3 个子网格每个子网格的数据为子网格firstByteindexCountvertexCountfirstVertexlocalAABB 中心0036240(0, 0, 0)172362424(3.25, 0, 0)2144362448(1.62, 0, 0)indexCount: 36/vertexCount: 24正是 Unity 默认单位立方体6 个面 × 6 个索引、6 个面 × 4 个顶点的规格而三个不同的 AABB 中心说明这是同一个网格文件里沿 X 轴排开的三个独立立方体。结合材质表即可看出位置 (0,0,0) 的立方体用红色材质x3.25 处用绿色x1.62 处用蓝色——运行时的画面正是三个不同颜色的方块但它们在 authoring 世界里只是一个GameObject。子场景中该对象的关键组件配置SubScene.unityMeshFilterm_Mesh指向Cubes.assetGUIDdda6d79ddaa384c4c85ba8863885425fMeshRendererm_Materials按子网格顺序依次引用 Red、Green、Blue 三个材质且m_CastShadows、m_ReceiveShadows均开启Transform局部位置 (-1.5, 2, -1)单位缩放、无旋转。如何观察烘焙结果五步操作原 README 给出的操作步骤完整如下已按仓库菜单路径保留在 Hierarchy 中确认Subscene 是收起状态closed打开菜单Window Entities Hierarchy在 Entities Hierarchy 中导航到该 Subscene展开那个下面带有层级子节点的 Entity观察其下的3 个 Entity——它们全部烘焙自同一个 authoring GameObject。几点补充说明第 1 步要求 Subscene 收起是因为 Subscene 展开时 Hierarchy 显示的是 GameObject 视图收起后才能通过 Entities Hierarchy 查看烘焙后的 Entity 结构。第 4 步中“带有子节点的那个 Entity”对应原CubesGameObject 本身它作为父 Entity 保留了原有 Transform位置 -1.5, 2, -1 等其 3 个子 Entity 分别承载一个子网格对应的渲染数据同一个 Cubes 网格 各自的一个材质。从场景数据看这 3 个子 Entity 与父 Entity 一一对应m_Materials中的 3 个材质。由于本示例仓库只包含场景资产与包引用拆分逻辑本身位于com.unity.entities.graphics包的烘焙器实现中当前 manifest.json 锁定的版本为1.4.16仓库内没有该包源码因此“每个子 Entity 引用同一网格、仅材质不同”这一细节属于依据场景数据与官方说明的结构推断若需逐行验证应查阅对应版本的 Entities Graphics 包烘焙器代码。该行为对混合项目的实际意义Entity 数量预期一个 N 材质、N 子网格的渲染对象会产出 N 个子 Entity外加保留 Transform 的父 Entity。在批量转换含多材质模型的项目时Entity 总数会大于 GameObject 数这是正常行为而非重复生成。材质是拆分边界如果同一个 GameObject 的不同子网格使用了相同的材质从“每个 Entity 对应一个 Material”的规则看可以推断其拆分数量会少于子网格数反之材质越多拆分越多。独立渲染单元拆分后每个 Entity 成为 Entities Graphics 中独立的渲染单元可以独立参与该渲染路径下的剔除与批量处理这与 GameObject 侧“一次 DrawCall 覆盖多个子网格”的方式不同。环境前提本示例项目基于 Unity6000.2.10f1见 ProjectVersion.txt与com.unity.entities.graphics1.4.16上述菜单路径Window Entities Hierarchy与 Subscene 组件行为均以该版本组合为准。相关文件索引路径说明Submesh/README.md示例官方说明本文主体来源Submesh.unity主场景相机、灯光、地面、SubScene 组件Subscenes/SubScene.unity子场景Cubes GameObjectMeshFilter MeshRenderer 3 材质SceneAssets/Cubes.asset3 子网格的网格资产3 × 单位立方体SceneAssets/Red.mat / Green.mat / Blue.mat三个 URP Lit 材质URPSamples/README.mdURP Entities Graphics 示例项目总览Submesh 行Demonstrates using a Mesh with multiple sub-meshes with Entities GraphicsPackages/manifest.json包版本com.unity.entities.graphics1.4.16【免费下载链接】EntityComponentSystemSamples项目地址: https://gitcode.com/GitHub_Trending/en/EntityComponentSystemSamples创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考