UE 中材质的本质:Shader 的生成模板

节点:TexCoord

节点如下,快捷键为U + LeftCick

UV 坐标以左上角为原点,横向(红色)为 U,纵向(绿色)为 V

属性

参数:U/V 平铺

分别对应UTilingVTiling,控制纹理在对应轴方向上的重复次数,影响纹理在模型表面的平铺效果

  • 值为 1:纹理保持原尺寸,无平铺
  • 值大于 1:纹理在对应轴上重复多次,实现平铺效果
  • 值小于 1:纹理在对应轴上缩小

原理如下:

UV 平铺属性示意图

红色方块表示TexCoord的 UV 平铺属性,黄色圆圈表示我们要应用在模型表面的纹理

如果 UV 平铺保持为 1,那么纹理可以和 UV 坐标完美对应

如果值大于 1,这里以 2 为例,上图的红色方框应当变为如下:

即,在 U 方向上发生重复

如果值小于 1,以 0.5 为例,同理,红色区域的 U 方向被压缩,从而使得黄色纹理只能有一半处于红色区域内,直接看效果

另一种 UV 计算

上边进行的平铺设置相当于让原本的 UV 数值乘上了一个系数,从而实现的缩放变化,这里通过节点实现纹理映射的左右移动。

实现如下连接:

这次修改这个位置,实现纹理在 U 轴上的平移效果

原理和之前差不多,只不过红色区域变成了这样:

解除镜像

这里还没明白,待完成

参考链接:


节点:SphereMask


细节面板:Usage

面板位置:

Usage Flag 用于标记 Material 的用途(需要材质域选择表面),编译器会针对每一个用途生成对应的 Shader 代码(部分 Flag 可能会共享同一份),默认情况下会自动对应的 Usage Flag

一般推荐取消勾选“编辑器中自动设置使用”

参考链接


查看 ShaderCode

查看从材质生成的 ShaderCode

在编辑器内:窗口->着色器代码->选择对应平台查看;如果要查看本地或最终的 usf 代码,可以在引擎目录中打开:Engine\Config\ConsoleVariables.ini,对前两个命令;r.ShaderDevelopmentMode=1;r.DumpShaderDebugInfo=1取消注释(删除;),此时可以在项目目录中的\Saved\ShaderDebugInfo\中看到对应平台的 ShaderCode

这里在材质图表中输出一个纹理,选择无光照模式,查看勾选与不勾选“使用骨骼网格体”的 UsageFlag 最终生成的 Shader 的区别。

查看本地文件:

  • FLocalVertexFactory
  • TGPUSkinVertexFactoryDefault(用于对应 Usage 的版本)

由于这里设置的简单所以只有两个 ShaderCode 文件:

  • TMobileBasePassPSFNoLightMapPolicy0HDRLinear64
  • TMobileBasePassVSFNoLightMapPolicyHDRLinear64

参考链接