虚幻4源码编译材质-适用于编译着色器的图形程序员的信息。

选择你的绳索系统:

窗户

苹果操作系统

Linux目录

本页内容

快速入门

使用着色器时,不必使用 r.ShaderDevelopmentMode 设置为 1 以启用它。执行此操作的最简单方法是编辑控制台变量.ini,以便每次加载时都可以启用它。这将启用“出错时重试”以及与着色器开发相关的日志和警告。

使用 Ctrl+Shift+.,它将执行 recompileshaderschanged 命令。此命令应在将更改保存到虚幻着色器 (.usf) 文件后执行。

如果修改包含在许多着色器(如 common.usf)中的文件,则可能需要一些时间。如果要对材质进行迭代,可以通过对材质进行少量更改(例如连接节点)并使用“材质编辑器”中的“应用”来触发材质重新编译。着色器

与材质全局着色器

全局着色器

是操作固定几何体(如全屏四边形)而不与材质交互的着色器。示例包括阴影过滤或后处理。在视频内存中,任何给定的全局着色器类型只有一个着色器。

材料和网格类型材质

由一组状态控制,该状态控制材质的渲染方法(混合模式、双工等)和一组材质输入(基色、粗糙度、法线等),后者控制材质与各种渲染过程的交互方式。

虚幻4源码编译材质-适用于编译着色器的图形程序员的信息。

顶点鞋厂

材料必须支持应用于不同的网格类型,这是通过顶点鞋厂实现的。FVertexFactoryType 表示唯一的网格类型,FVertexFactory 实例存储每个实例的数据以支持该唯一的网格类型。例如,FGPUSkinVertexFactory 存储皮肤处理所需的骨骼矩阵,以及对 GPU 皮肤顶点着色器代码需要用作输入的各种顶点缓冲区的引用。顶点鞋厂着色器代码是各种过程着色器用来提取网格类型差异的隐式套接字。顶点鞋工厂主要由顶点着色器代码组成,但也包含一些像素着色器代码。顶点鞋厂着色器代码的一些重要组件如下:

功能

描述

FVertexFactoryInput

定义顶点鞋厂所需的顶点着色器输入。此输入必须与 FVertexFactory 中C++端的顶点声明匹配。

FVertex工厂中间体

用于存储缓存的中间数据,这些数据将在多个顶点鞋工厂函数中使用。一个常见的例子是 TangentToLocal 矩阵,它必须根据解压缩的顶点输入进行估计。

FVertexFactoryInterpolantsVSToPS要从顶点着色

器传递到像素着色器的顶点鞋工厂数据。

VertexFactoryGetWorldPosition从顶点

着色器调用此函数以获取全局空间顶点位置。对于静态网格,此函数仅使用 LocalToWorld 矩阵将局部空间位置从顶点缓冲区转换为全局空间。对于由 GPU 处理蒙皮的网格,首先处理此位置的蒙皮,然后再转换为全局空间。

VertexFactoryGetInterpolantsVSToPS

将 FVertexFactoryInput 转换为

虚幻4源码编译材质-适用于编译着色器的图形程序员的信息。

FVertexFactory插值器,将由图形硬件插值,然后传递给像素着色器。

获取材料像素参数

此函数在像素着色器中调用,并将顶点鞋工厂特定的注册 (FVertexFactory插值) 转换为 FMaterialPixelParameters 结构,该结构由过程像素着色器使用。

材质着色器

着色器

使用 FMaterialShaderType 是特定于过程的着色器,需要访问材质的各个属性,因此必须针对每个材质进行编译,但不需要访问任何网格属性。光照函数过程着色器是 FMaterialShaderType 的一个示例。

使用 FMeshMaterialShaderType 的着色器是特定于流程的着色器,它们取决于材质的属性和网格类型,必须针对每个材质/顶点组合进行编译。例如,TBasePassVS/TBasePassPS 要求在前向渲染期间评估所有材质输入。

材质所需的着色器集合包含在 FMaterialShaderMap 中。它看起来像这样:

FMaterialShaderMap 
    FLightFunctionPixelShader - FMaterialShaderType
    FLocalVertexFactory - FVertexFactoryType
        TDepthOnlyPS - FMeshMaterialShaderType
        TDepthOnlyVS - FMeshMaterialShaderType
        TBasePassPS - FMeshMaterialShaderType
        TBasePassVS - FMeshMaterialShaderType
        等等
    FGPUSkinVertexFactory - FVertexFactoryType
        等等

Vertex Shoe Factory根据其ShouldCache函数包含在该矩阵中,该函数依赖于材料的使用。例如,如果 bUsedWithSkeletalMesh 值为 true,则表示 GPU 外观包含在 Vertex 鞋厂中。FMeshMaterialShaderType根据其ShouldCache函数包含在该矩阵中,该函数依赖于材料和顶点鞋厂属性。这是一种缓存着色器的稀疏矩阵方法,它可能导致着色器的数量迅速减少,进而占用视频内存并减少编译时间。与存储所需的实际着色器列表相比,主要优势在于为什么要生成任何列表,因此在控制台上运行之前仍会编译所需的着色器。UE4通过压缩着色器来缓解着色器内存问题,并通过多核着色器编译解决编译时问题。

创建材质着色器

材质着色器类型是使用DECLARE_SHADER_TYPE宏创建的:

class FLightFunctionPixelShader : public FShader { DECLARE_SHADER_TYPE(FLightFunctionPixelShader,Material);

此宏声明材质着色器类型所需的元数据和函数。材质着色器类型使用以下IMPLEMENT_MATERIAL_SHADER_TYPE进行实例化:

虚幻4源码编译材质-适用于编译着色器的图形程序员的信息。

IMPLEMENT_MATERIAL_SHADER_TYPE(,FLightFunctionPixelShader,TEXT("LightFunctionPixelShader")

这会为材质着色器类型生成全局元数据,这允许我们在运行时执行各种操作,例如迭代具有给定着色器类型的所有着色器。

典型的材质像素着色器类型将首先通过调用 GetMaterialPixelParameters 顶点鞋厂函数来创建 FMaterialPixelParameters 构造。GetMaterialPixelParameters 将特定于顶鞋厂的输入转换为任何进程都可能想要访问的属性,例如 WorldPosition 和 TangentNormal,仅举几例。之后,材质着色器将调用 CalcMaterialParameters,这将写出 FMaterialPixelParameters 的剩余成员,然后 FMaterialPixelParameters 将被完全初始化。然后,材质着色器将通过 MaterialTemplate.usf 中的函数访问材质的各个输入(例如,通过 GetMaterialEmissive 访问材质自发光输入),执行一些稀疏性,然后输出过程的最终颜色。

特殊发动机材料

UMaterial有一个名为bUsedAsSpecialEngineMaterial的设置,允许该材料与任何顶级鞋厂类型一起使用。这意味着所有顶级鞋厂都是用材料编译的,这将是一个非常大的集合。bUsedAsSpecialEngineMaterial 用于:

着色器编译

UE4使用流系统异步编译着色器。编译恳求没有缓存着色器贴图的材质在加载时排队,并且编译结果将在可用时应用,而不会阻塞引擎。这在放置时间和编译吞吐量方面提供了最佳结果,但这意味着在实际的平台着色器编译和需要编译的材料之间有相当多的层。

实际编译是在称为着色器编译工作线程的工作进程中完成的,因为平台着色器编译函数 (D3DCompile) 通常包含未分割的块,这使得在单个进程中进行多核比率调整变得困难。

调试着色器编译器

有一些设置可以控制编译的完成方式,从而简化了着色器编译器的调试。您可以在 BaseEngine .ini的 [DevOptions.Shaders] 部分找到此设置。

设置

描述

bAllowComcomplingThroughWorkers

是启动SCW来调用编译器DLL,还是UE4应该直接调用编译器DLL。如果禁用此设置,将以单核方法执行编译。

b允许异步着色器编译

是否应通过UE4中的另一个线程执行编译。

如果要直接从UE4单步执行着色器编译器DLL(例如CompileDCompileD33DD1111Shader),请将所有三个设置为false。此外,编译将花费很长时间虚幻4源码编译材质,因此请确保缓存所有其他着色器。

发生编译错误时重试

启用 r。在着色器开发模式之后,如果发生着色器编译错误,您将有机会重试。这对于全局着色器很重要,因为编译失败表示致命错误。

在加入调试器后进行调试时,会遇到断点,并且编译错误将显示在 Visual Studio 输出窗口中。然后,您可以双击错误日志以直接转到有问题的行。

否则,系统将显示“是/否”对话框

着色器缓存与意图

然后编译着色器,并将其存储在派生数据缓存中。在其键中,包含所有已编译输入(包括着色器源文件)的哈希。这意味着每次重新启动引擎或执行“recompileshaderschanged”时,都会手动应用对着色器源文件所做的更改。

更改 FShader 序列化函数时,不必处理向后兼容性,只需向着色器中包含的着色器文件添加一个空格即可。

当您需要资源时,材质着色器将直接插入到材质包中,而全局着色器则单独存储在全局着色器文件中,这允许在引擎启动过程的早期加载它。

虚幻4源码编译材质-适用于编译着色器的图形程序员的信息。

调试调试着色器

的主要方法是更改着色器以输出中间结果,然后使用相应的 VisualizeTexture 命令可视化该结果。这允许快速执行迭代,因为您可以快速编译而无需重新启动引擎。例如,您可以使用类似于以下内容的代码来验证 WorldPosition 是否正确:

OutColor = frac(WorldPosition / 1000);

之后,验证比率列是否正确,但结果不依赖于视图。此外虚幻4源码编译材质,对于这些构建数据结构的更复杂的着色器,很难很好地调整比率列。

轮询调试信息

您还可以使用 r. DumpShaderDebugInfo=1 将所有已编译着色器的文件保存到 c 驱动器。正如R.与着色器开发模式一样,在控制台变量.ini中设置它可能很有用。该文件将被保存到游戏名称/保存/着色器调试信息等

如果使用全局着色器,请重新编译着色器更改或 Ctrl+Shift+。 是最快的迭代方法。如果着色器需要很长时间进行编译,请考虑在着色器的 ModifyCompilationEnvironment 手中将CFLAG_StandardOptimization指定为编译标志。

如果您正在使用材质着色器,例如 BasePassPixelShader.usf,则迭代单个材质的速度会快得多。每次单击材质编辑器上的“应用”按钮时,都会从 C 驱动器重新读取着色器文件,但只会重新编译材质。

交叉编译器

HLSL

交叉编译器使用它手动将 HLSL 转换为 OpenGL 平台的 GLSL,从而允许您为所有平台编写一次着色器。它在脱机着色器编译期间运行,并对 OpenGL 驱动程序经常错过的代码执行各种优化。

异步计算

异步计算是单独使用特定 GPU 的 API 中提供的一项硬件功能。它使交错能够更好、更有效地利用 GPU 中的硬件单元。

我想了很久,最后决定推荐QtCreator作为C++初学者的IDE。一个好的IDE可以提高学习效率。我不建议使用 visualstudio,因为它比较大,但编译桌面 GUI 程序需要一定的配置步骤,使用起来不是很方便。我也不推荐VScode,因为它的配置有点复杂,尽管安装起来相对简单。我推荐QtCreator,因为它不大,但它是原生的Qt IDE,自然会适应Qt开发桌面GUI程序。我认为对于菜鸟来说,Windows桌面GUI程序更容易启动和理解。

Qt是一个开源桌面

GUI库,可以轻松为桌面程序编程,广泛使用,并且代码是开源的。Qt5以上的版本在安装时会手动安装Qtcreator,基本上是一键安装,使用起来也很方便。操作系统是Windows。

Qt下载链接:

打开链接后,选择要下载的版本:

虚幻4源码编译材质-适用于编译着色器的图形程序员的信息。

图1Qt下载目录

您可以选择 5.12 并直接下载。

图 25.12.0 版本详细信息

单击适用于 Windows 的直接下载。下载后,双击 (EXE) 进行安装。安装完成后,您可以在桌面上看到 qtCreator 快捷方式方法。

虚幻4源码编译材质-适用于编译着色器的图形程序员的信息。

图 3:QtCreator 快捷方法

双击桌面图标以步入 IDE。

图4Qt创建者

进入后,背景默认为黑色,我将其设置为红色背景,都一样。因此,我们可以创建新项目。在这里,让我们在没有Qt的情况下创建自己的项目,并创建一个纯C++项目。

点击“新建项目”,进入下一页,选择非QtProject,然后选择PlainC++Application

虚幻4源码编译材质-适用于编译着色器的图形程序员的信息。

图 5:创建新的C++项目选择

后,单击左下角的“选择”按钮进入下一页:

图 6:设置项目名称和项目源代码的位置

之后,点击确定到下一年,默认选择“qmake”,然后点击下一步编译配置界面

图 7:默认情况下选择 QMAKE

图 8:在“编译配置”页上,选择默认配置

之后,转到下一页,询问是否添加Git,暂时不是问题,只需单击右下角的完成即可

虚幻4源码编译材质-适用于编译着色器的图形程序员的信息。

图 9:是否添加 git

图 10:源代码已组织

如图 10 所示,这是构建的项目。默认情况下,将添加主.cpp文件。左下角有一个锤形工具,点击即可创建项目,即编译生成exe程序。建立完成后,点击右下角的红色三角形(运行按钮)将程序运行起来,红色终端也称为控制台,弹出输出“HelloWorld”。

图11 程序输出

第一个程序运行起来这么简单,不是很容易吗。明天就到这里了qt源码编译信息qt源码编译信息,如果您在使用过程中遇到任何问题,欢迎留言。希望批评和建议少一些,也希望大家用小手关注,再多交流,也激励我努力写作,非常感谢。希望共同进步。

收藏 (0) 打赏

感谢您的支持,我会继续努力的!

打开微信/支付宝扫一扫,即可进行扫码打赏哦,分享从这里开始,精彩与您同在
点赞 (0)

悟空资源网 源码编译 虚幻4源码编译材质-适用于编译着色器的图形程序员的信息。 https://www.wkzy.net/game/130022.html

常见问题

相关文章

官方客服团队

为您解决烦忧 - 24小时在线 专业服务