1.【学术文章】带你了解UE4
2.Catlike Coding Custom SRP学习之旅——11Post Processing
3.定制高性能GPU粒子系统
【学术文章】带你了解UE4
行业前景
随着越来越多的开发者与开发商加入UE4的行列,使用UE4的人也在不断增加。众多独立游戏、大型游戏以及知名公司如腾讯、网易都采用UE4进行开发。对于开发者而言,塑源码图片UE4的使用完全免费,所有代码开源,只需在发行时支付5%费用。
一.什么是UE4?
UE4,全称“Unreal Engine 4”,中文译为“虚幻引擎4”,是一款专为游戏开发者设计、构建游戏、模拟和可视化的集成工具。由美国游戏和软件开发公司Epic Games开发,创始人Tim Sweeney同时也是UE4的创作者。UE4能够提供从项目启动到产品发行所需的一切,包括世界级的工具套件和简易的工作流程,帮助开发者快速迭代概念并查看成品效果,且无需触碰代码。完整公开的源代码允许社区成员自由修改和扩展引擎功能。
虚幻引擎是全球最开放、最先进的实时3D创作平台,能够为各行各业的专业人士提供无限的创作自由和前所未有的掌控力。无论是前沿内容、互动体验还是沉浸式虚拟世界,虚幻引擎都能满足需求。
二.虚幻4都有哪些功能?
1.实时逼真渲染:虚幻引擎提供基于物理的渲染技术、高级动态阴影选项、屏幕空间反射等功能,源码要开源吗帮助创作者高效制作令人赞叹的内容。
2.蓝图创作:无需代码,通过可视化脚本快速制作原型和交互效果。
3.完整C++源代码:开发者可学习自定义和调试整个虚幻引擎,开发产品。
4.稳健的多人框架:经过多年发展,虚幻引擎的多人框架已通过众多平台及不同游戏的考验,制作过众多业内顶尖的多人游戏体验。
5.VFX与粒子系统:内置Niagara和级联粒子视觉效果编辑器,支持自定义粒子系统,模拟现实情境,制作专业级成品。
6.灵活的材质编辑器:基于物理PBR的着色技术,赋予开发者对角色外观和感觉的空前掌控力。
7.**级后期处理效果:调整场景外观和感觉。
8.包罗万象的动画套件:通过网络体和动画编辑工具,完全自定义角色。
9.Sequencer:专业动画编辑工具,专为多人协同工作设计,释放创作潜能。
.地形与植被:创作巨大的开放世界环境,快速绘制摆放树木、灌木、岩石等。
.专为VR、AR及MR而生:与全球顶尖的硬件及软件开发商合作,提供最高品质的解决方案。
.先进的人工智能:赋予AI对周围环境更好的空间意识,使其更智能地运动。
三.虚幻4适合什么人学习?
1.爱玩游戏,进口溯源码方案希望开发自己的游戏。
2.Unity转行。
3.有代码基础,学习过PHP、JAVA、C++等。
4.大学期间有空闲时间或毕业有此发展方向意愿。
5.室内设计,虚幻4对美术方面友好,熟悉参数后可调整画面,实现互动。
四.虚幻4支持什么平台?
PS4、Xbox one、Switch、苹果系统(Mac)、Windows系统、Steam平台、Linux系统、安卓、IOS、VIVEPORT等。
虚幻4还有众多插件,方便其他软件的用户使用,如Vray、3Ds Max、Speed tree、True Sky、Blender等。同时,很多硬件厂商都有对应的查找主图源码SDK支持。
五.UE4制作的游戏
《堡垒之夜》:EPIC GAMES
《绝地求生/刺激战场(手游)》:腾讯
《往日不再(Days Gone)》:Bend Studio
《方舟》:Wildcard
《SCUM》:Gamepires/Croteam
《叛乱2.沙漠风暴》:New World Interactive&Focus Home Interactive
《逆战》:腾讯
Catlike Coding Custom SRP学习之旅——Post Processing
来到了后处理环节,这是渲染管线中关键的一环。后处理技术能够显著提升画面效果,比如色调映射、Bloom、抗锯齿等,都能在后处理中实现。除了改善整体画面效果,后处理还能用于实现描边等美术效果。本文将主要介绍后处理堆栈和Bloom效果等内容。
考虑到篇幅和工作量,本文将从第4章节后半部分开始,以及未来的章节,主要提炼原教程的内容,尽量减少篇幅和实际代码。在我的Github工程中,包含了对源代码的详细注释,需要深入了解代码细节的读者可以查看我的Github工程。对于文章中的错误,欢迎读者批评指正。
以下是原教程链接和我的Github工程:
CatlikeCoding-SRP-Tutorial
我的Github工程
1. 后处理堆栈(Post-FX Stack)
FX,全称是Special Effects,即特殊效果,也称为VFX(Visual Special Effects),即视觉特效。参考维基百科,视觉效果(Visual effects,简称VFX)是在**制作中,在真人动作镜头之外创造或操纵图像的过程。游戏很多技术都会沿用影视技术上的偷相册源码最新一些技术,比如在色调映射时,可以采用ACES(**色调映射)等。关于Special Effects为什么叫FX,而不是SE,网上似乎只是因为FX谐音Effects,让人不知道从哪吐槽。
通常来说,因为后处理会包含很多不同的效果,如色调映射、Bloom、抗锯齿等等,因此后处理在渲染管线中的结构往往是一个堆栈式的结构(URP中也是如此,使用了Post Process Volume)。因此,在本篇中,我们将搭建这样一个堆栈结构,并实现Bloom效果。
1.1 配置资源(Settings Asset)
首先,我们定义PostFXSettings资源,即Scriptable Object,将其作为渲染管线的一项可配置属性,这样便于我们配置不同的后处理堆栈,并可以方便地切换。
1.2 栈对象(Stack Object)
类似于Light和Shadows,我们同样使用一个类来存储包括Camera、ScriptableRenderContext、PostFXSettings,并在其中执行后处理堆栈。
1.3 使用堆栈(Using the Stack)
在进行后处理前,我们首先需要获取当前摄像机画面的标识RenderTargetIdentifier,RenderTargetIdentifier用于标识CommandBuffer的RenderTexture。在这里,我们使用一个简单的int来标识sourceRT。
对于一个后处理效果而言,其实现过程说来很简单,传入一个矩形Mesh(其纹理即当前画面),使用一个Shader渲染该矩形Mesh,将其覆盖回Camera的RT上,我们通过Blit函数来实现该功能。
1.4 强制清除(Forced Clearing)
因为我们将摄像机渲染到了中间RT上,我们虽然会在每帧结束时释放该RT空间,但是基于Unity自身对RT的管理策略,其并不会真正地清除该RT,因此我们在下一帧时,该RT中会留存上一帧的渲染结果,导致了每一帧画面都是在前一帧的结果之上绘制的。
1.5 Gizmos
我们还需要在后处理前后绘制不同的Gizmos部分,这部分略~
1.6 自定义绘制(Custom Drawing)
使用Blit方法绘制后处理,实际上会绘制一个矩形,也就是2个三角面,即6个顶点。但我们完全可以只用一个三角面来绘制整个画面,因此我们使用自定义的绘制函数代替Blit。
1.7 屏蔽部分FX(Don't Always Apply FX)
目前,我们对于所有摄像机都执行了后处理。但是,我们希望只对Game视图和Scene视图摄像机进行后处理,并对不同Scene视图提供单独的开关控制。很简单,通过判断摄像机类型来屏蔽。
1.8 复制(Copying)
接下来,完善下Copy Pass。我们在片元着色器中,对原画面进行采样,并且由于其不存在Mip,我们可以指定mip等级0进行采样,避免一部分性能消耗。
2. 辉光(Bloom)
目前,我们已经实现了后处理堆栈的框架,接下来实现一个Bloom效果。Bloom效果应该非常常见,也是经常被用于美化画面,其主要作用就是让画面亮的区域更亮。
2.1 Bloom金字塔(Bloom Pyramid)
为了实现Bloom效果,我们需要提取画面中亮的像素,并让这些亮的像素影响周围暗的像素。因此,需要首先实现RT的降采样。通过降采样,我们可以很轻易地实现模糊功能。
2.2 配置辉光(Configurable Bloom)
通常来说,我们并不需要降采样到很小的尺寸,因此我们将最大降采样迭代次数和最小尺寸作为可配置选项。
2.3 高斯滤波(Gaussian Filtering)
目前,我们使用双线性滤波来实现降采样,这样的结果会有很多颗粒感,因此我们可以使用高斯滤波,并且使用更大的高斯核函数,通过9x9的高斯滤波加上双线性采样,实现x的模糊效果。
2.4 叠加模糊(Additive Blurring)
对于Bloom的增亮,我们直接将每次降采样后的Pyramid一步步叠加到原RT上,即直接让两张不同尺寸的以相同尺寸采样,叠加颜色,这一步也叫上采样。
2.5 双三次上采样(Bicubic Upsampling)
在上采样过程中,我们使用了双线性采样,这样可能依然会导致块状的模糊效果,因此我们可以增加双三次采样Bicubic Sampling的可选项,以此提供更高质量的上采样。
2.6 半分辨率(Half Resolution)
由于Bloom会渲染多张Pyramid,因此其消耗是比较大的,其实我们完全没必要从初始分辨率开始降采样,从一半的分辨率开始采样的效果也很好。
2.7 阈值(Threshold)
目前,我们对整个RT的每个像素都进行了增亮,这让这个画面看起来过曝了一般,但其实Bloom只需要对亮的区域增亮,本身暗的地方就不需要增亮了。
2.8 强度(Intensity)
最后,提供一个Intensity选项,控制Bloom的整体强度。
结束语
大功告成,我们在渲染管线中增加了后处理堆栈,以及实现了一个Bloom效果,其实在做完这篇之后,我觉得这个渲染管线才算基本上达成了大部分需要的功能,也算是一个里程碑吧。
定制高性能GPU粒子系统
技术设计背景
Unity引擎的粒子系统过去一直由CPU进行计算,这意味着粒子系统的核心步骤——生成、更新与渲染——都在CPU上完成。然而,随着硬件技术的发展,GPU性能提升更为迅速,而实际项目中通常面临的是CPU瓶颈问题。因此,基于computeshader与gpuinstance技术的GPU粒子系统应运而生,如Unreal Engine(UE)的双引擎系统和较新版Unity的VFX系统。
定制高性能GPU粒子系统旨在最大化性能优势,尤其是针对单个复杂粒子模式,这种模式虽然在游戏内使用频率不高,但性能提升最为显著,且开发较为直观。通过提供完整源码以供下载,开发者可以深入理解并应用该模式。
实现该模式具体分为三个步骤,其中关键代码强调了粒子的死活状态与同一份缓冲数据的高效管理。渲染时,粒子数量逻辑遵循最大计数设置,实现隐藏非可见粒子,确保大部分渲染粒子数量接近最大计数,从而减少空计算。
测试结果显示,渲染万个粒子时,基于GPU的实现方案性能提升巨大,从Unity的CPU方案的帧提升至帧,性能优势显著。
多发射器的简单粒子模式则是为项目量身定制的高性能策略,通过优化数据组织与渲染流程,实现个子弹碰撞特效下FPS的高帧率表现,远超使用现有GPU方案的多帧,避免了负优化现象。
在多发射器的实现中,通过申请一个公用大缓冲存放所有激活发射器的粒子数据,并采用特定数据组织模式,优化了更新与渲染流程。同时,引入RWStructuredBuffer以记录发射器与粒子的对应关系,实现高效渲染。
面对半透明排序与合批渲染的挑战,优化策略集中在通过玩家ID与粒子发射器预制件种类分组,或在世界空间内以1立方米为单位合批发射器,以降低排序与渲染复杂性,提高性能。
最终,通过一系列优化措施,开枪操作的性能得到了显著提升,从原先的帧降低至5帧,实现了与Csgo等优秀游戏的性能对比,稳定了优化成果。
GPU优化
针对GPU优化,尤其是开火场景中大量重叠粒子导致的overdraw问题,可以采用几个简单的技巧进行优化。例如,观察CSGO与COD等游戏的成功经验,这些技巧有助于减少过绘制,提升整体性能。