unreal5学习(待整理版)
DeltaTime是每帧执行的时间,即帧率的倒数。一个变量乘DeltaTime,就可以让帧率独立,即不同机器上运行速度相同
生成项目
当项目无法打开时,使用vs2022手动编译,先清除解决方案,再生成解决方案
相机
旋转视角时不因为物体遮挡而突然拉近镜头:把目标物(mesh和碰撞体)的Collision中collision response中的camera设为ignore
游戏内容:
子弹移动:
1.在Tick中更新location和rotation
2.添加Impulse,让物理接管
3.添加movement component(UProjectileMovementComponent)
受伤回调绑定:在BeginPlay中
GetOwner()->OnTakeAnyDamage.AddDynamic(this, &UHealthComponent::DamgeTaken);
Apply Damage:
UGamestatics::ApplyDamage
![[Pasted image 20250310210031.png]]
子弹命中:ApplyDamage
HealthComponent回调DamageTaken
Gameplay框架
构建游戏基础的类Class集合,提供游戏核心架构,如角色控制、物理交互、网络同步
Actor:使用SpwanActor创建,交给引擎管理和清理,是一个容器,关卡中的东西都是actor
Pawn是游戏世界中的物理实体
Controller决定Pawn的行为
C++
创建c++项目时默认gamemode是一个c++类,路径固定不灵活,所以通常新创建一个蓝图继承默认gamemode,方便更改
SetActorLocation()
向量:FVector
![[Pasted image 20250305152443.png]]
UPROPERTY
在虚幻引擎中,UPROPERTY() 是一个非常重要的宏,它用于标记类的成员变量,让这些变量可以在虚幻引擎的反射系统、蓝图可视化编程系统、属性窗口等工具中被识别和使用。以下为你详细介绍其使用方法:
基本作用
- 反射系统支持:通过
UPROPERTY()标记的变量会被纳入虚幻引擎的反射系统,这意味着引擎可以在运行时动态地获取和操作这些变量的信息,比如获取变量的类型、名称、值等。 - 蓝图交互:在蓝图中,被
UPROPERTY()标记的变量可以被可视化地访问和修改,方便美术人员、策划人员等非程序员进行游戏内容的设计和调整。 - 属性窗口显示:在虚幻编辑器的属性窗口中,这些变量会显示出来,允许开发者在编辑器中直接修改它们的值,而无需修改代码。
BlueprintReadWrite运行在事件图表中用蓝图读写变量,
默认蓝图不能读写私有成员,使用UPROPERTY(meta = (AllowPrivateAccess = "ture"))可以在蓝图中使用私有成员
把相机设为SpringArm的子组件,调整SpringArm的长度和角度,不要直接调整摄像机位置,因为SpringArm组件有很多功能
设置玩家:Auto Possess Player自动控制玩家
AddActorLocalOffset()局部坐标移动
Debug
将vs2022中调成DebugGame Editer模式
基础操作
alt + 2 线框模式
alt + 3无光源模式
alt+4 普通模式
ctrl + L 移动太阳
选中物体 按H隐藏,长按取消
f10 全屏
鼠标移动到框上中键可关闭
ctrl+ space 弹出资产栏
重置布局:window->layout->默认布局
右键+e/q/wasd移动
右键+滚轮调整相机移速
选中列表中的物品按f聚焦
alt+左键 旋转相机,alt+右键 缩放
按住中键滚动改变相机速度
顶视图观察:按住右键拖动
左上角三条杠设置bookmarks,在当前相机位置留下标记,按ctrl+数字回到当前位置。按住设置新的标签
对象操作
alt+左键 复制移动
ctrl + d 原地复制
按住shift 移动对象 镜头跟踪
命名
M_XXX 材质
BP_蓝图
MI_材质实例
连连看
Pin三角箭头,Input Pin:什么时候运行该节点,output Pin:运行该节点后做什么
Data Pin:数据的输入输出
alt+点击线断开
导入新资产后有星号,表示需要保存
color texture ->srgb on
其他的,如法线贴图和遮罩贴图关闭srgb
导入资产
有*图标代表需要保存
右键文件夹,迁移资产
ctrl +B跳到资产位置
ctrl + E直接打开资产
quixel bridge
- low 1k ,medium 2k, high 4k
常用地形:isolandic volcano
纹理
texuture coordinate改变纹理比例
除了颜色贴图外其他贴图都不选srgb
按住ctrl将线从原处拖到另一个位置
material instance(材质实例)可以改变参数实时预览材质变化,不用每次apply编译。把原材质中的任意参数/颜色设为parameter并选择即可
按住s左键 参数
m lm 乘法
1 常量
光照
后处理 :add -> Volumes -> PostPoccessingVolume,打开infinite extent影响整个世界、
- ambient occlusion->intensity设为0
- exposure可设置为手动曝光,并调节曝光补偿
静态光照贴图:光源设为static而不是movable,build->build all levels
聚光灯:inner cone angle决定光线锐度 outer cone angle决定照射角
点光源:半径越大阴影越柔和
矩形光源: barn door挡光板
direction light:阳光,source angle越大阴影越柔和
天光:sky lght让天空盒在环境中反射
天空:添加Visual Effect ->sky atmosphere
天空必须有direction light才能看到,打开sky light的affect world按钮
lumen系统:
window->world settings
advanced -> force no precomuter lighting(强制不适用光照贴图)
build all levels
在后处理中 global illumination打开Lumen
lumen噪声:Final gather quality(最终采样质量)提高可降噪
间接光照强度设置可以改变全局光照效果强度
lumen排除了许多小物件的光照,小物体可能阴影较少,打开lemen scene details可以增加阴影
将lumen做光照贴图:把光源设为static,在后处理中禁用全局光照(设为none)和反射
在world settings->lightmass Settings中设置烘焙细节,如提高反射次数。
static lighting level scale小于1可以提高光照贴图质量,并提高间接光照质量。
通常 static lighting level scale X indirect lighting quality = 1
提高光照贴图质量:
lit -> optimization viewmodes ->lightmap density可以看到光照贴图分辨率
选中物体,lighting->cast shadow 将密度提高
add->visual effect->sphere reflection capture,来获得反射快照
通过build->build reflection captures来烘焙
环境设置
光照
添加阳光,天空环境,天空光照(设为实时捕捉),添加指数雾
地形
shift + 2进入地形编辑模式
按住shift凹陷
[]调整笔刷大小
材质添加landscape layer blend,设置不同层的材质
shift + 2切换到地形模式,选择绘制,图层中创建层信息
按住shift可以移除该图层贴图
树叶/植物
shift + 3进入叶片模式
选中树叶/植物资产,放入左侧面板,开始绘制。树会以地形法线生长,取消勾选Align to Normal会向天空生长
color variation:树叶颜色变化
density可以控制某种树的绘制密度
lod:不同相机距离的渲染精度,可以删除某一层,右侧面板Remove LOD
设置绘制密度和随机大小
filters->Static Meshes打开时会将叶片绘制在mesh的表面,如果mesh移动叶片也会跟着移动。关闭后只在Landscape上绘制
如果树叶有运动模糊,将mobility设为movable
风:在世界中放入BP_FoliageActor(MS_Presets/MS_Foliage_Material_GlobalFoliageActor),选择直接光照。如果不需要风吹效果,需要在树的材质中取消风级
Nanite
可以绘制无限的多边形,仅针对静态物体。ctrl+b找到static mesh右键选择Nanite->enable
- lit ->Nanite Visualization->mask,绿色为使用Nanite的物体
游戏模式
Window -> world settings->gamemode
GameMode override
alt+ P开始游戏
esc 结束
运行游戏后按shift + f1切出光标
add->basic->player start选择玩家出生点
\调出控制台
蓝图
蓝图实时运行:运行按钮旁边选择调试对象
双击线添加控制节点
选中按c添加注释块
event tick:每帧都会发生
delta seconds:固定秒数发生,与帧率无关
add->arrow 添加箭头组件帮助判断方向,仅编辑时可见
添加变量:拖到蓝图中,若想在面板中直接控制变量大小,选中Instance Editable和Expose on Spawn
flip flop:一次A一次B
branch:ifelse
Delay:在n秒延迟后执行下一段
关卡蓝图:
适用于整个关卡
创建新变量:按住alt拖动->set,ctrl拖->get
函数
纯函数:无执行引脚,在细节面板中勾选
UI
创建用户界面即widget
白模搭建
添加->放置actor面板->几何体
使用几何体删减,Addict在上,减去的几何体在下
物理模拟
消除细小碰撞:在资产的预览窗口中设置碰撞:移除后再添加简单碰撞
命令行
方向键选择最近使用过的命令
foliage.forcelod 0 //强制最高等级
foliage.forcelod -1 //默认
//出现红色报错Texture Streaming Pool Over Budget
r.streaming.poolsize 数字
PCG
surface smapler:表面采样器,确定一系列 采样区或点,可与地形相连
transform point:改变每个点的transform
static mesh spawner:加载静态网格体,在mesh entries中添加
density noise:添加噪声
density filter:过滤噪声
bounds modifier:修改立方体大小
调试
按d调试
日志
project/saved/logs
渲染
在Unreal Engine中,GBuffer(几何缓冲区,Geometry Buffer)是一种多层缓冲区,用于在渲染管线的早期阶段存储几何信息。GBuffer 在延迟渲染(Deferred Rendering)技术中尤为重要,因为它允许渲染过程分为两个主要阶段:几何处理阶段和光照计算阶段。
材质
权重混合和非权重混合区别:权重混合哪个图层在上由预览权重决定,权重混合边界会有融合
后处理材质(Post Processing Material)
basecolor抖动: 默认使用“临时抗锯齿"(TAA, Temporal Anti-Aliasing),原理是抖动图像后做平均处理叠加像素,要消除抖动可以更改抗锯齿模式或把色调映射前改为色调映射后[[色调映射]]
MSAA只能在前向渲染时使用
[[FXAA]]:(Fast Approximate Anti-Aliasing,快速近似抗锯齿)是一种抗锯齿技术,用于减少图像中的锯齿现象。锯齿现象通常出现在边缘和斜线处,是由于图像的像素化造成的。FXAA通过后处理阶段来平滑这些锯齿,提升图像质量。
GBuffer的主要组成部分
-
法线缓冲区(Normal Buffer):
存储每个像素的法线信息,用于计算光照效果。 -
深度缓冲区(Depth Buffer):
存储每个像素的深度信息(距离摄像机的距离),用于深度测试和遮挡计算。 -
漫反射缓冲区(Diffuse Buffer):
存储每个像素的漫反射颜色信息,描述物体的基本颜色。 -
镜面反射缓冲区(Specular Buffer):
存储每个像素的镜面反射信息,包括高光颜色和强度。 -
材质属性缓冲区(Material Properties Buffer):
存储与材质相关的属性信息,例如粗糙度(Roughness)、金属度(Metallic)等。
GBuffer的工作原理
-
几何阶段(Geometry Pass):
在这一阶段,所有可见物体的几何信息被渲染并存储到GBuffer中。此阶段包括计算每个像素的法线、深度、漫反射颜色和镜面反射等信息。 -
光照阶段(Lighting Pass):
在几何信息被存储之后,光照计算在第二阶段进行。使用存储在GBuffer中的信息,计算每个像素的最终光照效果,包括漫反射光、镜面反射光和环境光等。
GBuffer的优点
- 减少计算冗余:由于几何信息仅计算一次并存储在GBuffer中,光照计算可以在后续阶段独立进行,避免了重复计算。
- 灵活性:通过在几何阶段之后进行光照计算,可以更方便地添加和调整光源。
- 高效的后期处理:许多后期处理效果(如景深、运动模糊等)依赖于深度和法线信息,GBuffer提供了一个统一的存储位置,简化了这些效果的实现。
GBuffer的缺点
- 内存占用:由于需要存储多层缓冲区,GBuffer会占用大量的显存资源。
- 带宽要求:读取和写入GBuffer的数据需要较高的带宽,可能会对性能产生影响。
总之,GBuffer在Unreal Engine的延迟渲染中扮演着重要角色,通过将几何信息和光照计算分开处理,实现了高效且灵活的渲染流程。
前向渲染和延迟渲染的区别
前向渲染(Forward Rendering)
前向渲染是一种较为传统的渲染技术,其工作流程如下:
- 几何处理:遍历场景中的每个物体,进行几何处理和顶点着色。
- 光照计算:对于每个物体的每个像素,逐个光源计算光照效果,并直接将结果写入帧缓冲区(Frame Buffer)。
- 输出:最终输出图像。
优点:
- 实现简单:实现和理解相对简单,适合较小和中等规模的场景。
- 硬件支持好:大多数图形硬件都对前向渲染进行了优化。
- 适合透明对象:处理透明对象较为直接。
缺点:
- 性能瓶颈:当场景中有大量光源时,性能会显著下降,因为每个像素都要对每个光源进行光照计算。
- 不灵活:对复杂光照模型和后期处理效果的支持有限。
延迟渲染(Deferred Rendering)
延迟渲染是一种较为现代的渲染技术,通常用于处理包含大量光源的复杂场景。其工作流程如下:
- 几何阶段(Geometry Pass):遍历场景中的每个物体,计算并存储几何信息(如法线、深度、颜色等)到GBuffer中。
- 光照阶段(Lighting Pass):使用GBuffer中的几何信息,对每个像素进行光照计算,并将结果写入帧缓冲区。
- 输出:最终输出图像。
优点:
- 性能优化:可以有效处理大量光源,因为光照计算是在几何处理之后进行的,避免了重复计算。
- 灵活性高:可以更方便地实现复杂光照模型和后期处理效果。
- 统一处理:许多后期处理效果(如景深、运动模糊等)可以统一处理,因为所需的几何信息已经存储在GBuffer中。
缺点:
- 高内存消耗:需要额外的显存来存储GBuffer中的几何信息。
- 带宽需求高:读取和写入GBuffer的数据需要较高的带宽。
- 透明对象处理复杂:处理透明对象较为困难,因为透明对象的几何信息无法直接存储在GBuffer中。
总结
- 前向渲染:适合场景光源数量较少、需要处理透明对象的应用,如简单游戏和移动设备应用。
- 延迟渲染:适合场景光源数量较多、需要复杂光照和后期处理效果的应用,如现代3D游戏和高端图形应用。
不同的渲染技术有各自的适用场景,开发者应根据具体需求选择合适的渲染方法。

浙公网安备 33010602011771号