• Unreal 源码编译运行 Missing cached shader map… 的问题问题描述Unreal 源码是 Github-release 分支,版本是4.16。编译运行Unreal引擎源码的时候,出现虚幻编辑器的窗口,但是卡在45%不动。并在调试窗口输出:...

    Unreal 源码编译运行 Missing cached shader map… 的问题

    问题描述

    Unreal 源码是 Github-release 分支,版本是4.16。

    编译运行Unreal引擎源码的时候,出现虚幻编辑器的窗口,但是卡在45%不动。

    并在调试窗口输出:

    Missing cached shader map for material WorldGridMaterial, compiling. Is special engine material.
    

    同类问题

    同样这个问题,在unrealengine社区有人遇到,但没有说明具体原因及解决方案。

    answers.unrealengine.com - UE4.7 source build, missing cached shader

    结果

    结果我没有进行任何操作,再等会儿 居然成功运行了起来!

    我猜测可能是WorldGridMaterial这个材质需要联网下载,然后由于网络问题在45%处卡住了一会儿。

    展开全文
  • 本文为(转):Unreal 调试着色器编译过程 调试着色器编译过程 Rolando Caloca在April 19, 2016|学习编程 Share on Facebook Share on Twitter Share on Google+ Share on LinkedIn 启用 ...

    本文为()Unreal 调试着色器编译过程

       

    调试着色器编译过程

    Rolando Caloca 在 April 19, 2016 | 学习编程

       

    启用 CVAR 以允许转储中间着色器

    在 ConsoleVariables.ini 文件(通常位于 Engine/Config/ConsoleVariables.ini)中,启用下列 Cvar:

       

    在调试时构建 SHADERCOMPILEWORKER

    默认情况下,UnrealBuildTool (UBT) 将为工具生成项目,以便始终在开发时进行编译。要在调试时构建项目,请将 ShaderCompileWorker 的解决方案属性(Visual Studio:生成 -> 配置管理器)更改为 Debug_Program:

       

    生成中间文件

    此刻,您想要生成可调试的文件;启用 Cvar 将允许后续编译转储所生成的文件;要强制重建所有着色器,请在Engine/Shaders/Common.usf 中添加一个空格或进行更改,然后重新运行编辑器。这将重新编译着色器并转储Project/Saved/ShaderDebugInfo 文件夹中的所有中间文件。

       

    转储的着色器的文件夹结构

    让我们分析转储的文件的完整路径:

    D:\UE4\Samples\Games\TappyChicken\Saved\ShaderDebugInfo\PCD3D_SM5\M_Egg\LocalVF\BPPSFNoLMPolicy\BasePassPixelShader.usf

    项目的根路径:

    D:\UE4\Samples\Games\TappyChicken\Saved\ShaderDebugInfo\PCD3D_SM5\M_Egg\LocalVF\BPPSFNoLMPolicy\BasePassPixelShader.usf

    转储着色器的根路径:

    D:\UE4\Samples\Games\TappyChicken\Saved\ShaderDebugInfo\PCD3D_SM5\M_Egg\LocalVF\BPPSFNoLMPolicy\BasePassPixelShader.usf

    现在,对于每种着色器格式/平台,您可找到一个子文件夹,在本例中,这是 PC D3D Shader Model 5:

    D:\UE4\Samples\Games\TappyChicken\Saved\ShaderDebugInfo\PCD3D_SM5\M_Egg\LocalVF\BPPSFNoLMPolicy\BasePassPixelShader.usf

    现在,对于每个材质名称都有一个对应的文件夹,并且有一个名为 Global 的特殊文件夹。在本例中,我们在 M_Egg 材质内:

    D:\UE4\Samples\Games\TappyChicken\Saved\ShaderDebugInfo\PCD3D_SM5\M_Egg\LocalVF\BPPSFNoLMPolicy\BasePassPixelShader.usf

    着色器分组在贴图内并按顶点工厂排序,而这些顶点工厂通常最终对应于网格/元件类型;在本例中,有一个"本地顶点工厂":

    D:\UE4\Samples\Games\TappyChicken\Saved\ShaderDebugInfo\PCD3D_SM5\M_Egg\LocalVF\BPPSFNoLMPolicy\BasePassPixelShader.usf

    最后,下一路径是特性的排列;因为我们早先已启用 r.DumpShaderDebugShortNames=1,所以名称已压缩(以减小路径长度)。如果将其设置为 0,那么完整路径将是:

    D:\UE4\Samples\Games\TappyChicken\Saved\ShaderDebugInfo\PCD3D_SM5\M_Egg\FLocalVertexFactory\TBasePassPSFNoLightMapPolicy\BasePassPixelShader.usf

    在该文件夹中,有一个批处理文件和一个 usf 文件。这个 usf 文件就是要提供给平台编译器的最终着色器代码。您可通过这个批处理文件来调用平台编译器,以查看中间代码。

       

    使用 SHADERCOMPILEWORKER 进行调试

    从 4.11 版开始,我们为 ShaderCompileWorker (SCW) 添加了一项功能,使其能够调试平台编译器调用;命令行如下所示:

    PathToGeneratedUsfFile -directcompile -format=ShaderFormat -ShaderType -entry=EntryPoint

    • PathToGeneratedUsfFile 是 ShaderDebugInfo 文件夹中的最终 usf 文件
    • ShaderFormat 是您想要调试的着色器平台格式(在本例中,这是 PCD3D_SM5)
    • ShaderType 是 vs/ps/gs/hs/ds/cs 中的一项,分别对应于"顶点"、"像素"、"几何体"、"物体外壳"、"域"和"计算"着色器类型
    • EntryPoint 是 usf 文件中此着色器的入口点的函数名称

    例如,D:\UE4\Samples\Games\TappyChicken\Saved\ShaderDebugInfo\PCD3D_SM5\M_Egg\LocalVF\BPPSFNoLMPolicy\BasePassPixelShader.usf-format=PCD3D_SM5 -ps -entry=Main

    现在,您可以对 D3D11ShaderCompiler.cpp 中的 CompileD3D11Shader() 函数设置断点,通过命令行运行 SCW,并且应该能够开始了解如何调用平台编译器。

    有关此主题的更多信息,请参阅虚幻引擎文档的以下两个页面:

    展开全文
  • 取消蓝图中的连接线:Alt+...每次修改母材质,工具都需要重新编译才能显示效果,而使用材质实例则不需要。 利用Panner节点和Time节点实现平移,比如海面的移动 利用Rotator和Time节点实现旋转 可以通过加减乘除,最...
    • 取消蓝图中的连接线:Alt+鼠标左键
    • 在蓝图中,通过按住1,2,3,4加鼠标左键,可以快速生成1,2,3,4维的向量
      194303-20161105152150377-109319657.png

    • 材质和材质实例的区别:使用一个母材质,可以创建出多种场景中的材质实例;每次修改母材质,工具都需要重新编译才能显示效果,而使用材质实例则不需要。
    • 利用Panner节点和Time节点实现平移,比如海面的移动
      194303-20161105151041861-996937306.png

    • 利用Rotator和Time节点实现旋转
    • 可以通过加减乘除,最大值 最小值等运算来合成效果:比如通过Add运算,将2张贴图合成在一起,其实就是贴图的RGB数值相加
      194303-20161105153931393-768088372.png
    • 通过一维向量和乘法,设置贴图的曝光值:
      194303-20161105160810971-1213025978.png
    • 利用线性差值工具Lerp的Alpha来调节合成的比例和效果:下面是白和黑各用50%后的效果
      194303-20161105161743924-2050684326.png
    • Sine + Time节点,可以设置一闪一闪的效果:比如霓虹灯的显示

    转载于:https://www.cnblogs.com/xiuj/p/6032709.html

    展开全文
  • 翻译:yarswang 转载请保留   如前所述,Unreal编译给定着色器/材质的多个排列以应对不同的用例。 修改材质时,Unreal将查找该着色器使用的 .ush/.usf 文件并重新加载它们。 然后...

    https://medium.com/@lordned/unreal-engine-4-rendering-part-5-shader-permutations-2b975e503dd4

    翻译:yarswang 转载请保留

     

    如前所述,Unreal将编译给定着色器/材质的多个排列以应对不同的用例。 修改材质时,Unreal将查找该着色器使用的 .ush/.usf 文件并重新加载它们。 然后,Unreal将你的材质图转换为HLSL代码,然后开始构建着色器的每个排列。

     

    我们都熟悉每次在Unreal中使用材质编辑器的过程。不幸的是,这有一个问题:它只重新加载与材料本身相关的着色器。因为Unreal使用了延迟渲染,一些着色器是全局的(例如,对GBuffer进行采样并计算最终颜色的通道)。这意味着这些着色器实际上不是材质的一部分,因此修改该材质不会导致它们重新加载。

     

    另外,一旦你更改了其中一个全局着色器并重新启动,Unreal就会重新编译每个使用该文件的着色器,所以如果你编辑一个共用着色器,你会看到一个空项目有约125个着色器/约10,000个的排列完全重新编译。对于修改渲染模块C++代码也是如此。这会对迭代时间产生可怕的影响,因为你需要重新编译所有内容并等待10分钟以查看你的更改是否有效。更糟糕的是,如果你在着色器内部修改#if X_Y区域内的某些内容,则会在重新编译的过程中遇到无法编译的排列。你可以去修复它,但修复它会使我们所已编译过的需要重新编译。

     

    爽!

     

    https://cdn-images-1.medium.com/max/800/1*sap7-qeesV_hrRGiN9B6eA.png
    Unreal 4.19的新内容- Shader Permutation Reduction 设置

     

    降低总排列数

    我们的第一个目标是查看可以在引擎中或涉及材质的哪些设置可以更改,来减少需要编译的排列总数。我不一定建议你禁用这些设置,但暂时减少排列数会使你在开发着色器时加快迭代时间。

     

    在基于材质的设定上,有些事项我们可以注意一下。第一个是Usage设置。

     

    我们第一个目标是看改变什么设置可以降低排列的数量。这些设置看起来代表引擎中特殊的顶点工厂,如果 Automatically Set Usage in Editor 被勾选的话,它将生成该排列。禁用此功能可以让你获得更多控制权,并且可以让美术同学在分配材料方面三思而行,但可能不会为你节省太多的排列。

     

    下一件基于材质的设定中,需要注意的是Quality and Static开关。因为开启静态开关,在编译时每种可能组合都需要一个新的排列,开启太多静态开关可能会导致相当多的排列。同样,这个可能不会节省你太多的排列。这是要记住,但是如果你正在尝试迭代并且你正处于一个近乎空的项目中,你可能不会有任何这些设置,并且运行时开启静态开关的额外性能增益值得根据需要使用它们。

     

    现在我们来看看项目设置中哪些可以减少排列 —— 其中一些设置需要长期启用,但如果可能的话,我们可以暂时禁用它们。这需要Unreal 4.19或更高版本,编译本篇文章撰写日期之后的最新引擎源码就能够起作用。打开项目设置>渲染,有几个设置可以调整。根据你的特定项目/测试需求,你可能需要启用其中一些。如果你在此处禁用场景需要的着色器排列,你将在视窗中收到警告,比如:当尝试使用雾效却禁用Support Atmospheric Fog时,会有“PROJECT DOES NOT SUPPORT ATMOSPHERIC FOG”(工程不支持雾效)的警告出现。

     

    https://cdn-images-1.medium.com/max/800/1*6gXKYpHVNigEh7mFxCyppg.png

     

    光照

    1. Allow Static Lighting
      允许静态照明(注意:禁用此功能表示标记为静态的灯光不会影响你的材料。如果禁用此选项,请将它们设置为Movable进行测试)

     

    减少着色器排列

    1. Support Stationary Skylight
      (注意:禁用此功能意味着标记为静态的天光对不会影响你的材质。如果禁用此功能,请将它们设置为Movable进行测试)
    2. Support Low Quality Lightmap Shader Permutations
    3. Support PointLight WholeSceneShadows
    4. Support Atmospheric Fog

     

    减少移动着色器排列

    1. Support Combined Static and CSM Shadowing
    2. Support Distance Field Shadows
    3. Support Movable Directional Lights
    4. Max Movable Point Lights = 0

     

    禁用所有这些后,打开ConsoleVariables.ini并添加r.ForceDebugViewModes = 2, 这会进一步减少排列的数量。这将在编辑器中禁用Buffer Visualization(用来显示GBuffer通道)但这是值得的。

     

    所有这些操作使着色器排列数量从8809减少到3708,高达58%的降幅。

     

    加快编译速度

    你可以将CFLAG_StandardOptimization添加到编译环境中,以确保D3D编译器不会花时间优化着色器。 将设置应用到所有着色器最简单的方法是打开ShaderCompiler.cpp并向下滚动到GlobalBeginCompileShader函数。 然后只需添加一行代码:Input.Environment.CompilerFlags.Add(CFLAG_StandardOptimization);! 如果你尝试分析性能的话,那么请不要这样做,因为优化着色器很重要的。 注意:这与r.Shaders.Optimize = 0不同,后者是关于调试信息而不是代码优化。

     

    仅重新编译已更改的着色器

    最后,我们将研究重新编译特定着色器的技巧。 Unreal有一个不公开的控制台命令recompileshaders可以使用几个不同的参数。 请注意,这仅适用于.usf文件,因为.ush文件是仅包含在.usf文件中的标头。

     

    recompileshaders changed查询FShaderTypeFShaderPipelineType以返回所有过时的着色器、工厂和着色器管线。 如果发现任何过时(由于源文件更改),则重新编译。 注释表明可以使用此命令可重新编译全局着色器。 在实践中我发现因为它最终会重新编译所有受影响的全局着色器,修改像ShadingModels.ush这样的文件最终会导致可观的数量,3-5分钟的编译。

     

    recompileshaders global获取全局着色器表,清除它并强制重新编译所有全局着色器。修改像ShadingModels.ush这样的文件需要1-2分钟编译。如果你知道你正在修改的着色器是全局的而不是材质着色器,那么也许有用。

     

    recompileshaders material<MaterialName>将重新编译找到该名称的第一个材质。不应包括路径信息。这是通过在材质上调用PreEditChange/PostEditChange来实现的,因此它与在材质编辑器中点击”Apply”按钮没有什么不同。

     

    recompileshaders all都将重新编译所有内容。这就像修改所有文件然后重新启动编辑器一样。在更改结束时可能有用,以确保没有排列被破坏。可以与Project Settings > Rendering Overrides (Local) > Force All Shader Permutation Support,以确保在每个#if变体下确实编译了代码。

     

    recompileshaders <path>将尝试通过shadertype或Shader Platform类型重新编译着色器。这允许我们指定特定的着色器文件路径,例如recompileshaders /Engine/Private/BasePassPixelShader.usf

     

    重要说明:该命令大小写敏感,无论您使用哪个命令,都会运行一段时间;错误的使用情况(不正确的文件路径或文件名)会输出错误信息到控制台而不会重新编译着色器。

     

    使用此命令后,打开新的地图和材质(“材质编辑器”预览窗口)可能会不稳定,因此如果要打开其他材质或场景,请确保您的测试环境已设置好,或者不介意崩溃。

     

    它也只适用于场景中被显式使用的代码段。如果您修改仅适用于亮度半透明的部分但在场景中没有半透明对象,则热重载将不会检查该代码且不会有编译错误。

     

    抛开这些警告,这些命令非常有用,因为它运行只需要3-5秒,而不是3-5分钟!我最常运行的两个命令是

    recompileshaders /Engine/Private/BasePassPixelShaders.usf

    recompileshaders /Engine/Private/DeferredLightPixelShaders.usf,这两个命令涵盖了你可以在基本通道中做的大多数更改。

    常见的#if定义

    下面是在延迟着色管道中找到的一些常见的预处理器定义。 我根据C++ 代码触发它们的方式列出了它们的预期含义。 这将有助于你确定延迟管线的哪些部分适用于你的代码,因为你可以根据此列表检查预处理器定义,以查看它被转换成UE4的哪些设置。

    1. #if NON_DIRECTIONAL_DIRECT_LIGHTING
      这可以在DeferredLightingCommon.ush中找到,但只在ForwardLightingCommon.ush中被定义为#define NON_DIRECTIONAL_DIRECT_LIGHTING(TRANSLUCENCY_LIGHTING_VOLUMETRIC_NONDIRECTIONAL || TRANSLUCENCY_LIGHTING_VOLUMETRIC_PERVERTEX_NONDIRECTIONAL)
    2. #if SUPPORT_CONTACT_SHADOWS
      支持Unreal的Contact Shadows功能。
    3. #if REFERENCE_QUALITY
      DeferredLightingCommon.ush的顶部定义为0 - 可能是用于电影渲染?
    4. #if ALLOW_STATIC_LIGHTING
      如果r.AllowStaticLighting控制台变量设置为1,则值为true。这与静态照明支持的 Project Settings > Rendering 匹配。
    5. #if USE_DEVELOPMENT_SHADERS
      如果COMPILE_SHADERS_FOR_DEVELOPMENT为真(且平台支持),则为真。如果设置了r.CompileShadersForDevelopment,则COMPILE_SHADERS_FOR_DEVELOPMENT为true。
    6. #if TRANSLUCENT_SELF_SHADOWING
      是为使用FSelfShadowedTranslucencyPolicy渲染的对象定义的。我相信这是针对Lit Translucency的支持。
    7. #if SIMPLE_FORWARD_DIRECTIONAL_LIGHT
      #if SIMPLE_FORWARD_SHADING
      似乎是在光照贴图渲染期间为静止定向光设置的。
    8. #if FORWARD_SHADING
      r.ForwardShading设置为1时,被设置。

     

    综述

    我们了解到,我们可以通过更改一些项目设置来减少着色器排列的总数(即使只是暂时的),这样可以更快地完全重新编译。 使用未列出的recompileshader控制台命令可以避免所有着色器重新编译,但下一个编辑器启动仍将需要完全重新编译。 我们还了解了一些常见预处理器定义的条件,使我们能够更好地了解哪些代码与我们的兴趣相关。

     

    下章

    终于我们要进入教程章节了! 下一篇文章将介绍修改现有着色器管道以添加新的着色模型,该模型在遵循PBR规则的同时提供类似卡通的效果。 这篇文章的技术内容主要来自FelixK的开发博客,但更新至4.18+版本,并对我们正在改变的内容进行了更多解释 - 特别是现在我们知道延时通道的工作原理了!

    展开全文
  • 现在是2018年,材质编辑器现在在各大引擎,3D软件都非常普遍。那么它们是如何工作的呢。 其本质是,一个可视化节点就包含一段HLSL或者cg或者OpenGL代码,通过我们的“连线”将HLSL代码拼接出来。最后会出一张shader...

        现在是2018年,材质编辑器现在在各大引擎,3D软件都非常普遍。那么它们是如何工作的呢。
        其本质是,一个可视化节点就包含一段HLSL或者cg或者OpenGL代码,通过我们的“连线”将HLSL代码拼接出来。最后会出一张shader文件。对于早期的Unity和大部分3D软件的节点化材质编辑器来说,它们的shader代码比较简单,总共shader代码加起来可能也不会超过2千行,对于这一类的材质编辑器来说,它们的会将可视化的节点的shader代码直接填充到vertexshader或者fragmentshader中。还有一类比较复杂的,比如虚幻4的材质编辑器,这些可视化节点所生成的只是一堆函数而已。

    下面就以虚幻4的材质编辑器为例,来详细研究虚幻4的材质编辑器是如何工作的。
    虚幻的材质编辑器会最后生成一个HLSLCode文件,可以在window->HLSLCode面板中查看到。其实这里面储存的是一顿函数。

    当我们点击Compile之后,引擎会依次调用每个节点的Compile函数

    这个Compile函数会调用HLSLMaterialTranslator
    Compiler->CustomExpression(this, CompiledInputs);
    HLSLMaterialTranslator会执行将节点的字符串压入上面的那个materialHLSLCode里面(引擎的材质编辑器打开的那个shader代码文件)。大概的过程是这样的。那么下面就来研究一下,到底是如何将字符串压入HLSLCode文件的。

    首先在节点代码压入HLSLCode之前,这张HLSLCode并不是空的,而是有一个模板的。然后HLSLTranslator会在这个模板框架下,将红线的那些字符串填充到这个模板中,最后点击Compile之后就会生成文章开头那个截图里的HLSLCode了。这个模板在Shader目录下 private->MaterialTemplate.usf里。如果你想让你材质编辑器的那个HLSLCode文件包含你的usf文件你可以直接在MaterialTemplate.ush中include你的usf文件。这样在编译材质后,你自己的ush文件将被包含进去。
    这样你的customnode就可以直接调用你的ush里的shader函数了。

    这样就可以轻松实现CustomNode里的代码调用。但是这样会比较麻烦。因为你稍微改动一下usf,ush就会有很多shader需要编译成shadercache

    话题转回来继续我们的材质编辑器原理。HLSLTranslator会将字符串压入HLSLCode里,它是把一个名叫MaterialTemplate.usf的文件作为框架来塞的。我们只要在那些顶下的字符串中添加我们的字符串即可将我们自己的代码塞进材质编辑器的HLSLCode中。
    我们可以改一下引擎做个实验

    打开HLSLMaterialTranslator.h文件,找到virtual int32 CustomExpression( class UMaterialExpressionCustom* Custom, TArray<int32>& CompiledInputs ) override函数,我们做如下修改:
    编译一下引擎,再打开材质编辑器的HLSLCode,你将会看到

    我们的代码加进去了!!!(注释也是代码,别看不起注释!!!)

    当然你加如正常的一个函数也是可以的。
    这样就可以实现CustomNode的函数调用了。下一节我们一起来自己做一个可以函数调用的CustomNode

    展开全文
  • 一、前言在Unreal材质编辑器提供了Custom节点,作为HLSL代码编写接口。以此可以实现更多的效果。虽然使用Custom节点会有若干限制,但是相对的比较方便,适合快速开发。如果遇到限制而导致无法使用Custom解决,此时...
  • 这个方法可以在某些情况下下把编译时间加快三倍左右,比较恐怖了。 我们讲一下操作过程: 1.首先在Unreal Engine的安装文件夹下找到Win64这个文件,每个人的安装位置不太一样这是我的安装文件路径:E:\UE\UE_4.20\...
  • UnrealEngine\Engine\Config\ConsoleVariables.ini 里面有很多控制shader编译的的配置,有一个 DumpShaderDebugInfo应该就是配置是否要保留中间文件的。中间文件在工程的save文件夹中。
  • Shader的真正编译过程

    2016-07-12 22:49:51
    文件路径: \Engine_Updating\Engine\Source\Runtime\Engine\Private\Materials\MaterialShared.cpp /** * Compiles this material for Platform, storing the result in OutShaderMap * * @param ShaderMapId -
  • 一般我们将贴图资源导入引擎的时候,引擎会自己抽取贴图文件的数据然后创建一个UTexture的Object合一个Uasset。但是有时候我们想自己写工具的话需要自己实现这套创建机制。 可以在引擎的UTextureFactory找到我们...
  • 1:AtmosphericFogColor:大气雾颜色,input: world pos 2.Desaturation(去饱和度):根据特定百分比将其输入的颜色转换为灰色阴影,输入亮度系数Luminance Factors和百分比(饱和度系数)Fraction ...
  • 光照贴图的UV问题是造成lightmass的最大的问题。注意事项是,不能重叠,每个之间要留有空隙从而避免泄露可扩散。最好的方法当然是在max里自己来展开每个UV。 光照UV重叠 如果我们发现例如,角落边缘透光,重叠,接缝...
  • 看了unreal engine4的ElementalTech Demo和Featuresand Development Walkthrough两个视频,效果还是非常赞的。看来epic这几年是下了大力气了。 下面说说ue4的重要特性吧 1. 延迟渲染 Ue4完全抛弃了预计算技术...
  • 普通材质,每次修改都会导致重新编译,开发效率不高。 把普通材质的某些数值参数化,然后基于这个材质创建可以修改参数、不能修改节点关系的材质,这就是材质实例。 材质实例分为两种,常量和动态。 常量材质实例 ...
  • UE4 材质系统

    2020-02-17 11:27:10
    Unreal 材质系统 材质(Material)是可以应用到网格物体(Mesh)上的资源,用它可控制场景的可视外观。从较高的层面上来说,可能最简单的方法就是把材质视为应用到一个物体的"描画"。但这种说法也会产生一点点误导,...
  • 今年是第二次参加UnrealOpenDay活动,收获颇丰,也认识了很多业界大咖。这里稍微详细点的总结一下会议内容和参会心得。 首先是行程: 会议9点签到,9:45正式开始。地点和去年一样还是在宝华万豪酒店,位于上海马戏...
  • 虚幻4有一套强大的材质编辑器,我们可以用这套编辑器做很多事情,几乎90%的效果都可以通过它来实现,前段时间探索了一下材质系统。我将分以下几个部分来记录我的研究结果。如有错误还请指正。 【1】虚幻4材质系统...
  • 以下纯属个人经验总结,如有错误,还请斧正。 现在的引擎对材质的概念越来越重视。那么材质在传统的shader管线中到底扮演怎样的一个角色呢。...当你完成一个材质之后编译。最后出来的其实还是shader代码
  • VS2017 编译UE4 源码占用太高的问题 最近在学习UE4的源码,但是整个项目太大,所以在build的时候经常cpu占用99%,然后过热关机。 发现占用比较的进程是途中显示的几个多核并行编译进程,就想着从减少编译进程的方向...
1 2 3 4 5 ... 20
收藏数 649
精华内容 259