【UE5】使用基元数据对材质传参,从而避免新建材质实例
在项目中,经常会遇到这样的需求:多个模型(例如 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实例指定不同贴图
相关文章:
【UE5】使用基元数据对材质传参,从而避免新建材质实例
在项目中,经常会遇到这样的需求:多个模型(例如 100 个)使用相同的材质,但每个模型需要不同的参数设置,比如不同的颜色或随机种子等。 在这种情况下,创建 100 个实例材质不是最佳选择。正确的做…...
鸿蒙动画开发07——粒子动画
1、概 述 粒子动画是在一定范围内随机生成的大量粒子产生运动而组成的动画。 动画元素是一个个粒子,这些粒子可以是圆点、图片。我们可以通过对粒子在颜色、透明度、大小、速度、加速度、自旋角度等维度变化做动画,来营造一种氛围感,比如下…...
IDEA2023 创建SpringBoot项目(一)
一、Spring Boot是由Pivotal团队提供的全新框架,其设计目的是用来简化新Spring应用的初始搭建以及开发过程。该框架使用了特定的方式来进行配置,从而使开发人员不再需要定义样板化的配置。 二、快速开发 1.打开IDEA选择 File->New->Project 2、…...
VSCode:终端打开一片空白,无cmd
第一步:找到右下角设置图标 第二步:找到 Terminal - Integrated - Default Profile: Windows: 选择一个本地存在的命令方式,重启即可 也可以直接在右下角直接选择...
Zea maize GO
1.涉及到新旧基因组的转化 B73v4_to_B73v5 (davidbioinformatics只支持新版基因组) MaizeGDB Map文件下载https://download.maizegdb.org/Pan-genes/B73_gene_xref/小处理脚本(制作map文件) import pandas as pd# 读取CSV文件 …...
Android开发实战班 - 数据持久化 - 数据加密与安全
在 Android 应用开发中,数据安全至关重要,尤其是在处理敏感信息(如用户密码、支付信息、个人隐私数据等)时。数据加密是保护数据安全的重要手段,可以有效防止数据泄露、篡改和未经授权的访问。本章节将介绍 Android 开…...
EDA实验设计-led灯管动态显示;VHDL;Quartus编程
EDA实验设计-led灯管动态显示;VHDL;Quartus编程 引脚配置实现代码RTL引脚展示现象记录效果展示 引脚配置 #------------------GLOBAL--------------------# set_global_assignment -name RESERVE_ALL_UNUSED_PINS "AS INPUT TRI-STATED" set_…...
Eclipse 查找功能深度解析
Eclipse 查找功能深度解析 Eclipse 是一款广受欢迎的集成开发环境(IDE),它为各种编程语言提供了强大的开发工具。在本文中,我们将深入探讨 Eclipse 的查找功能,这是开发者日常工作中不可或缺的一部分。无论是查找代码中的特定字符串,还是进行更复杂的搜索,如正则表达式…...
第三百二十九节 Java网络教程 - Java网络UDP套接字
Java网络教程 - Java网络UDP套接字 TCP套接字是面向连接的,基于流。基于UDP的套接字是无连接的,基于数据报。 使用UDP发送的数据块称为数据报或UDP数据包。每个UDP分组具有数据,目的地IP地址和目的地端口号。 无连接套接字在通信之前不建立…...
Leetcode215. 数组中的第K个最大元素(HOT100)
链接 第一次: class Solution { public:int findKthLargest(vector<int>& nums, int k) {sort(nums.begin(),nums.end());int n nums.size();return nums[n-k];} }; 这显然不能出现在面试中,因为面试官考察的不是这个。 正确的代码&#…...
QT与嵌入式——搭建串口
1、源码 由于我需要不止一个串口来进行数据交互,所以简单的封装了一下 void Usb_Init(QString portName, QSerialPort *Port) {Port->setPortName(portName);Port->setBaudRate(QSerialPort::Baud115200); // 设置波特率,根据你的开发板配置修改…...
Shell编程-6
声明:学习视频来自b站up主 泷羽sec,如涉及侵权马上删除文章 感谢泷羽sec 团队的教学 视频地址:shell(6)if条件判断与for循环结构_哔哩哔哩_bilibili 一、if条件判断 在Shell脚本中,if语句用于基于条件的评估来执行不同的代码块。…...
使用 Postman 设置 Bearer Token 进行身份验证
学习笔记 1. 打开 Postman 并创建新请求 打开 Postman。 在左上角点击 按钮,创建一个新的请求。 2. 选择 HTTP 方法 在请求类型(默认为 GET)旁边的下拉菜单中,选择你需要的 HTTP 方法,如 POST、GET、PUT 等。 3…...
现在转前端怎么样?
互联网技术日新月异,软件开发者追逐技术浪潮的脚步从未停歇。在这个快速发展的行业中,如何规划自己的职业道路,选择合适的技术方向,成为了许多开发者面临的重要抉择。本文将围绕技术选择这个话题,分享一些深入的思考和…...
【算法一周目】滑动窗口(1)
目录 长度最小的子数组 解题思路 代码实现 无重复字符的最大字串 解题思路 代码实现 最大连续1的个数l l l 解题思路 代码实现 将x减到0的最小操作数 解题思路 代码实现 长度最小的子数组 题目链接:209. 长度最小的子数组题目描述: 给定一个…...
React Native 基础
React 的核心概念 定义函数式组件 import组件 要定义一个Cat组件,第一步要使用 import 语句来引入React以及React Native的 Text 组件: import React from react; import { Text } from react-native; 定义函数作为组件 const CatApp = () => {}; 渲染Text组件...
【C++笔记】list使用详解及模拟实现
前言 各位读者朋友们大家好!上期我们讲了vector的使用以及底层的模拟实现,这期我们来讲list。 目录 前言一. list的介绍及使用1.1 list的介绍1.2 list的使用1.2.1 list的构造1.2.2 list iterator的使用1.2.3 list capacity1.2.4 list element access1.…...
【机器学习】机器学习中用到的高等数学知识-7.信息论 (Information Theory)
熵 (Entropy):用于评估信息的随机性,常用于决策树和聚类算法。交叉熵 (Cross-Entropy):用于衡量两个概率分布之间的差异,在分类问题中常用。 信息论作为处理信息量和信息传输的数学理论,在机器学习中具有广泛的应用。…...
《现代制造技术与装备》是什么级别的期刊?是正规期刊吗?能评职称吗?
问题解答 问:《现代制造技术与装备》是不是核心期刊? 答:不是,是知网收录的第二批认定学术期刊。 问:《现代制造技术与装备》级别? 答:省级。主管单位:齐鲁工业大学࿰…...
09 - Clickhouse的SQL操作
目录 1、Insert 1.1、标准 1.2、从表到表的插入 2、Update和Delete 2.1、删除操作 2.2、修改操作 3、查询操作 3.1、with rollup:从右至左去掉维度进行小计 3.2、with cube : 从右至左去掉维度进行小计,再从左至右去掉维度进行小计 3.3、with …...
如何解决pdf.js跨域从url动态加载pdf文档
摘要 当我们想用PDF.js从URL加载文档时,将会因遇到跨域问题而中断,且是因为会触发了PDF.js和浏览器的双重CORS block,这篇文章将会介绍:①如何禁用pdf.js的跨域?②如何绕过浏览器的CORS加载URL文件?②如何使…...
深入理解TTY体系:设备节点与驱动程序框架详解
往期内容 本专栏往期内容:Uart子系统 UART串口硬件介绍 interrupt子系统专栏: 专栏地址:interrupt子系统Linux 链式与层级中断控制器讲解:原理与驱动开发 – 末片,有专栏内容观看顺序 pinctrl和gpio子系统专栏…...
库的操作(MySQL)
1.创建数据库 语法: CREATE DATABASE [IF NOT EXISTS] db_name [create_specification [, create_specification] ...] create_specification:[DEFAULT] CHARACTER SET charset_name[DEFAULT] COLLATE collation_name说明: 大写的表示关键字 [ ] 是可…...
在 for 循环中,JVM可能会将 arr.length 提升到循环外部,仅计算一次。可能会将如何解释 详解
在 Java 的 for 循环中,JVM 有能力进行优化,将 arr.length 的访问提升到循环外部,避免每次迭代都重新计算 arr.length。这种优化主要是由于 JVM 的 即时编译器(JIT) 和 逃逸分析(Escape Analysis࿰…...
回溯--数据在内存中的存储:整数、大小端和浮点数的深度解析
目录 引言 1. 整数在内存中的存储 1.1 原码、反码和补码 1.2 为什么使用补码? 1.3 示例代码:整数的存储 2. 大小端字节序和字节序判断 2.1 什么是大端和小端? 2.2 为什么会有大端和小端之分? 2.3 字节序的判断小程序 2.…...
第二十二章 Spring之假如让你来写AOP——Target Object(目标对象)篇
Spring源码阅读目录 第一部分——IOC篇 第一章 Spring之最熟悉的陌生人——IOC 第二章 Spring之假如让你来写IOC容器——加载资源篇 第三章 Spring之假如让你来写IOC容器——解析配置文件篇 第四章 Spring之假如让你来写IOC容器——XML配置文件篇 第五章 Spring之假如让你来写…...
探索设计模式:原型模式
设计模式之原型模式 🧐1. 概念🎯2. 原型模式的作用📦3. 实现1. 定义原型接口2. 定义具体的原型类3. 定义客户端4. 结果 📰 4. 应用场景🔍5. 深拷贝和浅拷贝 在面向对象编程中,设计模式是一种通用的解决方案…...
NLP论文速读(EMNLP 2023)|工具增强的思维链推理
论文速读|ChatCoT: Tool-Augmented Chain-of-Thought Reasoning on Chat-based Large Language Models 论文信息: 简介: 本文背景是关于大型语言模型(LLMs)在复杂推理任务中的表现。尽管LLMs在多种评估基准测试中取得了优异的成绩…...
JVM垃圾回收详解.②
空间分配担保 空间分配担保是为了确保在 Minor GC 之前老年代本身还有容纳新生代所有对象的剩余空间。 《深入理解 Java 虚拟机》第三章对于空间分配担保的描述如下: JDK 6 Update 24 之前,在发生 Minor GC 之前,虚拟机必须先检查老年代最大…...
什么是事务,事务有什么特性?
事务的四大特性(ACID) 原子性(Atomicity) 解释:原子性确保事务中的所有操作要么全部完成,要么全部不做。这意味着事务是一个不可分割的工作单元。在数据库中,这通常通过将事务的操作序列作为一个…...
太原免费网站建设/seo关键词推广话术
好久没写东西了,去年用了angular2的RC版本和ionic2写了一个项目,因为开发周期和有些版本不稳定,所以一直没有升级,ng2新版本引用Aot打包,听说优化还不错,现在尝试升级ionic2、angular2到最新版本࿰…...
兰州网站建设哪家好/网站排名软件有哪些
《Chip Design》杂志上最近的一篇文章指出,便携式和无线系统有了巨大的增长,并且与软件的关联越来越大,这让嵌入式系统面临很大的挑战。我们需要对质量问题给予特别的关注,特别是在对安全性要求较高的系统中。正如杂志所做结论所说…...
在国内怎么做国外网站/世界杯排名
告知:各位学员,名单来源于各院校招生官网,2019年参加考研的同学可以参考。名单作用:参考使用,对于报考院校有一定指导意义,录取名单可以看出压线进复试的同学到底有多大几率录取,考这个院校是拼…...
专门做二维码的网站/微信scrm系统
随着互联网的快速发展,越来越多的支付APP出现,改变着人们的生活,给国人带来了很大的方便。众多的支付APP中,支付宝和微信支付市场占有率最高;现在各行各业都在使用支付宝和微信支付进行交易。 现在市场支付宝和微信支付…...
衡阳县做淘宝网站建设/怎么创建一个自己的网站
每到期末,学生忙着考试,老师也最忙,忙统计学生平时成绩,忙着批改考试卷,忙着统计学生的最终成绩。然而杭电授课教师在统计学生平时成绩时,大多很便捷,因为“用上了上课啦APP”。“我是上课啦APP…...
专业上海网站建设公司/chrome浏览器
本文使用js实现了一个简单的加、减、乘、除计算器。 以下是css部分代码: *{padding:0;margin:0;color: #424242; }.outer{width:300px;height:auto;outline:1px solid #b9b9b9;margin:50px auto;background: pink; }.title{height:40px;width:100%;border-bottom:1p…...