这篇文章所覆盖的内容是:UE4从材质蓝图生成原始的HLSL代码的基本流程,这儿的材质特指的Surface Domain类材质,其对应的Shader种类为MeshShader,只因这一类材质应用最为广泛,可用于描述任何3D Primitive表面属性,一个游戏中可见的90%以上材质都属此类。
如果你对UE4的材质系统、Shader系统的基础还不够了解。建议先简单了解读读UE的官方文档中关于材质编辑器使用的基本流程。
以下前两篇文章也有对材质、Shader做过简单的介绍。
Jiff:UE4渲染引擎模块简介(1)zhuanlan.zhihu.comHLSL生成的核心功能类
UMaterial
UE4的材质类为UMaterial,生成Shader的入口函数有二:
一个用于资源Cooking,名为CacheResourceShadersForCooking
一个用于材质编辑和引擎运行时渲染,名为CacheResourceShadersForRendering
![5d84ff6c4f4b00c52ca53d04b3b6ceb5.png](https://img-blog.csdnimg.cn/img_convert/5d84ff6c4f4b00c52ca53d04b3b6ceb5.png)
UMaterial中为单个FMaterial执行Shader生成的函数为CacheShadersForResources,CacheShadersForResources先会重建材质函数依赖信息、材质收集器依赖信息,并把此材质(或材质函数)所依赖的输出和输入纹理填充到依赖列表里。UMaterial本身并不编译材质和Shader,它依赖FMaterail类完成其所持有的Shader变种的编译。
FMaterial/FMaterialResource
前面的文章我提到过FMaterialResource是FMaterail的子类,用于UMaterial的渲染,FMaterialResource代表的是从一个截面(在某个Render API FeatureLevel、指定的平台下、指定材质品质预设下)时它对应的UMaterial的具体呈现。
FMaterialResource不是持有一个