UE5 材质 基础知识

发布时间 2023-05-21 17:53:18作者: 爱莉希雅

前言

本篇总结一些常用的UE5材质相关的知识点,因为其中有些是图形学内容而这些内容在笔者以前的博客中均有记载,所以只是简单提及。随着笔者的不断学习,该篇总结也会不断丰富

坐标系

  • UE使用左手坐标系且向上轴是z轴,x轴向左
    image-20230510222327897
  • 俯仰角(Pitch):绕Y轴旋转
  • 偏航角(Yaw):绕z轴旋转
  • 翻滚角(Roll):绕y轴旋转

PBR

Base Color

  • Base Color定义物体表面的diffuse颜色
  • 对于粗糙的物体,颜色值范围[50,240]
  • 对于光滑的物体,颜色值范围[20,240]

image-20230509232435840

法线

  • 法线定义物体表面的形状
  • 不可以手动创建法线图!而是使用烘培

image-20230509232957693

镜面反射

  • Specular代表反射率——有多少光被反射
  • 适用于非金属材质。非金属材质仅仅反射4%的光
  • 菲涅尔现象:从很斜的角度看向镜面反射材质的物体,会看到绝大部分高光

image-20230509233754446

粗糙度

  • 1代表最粗糙,0代表最光滑

image-20230509234528365

金属度

  • Metallic与Base Color 和 镜面反射有关
  • 所有金属的Base Color都大于180

image-20230509235307304

  • Base Color 和 Specular使用金属度的区别
    image-20230509235054823

数据类型和函数

float

  • float

    常用于粗糙度、镜面反射、金属度等

  • float2

    常用于uv

  • float3 & float4

    常用于计算

ComponentMask & SplitComponents

  • ComponentMask允许从输入中挑选某个通道子集(R、G、B和/或A)并输出
  • SplitComponents与Mask类似,不过它更加灵活
    image-20230510002009642

Append & AppendMany

  • Append合并两个类型,形成一个新类型
    image-20230510002405885

  • AppendMany可以合并多个通道
    image-20230510002634393

Swizzle

  • 排列floatn分量
    image-20230510002820218

TextureCoordinate

虚幻引擎坐标材质表达式

image-20230510132055844

  • 坐标索引:指定要使用的 UV 分量
  • U 平铺(UTiling):指定 U 方向上的平铺量(可理解为范围)
  • V 平铺(VTiling):指定 V 方向上的平铺量
  • 解除镜像U:如果为 true,那么撤销 U 方向上的所有镜像(镜像寻址模式)
  • 解除镜像V:如果为 true,那么撤销 V 方向上的所有镜像

Time

Constant Material Expressions in Unreal Engine

  • Time节点用于为材质添加一个时间属性,随时间变化材质的uv坐标也会改变

  • Ignore Pause:如果为true,即使游戏停止,时间也会继续变化

  • peroid(周期):在t时长内从0到t,时间不断增长,到t时会自动回到0
    image-20230510141437407

BlendAngleCorrectedNormals

  • 与普通的lerp不同,该函数用于混合两个normal map

DeriveNormalZ_Function

  • 给定xy分量求切线空间的z分量并输出
    image-20230520155320994
  • 计算公式:\(1=x^2+y^2+z^2\)

DepthFade

image-20230520174655649

  • 隐藏半透明对象与不透明对象相交时出现的硬线

  • Opacity:接收DepthFade的对象的不透明度

  • FadeDistance:发生Fade的全局空间距离

  • 工作原理

    当两个深度相同时,像素的不透明度为0;当间距增加时,像素的不透明度为1

    • 需要两个对象

      1. 当前绘制的半透明像素深度
      2. 半透明像素后的第一个不透明像素的深度(通过depth buffer获取.半透明像素的深度不写入深度缓冲区)
    • 公式

      float spacing = sceneDepth - pixelDepth;
      float fade = saturate(spacing/fadeDistance);
      

Desaturation

Color Material Expressions in Unreal Engine | Unreal Engine 5.1 Documentation

  • Desaturation(去饱和度)用于降低输入颜色的饱和度,转换为一定百分比的灰度——彩色图变灰度图
  • Luminance Factors:每个通道的贡献量
  • Fraction:去饱和度量.范围[0,1]。如果是负数则是增强饱和度
    image-20230513172209227

Fresnel

image-20230520172112625

  • 计算基于表面法线和相机方向点积的衰减
  • 当表面法线和相机方向向量平行,则输出0;当表面法线和相机方向向量垂直,则输出1。输出范围[0,1]
  • ExponentIn:控制衰减速率
  • Base Reflect Fraction:从正对表面的方向查看表面时,镜面反射的小数。若使用此参数,会取代"ExponentIn"

Frac

  • Frac用于输出参数的小数部分,且输出范围为[0,1]
  • 例子
    frac(0.2) = 0.2;frac(-0.2) = 0.8;frac(0.0,1.6,1.0) = (0.0, 0.6, 0.0)

Floor

  • Floor()四舍五入到小于参数的整数值
  • Floor(0.2, 1.6) = (0.0, 1.0)

Lerp

  • 根据 Alpha 在 A 和 B 之间进行线性插值(当 Alpha = 0时为 A ,当 Alpha = 1时为 B )

Noise

Utility Material Expressions in Unreal Engine | Unreal Engine 5.1 Documentation

  • Scale

    缩放噪声单元大小

  • Quality

    外观/性能

  • Function

    噪声的分类

  • Turbulence

    每个噪声给结果加一个它的绝对值。用于改变视觉特征,如陡峭的山脊

  • Levels

    噪声大小乘以Levels。如若shader执行64个指令和8个纹理样本,而levels = 6,则循环六次(64x6个指令,6x8个纹理样本)

  • Output Min

    输出的最小值

  • Output Max

    输出的最大值

  • Level Scale

    确定新的信号频率的Scale变化量。一般设为2或更高

  • Tiling

    用于noise函数,支持平铺

  • Repeat Size

    noise多久重复一次

  • FilterWidth

    控制noise纹理的模糊程度

Panner

image-20230520144758447

  • 用于纹理动画。它可以输出用于创建平移或移动纹理的 UV 坐标
  • SpeedX:在 U 方向上平移坐标的速度
  • SpeedY:在 V 方向上平移坐标的速度
  • Coordinate:UV 纹理坐标
  • Time:用于确定当前平移位置的值

Round

  • 将输入值舍入为最接近的整数
  • 若输入值的小数部分为0.5或更大,则将输出值向上舍入;否则将输出值向下舍入

Sign

虚幻引擎中的数学类材质表达式 | 虚幻引擎5.0文档 (unrealengine.com)

  • 若参数为负数,则输出-1
  • 若参数为0,则输出0
  • 若参数为正数,则输出1

Material Function

  • 为了提高复用性,ue5提供材质函数对实现的功能进行封装,以后直接提取即可
    image-20230513184233088

  • 如下图所示,左边红色表示输入参数,右边棕色表示输出参数
    image-20230513191345650

  • 后续使用需要将material function 拖入材质编辑器

reference

Math Material Expressions in Unreal Engine | Unreal Engine 5.1 Documentation

Constant Material Expressions in Unreal Engine | Unreal Engine 5.1 Documentation

Fading Workflows - VFXDoc