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

news2024/11/22 15:01:04

在项目中,经常会遇到这样的需求:多个模型(例如 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实例指定不同贴图
    在这里插入图片描述

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

电子应用设计方案-16:智能全屋灯光系统方案设计

智能全屋灯光系统方案设计 一、系统概述 本智能全屋灯光系统旨在为用户提供便捷、舒适、节能且个性化的照明体验,通过智能化的控制方式实现对全屋灯光的集中管理和灵活调控。 二、系统组成 1. 智能灯具 - 包括吸顶灯、吊灯、壁灯、台灯、筒灯、射灯等多种类型&#…

逆向题(23):nss:2956(花指令)

nss:2956(花指令) 打开主程序后,我们发现在这里有问题。而且跟之前学长讲的不一样。 我们学学长那样,先分解成数据,然后一步步从上往下按c去做,看看最后还会不会报错, 很显然没有…

28.<Spring博客系统⑤(部署的整个过程(CentOS))>

引入依赖 Spring-boot-maven-plugin 用maven进行打包的时候必须用到这个插件。看看自己pom.xml中有没有这个插件 并且看看配置正确不正常。 注&#xff1a;我们这个项目打的jar包在30MB左右。 <plugin><groupId>org.springframework.boot</groupId><artif…

力扣力扣力:860柠檬水找零

860. 柠檬水找零 - 力扣&#xff08;LeetCode&#xff09; 需要注意的是&#xff0c;我们一开始是没有任何钱的&#xff0c;也就是说我们需要拿着顾客的钱去找零。如果第一位顾客上来就是要找零那么我们无法完成&#xff0c;只能返回false。 分析&#xff1a; 上来我们先不分…

[开源] SafeLine 好用的Web 应用防火墙(WAF)

SafeLine&#xff0c;中文名 “雷池”&#xff0c;是一款简单好用, 效果突出的 Web 应用防火墙(WAF)&#xff0c;可以保护 Web 服务不受黑客攻击 一、简介 雷池通过过滤和监控 Web 应用与互联网之间的 HTTP 流量来保护 Web 服务。可以保护 Web 服务免受 SQL 注入、XSS、 代码注…

【动手学深度学习Pytorch】1. 线性回归代码

零实现 导入所需要的包&#xff1a; # %matplotlib inline import random import torch from d2l import torch as d2l import matplotlib.pyplot as plt import matplotlib import os构造人造数据集&#xff1a;假设w[2, -3.4]&#xff0c;b4.2&#xff0c;存在随机噪音&…

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

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

数据集-目标检测系列- 花卉 玫瑰 检测数据集 rose >> DataBall

数据集-目标检测系列- 花卉 玫瑰 检测数据集 rose >> DataBall DataBall 助力快速掌握数据集的信息和使用方式&#xff0c;会员享有 百种数据集&#xff0c;持续增加中。 贵在坚持&#xff01; 数据样例项目地址&#xff1a; * 相关项目 1&#xff09;数据集可视化项…

Linux驱动编程 - kmalloc、vmalloc区别

目录 前言&#xff1a; 1、区别 2、使用差异 一、kmalloc、kzalloc、kfree 1、动态申请 1.1 kmalloc() 1.2 kzalloc() 2、内存释放 3、示例 二、vmalloc、vzalloc、vfree 1、动态申请 1.1 vmalloc() 1.2 vzalloc() 2、内存释放 3、示例 前言&#xff1a; Linux内…

使用低成本的蓝牙HID硬件模拟鼠标和键盘来实现自动化脚本

做过自动化脚本的都知道&#xff0c;现在很多传统的自动化脚本方案几乎都可以被检测&#xff0c;比如基于root&#xff0c;adb等方案。用外置的带有鼠标和键盘功能集的蓝牙HID硬件来直接点击和滑动是非常靠谱的方案&#xff0c;也是未来的趋势所在。 一、使用蓝牙HID硬件的优势…

VideoCrafter模型部署教程

一、介绍 VideoCrafter是一个功能强大的AI视频编辑和生成工具&#xff0c;它结合了深度学习和机器学习技术&#xff0c;为用户提供了便捷的视频制作和编辑体验。 系统&#xff1a;Ubuntu22.04系统&#xff0c;显卡&#xff1a;4090&#xff0c;显存&#xff1a;24G 二、基础…

#渗透测试#SRC漏洞挖掘#Python自动化脚本的编写05之多线程与多进程

免责声明 本教程仅为合法的教学目的而准备&#xff0c;严禁用于任何形式的违法犯罪活动及其他商业行为&#xff0c;在使用本教程前&#xff0c;您应确保该行为符合当地的法律法规&#xff0c;继续阅读即表示您需自行承担所有操作的后果&#xff0c;如有异议&#xff0c;请立即停…

C++多继承:一个子类继承多个父类的情况

C的类继承大家还算比较了解。它主要包括单继承、多继承、虚继承这几方面。 单继承就是一个子类只继承一个父类&#xff0c;多继承就是一个子类继承多个父类。 其实在C中&#xff0c;一个子类继承多个父类的情况还是比较常见的。比如&#xff0c;一个子类需要同时继承两个父类…

在windows电脑上安装docker服务

以下是在 Windows 电脑上安装 Docker 服务的详细步骤&#xff1a; 一、下载 Docker Desktop for Windows 系统要求&#xff1a;Windows 操作系统需要是 Windows 10&#xff08;64 位&#xff09;专业版、企业版或教育版&#xff0c;或者是 Windows 11。并且系统要开启了硬件虚…

单片机UART协议相关知识

概念 UART&#xff08;Universal Asynchronous Receiver/Transmitter&#xff0c;通用异步收发传输器&#xff09; 是一种 异步 串行 全双工 通信协议&#xff0c;用于设备一对一进行数据传输&#xff0c;只需要两根线&#xff08;TX&#xff0c;RX&#xff09;。 异步&…

XXL-JOB执行任务的SpringBoot程序无法注册到调度中心

文章目录 1. 问题呈现2. 问题产生的原因2.1 原因一&#xff1a;执行器和调度中心部署在不同的机器上2.2 原因二&#xff1a;调度中心部署在云服务器上 3. 解决方法3.1 方法一&#xff1a;将执行器和调度中心部署在同一台机器上3.2 方法二&#xff1a;手动指定执行器的ip地址&am…

Ettus USRP X410

总线连接器: 以太网 RF频率范围: 1 MHz 至 7.2 GHz GPSDO: 是 输出通道数量: 4 RF收发仪瞬时带宽: 400 MHz 输入通道数量: 4 FPGA: Zynq US RFSoC (ZU28DR) 1 MHz to 7.2 GHz&#xff0c;400 MHz带宽&#xff0c;GPS驯服OCXO&#xff0c;USRP软件无线电设备 Ettus USRP X410集…

哋它亢SEO技术分析:如何提升网站在搜索引擎中的可见性

文章目录 哋它亢SEO技术分析&#xff1a;如何提升网站在搜索引擎中的可见性网站的基本情况SEO优化分析与建议1. 元数据优化2. 关键词优化3. URL结构4. 图像优化5. 移动端优化6. 网站速度7. 结构化数据&#xff08;Schema Markup&#xff09;8. 内链与外链9. 社交分享 哋它亢SEO…

将网站地址改成https地址需要哪些材料

HTTPS&#xff08;安全超文本传输协议&#xff09;是HTTP协议的扩展。它大大降低了个人数据&#xff08;用户名、密码、银行卡号等&#xff09;被拦截的风险&#xff0c;还有助于防止加载网站时的内容替换&#xff0c;包括广告替换。 在发送数据之前&#xff0c;信息会使用SSL…

mongodb多表查询,五个表查询

需求是这样的&#xff0c;而数据是从mysql导入进来的&#xff0c;由于mysql不支持数组类型的数据&#xff0c;所以有很多关联表。药剂里找药物&#xff0c;需要药剂与药物的关联表&#xff0c;然后再找药物表。从药物表里再找药物与成分关联表&#xff0c;最后再找成分表。 这里…