ue4查看编译后Shader文件

[复制链接]
查看7908 | 回复8 | 2017-8-13 02:22:43 | 显示全部楼层 |阅读模式
上文 《ue4自定义Shader教程(一)》 说了一些关于在ue4里编写自定义shader的一些实际操作,算是一个入门例子,本文补充一些知识,以便展开后续讨论。(关于在ue4中编写shader不是一件简单的事,并非几篇帖子能讲清楚的,所以本教程打算做一个系列教程,专门讨论该主题)
好,开始讲一下本篇内容:如何查看ue4编译后真正用于运行的shader文件(.usf)。

以下usf(Unreal Shader File)代表ue4中的shader文件。

首先,我们要搞清楚一个事实,ue4中的shader并不是与材质一一对应的,也就是说你创建一个材质,编辑了,保存了这个材质,并不说明这个材质就对于生成了一个usf文件,事实上,ue4最终会根据shader模板(引擎Shader目录下的usf文件)为这个材质生成多个usf文件,分别用于不同的渲染阶段(Pass)以及不同的顶点类型以及光照类型。而这些生成出来的usf文件才是最终用于运行的shader。

Tips:也许大家会在材质编辑器里看到查看“HLSL代码”的选项(材质编辑器->窗口->HLSL代码),这个打开后看到的并不是最终运行的代码,而是用于组合到最终usf中的代码。

那么最终的usf文件如何查看呢,很简单,打开引擎目录下的一个配置文件Engine\Config\ConsoleVariables.ini,其中
;r.ShaderDevelopmentMode=1将前面的分号去掉可以打开shader编译的详细Log,用于在编译shader出错时可以弹出详细的出错信息;
;r.DumpShaderDebugInfo=1去掉分号,可以dump最终usf到工程目录的 Saved 文件夹;

重新打开ue4编辑器,按下crtl+shift+.强制重新编译所有shader(或者简单点直接随便打开一个你的材质,随便修改一下然后点编译),ue4就会把生成的所有shader文件dump到磁盘上,这时候进到你的工程目录下Saved\ShaderDebugInfo文件夹,点进去会看到有一堆以材质名命名的文件夹,这些文件夹以一定的规则命名,我们暂时不管它命名的含义,这里我们关心哪一个是最终真正运行的shader呢?我这里举个例子,假设你项目中有一个材质叫newMat ,如果你仔细找一下,会找到一个newMat文件夹,我这里的目录是\Saved\ShaderDebugInfo\PCD3D_SM5\newMat\LocalVF\BPPSFNoLMPolicy\BasePassPixelShader.usf

解释一下BPPSFNoLMPolicy这个命名的含义是PS(Pixel Shader),NoLM(No LightMap),就是不使用LightMap时对应的Pixel Shader,这个BasePassPixelShader.usf文件里面就包含完整的最终执行shader代码,包括main函数,已及所有从模板里编译进来的函数。

分析最终shader文件可以避免我们在shader模板里看到的一大堆宏控制的区块,因为这些区块里的代码很多并不是最后运行的实际代码。

有兴趣可以新建一个最简单的材质,着手分析一下最终usf文件。相信你会有一些收获。我们下节教程再见。


profhua | 2017-8-13 09:10:04 | 显示全部楼层
学习 大佬多更
回复 支持 反对

使用道具 举报

为人民服务 | 2017-8-13 09:28:59 | 显示全部楼层
学习了,谢谢分享
回复 支持 反对

使用道具 举报

奉公如法 | 2017-8-13 11:47:07 | 显示全部楼层
真心不错!
回复

使用道具 举报

hanzhao111 | 2017-8-13 12:49:36 | 显示全部楼层
非常棒!666666
回复 支持 反对

使用道具 举报

cg_bull | 2017-8-13 17:30:00 | 显示全部楼层
听说材质编辑器里面的节点是C++,最后靠编译系统吧材质节点里面的C++封装的HLSL组合。。but,还是等楼主更新啦。。。。
回复 支持 反对

使用道具 举报

a370712936 | 2017-8-13 23:13:40 | 显示全部楼层
666666666666666666666bucuo
回复 支持 反对

使用道具 举报

wmc888888 | 2017-8-16 15:09:56 | 显示全部楼层
希望能快点看到后续更新
回复 支持 反对

使用道具 举报

疯子恺 | 2017-8-18 09:11:57 | 显示全部楼层
非常感谢楼主
人生如戏,全靠演技
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

11

主题

21

回帖

226

积分

初阶编码师

积分
226