【UE5】使用基元数据对材质传参,从而避免新建材质实例

在项目中,经常会遇到这样的需求:多个模型(例如 100 个)使用相同的材质,但每个模型需要不同的参数设置,比如不同的颜色或随机种子等。

在这种情况下,创建 100 个实例材质不是最佳选择。正确的做法是通过模型的基元数据向材质传递参数。

这种方法不会因为新建实例材质而产生成本。

最重要的是,相同的模型,相同的材质,不会因为基元数据不同而影响合批。

在操作上StaticMeshInstancedStaticMesh是有少许区别的。
在这里插入图片描述

StaticMesh

先以StaticMesh为例。

创建材质

在流程上,虽然不是必须的,但通常需要先创建材质:
在这里插入图片描述

设置变量为基元数据

为材质勾选使用基元数据:
在这里插入图片描述
基元数据是一个浮点数组,一个4通道变量,占用了0123四个索引位置
在这里插入图片描述

所以第二个变量在勾选基元数据后,需要按顺序填4
在这里插入图片描述

自定义基元数据面板可以助你参考index设置
在这里插入图片描述
在这里插入图片描述

模型设置

将材质赋予模型,在细节面板,就可以看到材质中可以使用的基元数据。
在这里插入图片描述

关键一步

可以看到数据后面是+ 号,也就是并未启用。
点击+号,需要将其全部启用,变成有默认值的状态:
在这里插入图片描述

这样,你就可以手动为每个模型创建不同材质参数,而并不需要为其新建实例材质了。

在蓝图中设置

搜索基元,就可以看到可以使用的函数
在这里插入图片描述

基本上分为两种,一种是使用名字设置,一种是使用index设置
在这里插入图片描述

如果是构建函数

要特别强调的是,在构建函数中,要使用可以被序列化的"默认基元数据",这样你的设置才能保存到下次启动项目:

在这里插入图片描述


InstancedStaticMesh

在ISM中使用基元数据,要注意的是,ISM组件的基元数据,和ISM组件中实例的基元数据是并存的。

这是组件:
在这里插入图片描述
这是实例:
在这里插入图片描述
他们是并存的

看实例的基元数据如何实现的,假如ISM有2个实例,每个实例2个参数,那么一共记录为4个,所以实例并不是独立储存了参数

在这里插入图片描述

左侧是组件基元数据和之前一样。新增的是右侧的实例基元数据变量节点,除了不能"起名"用法和之前一样:
在这里插入图片描述

在蓝图中设置

关键一步

如果你的ISM组件也需要使用基元数据,千万要记得启用index!
在这里插入图片描述
实例的基元数据,你可以预设和动态修改:
在这里插入图片描述

在这里插入图片描述

设置数据相比静态网格体ISM多了一个InstanceIndex ,为设置基元数据的目标实例。
左侧为组件基元数据,右侧为实例基元数据。
在这里插入图片描述

演示

为了展现基元数据不同不影响合批的特性,这里用ISM作为示例。

基元设置

  1. 制作材质,注意组件和实例的基元index是单独计算的:
    在这里插入图片描述

  2. 选择组件,设置模型和材质,并设置基元数据数组长度1:
    在这里插入图片描述
    在这里插入图片描述

  3. 设置实例的基元数据长度3
    在这里插入图片描述
    等效:
    在这里插入图片描述

蓝图

红色为设置组件基元数据,给整体随机一个亮度
绿色为实例的基元数据,为每个基元随机一个颜色
在这里插入图片描述

效果

在这里插入图片描述

技巧

材质

在使用时,组件可以不预先设置材质,甚至模型。此时基元数据是这样的:
在这里插入图片描述
显示未声明是不影响实际使用的,但切记需要把可能使用的通道的最大数量的提前开启。
例如所切换的材质中,最复杂的材质需要使用10个基元数据,那么在一开始你就需要开启同样数量的基元数组。

通道使用

通过前面的例子可以看到,基元数据应尽可能压缩索引占用,例如ColorA通道并未使用,却占用了一个位置。
在实际使用中,你可以完全使用浮点类型变量,通过在材质中拆组通道来避免浪费(其实对性能影响微小)
在这里插入图片描述

也可以尽可能的打包参数
在这里插入图片描述
在这里插入图片描述
取决于你的风格

常见用法

提供一些举一反三的思路

  1. 为材质设置随机值
    在这里插入图片描述
  2. 为每个ISM实例指定不同贴图
    在这里插入图片描述

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

Python-简单病毒程序合集(一)

前言:简单又有趣的Python恶搞代码,往往能给我们枯燥无味的生活带来一点乐趣,激发我们对编程的最原始的热爱。那么话不多说,我们直接开始今天的编程之路。 编程思路:本次我们将会用到os,paltform,threading,ctypes,sys,…

初级数据结构——串

目录 前言一、串的定义二、串的存储结构三、串的基本操作四、串的模式匹配五、串的应用六、c代码模版七、经典例题1.汉字统计代码题解 2.查找最大元素代码题解 3.首字母变大写代码题解 八、总结结语 前言 这期我们一起深入学习初级数据结构——串,数据结构中的串&a…

【K8S系列】Kubernetes Pod节点ImagePullBackOff 状态及解决方案详解【已解决】

在 Kubernetes 中,当某个 Pod 的容器无法从指定的镜像仓库拉取镜像时,Pod 的状态会变为 ImagePullBackOff。这通常是因为指定的镜像不存在、镜像标签错误、认证失败或网络问题等原因。 以下是关于 ImagePullBackOff 的详细分析及解决方案。 1. ImagePull…

CSS3新特性——字体图标、2D、3D变换、过渡、动画、多列布局

目录 一、Web字体 二、字体图标 三、2D变换 1.位移 (1)浮动 (2)相对定位 (3)绝对定位和固定定位 (4)位移 用位移实现盒子的水平垂直居中 2.缩放 利用缩放调整字体到12px以下&#xff…

前端项目规范~

前言 项目一般都是几个开发一起迭代升级,那肯定存在各种代码风格、格式化以及命名等等,懂得都懂💩,所以项目规范就凸显出来了呀,以下主要是介绍工具自动化使用~ husky 安装husky pnpm add --save-dev husky .husk…

【编译器】Dev C++建立C语言工程

【编译器】Dev C建立C语言工程 文章目录 [TOC](文章目录) 前言一、创建工程二、添加.c.h三、主函数处理四、在桌面中打开exe文件五、参考资料总结 前言 在使用了很多编译器之后, 要么是太大了, 要么是太新了, 要么是在线编译器,用…

CHIMA网络安全攻防大赛经验分享

比赛模式 第一轮:20分钟基础知识赛(50道题) 安全运维,法律法规,linux操作系统等 第二轮:50分钟CTF夺旗(5道题) 题目涵盖 密码学 运用多种工具,如ASCII对照&#xff0c…

基于yolov8、yolov5的植物类别识别系统(含UI界面、训练好的模型、Python代码、数据集)

项目介绍 项目中所用到的算法模型和数据集等信息如下: 算法模型:     yolov8、yolov8 SE注意力机制 或 yolov5、yolov5 SE注意力机制 , 直接提供最少两个训练好的模型。模型十分重要,因为有些同学的电脑没有 GPU&#xff0…

JavaWeb开发10

多表设计 一对多 关系实现:在数据库表中多的一方添加字段来关联一的一方的主键 外键约束 一对一 关系:一对一关系,多用于单表拆分,将一张表的基础字段放在一张表中,其他字段放在另一张表中,以提高操作…

leetcode-12-整数转罗马数字

题解: 1、初始化字典: 2、 代码:

Seatunnel解决Excel中无法将数字类型转换成字符串类型以及源码打包

需求 需要实现将Excel中的数字类型的单元格像数据库中字符串类型的字段中推送 问题原因 Seatunnel在读取字段类型的时候都是使用强转的形式去获取数据的 假如说数据类型不一样的话直接强转就会报错 修改位置 org/apache/seatunnel/api/table/type/SeaTunnelRow.java org…

Keil基于ARM Compiler 5的工程迁移为ARM Compiler 6的工程

环境: keil版本为5.38,版本务必高于5.30 STM32F4的pack包版本要高于2.9 软件包下载地址:https://zhuanlan.zhihu.com/p/262507061 一、更改Keil中编译器 更改后编译,会报很多错,先不管。 二、更改头文件依赖 观察…

JeecgBoot 与分布式事务 Seata v1.7.0 集成实战

准备环境 一、创建四个数据库,如下 jeecg_order(订单数据库) jeecg_account(账户数据库) jeecg_product(商品数据库) seata(seata数据库)以上数据库脚本已存放至 jeecg…

鸿蒙动画开发07——粒子动画

1、概 述 粒子动画是在一定范围内随机生成的大量粒子产生运动而组成的动画。 动画元素是一个个粒子,这些粒子可以是圆点、图片。我们可以通过对粒子在颜色、透明度、大小、速度、加速度、自旋角度等维度变化做动画,来营造一种氛围感,比如下…

MAC创建一个自动操作,启动系统【睡眠】功能,并将绑定快捷键

目的 通过 Automator 创建一个服务来启动系统【睡眠】这个功能,并绑定快捷键。 步骤一:创建 Automator 服务 打开 Automator: ○ 在 Spotlight 中搜索 Automator,然后打开。选择服务类型: ○ 在 Automator 的启动界…

基于AIRTEST和Jmeter、Postman的自动化测试框架

基于目前项目和团队技术升级,采用了UI自动化和接口自动化联动数据,进行相关测试活动,获得更好的测试质量和测试结果。

HarmonyOS4+NEXT星河版入门与项目实战------Button组件

文章目录 1、控件图解2、案例实现1、代码实现2、代码解释3、运行效果4、总结1、控件图解 这里我们用一张完整的图来汇整 Button 的用法格式、属性和事件,如下所示: 按钮默认类型就是胶囊类型。 2、案例实现 这里我们实现一个根据放大和缩小按钮来改变图片大小的功能。 功…

5、深入剖析PyTorch DataLoader源码

文章目录 1. 重要类2. DataSet3. DataLoader4. Python实例 参考大神B站,记录学习笔记 5、深入剖析PyTorch DataLoader源码 其他大神笔记: pytorch数据操作—dataset,dataloader,transform 1. 重要类 Data LoaderDatasetSampleRa…

D74【 python 接口自动化学习】- python 基础之HTTP

day74 http基础定义 学习日期:20241120 学习目标:http定义及实战 -- http基础介绍 学习笔记: HTTP定义 HTTP 是一个协议(服务器传输超文本到浏览器的传送协议),是基于 TCP/IP 通信协议来传递数据&…

非对称之美(贪心)

非对称之美(贪心) import java.util.*; public class Main{public static void main(String[] arg) {Scanner in new Scanner(System.in);char[] ch in.next().toCharArray(); int n ch.length; int flag 1;for(int i 1; i < n; i) {if(ch[i] ! ch[0]) {flag …