linux上搭建网站,企业网站 建设 外包,邯郸市哪里有做网站的,网站策划岗位要求在项目中#xff0c;经常会遇到这样的需求#xff1a;多个模型#xff08;例如 100 个#xff09;使用相同的材质#xff0c;但每个模型需要不同的参数设置#xff0c;比如不同的颜色或随机种子等。
在这种情况下#xff0c;创建 100 个实例材质不是最佳选择。正确的做…在项目中经常会遇到这样的需求多个模型例如 100 个使用相同的材质但每个模型需要不同的参数设置比如不同的颜色或随机种子等。
在这种情况下创建 100 个实例材质不是最佳选择。正确的做法是通过模型的基元数据向材质传递参数。
这种方法不会因为新建实例材质而产生成本。
最重要的是相同的模型相同的材质不会因为基元数据不同而影响合批。
在操作上StaticMesh和InstancedStaticMesh是有少许区别的。
StaticMesh
先以StaticMesh为例。
创建材质
在流程上虽然不是必须的但通常需要先创建材质
设置变量为基元数据
为材质勾选使用基元数据: 基元数据是一个浮点数组一个4通道变量占用了0123四个索引位置
所以第二个变量在勾选基元数据后需要按顺序填4 自定义基元数据面板可以助你参考index设置 模型设置
将材质赋予模型在细节面板就可以看到材质中可以使用的基元数据。
关键一步
可以看到数据后面是 号也就是并未启用。 点击号需要将其全部启用变成有默认值的状态
这样你就可以手动为每个模型创建不同材质参数而并不需要为其新建实例材质了。
在蓝图中设置
搜索基元就可以看到可以使用的函数
基本上分为两种一种是使用名字设置一种是使用index设置
如果是构建函数
要特别强调的是在构建函数中,要使用可以被序列化的默认基元数据这样你的设置才能保存到下次启动项目 InstancedStaticMesh
在ISM中使用基元数据要注意的是ISM组件的基元数据和ISM组件中实例的基元数据是并存的。 这是组件 这是实例 他们是并存的 看实例的基元数据如何实现的假如ISM有2个实例每个实例2个参数那么一共记录为4个所以实例并不是独立储存了参数 左侧是组件基元数据和之前一样。新增的是右侧的实例基元数据变量节点除了不能起名用法和之前一样
在蓝图中设置
关键一步
如果你的ISM组件也需要使用基元数据千万要记得启用index 实例的基元数据你可以预设和动态修改 设置数据相比静态网格体ISM多了一个InstanceIndex 为设置基元数据的目标实例。 左侧为组件基元数据右侧为实例基元数据。
演示
为了展现基元数据不同不影响合批的特性这里用ISM作为示例。
基元设置 制作材质注意组件和实例的基元index是单独计算的 选择组件设置模型和材质并设置基元数据数组长度1 设置实例的基元数据长度3 等效:
蓝图
红色为设置组件基元数据给整体随机一个亮度 绿色为实例的基元数据为每个基元随机一个颜色
效果 技巧
材质
在使用时组件可以不预先设置材质甚至模型。此时基元数据是这样的 显示未声明是不影响实际使用的但切记需要把可能使用的通道的最大数量的提前开启。 例如所切换的材质中最复杂的材质需要使用10个基元数据那么在一开始你就需要开启同样数量的基元数组。
通道使用
通过前面的例子可以看到基元数据应尽可能压缩索引占用例如Color的A通道并未使用却占用了一个位置。 在实际使用中你可以完全使用浮点类型变量通过在材质中拆组通道来避免浪费其实对性能影响微小
也可以尽可能的打包参数 取决于你的风格
常见用法
提供一些举一反三的思路
为材质设置随机值 为每个ISM实例指定不同贴图