UE 基础:GetWorldTimerManager
在 TPS 多人项目中,想要实现长按开火功能:AActor:: GetWorldTimerManager ()
1234567891011121314151617181920212223242526272829303132333435363738// 开火定时器FTimerHandle AutoFireTimer; // 计时器句柄UPROPERTY(EditAnywhere)float AutoFireRate;// 客户端输入操作void UCombatComponent::FireButtonPressed(bool bPressed){ bFireButtonPressed = bPressed; if (bFireButtonPressed) { Fire(); } else {// 松开按键立刻清空计时器 Character->GetWorldTimerManager().ClearTimer(AutoFireTimer); }}void UCombatComponent::Fire(){ // ...
UE渲染:卡通渲染(Cel-Shading)
笔记总结卡通渲染:使用多个色带来渲染物体,不使用连续过渡的色彩。
卡通渲染的原理:最常用的方法是比较表面方向(也就是法线方向)和光线方向。通过计算法线和光线方向之间的点积,或表面的亮度,通过设置阈值来分离多个色带
卡通渲染着色器:这里用后期处理的手段实现卡通渲染
新建材质域为后期处理的材质
计算亮度缓冲(借助 SceneTexture 分别选择后期处理输入和漫反射计算亮度缓冲,需要注意 desaturation 和 clamp)
建立 LUT(注意设置取消 sRGB 颜色空间,以及 XY 平铺为限制),根据亮度缓冲获取对应色带(这里起到系数的作用)
将色带和漫反射颜色相乘并输出
指定物体渲染:利用自定义,可以选择对应物体在细节面板中:“渲染->渲染自定义深度通道”
在上方的材质中利用自定义深度和场景深度(利用 SceneTexture 获取),比较深度信息
针对选定物体和其他物体输出不同渲染效果
一些概念
SceneTexture,后期处理输入 0,漫反射颜色,场景深度,自定义深度
Desaturation:将颜色从彩色转为灰度(褪色效果),计算原理:$Gra ...
UE 基础:R8G8B8A8_UINT
R8G8B8A8_UINT指的是一种颜色格式,通常用于表示图像或材质中的像素颜色。
其中,R表示红色(Red)、G表示绿色(Green)、B表示蓝色(Blue)、A表示Alpha通道(用于表示透明度)。
每个通道都用8位(一个字节)来表示,因此总共需要32位来表示一个像素的颜色信息。这种格式通常用于在图形编程中表示颜色值。
UE性能分析:移动端性能分析工具
手游性能分析工具
【蓝图】虚拟纹理 - 地形绘制
基于蓝图的 UE 项目
【剖析虚幻渲染体系】02-多线程渲染
多线程编程基础多线程概述背景:单核主频提升对系统整体性能的提升达到了一个瓶颈
多线程并发的作用:
分离关注点:代码分离
提升性能:多核分散执行任务
多核数量对性能提升也不是直线的,遵循 Amdahl’s law(阿姆达尔定律)
在编译 Unreal Engine 工程源码或 Shader 时,由于它们基本是 100% 的并行占比,理论上可以获得接近线性关系的加速比,在多核系统中将极大地缩短编译时间
多线程并发提高性能的方式:
任务并行(task parallelism):算法部分并行
数据并行(data parallelism):算法相同,但执行的数据不同
副作用:
数据竞争。多个线程交叉访问同一段代码或操作同一资源或多核 CPU 的缓存同步问题
逻辑复杂,调试困难。
不一定能提升效益
多线程概念
进程(Process)
线程(Thread)
竞争条件(Race Condition)
并行(Parallelism)
并发(Concurrency)
线程池(Thread Pool)
C++ 的多线程C++11 标准,多线程才真正纳入 C++ 标准,并提供了相关关键字、S ...
Cpp 语法:位域
C++ 语法
UE 基础:联网及多人游戏
Replicate:用于向 Client同步以 Server 端为 Authority 的属性,允许设置相关回调函数
RPC:用于 Client 向 Server 通知本地操作申请
NetMulticast:用于 Server 通知各 Client 执行指定操作
参考链接
UE4 属性同步(四)rpc 实现
官方文档:
Actor 的复制
Actor 及其所属连接
RPC
【剖析虚幻渲染体系】01 基础
渲染系统中常见的基础知识LambdaC++11 的特性,在渲染系统中,主要是游戏线程给渲染线程发送渲染命令
智能指针C++11 引入智能指针,UE 也自己实现了一套,除了唯一指针、共享指针、弱指针之外,还实现了一种共享引用
UE 中:TSharedPtr, TUniquePtr, TWeakPtr, TSharedRef
虚幻 Objects 使用更适合游戏代码的单独内存追踪系统,因此这些类无法与 UObject 系统同时使用?
在 UE 中构造智能指针:
TSharedFromThis::从 this 指针构造,获得对象的 TSharedRef
MakeShared,MakeShareable(效率较低,但可以对私有构造函数的类使用):利用常规 C++ 指针创建共享指针
StaticCastSharedRef、StatiCastSharedPtr:静态转换,常用于向下转换到衍生类型
ConstCastSharedRef、ConstCastSharedPtr:const 转为 mutable
线程安全的访问模式:形式如TSharedPtr<T, ESPMode::Thre ...