首页
学习
活动
专区
工具
TVP
发布

Dissecting Unreal

专栏成员
34
文章
88483
阅读量
22
订阅数
UE5的World Partition
世界分区,是UE5给大世界项目提供的一套新的解决方案。相比于UE4的WorldComposition有了非常多的改进。官网也有很具体的介绍:
quabqi
2024-01-07
1K0
UE5的StructUtils
StructUtils是UE5新增的一个针对结构体存储和反射的辅助插件。之前在说UE5的ECS框架Mass时有粗略提到这个插件里的相关内容,比如Mass在实现ECS的Component就是使用了FInstancedStruct来保存元信息。有了FInstancedStruct,Component不必在C++预先定义好,可以直接在蓝图进行定义或组合,甚至让ECS支持lua或其他脚本都很容易,相比于其他C++常见的ECS框架,这也是UE5的ECS很有优势的一个点。
quabqi
2023-03-07
1.5K0
UE5的Control Flows
在Gameplay开发过程中,常常会碰到一些流程非常复杂,由很多个子逻辑复合而成的业务,就比如最常见的客户端登录流程,可能要分这几步:要先走账号授权,访问平台SDK的API,等待回调取得对应token,再和游戏服务器建立连接,连接后将获取到的用户id和token发给游戏服务器,等待服务器校验成功后返回给客户端才算成功登录。中间会有好几个子步骤,每个步骤都可能是异步的回调。虽然流程看起来很线性,但当我们在实现时,会发现事情没这么简单。每一步都需要根据上一步的结果来决定下一步怎么做,过程中连接失败了怎么办,鉴权失败了怎么办,超时了怎么办?中间有非常多的异常逻辑要处理,最终的业务看似线性但实际是一个网。而且整个过程可能会因为策划需求变更,平台SDK更新,服务器重构等各种原因进行多次变更,每次修改流程,就要把业务的这张“网”重新编织一遍,“网”上的某个链路出现问题,就会导致整个系统出现瘫痪,无穷无尽的开发工作量就是这样出现的。经验丰富的开发者在写这些业务时,可能会考虑使用状态机,把这张网梳理成多个状态,在重构时只要调整状态机之间的关系即可,但业务在不符合状态机的运行模式时,强行套用可能会让业务变得更加抽象,当业务规模庞大时不但不能减轻业务开发人员的重构负担,反而会加重理解成本。
quabqi
2023-02-02
8680
UE4/UE5 UI的绘制与优化——PPT和工程分享
非常有幸能受邀参加今年的UOD的活动,我去年借着项目的便利去现场听了一次UOD,不少项目的技术方案让我眼界大开,也真正感受到了大神们演讲时的气场,结束后心里就一直有个目标,希望今后自己也能有一次去UOD分享自己的技术心得的机会,没想到这个梦想这么快就实现了,要再次特别感谢Epic和大钊。
quabqi
2022-11-22
9850
UE4/UE5的崩溃,卡死等问题处理
虚幻引擎的业务逻辑开发基本上都是用C++/蓝图,当因为项目代码写的不好遇到Crash等问题时,如果不了解Native程序和引擎底层的一些机制,相比用C#开发业务的Unity或其他完全基于脚本虚拟机的游戏确实要难处理一些。因为业务和引擎代码本身都是基于C++,所以对于解决常规C++的Crash的方法虚幻引擎完全适用,除此外引擎在异常处理上相比于普通的C++程序还是提供了一些额外的方法和工具。本文主要介绍虚幻引擎在处理Crash时的一些做法和经验技巧。
quabqi
2022-10-05
4.2K0
用UE4/UE5的ddx/ddy做描边
无论是用法线图/深度图或其他的图做后处理描边,本质都是求当前像素和上下左右像素的差值,差值较大的像素就是边缘。正好虚幻材质里有ddx/ddy这两个节点,可以直接算相邻像素的差值,而且有硬件的Buff加持,所以比自己手动偏移UV再采样贴图要省很多开销,除此外连连看也比传统描边做法简单很多,下面是具体做法。
quabqi
2022-09-28
1.3K0
UE4/UE5 动画的原理和性能优化
动画在UE4/UE5项目中,往往不仅是GPU和渲染线程开销大户,也是游戏线程的开销大户。按照我的经验,大型游戏项目(尤其是手游)做到中后期,整个项目优化工作做的差不多的时候,你应该也会发现动画的开销会占到整个GameThread的二分之一到三分之二。动画到底是做了什么呢会产生这么多的开销?项目里关于动画的优化也是最容易扯皮的一件事,开发给美术说要砍资源,减少骨骼数,要减少蒙皮面数,否则游戏跑不动,而美术说骨骼数不够根本做不出好的效果,不能优化。但是为什么骨骼数,蒙皮面数会影响到动画的性能呢?难道除了砍资源之外,就没有别的优化手段了吗?为了回答这些问题,我觉得很有必要说一说动画在虚幻引擎内部的执行流程,最后也会说下我在虚幻引擎动画这块推荐的优化手段。
quabqi
2022-09-19
4.3K1
Lyra工程解读——PPT分享
今天很荣幸能有机会参加了UnrealCircle广州站的活动,并分享了自己的学习心得,特别感谢Epic和大钊。下面是我的PPT分享。我初期的PPT是按照两个小时准备的,因为时间关系最后压缩到了50分钟,所以讲的时候很急,很多内容没有展开。其实干货都体现在PPT中的黄色小字上(原谅我的死亡配色),后续也会更新一些具体模块的解读,希望能对准备用虚幻5开发的游戏项目提供到帮助。
quabqi
2022-09-08
4770
UE5的动画蓝图(Lyra工程)
UE5正式版附带的Lyra工程,展示了很多UE5里面的新的内容和新的优化,这个工程中动画的做法,就是一个非常有亮点的模块,也做了很多的优化,包括多线程优化,运行时挂载不同的动画层,CopyPose,IK Retarget等。Lyra这个工程本身就是个第三人称射击游戏,动画这部分从实际的表现效果上来看,其实并不比之前商城里的ALS的差,但从动画蓝图本身的规模来说要比ALS的动画蓝图简单太多了。下面就来具体说说有哪些内容。
quabqi
2022-05-23
2.5K0
UE5 CitySample的MassAI海量人群绘制
之前这篇有说过Mass的Visualization,在近处是真实可以交互的Actor,而在远处会统一合并成ISM,如下图所示。
quabqi
2022-04-19
1.2K0
UE5的ECS:MASS框架(三)
前面两篇基本上已经把MASS的ECS基础框架都说清楚了。其中最关键的部分:Fragment/Tag等对应的就是传统ECS中的Component,Processor对应的就是传统ECS中的System,而上层的MassGameplay,MassAI,MassCrowd都是基于底层的ECS框架做出来的Gameplay框架,这一篇主要来说下MassGameplay框架的实现。
quabqi
2022-04-02
6.5K0
UE5的ECS:MASS框架(二)
前面一篇说了Mass框架的内存结构,也就是ECS中的Entity和Component,也用了一个很简单的示例说明Entity和Archetype怎么创建和销毁。然后也了解到MassEntity的对外API接口基本集中在UMassEntitySubsystem中,上一章的例子也只是一个简单的案例,实际Entity有非常多种操作方式,所以我把创建和销毁Entity对应API列在了下面,通过注释可以了解详细是做什么的,详细实现就不多说了,可以参考上一章。
quabqi
2022-01-07
6.6K0
UE5的ECS:MASS框架(一)
最近官方更新了一个黑客帝国觉醒的试玩游戏,看了演示视频之后大为震撼,其中最后有提到街上的海量人群是使用MASS AI框架实现的。能做出这样的实机效果,这套框架也是功不可没的。而这个MASS代码虽然外发版还没有,但其实已经在github的ue5-main分支上存在了很久了,因为之前我也大概看过,最近这里的代码也在持续更新,所以想趁这个热度总结下内部实现原理。如果你之前有了解过ECS那你在阅读下面内容时就会很轻松,因为Mass其实就是UE5实现的ECS框架。
quabqi
2021-12-28
8.8K0
Rider For UE4 的内存不足问题
Rider默认配置的内存很少,如果开比较大UE4工程,用默认配置很可能顿卡非常明显。因为本身这个IDE是Java的,卡死的时候会发现IDE后台一直在GC。如果自己机器内存本身比较大,可以调整一些启动参数让IDE使用更多的内存,别那么容易进入GC,这样就能非常顺滑的编码了。
quabqi
2021-12-28
2.7K0
UE4/UE5的RHI(Vulkan为例)
RHI是Render Hardware Interface的缩写,虚幻引擎通过RHI把各个平台的图形API包装成统一接口,供上层渲染来使用,让业务不用过多的关注API细节(实际还得关注RHI细节)。从代码结构上来看,RHI封装的比较贴合于现代的图形API(vulkan, metal, DX12),也支持opengl/opengles。这个接口是广义上的概念,不仅指C++的纯虚基类,也包括一些全局变量,全局函数等,具体形式就像下面RHI.h头文件这样:
quabqi
2021-11-04
4.7K0
UE4/UE5的TaskGraph
TaskGraph是虚幻引擎做多线程开发时,一个非常方便好用的任务框架。这套框架具体做了什么呢?简单说就是创建或绑定了多个线程,根据业务需要把任务调度到不同的线程上来执行。从原理和实现上比较近似于苹果objc的GCD,Java的ThreadPoolExecutor,Unity的JobSystem等多线程任务框架。
quabqi
2021-11-04
5K0
UE4/UE5的LockFreeList
LockFreeList是UE提供的一系列LockFree容器,其实主要就是实现了多线程lockfree的栈和队列这两种容器,其他的几个容器都基于这两种扩展出来。这些容器的代码本身经过了高度优化和打磨,性能表现非常优秀,UE自己的TaskGraph中Task管理以及多线程调度都是基于这个容器来实现的。这篇文章主要就是来从细节触发,讲清楚这个LockFree容器到底是怎样实现的,代码里很多诡异的写法的用意是什么,UE引擎的多线程性能非常好,跑得这么快,到底快在了哪里?
quabqi
2021-11-04
2.5K1
UE4/UE5的TSet和TMap
TSet和TMap是UE里面最常用的容器之一,和数组不同的是,元素本身并不连续存储,而是通过hash映射存储,因此相对于数组,查询元素是非常快速的。在之前的一篇文章里有提到,TSet是通过TSparseArray实现的,而TMap是通过TSet实现的。C++11也有类似的容器:std::unordered_set和std::unordered_map,实现也基本一致
quabqi
2021-11-04
2.9K0
使用UE4/UE5的stat监控Lua的性能
stat是虚幻引擎提供的性能统计和优化工具,比较类似于Unity的Profiler,通过在代码中埋指定的函数或宏,就可以将需要的信息监控起来。前面会简单介绍在C++中怎么用,以及stat实现原理,后面会介绍怎样在Lua中使用。如果对stat很了解了,只想看Lua使用方法,可以翻到最后。顺便说一下,Lua的使用方法是我自己实现的,目前网上都没有类似教程或做法,各种第三方Lua插件或其他语言的支持插件都没有对应的支持,所以我觉得比较有参考价值。
quabqi
2021-11-04
2.4K1
UE5的初体验
10分钟左右,下好开冲!然后就出现了下面这个熟悉的界面,但UI换成了新风格,还挺酷的。
quabqi
2021-11-04
9800
点击加载更多
社区活动
【纪录片】中国数据库前世今生
穿越半个世纪,探寻中国数据库50年的发展历程
Python精品学习库
代码在线跑,知识轻松学
博客搬家 | 分享价值百万资源包
自行/邀约他人一键搬运博客,速成社区影响力并领取好礼
技术创作特训营·精选知识专栏
往期视频·千货材料·成员作品 最新动态
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档