UE基础 —— Components

2024-08-24 05:04
文章标签 基础 ue components

本文主要是介绍UE基础 —— Components,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

目录

Component Instancing

Instanced Static Mesh Component

Instanced Static Mesh

Differences of an ISM and a Static Mesh Component

Hierarchical Instanced Static Mesh

Instancing Systems

Working with ISMs

Prefabrication

Custom Data

Creating and Editing ISMs


        组件(Component)是可以添加给Actor的一项功能;当为Actor添加组件后,Actor就可以使用组件提供的功能;如:

  • "聚光源(Spot Light)组件"将使Actor像聚光源一样发光;
  • "旋转运动(Rotating Movement)组件"将使Actor旋转;
  • "音频(Audio)组件"将使Actor能够播放声音;

与Actor不同,组件不能单独存在,只能绑定在Actor身上;

        为Actor添加组件的过程,相当于为Actor添加各个零件;例如,一辆汽车(Actor)由车轮、方向盘、车身、车灯等(组件)组成;再例如,玩家角色Actor通常包含一个单独的"骨骼网格体(Skeletal Mesh)"组件(表示角色外观)、跟随角色移动的摄像机,以及接收玩家输入的控制器;

        添加完构成Actor的不同组件后,即使不提供指示Actor应如何运行的任何 蓝图(Blueprint)脚本(或C++代码),也可以将Actor放置在关卡中;在上面的示例中,汽车(Actor)可以作为对象存在于世界(关卡)中,无需任何驱动程序(蓝图或C++代码)告诉它要执行什么操作;然后,可以使用蓝图或C++代码单独访问汽车的每个组件(例如,如果按下油门组件,蓝图逻辑可以使汽车加速);

Component Instancing

        与一般子对象的默认行为不同,Actor中充当子对象的各种组件都是实例化的,所有某个类的Actor实例都有着单独的组件实例;

        为了理解这点,想象一下上面的汽车示例;一个"汽车(Car)"类使用组件来表示汽车的车轮;四个"车轮(Wheel)"组件是该类的默认属性中的四个子对象,并指定给了"车轮(Wheels)"数组。当创建新的汽车实例时,会专门为该汽车实例新建"车轮(Wheel)"组件实例;否则,当世界中一辆汽车移动时,所有汽车的车轮都会转动;这显然不是预期的行为;让组件默认进行实例化,免去了为Actor添加唯一子对象的麻烦;

Instanced Static Mesh Component

        Actors的数量会影响性能,可以将相同的网格体打组到一个actor中作为实例化静态网格(ISM)组件,而不是在关卡中重复使用静态网格体actor;

Instanced Static Mesh

        ISM是一个包含一组相同静态网格的组件,组件中的每个静态网格代表静态网格资源的一个实例;ISM帮助提升性能,如降低 UOBjects 的内存;

Details Panel

        一个 instanced static mesh 是一个actor的组件,可在Details Panel内查看;另外,可在细节面板内查看和修改:

  • 被应用于actor组件的 static mesh 资产;
  • 组件内实例的数量;
  • 所有实例使用的材质;
  • 自定义每实例数据;
  • LOD;
  • 实例culling距离;
  • 面板中常见的其他属性;

Differences of an ISM and a Static Mesh Component

        当拖拽一个 static mesh asset 到关卡内,引用该资产的 static mesh actor 将自动被创建;一个actor内的每个static mesh通过组件引用;默认,当拖拽一个 static mesh asset 到关卡内,一个 static mesh component 被应用;

  • Static Mesh Component,具有自己的变换、材质和碰撞的单个静态网格表示;
  • Instanced Static Mesh Component,表示指定的静态网格的多个实例,共享相同的材质和碰撞特性;通常用于更有效地渲染使用不同的变换的相同静态网格;

Hierarchical Instanced Static Mesh

        传统上,分层实例化静态网格(HISM)为每个实例唯一应用细节级别(LOD),而ISM则将LOD应用于整个组件边界;但对于在5.4或更高版本中创建的项目,可以为ISM的每个实例使用LOD;

        LOD是同一网格在不同三角形数下的数组,具体取决于其在视口中的屏幕空间;减少三角形计数有助于减少计算时间,提高优化效率;可在Details panel调节ISM和HISM的LOD;

HISM和ISM的不同:

  • 如有1000个不移动的实例,HISM可能更好;在这种情况下,使用静态层次结构来加速culling和LOD过程;
    • 如有许多不完全静态的实例,则使用HISM的项目中可能会出现错误;
  • ISM没有静态层次结构,必须在GPU上cull & LOD每个实例,这在低功耗平台上可能很昂贵;
  • 如希望LOD与静态网格行为相匹配,则不能依赖HISM,因为它会处理多组实例;当单个LOD不是很重要时,HISM最有用;例如,具有少量三角形的网格;
  • 如项目只使用Nanite,那么ISM总是你的选择,因为Nanite有自己的culing和LOD系统;

Instancing Systems

        虚幻引擎提供了将实例优化应用于网格的系统;这些系统(如Nanite)的使用取决于项目和目标平台;

  • Dynamic Instancing,通过组合具有相同材质和网格的静态网格绘制,可以减少绘制调用;
  • Nanite,虚拟化几何系统,其中框架预算不再受多边形计数、绘图调用和网格内存使用的限制;可以在ISM和HISM组件中引用启用了Nanite的网格;
  • Procedural Content Generation,程序生成内容的框架;
  • Niagara,创建视觉效果的系统,在渲染时实例化粒子网格体;

Working with ISMs

        ISM的主要功能是提高项目的性能;如果逐一复制每一片树叶,绘制森林的速度会非常慢;使用Folage Mode等工具,可以通过同时放置多个分组实例来节省工作流和计算时间;

Prefabrication

        将相同的静态网格分组到一个组件中,是设计优化关卡的有价值的工作流程;ISMs可以帮助完成关卡设计,例如在环境中放置背景道具或重复建筑实例以创建塔楼;

        这种类型的预制与合并网格以创建新的静态网格资源的工作流程不同,因为每个实例都是相同的、可选择的,更新一个实例会更新所有实例;

Custom Data

        ISM可使用 Custom Primitive Data 和 Per Instance Custom Data 去降低绘制调用,通过传递数据而不为每个网格生成新的动态材质实例;可使用蓝图读取数据进入材质并管理它;

  • Custom Primitive Data,储存在primitive上的额外浮点数据;
  • Per Instance Custom Data,每实例的额外浮点数据;

Creating and Editing ISMs

Instance Selection

  • 控制台命令 TypedElements.EnableViewportSMInstanceSelection ;
  • 细节面板内的 Instances 选项;
  • ISM编辑器;

Blueprints 可使用一个蓝图actor来添加ISM或HISM;

Merge Actors 由多个合并static mesh actor工具组成,其中之一Batch

Harvest Instances Tool 选择static mesh actors批量处理以创建ISM或HISM组件;

Foliage Mode 用于放置static mesh和actor foliage,以快速填充大型环境;

Packed Level Actor 从蓝图创建packed level actor,有助于创建预制对象;

Pattern Tool 工具Pattern技术创建mesh并作为ISM输出,此工具有以下类型single actors, dynamic mesh, instanced static mesh;

ISM Editor 选择ISM组件的实例并执行变换,也可添加、替换、删除实例;

这篇关于UE基础 —— Components的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1101519

相关文章

从基础到进阶详解Pandas时间数据处理指南

《从基础到进阶详解Pandas时间数据处理指南》Pandas构建了完整的时间数据处理生态,核心由四个基础类构成,Timestamp,DatetimeIndex,Period和Timedelta,下面我... 目录1. 时间数据类型与基础操作1.1 核心时间对象体系1.2 时间数据生成技巧2. 时间索引与数据

安装centos8设置基础软件仓库时出错的解决方案

《安装centos8设置基础软件仓库时出错的解决方案》:本文主要介绍安装centos8设置基础软件仓库时出错的解决方案,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐... 目录安装Centos8设置基础软件仓库时出错版本 8版本 8.2.200android4版本 javas

Linux基础命令@grep、wc、管道符的使用详解

《Linux基础命令@grep、wc、管道符的使用详解》:本文主要介绍Linux基础命令@grep、wc、管道符的使用,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐... 目录grep概念语法作用演示一演示二演示三,带选项 -nwc概念语法作用wc,不带选项-c,统计字节数-

python操作redis基础

《python操作redis基础》Redis(RemoteDictionaryServer)是一个开源的、基于内存的键值对(Key-Value)存储系统,它通常用作数据库、缓存和消息代理,这篇文章... 目录1. Redis 简介2. 前提条件3. 安装 python Redis 客户端库4. 连接到 Re

SpringBoot基础框架详解

《SpringBoot基础框架详解》SpringBoot开发目的是为了简化Spring应用的创建、运行、调试和部署等,使用SpringBoot可以不用或者只需要很少的Spring配置就可以让企业项目快... 目录SpringBoot基础 – 框架介绍1.SpringBoot介绍1.1 概述1.2 核心功能2

Spring Boot集成SLF4j从基础到高级实践(最新推荐)

《SpringBoot集成SLF4j从基础到高级实践(最新推荐)》SLF4j(SimpleLoggingFacadeforJava)是一个日志门面(Facade),不是具体的日志实现,这篇文章主要介... 目录一、日志框架概述与SLF4j简介1.1 为什么需要日志框架1.2 主流日志框架对比1.3 SLF4

Spring Boot集成Logback终极指南之从基础到高级配置实战指南

《SpringBoot集成Logback终极指南之从基础到高级配置实战指南》Logback是一个可靠、通用且快速的Java日志框架,作为Log4j的继承者,由Log4j创始人设计,:本文主要介绍... 目录一、Logback简介与Spring Boot集成基础1.1 Logback是什么?1.2 Sprin

MySQL复合查询从基础到多表关联与高级技巧全解析

《MySQL复合查询从基础到多表关联与高级技巧全解析》本文主要讲解了在MySQL中的复合查询,下面是关于本文章所需要数据的建表语句,感兴趣的朋友跟随小编一起看看吧... 目录前言:1.基本查询回顾:1.1.查询工资高于500或岗位为MANAGER的雇员,同时还要满足他们的姓名首字母为大写的J1.2.按照部门

Android Mainline基础简介

《AndroidMainline基础简介》AndroidMainline是通过模块化更新Android核心组件的框架,可能提高安全性,本文给大家介绍AndroidMainline基础简介,感兴趣的朋... 目录关键要点什么是 android Mainline?Android Mainline 的工作原理关键

mysql的基础语句和外键查询及其语句详解(推荐)

《mysql的基础语句和外键查询及其语句详解(推荐)》:本文主要介绍mysql的基础语句和外键查询及其语句详解(推荐),本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋... 目录一、mysql 基础语句1. 数据库操作 创建数据库2. 表操作 创建表3. CRUD 操作二、外键