BlueRose
文章92
标签23
分类7
Ue4后处理逻辑简析

Ue4后处理逻辑简析

APostProcessVolume

通常我们在后处理体积,也就是APostProcessVolume设置后处理效果。它存储了struct FPostProcessSettings Settings;
加入关卡后,会存储在UWorld的PostProcessVolumes中,之后依次调用DoPostProcessVolume=》OverridePostProcessSettings,之后修改FSceneView中的FFinalPostProcessSettings FinalPostProcessSettings。(对所有属性进行插值计算)

最后就可以通过View.FinalPostProcessSettings来读取后处理参数了。

UE4 AI相关模块学习笔记

UE4 AI相关模块学习笔记

前言

本文为本人学习UE4 AI相关模块学习笔记,之前因为没有系统的整理过所以没发出。现在因为某一些原因,又因为懒得整理所以就发了。

其他文档推荐:
UE4场景询问系统浅析(EQS与行为树)
http://www.uejoy.com/?p=500

UE4 AIModule源码阅读之AI感知系统
https://zhuanlan.zhihu.com/p/356716030

UE4通过修改FMeshBatch参数实现反向剔除

UE4通过修改FMeshBatch参数实现反向剔除

之前我有写过两篇通过自定义场景代理来实现描边的文章:
https://zhuanlan.zhihu.com/p/69139579
https://zhuanlan.zhihu.com/p/69156465

当时有一个问题没解决,就是不知道如何将材质设置为反向剔除,因为UE4只有双面渲染选项,毕竟只有卡通渲染等一些非真实渲染才需要这种功能。但经过MeshDraw框架的学习,我发现只需要在场景代理中设置一下FMeshBatch剔除属性即可,而且这个方法没有任何副作用。其他代码可以参考我的插画。效果如图(没有使用深度偏移)


UE4 BasePassPixelShader.usf学习笔记

UE4 BasePassPixelShader.usf学习笔记

BasePassPixelShader.usf中的FPixelShaderInOut_MainPS(),为BasePass阶段Shader的主要逻辑。会被PixelShaderOutputCommon.usf的MainPS(),即PixelShader入口函数中被调用。
该阶段会取得材质编辑器各个引脚的计算结果,在一些计算下最终输出GBuffer,以备后续光照计算。可以认为是“紧接”材质编辑器的下一步工作。相关的c++逻辑位于FDeferredShadingSceneRenderer::Render()的RenderBasePass()中。

但因为个人能力与时间所限,只能写一篇杂乱笔记作为记录,以供后续使用。

UE4 材质编辑器 CustomNode使用技巧

UE4 材质编辑器 CustomNode使用技巧

之前有看过MeshDraw的流程,发现MeshDraw部分还是和材质编辑器帮得死死的。(不过应该可以通过自定义MeshDrawPass、图元类、定点工厂来直接使用VS与PS Shader。不过这样就无法使用材质编辑器进行简单的Shader编写与使用Material Instance来调节参数,只能使用c++进行参数传递非常得不方便)在使用材质编辑器的情况,使用CustomNode可以更多的自由度,比如使用一些UE在ush定义的函数以及循环等;更好的可读性以及方便项目升级与后续项目使用等。

这里我总结了一些CustomNode使用方法。使用CustomNode时最好将ConsoleVariables.ini中的 r.ShaderDevelopmentMode设置为1。这样可以看到更多的Shader错误信息,但老实说UE4的Shader错误提示真心不能与U3D比……

采用CustomNode+Include usf文件的方式,使用Ctrl+Shift+.不会真正的更新代码,必须手动断开节点连接再连接上,才会触发重新编译。

MeshDraw渲染流程学习笔记

MeshDraw渲染流程学习笔记

前言

MeshDraw是UE4用于渲染Mesh相关Pass的框架,他主要用于将Mesh渲染到RT上,之后在RDG中进行进一步的渲染。

使用引擎版本:源码版4.27.0

参考Yivanlee的MeshDraw系列文章。

提升FastBuild编译UnrealEngine的速度

提升FastBuild编译UnrealEngine的速度

在上一篇文章之后我进行了进一步测试,下面是结果。

测试结果

测试配置
i7-8700 3.2Ghz 12线程
16GB内存
WDC PC SN730 SDBQNTY-256G-1001 固态硬盘
ST1000DM003-1SB102 机械硬盘

服务器配置
Inter Xeon Silver 4114 2.2GHz (2处理器)40线程
64GB内存

引擎版本4.27.0 Release
网络:百兆网络

使用Fastbuild加快UnrealEngine编译速度

使用Fastbuild加快UnrealEngine编译速度

如果你有多台电脑或者服务器就可以使用FastBuild提高编译速度。虽然最后测试法线,i7-7700+一台几年前的e5 40核心服务器依然比不过今年买的枪神5笔记本。

如果你完全按照 https://zhuanlan.zhihu.com/p/158400394 的教程来操作,那你就被坑了。目前Fastbuild的最新版本与UE是不兼容的。很可能会出现寻找的目录与FastBuild创建的目录不一致的问题。以下是本人的log:

已启动生成…
1>------ 已启动生成: 项目: UE4, 配置: Development_Editor x64 ------
1>Building UE4Editor and ShaderCompileWorker...
1>Using Visual Studio 2019 14.29.30136 toolchain (D:\Program Files (x86)\Microsoft Visual Studio\2019\Professional\VC\Tools\MSVC\14.29.30133) and Windows 10.0.19041.0 SDK (D:\Windows Kits\10).
1>Detected build type as Windows from 'D:\UnrealEngine\UnrealEngine4.27\Engine\Build\Windows\cl-filter\cl-filter.exe' using search term 'Windows'
1>Using path : {D:\Program Files (x86)\Microsoft Visual Studio\2019\Professional\VC/Redist/MSVC\14.29.30133} for vccorlib_.dll (MSVC redist)...
1>    ...Add an entry for MsvcCRTRedistVersion in BuildConfiguration.xml to specify a version number
1>FBuild Command Line Arguments: '-monitor -summary -dist -cacheread -ide -clean -config "D:\UnrealEngine\UnrealEngine4.27\Engine\Intermediate\Build\fbuild.bff" -nostoponerror
1>BFF file 'D:\UnrealEngine\UnrealEngine4.27\Engine\Intermediate\Build\fbuild.bff' has changed (reparsing will occur).
1>Using brokerage folder
1>No workers found in '\\DESKTOP-QI1GP15\FastBuildBroker\main\20.windows\'
1>No workers available - Distributed compilation disabled

操作步骤

上述问题是因为当前使用的FastBuild协议版本与UE4所需的不同造成的,所以你需要使用EPIC定制的FastBuild。本人使用Win10与UnrelEngine4.27.0源码版目前正确的操作步骤如下:

  1. 使用源码目录Engine\Extras\ThirdPartyNotUE\FASTBuild\Win64\下的FastBuild。指定一个不含用中文路径的目录。
  2. 在该目录中再新建一个名为FBuild的文件夹,并将3个文件复制进去。这一步是可选步骤,是为了兼容FBDashboard.exe。你可以去FastBuild官网下载,并且指定目录下。(只需要复制FBDashboard.exe,放在FBuild外面)
  3. 创建共享文件夹。添加当前用户与Everyone用户权限为读/写。之后再用其他电脑访问一次,能进入并且写文件就完成了。(只需要其中一台电脑or服务器创建共享文件夹即可,其他所有机器都会使用这个共享文件夹)
  4. 添加环境变量FASTBUILD_BROKERAGE_PATH,内容为共享文件夹的网络路径,比如\\DESKTOP-QI1GP15\FastBuildBroker;Path变量添加FBuild.exe所在目录,之后在CMD中输入FBuild,运行后提示Failed to open BFF 'fbuild.bff'就代表添加成功了。
  5. 在其他电脑与服务器上执行上述步骤。
  6. 添加编译配置。给Engine\Saved\UnrealBuildTool\BuildConfiguration.xml添加bAllowFASTBuild配置为true。

比如这样:

<?xml version="1.0" encoding="utf-8" ?>
<Configuration xmlns="https://www.unrealengine.com/BuildConfiguration">
    <BuildConfiguration>
        <bAllowFASTBuild>true</bAllowFASTBuild>
    </BuildConfiguration>
</Configuration>

共享问题

你很可能会遇到无法打开共享或是网络发现的功能,下面我分享以下解决方法。测试系统:win10、win2012 r2。

  1. 关闭win防火墙。
  2. 在控制面板-程序-启动或者关闭服务器功能中,确保安装了SMB 1.0/CIFS 文件共享支持下的所有功能。
  3. 运行services.msc,启动Computer Browser服务并将启动方式设置为自动。将下列服务启动并将启动方式设置为自动(延迟启动):Function Discovery Provider Host、Function Discovery Resource Publication、Network Connections、UPnP Device Host。

其他注意点

江湖小辈教程中使用FastBuild源码版是为了做测试以及通过修改源代码来实现通过Ip来代替计算机名来寻找共享。如果你想使用最新版本就需要修改FastBuild源码中的distributed protocol version。本人没有试过,但应该是这样没错。

对于团队来说添加DCC、Shader编译也许必须的,所以还可能修改UBT代码。但记住在修改完UBT代码后,需要重新编译UBT。
调试UBT的话,需要在UBT工程上右键-属性-调试页面中,将配置设为Debug,之后添加命行参数,之后在Debug模式下就可以命中断点了。编译UE4源码命令行如下:

UE4Editor Win64 Development -Quiet -WaitMutex -FromMsBuild

编译配置

是一个名为BuildConfiguration.xml的xml文件,用于控制编译。除了可以在项目Config/UnrealBuildTool中添加外。UBT还会从以下位置(Windows系统)的XML配置文件读取设置:

  • Engine/Saved/UnrealBuildTool/BuildConfiguration.xml - 针对特定引擎版本。
  • User Folder/AppData/Roaming/Unreal Engine/UnrealBuildTool/BuildConfiguration.xml
  • My Documents/Unreal Engine/UnrealBuildTool/BuildConfiguration.xml - 适用于所有已安装的引擎版本。

除了上文中说到的bAllowFASTBuild外,因为本人使用附带git信息的引擎源码,编译时UBT会先去读取git信息,但因为源码git信息量太大,非常浪费时间。这里可以添加

<SourceFileWorkingSet> 
    <Provider>None</Provider> 
    <RepositoryPath></RepositoryPath> 
    <GitPath></GitPath> 
</SourceFileWorkingSet>

起到让UBT禁用“使用 ‘git status’ 来确定AdaptiveUnityBuild。下面介绍一下其他参数,完整参数请去官方文档参考。

LocalExecutor

  • ProcessorCountMultiplier:本地执行的处理器计数乘数。设为小于1可为其他任务保留CPU。使用本地执行器(非XGE)时,在每个CPU核心上运行单一操作。注意: 可将该属性设为较大的值,在多数情况下可稍微提高编译速度,但电脑在编译期间的响应速度将变慢。
  • MaxProcessorCount:本地执行的最大处理器数量。

ParallelExecutor

  • MaxProcessorCount:本地执行的最大处理器数量。
  • ProcessorCountMultiplier:本地执行的处理器计数乘数。设为小于1可为其他任务保留CPU。
  • bStopCompilationAfterErrors:启用时,将在发生编译错误后停止编译目标。

我在查看了AnswerHUB看到有人分享了自己的配置:

查阅代码之后发现,这些配置选项要去看 BuildConfigProperties.INT.udn 里的参数,ProcessorCountMultiplier 是在 ParallelExecutor 下的,所以改成以下配置:

<?xml version="1.0" encoding="utf-8" ?>
<Configuration xmlns="https://www.unrealengine.com/BuildConfiguration">
  <ParallelExecutor>
    <ProcessorCountMultiplier>7</ProcessorCountMultiplier>
    <MaxProcessorCount>7</MaxProcessorCount>
    <bStopCompilationAfterErrors>true</bStopCompilationAfterErrors>
  </ParallelExecutor>
</Configuration>

目前我使用的完整配置:

<?xml version="1.0" encoding="utf-8" ?>
<Configuration xmlns="https://www.unrealengine.com/BuildConfiguration">
  <BuildConfiguration>
    <ProcessorCountMultiplier>7</ProcessorCountMultiplier>
    <MaxParallelActions>7</MaxParallelActions>
    <bAllowParallelExecutor>true</bAllowParallelExecutor>
  </BuildConfiguration>
  <SNDBS>
    <ProcessorCountMultiplier>4</ProcessorCountMultiplier>
    <MaxProcessorCount>4</MaxProcessorCount>
  </SNDBS>
  <ParallelExecutor>
    <ProcessorCountMultiplier>7</ProcessorCountMultiplier>
    <MaxProcessorCount>7</MaxProcessorCount>
    <bStopCompilationAfterErrors>true</bStopCompilationAfterErrors>
  </ParallelExecutor>
</Configuration>

FASTBuild

  • FBuildExecutablePath:用于指定 fbuild.exe 的位置(如果发布的二进制文件未使用)
  • bEnableDistribution:控制网络构建分布(network build distribution)
  • FBuildBrokeragePath:用于指定中间件的位置。如为null,则FASTBuild退回检查FASTBUILD_BROKERAGE_PATH
  • bEnableCaching:控制是否使用缓存。仅当该选项启用后,CachePath和FASTCacheMode才会相关。
  • CacheMode:缓存访问模式 - 仅当bEnableCaching为真时相关;
  • FBuildCachePath:用于指定缓存的位置。如为null,FASTBuild会退回检查FASTBUILD_CACHE_PATH
  • bForceRemote:是否强制远程
  • bStopOnError:是否在错误上停止
  • MsvcCRTRedistVersion:使用哪个MSVC CRT Redist版本

UnityBuild

  • bUseAdaptiveUnityBuild:使用启发式方法来确定哪些文件目前正在被迭代,并将它们从unity blobs中排除,从而加快增量编译的时间。目前的实现使用只读标志来区分工作集,假设文件正在被修改,源码控制系统将使其可写。这对Perforce是正确的,但对Git不是。
GAS的TargetData与TargetActor相关机制

GAS的TargetData与TargetActor相关机制

前言

TargetActor是GAS用于获取场景中物体、空间、位移等数据的机制,同时也可以用于制作可视化debug工具。,所以非常有必要掌握它。

一般流程为:使用WaitTargetData_AbilityTask生成TargetActor,之后通过TargetActor的内部函数或者射线获取场景信息,最后通过委托传递携带这些信息构建的FGameplayAbilityTargetDataHandle。

本文部分描述摘自GASDocumentation_Chinese,翻译的还不错,也请大家给此项目点赞。

GAS AbilityTask节点功能整理

GAS AbilityTask节点功能整理

前言

整理了一下GameplayTasks节点,在此分享给大家。