Unreal 5 实现使用GPU Instancing批量渲染相同的物体

之前做unity的时候,专门研究了使用GPU进行批量相同的物体渲染,现在转ue以后,发现UE也有相同的功能。接下来讲解一下,在ue里面如何实现通过GPU进行实例化渲染。

创建组件

能够实现GPU实例化渲染,ue提供了两个组件,InstancedStaticMesh(实例化静态网格体组件)和HierarchicalInstancedStaticMesh (层级实例化静态网格体组件),这两种的区别是,实例化静态网格体组件,只能渲染一种,层级实例化的意思可以实现lod分级渲染。
在这里插入图片描述
实例化组件只能使用静态网格体,不能够使用骨骼网格体,我这里使用的是之前买的工具将骨骼网格体转换成的静态网格体,我使用它的愿望也是能够大批量的渲染带有动作的模型,虽然效果会比骨骼网格体差一些,但是它是真的省。
在这里插入图片描述
当然,虽然实例化网格体使用的相同的网格体,相同的材质,但是实例化网格体也有一些个性化的信息,比如位置变换,或者自定义颜色等,位置变换已经内置实现,如果别的个性化的数值,需要在实例列表下设置自定义数据浮点数字。这个是长度,如果添加到场景,添加了数据,数组中就会有相关的设置数据。
在这里插入图片描述

实现实例化组件的材质

如果材质在实例化网格体中使用自定义数据,需要使用节点 PerInstanceCustomData,这是一个标量,代表一个浮点数值,中括号内代表自定义数据数组值的下标
在这里插入图片描述

在这里插入图片描述
还有一种代表三个标量值的三维向量
在这里插入图片描述
正常这种自定义数据是在顶点着色器使用的,如果需要在片元着色器使用,需要使用一个节点转换到可以在片元着色器使用
在这里插入图片描述
我这里使用了自定义数据传入一个数值,用作当前顶点播放到的动画的帧数的设置,保证每个模型播放的自己需要播放的动画
在这里插入图片描述

相关节点

现在有了实例化模型,也有了材质相关的设置。接下来介绍一下在蓝图中给实例化模型添加实例,以及更新数据和位置变换。
添加实例我们需要使用实例化模型的添加实例节点,可以传入一个变换设置位置,并且World Space的设置了以后,直接设置模型在场景中的位置,而不是基于实例化模型的位置的变换。
添加实例节点将返回实例在数组中的索引。我们设置自定义数据以及后续的自定义数据都需要索引去设置。
在这里插入图片描述
设置实例的自定义数据值,就是可以材质的之前设置的自定义的数据,用于实现模型的个性需求。
目标是实例化静态网格体组件
Instance Index 是添加实例返回的索引
Custom Data Index 是自定义数据的索引,自定义数据需要一个一个值单独设置
Custom Data Value 是自定义数据的值
Mark render state Dirty 将在帧结束时发送值到渲染线程
在这里插入图片描述
修改实例的位置变换
目标是实例化静态网格体组件
Instance Index 是实例的索引
New Instance Transform 是新的位置变换
World Space 设置的是否是场景坐标
Mark Render State Dirty 是否在帧结束时发送值到渲染线程
Teleport 是否产生冲量去影响其它模拟物理的模型,产生模拟物理的效果(如果为true,物体将不是设置位置,而是一个很大的速度移动到目标位置,并对途中的物体产生物理冲量)
在这里插入图片描述
有添加就有清除,清除实例有两个,一个是全清
在这里插入图片描述
一个是通过实例索引清除,只清除目标实例
在这里插入图片描述
还有一个可以传入一个数组,清除多个实例
在这里插入图片描述

注意事项

如果你使用顶点动画去播放模型效果,会发现动画播放时,会产生残影,这个效果出现的原因是默认的抗锯齿后处理出现的。
解决这个问题最简单的方式就是换一个抗锯齿效果
延迟渲染管线默认的抗锯齿是临时超分辨率TSR抗锯齿,就是这个造成的,MSAA在延迟渲染管线比较耗,不推荐,我使用的第一个,比较省,直接在后处理里面性能比较稳定。
在这里插入图片描述

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

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

相关文章

最新导则下生态环评报告编制技术暨报告篇、制图篇、指数篇、综合应用篇教程

详情点击链接:最新导则下生态环评报告编制技术暨报告篇、制图篇、指数篇、综合应用篇 一,生态环评报告编制规范 结合生态环境影响评价最新导则,详述不同类型项目生态环评报告编制要求与规范 二,土地利用图 1、土地利用分类体系…

go系列-读取文件

1 概述 2 整个文件读入内存 直接将数据直接读取入内存,是效率最高的一种方式,但此种方式,仅适用于小文件,对于大文件,则不适合,因为比较浪费内存。 2.1 直接指定文化名读取 在 Go 1.16 开始,i…

HackTheBox - 学院【CPTS】复习4 - Web Attacks

Web Attacks 本模块涵盖三种常见的 Web 漏洞,即 HTTP 动词篡改、IDOR 和 XXE,每个漏洞都可能对公司的系统产生重大影响。我们将介绍如何通过各种方法识别、利用和防止它们中的每一个。 HTTP HEAD/GET/POST/PUT/OPTIONS IDOR寻找 一般能够从前端js找到…

.Net 4726.0 Razor编译时的小差异

前言 几个月前在进行着.Net 472到6.0的升级,复用原有代码,在对Razor进行迁移中,发现原运行正常的代码,却存在报错,深入研究发现是Core下对Razor编译有一些变动。 问题复现 472 创建视图 新建.Net Framework下Mvc&#…

软件测试的自动化工具

在软件开发过程中,测试是必不可少的一个环节。而在测试中,测试人员需要花费大量的时间和精力进行手动测试,这不仅费时费力,而且效率较低。因此,自动化测试工具的出现为测试人员提供了更加便捷高效的测试方法。本文将介…

(二)Qt QGraphicsScene模块实现圆点绘制在所有窗体的最前方,实现圆点的“彩色拖尾”效果以及“选中方框”效果

系列文章目录 通过Qt实现手势识别控制软件操作相关系列技术方案 (一)Qt 将某控件、图案绘制在最前面的方法,通过QGraphicsScene模块实现 (二)Qt QGraphicsScene模块实现圆点绘制在所有窗体的最前方,实现圆…

Spring Boot 中的 WebSocketSession 是什么,原理,如何使用

Spring Boot 中的 WebSocketSession 是什么,原理,如何使用 介绍 在现代 Web 应用程序中,实时通信是一个非常常见的需求。传统的 HTTP 协议是无法支持实时通信的,因为它是一种无状态协议,每次请求都是独立的&#xff0…

LangChain:LLM应用程序开发(上)——Models、Prompt、Parsers、Memory、Chains

文章目录 一、Models、Prompt、Parsers1.1 环境配置(导入openai)1.2 辅助函数(Chat API : OpenAI)1.3 使用OpenAI API进行文本翻译1.4使用LangChain进行文本翻译1.5 使用LangChain解析LLM的JSON输出1.5.1 LangChain输出为string格…

基于Java的万年历(课设)

基于Java的万年历 资源链接:基于Java的万年历(课设) 文章目录 基于Java的万年历1 绪论2 需求分析3 概要设计3.1 类间组合框架3.2 布局结构示意3.3 对各个类的概述 4运行环境5 开发工具和编辑语言6 详细设计6.1 NiceCaelendar类6.2 NiceFram…

LeetCode 2501 数组中最长的方波 Java

方法一,哈希表枚举 构造哈希集合,记录出现过的数字枚举遍历 import java.util.HashSet; import java.util.Set;class Solution {public int longestSquareStreak(int[] nums) {//构造哈希表集合,记录出现过的数字,转long型&…

如何在Microsoft Excel中迅速冻结首行和末行

如果你正在处理一个大型电子表格,那么冻结某些行或列会很有用,这样当你滚动浏览工作表的其余部分时,它们会留在屏幕上。 当你在 Excel 中滚动浏览大的工作表时,你可能希望保留一些行或列,例如页眉。Excel 允许你通过以…

2023年华中杯数学建模B题小学数学应用题相似性度量及难度评估解题全过程文档及程序

2023年华中杯数学建模 B题 小学数学应用题相似性度量及难度评估 原题再现 某 MOOC 在线教育平台希望能够进行个性化教学,实现用户自主学习。在用户学习时,系统从题库中随机抽取若干道与例题同步的随堂测试题,记录、分析学生的学习和答题信息…

网络安全实战植入后门程序

在 VMware 上建立两个虚拟机:win7 和 kali。 Kali:它是 Linux 发行版的操作系统,它拥有超过 300 个渗透测试工具,就不用自己再去找安装包,去安装到我们自己的电脑上了,毕竟自己从网上找到,也不…

前端Vue自定义轮播图swiper 轮播图dot 轮播图指示indicate

前端Vue自定义轮播图swiper 轮播图dot 轮播图指示indicate,下载完整代码请访问uni-app插件市场地址:https://ext.dcloud.net.cn/plugin?id13193 效果图如下: ​ 编辑切换为居中 添加图片注释,不超过 140 字(可选) ​…

【HTTP 协议1】图文详解 HTTP 请求和应答报文

文章目录 前言一、认识 HTTP 协议1, 什么是 HTTP 协议2, HTTP 协议的报文格式 二、HTTP 请求报文1, 认识方法1.1, GET 和 POST 辨析(重点)1.2, 其他方法 2, 认识 URL3, 认识 Header3.1, Host3.2, Content-Length3.3 Content-Type3.4, User-Agent3.5, Referer3.6, Cookie(重点) …

【C#】并行编程实战:任务并行性(下)

本教程对应学习工程:魔术师Dix / HandsOnParallelProgramming GitCode 本章继续介绍任务并行性,因篇幅所限,本章为下篇。 6、处理任务异常 所有优秀的程序员都擅长高效地处理异常,这也是并行编程最重要的方面之一。任务并…

JMeter请求头添加删除方法(解决请求头类型冲突)

JMeter请求头添加删除方法(解决请求头类型冲突) 1. 为什么会有冲突 请求头的Content-Type类型在做上传和请求图片地址是,请求头类型是不一样的 请求图片地址:Content-Type: image/jpeg 一般的Restful接口:Content-Ty…

SpringBoot整合logback日志框架详解(提供Gitee源码)

前言:本篇博客主要介绍如何把主流的日志框架快速整合到目前的SpringBoot框架中,对六种日志等级进行介绍以及使用方法。 目录 一、日志级别 1、TRACE 2、DEBUG 3、INFO 4、WARN 5、ERROR 6、FATAL 二、导入pom.xml依赖 三、application.yml配置…

JS 1.如何实现继承 2.原型和原型链

1_使用class实现继承 /** 继承 */ class Person { constructor(name) { this.name name;}drink() { console.log(喝水)} }class Student extends Person{ constructor(name, score) { // new Personsuper(name);this.score score;}introduce() { console.log(我是${this.nam…

RISCV Reader笔记_4 乘除,浮点扩展

乘法和除法指令 前面了解过 RV32I不带乘除。扩展的RV32M里面有。 mul 较简单。div 是商,rem 是余数。 指令格式都差不多,基本就是靠 func 码确定变体。 因为两个32位数乘积是64位数,一条指令处理会比较复杂,因此分为两个指令计算…