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

相关文章

从基础到高级详解Python数值格式化输出的完全指南

《从基础到高级详解Python数值格式化输出的完全指南》在数据分析、金融计算和科学报告领域,数值格式化是提升可读性和专业性的关键技术,本文将深入解析Python中数值格式化输出的相关方法,感兴趣的小伙... 目录引言:数值格式化的核心价值一、基础格式化方法1.1 三种核心格式化方式对比1.2 基础格式化示例

redis-sentinel基础概念及部署流程

《redis-sentinel基础概念及部署流程》RedisSentinel是Redis的高可用解决方案,通过监控主从节点、自动故障转移、通知机制及配置提供,实现集群故障恢复与服务持续可用,核心组件包... 目录一. 引言二. 核心功能三. 核心组件四. 故障转移流程五. 服务部署六. sentinel部署

从基础到进阶详解Python条件判断的实用指南

《从基础到进阶详解Python条件判断的实用指南》本文将通过15个实战案例,带你大家掌握条件判断的核心技巧,并从基础语法到高级应用一网打尽,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起学习一... 目录​引言:条件判断为何如此重要一、基础语法:三行代码构建决策系统二、多条件分支:elif的魔法三、

Python WebSockets 库从基础到实战使用举例

《PythonWebSockets库从基础到实战使用举例》WebSocket是一种全双工、持久化的网络通信协议,适用于需要低延迟的应用,如实时聊天、股票行情推送、在线协作、多人游戏等,本文给大家介... 目录1. 引言2. 为什么使用 WebSocket?3. 安装 WebSockets 库4. 使用 We

从基础到高阶详解Python多态实战应用指南

《从基础到高阶详解Python多态实战应用指南》这篇文章主要从基础到高阶为大家详细介绍Python中多态的相关应用与技巧,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起学习一下... 目录一、多态的本质:python的“鸭子类型”哲学二、多态的三大实战场景场景1:数据处理管道——统一处理不同数据格式

MySQL数据类型与表操作全指南( 从基础到高级实践)

《MySQL数据类型与表操作全指南(从基础到高级实践)》本文详解MySQL数据类型分类(数值、日期/时间、字符串)及表操作(创建、修改、维护),涵盖优化技巧如数据类型选择、备份、分区,强调规范设计与... 目录mysql数据类型详解数值类型日期时间类型字符串类型表操作全解析创建表修改表结构添加列修改列删除列

Python 函数详解:从基础语法到高级使用技巧

《Python函数详解:从基础语法到高级使用技巧》本文基于实例代码,全面讲解Python函数的定义、参数传递、变量作用域及类型标注等知识点,帮助初学者快速掌握函数的使用技巧,感兴趣的朋友跟随小编一起... 目录一、函数的基本概念与作用二、函数的定义与调用1. 无参函数2. 带参函数3. 带返回值的函数4.

python panda库从基础到高级操作分析

《pythonpanda库从基础到高级操作分析》本文介绍了Pandas库的核心功能,包括处理结构化数据的Series和DataFrame数据结构,数据读取、清洗、分组聚合、合并、时间序列分析及大数据... 目录1. Pandas 概述2. 基本操作:数据读取与查看3. 索引操作:精准定位数据4. Group

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

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

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

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