1.UE中的引擎源码引擎源码着色器编程-需要重新编译内核自己生成UE
2.UE 打包引擎源码
3.UE4学习笔记(1):UE源码下载编译+安卓打包
4.UE5 ModelingMode & GeometryScript源码学习(一)
5.UE5引擎Paper2D插件上的IntMargin.h文件源码解读分析
6.越学越多——获取虚幻源码
UE中的着色器编程-需要重新编译内核自己生成UE
全球图形学领域的教育和研究者,东汉书院,引擎源码引擎源码致力于提供深入的引擎源码引擎源码技术教学和视频,帮助用户构建图形学知识体系。引擎源码引擎源码在这里,引擎源码引擎源码用户能获得全面的引擎源码引擎源码usb hid 驱动源码代码知识,以及背后故事的引擎源码引擎源码理解,避免盲目学习。引擎源码引擎源码书院提供深入剖析UE的引擎源码引擎源码课程,帮助有兴趣自研引擎的引擎源码引擎源码用户。UE源码版本为4.,引擎源码引擎源码为了简化学习,引擎源码引擎源码我们将切换至移动端渲染模式。引擎源码引擎源码
具体操作如下:
1. 修改Engine/Source/Runtime/Engine/Classes/Engine/EngineTypes.h文件,引擎源码引擎源码添加名为MSM_Alice的引擎源码引擎源码ShadingModel。
2. 修改Engine/Source/Runtime/Engine/Private/Materials/HSLSMaterialTranslator.cpp文件,在GetMaterialEnvironment函数中添加代码。
3. 修改Engine/Source/Runtime/Engine/Private/Materials/MaterialShader.cpp文件,扩展GetShadingModelString函数。
4. 编写shader代码,修改Engine/Shaders/Private/MobileBasePassPixelShader.usf文件,将材质球颜色固定,完成PostProcessing操作。最后创建材质球,选择Alice作为ShadingModel。
经过上述操作,UE将渲染出一个独特的材质球。完成此步骤后,用户将获得一个UE难以相信的渲染成果,仿佛在对UE表达不信任与讽刺。接下来,书院将提供更多高级内容,帮助用户参考UE,自行开发引擎。
东汉书院关注引擎底层技术和商业化信息,适合具有一定基础的用户。关注“图形之心”公众号了解企业信息和动态,“内核观察”公众号则提供独立的咨询与文章。书院致力于提供深入的技术教学和视频,帮助用户构建图形学知识体系,课程源码和文档提升对底层技术的理解,最终实现自研引擎的目标。
UE 打包引擎源码
本文作为个人记录使用。
1. 获取引擎源码:在GitHub上下载对应版本源码(需订阅虚幻引擎并与你的虚拟引擎账号关联)。安装Microsoft Visual Studio,建议选择读写速度较快的硬盘,并预留足够空间。官方文档:docs.unrealengine.com/4...
unrealengine.com/zh-CN/...
运行setup.bat开始下载,可加参数加速下载(--threads=N表示用N个线程加速下载)。网速慢时,可能需要更长时间。
完成下载后,运行GenerateProjectFiles.bat生成解决方案。
2. 构建源码:编译源码时,可适当修改源码hh。具体操作可参考官方文档:docs.unrealengine.com/4...
记得先Build AutomationTool。
我下载了Windows SDK:developer.microsoft.com...(VS中的可能还不够,猜测)。
再次Build时,遇到一个问题:
我采取的有效方法:在HoloLensTargetPlatform.Build.cs中添加了一行参数bEnableUndefinedIdentifierWarnings = false;
3. 开始打包:通过cmd执行RunUAT.bat,等待打包完成。顺利的话,将在/引擎目录/LocalBuilds/Engine下找到打包好的包。我的路径是:E:\UnrealEngine-4..2-release\Engine\Build\BatchFiles\RunUAT.bat,参数:BuildGraph -target="Make Installed Build Win" -script=Engine/Build/InstalledEngineBuild.xml -clean。
详细的脚本选项可参考官方文档:docs.unrealengine.com/4...
接下来就开踩。安装vs时遇到错误,后来发现不用下载,修改参数即可。我使用的是vs,不知道vs是否可行。
这种就是配置对应的环境。想必后面还有ERROR: Platform IOS is not a valid platform to build,我都学会抢答了(安装ios环境需要apple id,我没有)。
因为我并不需要打包其他平台,所以修改了参数,仅打包支持Window平台的BuildGraph -target="Make Installed Build Win" -script=Engine/Build/InstalledEngineBuild.xml -set:WithWin=true -set:WithWin=true -set:WithMac=false -set:WithAndroid=false -set:WithIOS=false -set:WithTVOS=false -set:WithLinux=false -set:WithLinuxAArch=false -set:WithLumin=false -set:WithLuminMac=false -set:WithHoloLens=false -set:WithClient=true -set:WithServer=true -set:VS=true -clean。
打包成功提示succeed。自制游戏源码出售
其他:blog.csdn.net/qq_... store.algosyntax.com/tu... UE4使用BuildGraph构建二进制版本虚幻引擎 docs.unrealengine.com/4... Android SDK的下载与安装 cnblogs.com/KisonDu/p/1... iOS和tvOS开发要求 打包插件必须安装vs ? github.com/EpicGames/Un...
UE4学习笔记(1):UE源码下载编译+安卓打包
注:该笔记以UE4..2在windows平台为例,vs版本为
1.关联github和Epic账户
要在github上获取UE4源码需要先关联账户,否则找不到源码,网页
按照官网提供流程即可完成 GitHub上的虚幻引擎 - Unreal Engine
记得确认邮件,否则还是(当初就是忘记了,卡了好一会儿)
2.下载UE4源码
在 Releases · EpicGames/UnrealEngine (github.com)中选择自己需要的版本(我使用的是4..2),这步很简单,但需要注意的是还需要将Commit.gitdeps.xml文件也一并下载,用于替换同名文件(有些版本则没有这样的文件),不替换的话后续会报错(之后步骤中会提到)
解压后目录如下:
3.执行bat文件
(1)点击运行setup.bat,没有替换Commit.gitdeps.xml文件可能会出现如下问题:
(2)点击运行GenerateProjectFiles.bat,此过程可能会出现如下问题:
未找到框架 .NETFramework Version=v4.6.2
只需要在VS Installer中选中安装就行:
完成后会生成UE4.sln文件
4.生成
VS打开UE4.sln,开始生成:
但是生成过程中我出现了这样的问题:
UE4 fatal error C: 编译器限制: 达到内部堆限制
error C: 超过了 PCH 的虚拟内存范围问题解决
我出现这样问题的原因是我的C盘空间不够大(分区的时候给的比较少),托管系统设置在C盘,导致无法分配足够的虚拟内存,设置为空间足够的盘即可。
步骤:电脑->属性->高级系统设置->高级->性能设置->高级->更改
OK,成功编译完成
5.安卓打包
该过程有官方文档,并且比较繁琐,直接给出链接:
设置虚幻的Android SDK和NDK | 虚幻引擎文档 (unrealengine.com)
UE部署到Android以及杂症的解决 - 知乎 (zhihu.com)
我就提一下自己遇到的问题,在UE4中进行安卓打包的时候遇到了这样的问题:
原因在于SetupAndroid.bat中,SDK Platform的版本选择是,而在UE项目设置->平台 - Android SDK中的SDK API Levle默认选择latest。但是我安装AS的时候默认给我安装了最新的Android API (此时latest指向的是版本),导致冲突。解决方法是UE项目设置中手动设置指定版本,或者在AS中卸载高于版本的Android API。
OK,打包成功!!!
6.打开游戏
但是,是的,还有但是(都最后一步了,还有问题OVO!!!),在手机上下载安装,链式管理系统源码打开后是这样的:
原来是因为打包除了生成apk文件还生成了obb,至于Google Play Store Key应该就是一个密钥了。
解决方法是在UE项目设置->Android中勾选“将游戏数据打包至.apk中”,我们可以看到对这个勾选项的解释:
行,勾选后重新打包,成功运行:
UE5 ModelingMode & GeometryScript源码学习(一)
前言
ModelingMode是虚幻引擎5.0后的新增功能,用于直接在引擎中进行3D建模,无需外接工具,实现快速原型设计和特定需求的模型创建。GeometryScript是用于通过编程方式创建和操控3D几何体的系统,支持蓝图或Python脚本,提供灵活控制能力。
本文主要围绕ModelingMode与GeometryScript源码学习展开,涵盖DMC简介、查找感兴趣功能源码、动态网格到静态网格的代码介绍。
起因
在虚幻4中,通过RuntimeMeshComponent或ProceduralMeshComponent组件实现简单模型的程序化生成。动态网格组件(DynamicMeshComponent)在UE5中提供了额外功能,如三角面级别处理、转换为StaticMesh/Volume、烘焙贴图和编辑UV等。
将动态网格对象转换为静态网格对象时,发现官方文档对DMC与PMC对比信息不直接涉及此转换。通过搜索发现,DynamicMesh对象转换为StaticMesh对象的代码位于Source/Runtime/MeshConversion目录下的UE::Modeling::CreateMeshObject函数中。
在UE::Modeling::CreateMeshObject函数内,使用UEditorModelingObjectsCreationAPI对象进行动态网格到静态网格的转换,通过HasMoveVariants()函数接受右值引用参数。UEditorModelingObjectsCreationAPI::CreateMeshObject函数进一步处理转换参数,UE::Modeling::CreateStaticMeshAsset函数负责创建完整的静态网格资产。
总结转换流程,DynamicMesh对象首先收集世界、变换、资产名称和材质信息,通过FCreateMeshObjectParams对象传递给UE::Modeling::CreateMeshObject函数,该函数调用UE::Modeling::CreateStaticMeshAsset函数创建静态网格资产。
转换为静态网格后,程序创建了一个静态网格Actor和组件。泡泡糖源码此过程涉及静态网格属性设置,最终返回FCreateMeshObjectResult对象表示转换成功。
转换静态网格为Volume、动态网格同样在相关函数中实现。
在Modeling Mode中添加基础形状涉及UInteractiveToolManager::DeactivateToolInternal函数,当接受基础形状时,调用UAddPrimitiveTool::GenerateAsset函数,根据面板选择的输出类型创建模型。
最后,UAddPrimitiveTool::Setup函数创建PreviewMesh对象,UAddPrimitiveTool::UpdatePreviewMesh()函数中通过UAddPrimitiveTool::GenerateMesh生成网格数据填充FDynamicMesh3对象,进而更新到PreviewMesh中。
文章总结了Modeling Mode与GeometryScript源码的学习路径,从动态网格到静态网格的转换、基础形状添加到输出类型对应函数,提供了一条完整的流程概述。
UE5引擎Paper2D插件上的IntMargin.h文件源码解读分析
深入探索Unreal Engine 5 (UE5) 的Paper2D插件时,我们发现IntMargin.h文件中定义了FIntMargin结构体,它用于在整数网格上描述2D区域周围空间的一种数据结构。FIntMargin是一个简单而直观的结构体,用于存储和操作2D界面元素的边距。它采用结构体形式,包含四个公共成员变量:Left、Top、Right和Bottom,使用int类型存储,通过UPROPERTY宏标记为蓝图可读写,归类于Appearance类别。
FIntMargin设计简洁,仅用于存储相关数据,无封装或继承特性。UE5的代码风格倾向于使用结构体来表示简单的数据集合。FIntMargin包含了四个构造函数,分别用于不同初始化场景,便于快速实例化。结构体通过重载+和-运算符,实现边距的加法和减法操作,简化布局调整中的边距计算。同时,==和!=运算符也被重载,用于比较两个FIntMargin实例是否相等。
GetDesiredSize方法返回一个FIntPoint结构体,表示由当前边距定义的总尺寸,强化了FIntMargin在布局计算中的功能性。IntMargin.h文件的架构体现了UE5编码风格中的简洁性、直观性和高度的可读性,符合其对代码清晰度、性能和易用性的整体设计哲学。
FIntMargin结构体虽然简单,但它是UE5中Paper2D插件架构中的基本构建块之一,体现了UE5的设计原则。通过理解此类基本组件,开发者可以深入掌握UE5架构的关键步骤。在未来的版本中,UE5可能会对FIntMargin进行进一步的迭代和优化,以保持其在不断演进的技术环境中的领先地位。
越学越多——获取虚幻源码
游戏开发领域,知识永无止境。
那么,如何获取虚幻引擎的源码呢?
获得源码方法一:
官方教程:unrealengine.com/zh-CN/...
第一步:关联账户
1. 打开Epic Games启动器,点击管理账户后,跳转网页。
2. 如果网页无法打开,直接访问unrealengine.com/accoun...
3. 进入后,点击关联GitHub账户,点击授权EpicGames按钮,完成OAuth应用授权流程。
4. 接收邮件,加入GitHub上的@EpicGames组织。
第二步:下载源码
1. 登录GitHub账号。
2. 在GitHub个人页面点击右上角Your profile,进入后点击这个图标(有这个图标表示已经加入虚幻组织)。
3. 进入后,找到虚幻源码仓库,双击进入。
4. 下载源码。
第三步:打开源码文件
1. 下载后解压,地址不能有中文和空格。
2. 运行setup.bat,可能报错无法下载。
- 第一种错误:Failed to download 'cdn.unrealengine.com/de...': 远程服务器返回错误: () 已禁止。 (WebException)
解决办法:要解决此问题,您需要获取位于此处的文件:github.com/EpicGames/Un...
然后替换engine/build/commit.gitdeps.xml版本中的文件。
文件在这,点击下载Commit.gitdeps.xml。
- 第二种错误:下载至%时,下载失败。
解决办法:UE4源码下载对于文件路径长度有要求,将文件夹名字改短即可,6个字符长度。
再次运行Setup.bat,即可成功。这个阶段时间很长。
双击运行GenerateProjectFiles.bat文件,运行结束会生成UE5.sln文件,这个就是源码啦!
获取源码方法二:
这个方法适合只是想要了解学习引擎底层原理,并不用于编译的情况。
快速打开代码去查看,一般用于非程序人员想要进阶了解引擎原理的时候。
前提,安装Visual Studio。
第一步:打开虚幻引擎工程。
第二步:新建蓝图类,比如actor。
第三步:新建C++组件,选择actor组件。
第四步:创建类。
第五步:完成,在Visual Studio里查看代码。
UE4源码剖析——异步与并行 中篇 之 Thread
我们知道UE中的异步框架分为TaskGraph与Thread两种,上篇教程我们学习了TaskGraph,它擅长处理有依赖关系的短任务;本篇教程我们将学习Thread,它与TaskGraph相反,它更擅长于处理长任务。而下一篇文章,我们则会承接Thread,去学习一下引擎中一些重要的线程。
Thread擅长处理长任务,从长任务生命周期这个层面来看,我们可以先把长任务分为两类:常驻型长任务与非常驻型长任务。
常驻型长任务侧重于并行,通常用于监听式服务,例如网络传输,使用单独的线程对网络进行监听,每当有网络数据包到达时,线程接收并处理后,不会立即结束,而是重置部分状态,继续监听,等待下一轮数据包。
非常驻型长任务侧重于异步,通常用于数据处理,例如主线程为了提高性能,避免卡顿,会将一些重负载的运算任务分发给分线程处理,可能分批给多条分线程,主线程继续运行其他逻辑。任务处理完成后,将结果返回给主线程,分线程可销毁。
接下来,我们通过两个例子学习Thread的使用。
计算由N到M(N和M为大数字)所有数字的和。使用Thread异步调用,将计算操作交由分线程执行,计算完成后再通知主线程结果,代码实现如下:
逻辑分为两部分:启动分线程计算数字和,使用Async函数,参数为EAsyncExecution::Thread,创建新线程执行。学习Async函数用法,该函数返回TFuture对象,代表未来状态,当前无法获取结果,但在未来某个时刻状态变为Ready,此时可通过TFuture获取结果。
主线程注册回调,等待分线程计算完成,使用TFuture的Then函数,完成时触发注册的回调,也可使用Wait系列函数等待计算完成。
接下来学习常驻型任务使用。
定义玩家血量上限点,当前点,当血量未满时,每0.2秒恢复1点血量。代码实现分为创建生命治疗仪FRunnable对象、重写Run函数、创建FRunnableThread线程、测试恢复功能和释放线程资源。
生命治疗仪创建与测试完整代码如下,可验证生命恢复功能和暂停与恢复。
UE4中的FRunnable与FRunnableThread提供创建常驻型任务所需接口。无论是常驻型还是非常驻型,底层实现相同,都是使用FRunnableThread线程。
FRunnableThread线程结构包含标识符、逻辑功能、效率与性能、辅助调试字段。线程创建与生命周期分为创建FRunnable类对象、创建FRunnableThread对象两步,通过FRunnable的生命周期管理实现线程运行与停止。
UE4线程管理流程包括继承并创建FRunnable类对象、创建FRunnableThread对象,生命治疗仪线程创建代码。
UE4中的几种异步方式底层使用线程实现,学习了线程类型、创建、生命周期、销毁方法,为下篇学习引擎特殊线程打下基础。
UE5引擎Paper2D插件上的PaperFlipbookComponent.h文件源码解读分析
深入探讨Unreal Engine 5(UE5)Paper2D插件中的UPaperFlipbookComponent.h文件,让我们从整体框架开始。Paper2D插件是UE5专为2D游戏开发设计的,内置了一系列构建2D平面动画与图形的工具。在这些工具中,UPaperFlipbookComponent扮演着关键角色,它负责管理和播放序列帧动画。
文件中的`private`和`public`关键字,明确划分了类的成员访问权限。`private`区域内的成员方法仅供类内使用,而`public`区域则可供任何访问类实例的代码使用。此外,`virtual`关键字标识了可在派生类中重写的方法,`override`关键字则表明该方法重写了基类中的虚拟方法,这是实现多态的关键。
UPaperFlipbookComponent是UE5中的一个重要组件,它允许开发者轻松添加2D动画至游戏对象。动画通过一系列帧构成,这些帧按照特定顺序和速度播放,从而创造出动画效果。
从功能和属性的推测来看,UPaperFlipbookComponent的核心功能可能包括动画播放逻辑、帧管理、速度控制以及循环播放设置。在实际应用中,开发者可能会遇到如何优化动画性能、处理复杂动画序列以及与其他游戏对象交互等问题。
尽管无法直接访问源代码的具体实现,通过理解类的结构和功能,我们可以推测UPaperFlipbookComponent在动画处理上的设计思路和潜在的实现细节。作为Paper2D插件的核心组件,它对2D游戏动画播放的支持至关重要。