)
EntityComponentSystemSamples在 Entities 上实现 HDRP Lit 材质属性覆盖Material Property Overrides【免费下载链接】EntityComponentSystemSamples项目地址: https://gitcode.com/GitHub_Trending/en/EntityComponentSystemSamples本篇技术指南以 HDRPLitProperties 示例文档 为核心讲解在 Unity ECSEntities工作流中如何通过材质覆盖 Authoring 组件对 HDRP Lit 材质进行逐实体per-instance的属性覆盖从而在单个 Subscene 内用同一份 HDRP Lit 材质派生出颜色、光滑度、金属度各异的球体。读完本文你将掌握示例场景的完整操作流程、材质覆盖组件与底层生成代码的对应关系以及如何扩展覆盖更多 HDRP 材质属性。HDRP Lit 材质属性覆盖示例同一基础材质下各球体通过覆盖 BaseColor / Smoothness / Metallic 呈现出不同的视觉质感。示例场景展示什么HDRPLitProperties 是 Unity GraphicsSamplesHDRP 分支下 2. MaterialProperties 章节的一个独立示例位于GraphicsSamples/HDRPSamples/Assets/SampleScenes/2. MaterialProperties/HDRPLitProperties/目录。该场景的关键事实如下场景构成场景中的球体全部使用HDRP Lit Shader并且位于一个Subscene中即HDRPLitProperties/Subscenes/SubsceneSpheres.unity。从场景文件中可以看到球体以Sphere (20)、Sphere (26)、Sphere (27)等多实例形式排布构成一组用于对比的演示阵列。覆盖机制附着在球体 MeshRenderer 上的材质覆盖 Authoring 组件HDRP Material Property Authoring components会覆盖球体的颜色color、光滑度smoothness和金属度metallic三个核心 HDRP Lit 属性。顶层场景主场景HDRPLitProperties.unity除 Subscene 外还包含Sky and Fog Volume天空与雾效体积、Plane地面、Main Camera与Directional Light为球体提供完整的 HDRP 光照环境便于直接观察属性覆盖后的渲染差异。也就是说示例的核心价值在于演示在 DOTS/Entities 渲染管线中材质不再需要为每个实体单独制作实例化的材质资源而是通过组件数据来逐实体改写着色器属性这正是 entities.graphics 包中 Material Property Overrides 功能在 HDRP Lit 上的典型应用。如何运行与查看示例场景按以下步骤打开并检查该示例打开主场景在 Unity 编辑器中打开HDRPLitProperties.unity位于GraphicsSamples/HDRPSamples/Assets/SampleScenes/2. MaterialProperties/HDRPLitProperties/。进入 Subscene在 Hierarchy层级窗口中选择SubsceneSpheres子场景对象在 Inspector 中点击Open打开该 Subscene以查看其内部实体与 Authoring 对象。选中球体在 Hierarchy 中选择任意一个球体对象。检查覆盖组件在 Inspector 中注意观察MeshRenderer 上挂载了若干HDRP Material Property Authoring 组件对应颜色、光滑度、金属度等属性。可选扩展属性覆盖如果你想覆盖其他 HDRP Lit 材质属性可以在此基础上添加其余类型的 HDRP Material Property Authoring 组件并在其中填入目标值。注意以上步骤要求项目已配置 HDRP 渲染管线。本仓库 HDRPSamples 的 Packages/manifest.json 中声明了com.unity.render-pipelines.high-definition: 17.2.0与com.unity.entities.graphics: 1.4.16这也是该示例所依赖的核心包版本。覆盖的 HDRP Lit 属性与底层数据映射示例中球体被覆盖的三个属性——_BaseColor基础颜色、_Smoothness光滑度、_Metallic金属度——正是 HDRP Lit Shader 中最常用的三个材质属性。在 entities.graphics 的覆盖体系中它们以MaterialOverride 资源 覆盖组件的形式组织在仓库的同级示例 MaterialOverridesSample 中HDRPLitOverride.asset位于SceneAssets/下的配置内容明确列出了_BaseColor、_Metallic、_Smoothness三项属性展示了如何在无代码的情况下配置要覆盖的属性集合。每个被覆盖属性在运行时都会对应一个带[MaterialProperty]特性的IComponentData组件其字段值会直接写入着色器属性。仓库中MaterialOverridesSample/SceneAssets/目录下就保存了由编辑器自动生成的三个覆盖组件例如 HDRPMyColorVector4OverrideOverrideGenerated.csusing Unity.Entities; using Unity.Mathematics; namespace Unity.Rendering { [MaterialProperty(_HDRPMyColor)] struct HDRPMyColorVector4Override : IComponentData { public float4 Value; } }[MaterialProperty(_HDRPMyMetallic)] struct HDRPMyMetallicFloatOverride : IComponentData { public float Value; }[MaterialProperty(_HDRPMySmoothness)] struct HDRPMySmoothnessFloatOverride : IComponentData { public float Value; }从这几个生成组件的源码可以提炼出覆盖体系的核心规律[MaterialProperty(着色器属性名)]特性将组件的值绑定到指定的 Shader 属性属性名的字符串必须与 Shader/Shader Graph 中暴露的_XXX名称完全一致。值类型与着色器属性类型一一对应float4对应颜色/向量型属性如_BaseColor这类Color属性float对应标量属性如_Metallic、_Smoothness。组件放在Unity.Rendering命名空间并实现IComponentData因此它天然可以作为 ECS 组件被添加到实体上由 entities.graphics 的渲染系统在每帧构建渲染命令时读取实现逐实体per-instance的材质参数差异无需为每个球体单独复制材质资源。如何在 Entities 工作流中扩展材质属性覆盖结合上述原理若要在自己的项目而非仅限该示例中覆盖更多 HDRP Lit 属性可以沿以下路径操作使用免代码工作流推荐参照MaterialOverridesSample在物体上添加MaterialOverride 组件并在其引用的MaterialOverride 资源中勾选需要覆盖的属性如_BaseColor、_Metallic、_Smoothness直接在 Inspector 中填写值。这种方式无需手写任何覆盖组件。使用自定义覆盖组件当需要覆盖 HDRP Lit Shader 中其他暴露的属性时仿照仓库中HDRPMy*OverrideOverrideGenerated.cs的写法新建一个标记[MaterialProperty(_YourProperty)]的IComponentData结构体字段类型与 Shader 属性类型保持一致即可覆盖组件可由编辑器生成或手写。在 Subscene 中验证将上述组件挂在 Subscene 内实体的 MeshRenderer 上或在运行时动态添加组件关闭并保存 Subscene 后实体在运行时即会以覆盖值渲染。如需了解覆盖体系在无代码场景中的完整配置方式可进一步阅读 MaterialOverridesSample/README.md若关心光探针Light ProbeSH 系数这类内置属性的逐实体覆盖仓库还提供了 BuiltInMaterialSHProperties 示例演示通过MeshRenderer Probes Light Probes Custom Provided配合内置材质属性 Authoring 组件覆盖球体光照。小结HDRPLitProperties 示例完整展示了 Entities HDRP 组合下的材质属性覆盖能力在 Subscene 中批量创建使用同一 HDRP Lit 材质的球体借助 MeshRenderer 上的材质覆盖 Authoring 组件逐实体改写_BaseColor、_Smoothness、_Metallic从而在保证批渲染性能的同时获得丰富的视觉差异。其底层由 entities.graphics示例版本 1.4.16的[MaterialProperty]覆盖组件驱动你既可以通过 MaterialOverride 资源免代码配置也可以仿照仓库中生成的HDRPMy*Override组件扩展任意 HDRP 材质属性把这一机制直接复用到自己的渲染项目中。【免费下载链接】EntityComponentSystemSamples项目地址: https://gitcode.com/GitHub_Trending/en/EntityComponentSystemSamples创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考