UE4材质基础总结

 

 

目录

         图形学基础知识

         材质和材质实例概念

         动态材质实例概念

         材质细节面板关键参数

         PBR基础(Physically based rendering)

         材质节点基础参数

         材质图表的计算节点

         使用贴图制作PBR材质

         玻璃&水材质制作(初级)

         角色皮肤、毛发材质制作(初级)

材质函数

材质UV计算技巧

材质常用属性设置&节点

后处理材质基础


图形学基础知识

  • 除了自发光物体,成像皆由视网膜接收物体各尺度平面反射的光线构成

  • 光照效果一般可分为漫反射和镜面反射(高光)两部分

    • 漫反射:凹凸不平的表面反射的没有方向性的光

    • 镜面反射:若反射面比较光滑,当平行入射的光线射到这个反射面时,仍会平行地向一个方向反射出来

       

  • 光源照射物体时,将会与物体产生多种交互现象,反馈大致为:

    光源到达物体表面时、物体原子会将光子部分吸收partially absorbed,能量守恒转化为热能,反射的部分较弱;且根据折射率具有不同角度微平面散射scattered

    穿透的部分将会产生折射Refraction、次表面散射Subsurface Scattering、半透明透射Transmission

    经过散射、微平面镜面反射的部分,称为 漫反射Diffuse

    被相对镜面反射,称为 镜面反射Specular

     

材质和材质实例概念

  • 材质实例由材质继承而来,对父材质外观的参数化

  • 游戏里只有父体材质会被编译,材质实例可降低渲染开销,在场景中高速渲染和实时反馈

  • 材质资产为绿色,实例深绿色

  • 材质中右键节点转换参数后创建实例,实例中产生配置参数,勾选后可设置

  • 层级可以查看继承层级关系,可以直接定位到材质查看图表和细节面板,实例只有参数可配

 

动态材质实例概念

  • 参数化的材质 + 蓝图 = 动态材质实例

  • 作用:在游戏运行中动态改变材质,如角色走进某个范围后某个物体切换随机颜色,或自发光等效果

  • 蓝图继承自Actor,构造脚本中create dynamic material,并保存动态材质的变量引用

  • 事件图表

    • set vector parameter value: 按材质的参数名设置值

 

材质细节面板关键参数

  • 物理材质

    • 关联的物理材质,如碰撞产生的弹力将保留多少能力,不影响外观

    • 应用:不同材质类型,不同反馈的实现

      • 如:角色踩在不同材质上发出不同音效(射线检测 + 物理材质

      • 又如:子弹击中不同材质产生不同特效和音效(hitEvent + 物理材质

  • 材质域

    • 材质的作用类型:会影响节点基础参数

    • 表面材质域时,可设置用途Usage, 标记可控制材质应用对象的类型,引擎为每个应用程序编译特殊版本

      • 如结合骨架网格体使用,结合粒子spirate使用等

  • 混合模式

    • 不透明(最常用)

    • 遮罩Mask(部分固体可见部分不可见,如铁丝网围栏等)

      • 细节面板参数:不透明蒙版剪切值

    • 半透明(如玻璃类材质等)

  • 纹理

    • 即:材质贴图

  • 着色模型

    • 默认光照,大部分实心物体

    • 次表面,如冰

    • 预整合皮肤,用于人类皮肤

    • 双面植物,如树上的树叶

    • 毛发,用于逼真的头发材质

    • 布料,用于逼真的布料和绒毛

    • 眼睛,用于人类眼睛

    • 双面,用于植物(法线将被翻转到背面,同时计算正面和背面的光照)

    • from材质表达式,用于单一材质处理多个着色模型

[注]  混合模式和着色模型详见官方文档:图形和渲染 - 材质 - 材质属性 https://docs.unrealengine.com/zh-CN/RenderingAndGraphics/Materials/MaterialProperties/index.html

 

PBR基础(Physically based rendering)

  • 模拟物理表面特性的参数化

  • PBR可以根据环境光照的反射呈现不同效果

  • UE4中有两种工作流,第一种更常用,参数含义详见后一部分

    • 金属粗糙度工作流(Metal – Roughness Workflow)节点:BaseColor基色、Roughness粗糙度、Metallic金属度

    • 反射光泽度工作流(Specular – Glossiness Workflow)节点:Diffuse漫反射、Glossiness光泽度、Specular镜面反射

    • 上述两种工作流的公共常用参数:AO环境光遮蔽、Normal法线

     

材质节点基础参数

  • BaseColor基础色(PBR工作流1)

    • 材质固有色

    • Constant4Vector设置,4维向量RGBA (快捷键4)

  • Metallic金属性(PBR工作流1)

    • 镜面反射与漫反射的光线占比,值越大镜面反射越多,越接近金属

    • 值限定在0-1, 一般不会取中间值

  • Roughness粗糙度(PBR工作流1)

    • 材质表面的粗糙程度

    • 值限定在0~1,越粗糙材质漫反射越明显,向更多方向反射

  • Diffuse漫反射(PBR工作流2)

    • 定义漫反射

  • Specular高光度(PBR工作流2)

    • 定义镜面反射

    • 和Diffuse共同决定固有色

    • Specular + Diffuse共同作用类似工作流1中的Metallic + Roughness

  • Glossiness光泽度(PBR工作流2)

    • 定义光滑程度,类似工作流1中的Roughness

  • Normal法线(PBR工作流公共常用)

    • 高分辨率建模创建的贴图,用于呈现更多表面凹凸层次细节

    • 应用于如人脸、武器等精细模型

  • AO环境光遮蔽(PBR工作流公共常用)

    • 屏幕空间环境光遮挡(SSAO)是一种近似计算因遮蔽而造成的光线衰减的效果。通常是在标准全局光照的基础上增添细微效果,例如让角落、裂缝或其他生物变暗,以形成一种更加自然真实的视觉效果。

  • 其他参数

    • 各向异性与切线(用于金属拉丝效果)、自发光不透明度(混合模式为半透明激活该参数)

[注]  具体说明详见官方文档:图形和渲染 - 材质 - 材质输入 https://docs.unrealengine.com/zh-CN/RenderingAndGraphics/Materials/MaterialInputs/index.html

 

材质图表的计算节点

  • 最常用的技巧

    • Multiply正片叠底:如对纹理和白色三维向量相乘后作为baseColor的参数

    • Lerp线性插值:如粗糙度的最小最大值通过lerp限定在0~1后作为参数

  • 常用节点&快捷键一览

    【A】Add加法:接受两个输入,将它们相加并输出结果。

    【B】BumpOffset 凹凸偏移:输入使用灰阶高度贴图(Height Texture)链接高度Height输入引脚提供深度信息;输出链接至贴图UVs输入引脚实现凹凸信息输出。

    【C】Comment注释板:节点注释板,用以归类节点。

    【D】Divide除法:接受两个输入,将第一个输入除以第二个输入,并输出结果。

    【E】Power幂强化:幂函数节点。

    【F】MaterialFunctionCall材质函数调用:使用来自另一材质或函数的外部材质函数。

    I】if比较节点:比较两个输入,然后根据比较的结果传递其他三个输入值中的一个。

    L】LinearInterpolate线性差值:根据用作蒙版的第三个输入值,在两个输入值之间进行混合。

    【M】Multiply乘法:接受两个输入,将它们相乘,然后输出结果。

    【N】Normalize归一化:计算并输出其输入的归一化值。归一化矢量(也称“单位矢量”)的整体长度为1.0。这意味着输入的每个分量都除以矢量的总大小(长度)。

    【O】OneMinus一减:接受输入值“X”并输出“1 - X”。此操作逐通道执行。

    【P】Panner平移:输出可用于创建平移(或移动)纹理的 UV 纹理坐标。

    【R】ReflectionVector反射矢量:该值表示通过表面法线反射的摄像机方向。ReflectionVector通常用于环境贴图,其中反射矢量的x/y分量被用作UV输入立方体贴图纹理。

    【S】ScalarParameter标量参数:输出单个浮点值 (Constant常量),这个值可在材质实例中访问和更改,或者由代码快速访问和更改。

    【T】TextureSample纹理采样:输出纹理中的颜色值。贴图用。

    【U】TexCoord纹理坐标:UV节点。UV倍率设置必须是2次幂。

    【V】VectorParameter矢量参数:与 Constant4Vector功能相同,可在材质实例中以及通过代码来修改的参数。

    【1】Constant常量:输出R单个通道浮点值,可以设定为一个目标的单通道输入值。

    【2】Constant2Vector常量2矢量:输出RG两个通道浮点值。

    【3】Constant3Vector常量3矢量:输出RGB三通道浮点值。

    【4】Constant4Vector常量4矢量:输出RGBA四通道浮点值。

    AppendVector:低维到高维向量

    Mask:蒙版组件,可以指定选择输出多个通道中的几个

     

使用贴图制作PBR材质

  • 使用fbx模型贴图制作PBR材质

    • 贴图通道对应参数关系:

      • diffuse/baseColor贴图 --- BaseColor

      • normal贴图 --- normal

      • occlusion_roughness_metal贴图(复合贴图) --- AO 、 Roughness 、 metallic(标准顺序)

    • diffuse固有色贴图以及复合贴图取消勾选sRGB,其他默认设置

    • normal贴图的纹理界面设置

    • 导入时不新建材质和纹理,手工创建材质

    • 转换参数将贴图作为实例化的可配参数

    • 使用lerp控制粗糙度为0~1可配参数

  • 使用SubStance Painter等材质软件导出模型贴图并制作PBR材质

    • 文件 - 导出贴图 - 匹配 - UE4 packed (标准的通道顺序)

    • 将贴图导入UE4引擎,使用贴图创建材质

 

玻璃&水材质制作(初级)

  • 玻璃

    • 材质域:表面, 混合模式:半透明, 折射模式(Refraction):折射率

    • 玻璃的基础属性:基础色偏浅蓝,高金属度,低粗糙度,标准折射率1.53

    • 使用Fresnel菲涅尔节点过渡:表面入射点到相机向量 和 该点法线向量的夹角越大,亮度越大;夹角越小亮度越暗

    • 基础属性设置与玻璃接近

    • 折射模式(Refraction):像素正常偏移

    • Normal贴图Multiply放大,增强水面波纹效果

    • UV divide进行放大

    • 使用panner修改UV坐标使水波纹动起来

    • 使用lerp将两个UV移动的normal叠加,实现不同方向的水面波动效果

 

角色皮肤、毛发材质制作(初级)

  • 人物皮肤

    • 基于父材质创建实例便于调整

    • 着色模型:次表面轮廓(专为皮肤设计);次表面轮廓profile

    • 启用伯力算法(Burley Normalized)

    • 高光(Dual Specular)

    • NormalMap贴图

    • 粗糙度贴图

  • 人物毛发

    • 混合模式:遮罩

    • 着色模型:头发 双面

  • 人物眼球(可以迁移epic digital human工程的眼球)

 

材质函数

  • 材质函数 是材质图的一些小片段,它们可以保存在包中,并在多个材质之间重复使用。

    • 对单个函数的编辑会传遍使用该函数的所有网络

    • 在材质编辑器中可以像编辑普通材质一样编辑函数,但是在可以使用哪些节点方面存在一些限制。正确使用函数可降低材质冗余度

  • 创建材质函数完成后,应该将其发布到材质函数库,以方便创建材质期间进行访问。材质函数库是材质编辑器中的一个窗口,其中包含经过分类且可过滤的可用材质函数列表

    • 发布到库: Expose to Library 属性被设置为 True

    • 材质函数列表:

 

 

材质UV计算技巧

  • uv两通道渐变数值0-1,通过基础运算可以得到矩形渐变,环形(极坐标)渐变,棋盘格等效果

  • UV计算常用节点

    • 重映射范围:remap

    • 其他范围控制类节点:abs  ceil  claimp  min  max

    • 向量计算:normalize  mask

    • 过渡节点:线性插值lerp

    • 基本数学计算节点:multiply  divide  add  sub  1-x  power

    • 三角函数:正反切atange+uv = 极坐标渐变  正余弦sin  cos

    • 分数节点:取小数frac  四舍五入round

    • 法线坐标节点:顶点法线vertexNormal  像素法线pixelNormal

    • 坐标系变换:transfomVector,用于屏幕材质

    • 材质动画节点:panner  time  flipbook

  • time节点结合不同曲线,接材质世界位置偏移属性,产生材质动画效果

    • 波形曲线sin cos

    • x y轴一个sin 一个cos --- 圆周运动

       

    • 折形线frac

       

 

材质常用属性设置&节点

  • 【属性】材质lighting mode

    • 无光照常用于自发光材质

    • subsurface即3s材质,常用于皮肤、玉石、蜡烛等

  • 【属性】Translucency Volume

    • surface forwarding:前向渲染,效果最好开销最大

    • Volumetric NonDirection:不会使用法线,光照无方向

    • Volumetric Direction:会使用法线,光照有方向

    • Volumetric PerVetex NonDirection、Volumetric PerVetex Direction:性能最cheap的方式

  • 【节点】feature Level Switch节点

    • ES为移动平台,SM为PC等高性能平台,用于区分平台优化性能

  • 【节点】time节点实现简单的材质动画效果,常用于light function

  • 【节点】panner节点对UV平移

  • 【属性】半透明材质render after DOF选项,在景深后渲染

    • 常用于解决材质不受sequencer焦距影响的问题

  • 【属性】曲面细分Tessellation

    • PN三角形相对于Flat Tessellation在细分时会进行平滑

    • 常结合displacement(置换贴图)使用

      • 置换贴图 ---> world displacement

      • Tesselation multiplier ---> 曲面细分强度参数化

  • 【属性】UE4的PBR:金属度Metalic一般非黑即白,一般结合粗糙度Roughness调整高光,不用高光specular

  • 【属性】3s材质中opacity含义有变,表示通透度,即光线穿透后散射的颜色及强弱

  • 【节点】vertex normal iws节点:顶点法线转世界坐标

  • 【节点】fresnel function节点:菲涅尔现象材质函数

  • 【属性】法线贴图一般RG通道有信息,B通道表示强弱

  • 【属性】PBR纹理一般可以把AO,金属度,粗糙度放在一张贴图的不同通道(复合贴图),通过mask节点获取

  • 【节点】嵌套使用blend corrected normal节点可以叠加多张normal map

  • 【节点】材质函数使用input节点输入参数,make material attrs节点打包输出参数,主材质使用use material attrs解决材质函数单个输出端的问题,多级材质函数使用break material attrs节点接收上一级材质函数的输入

  • 【节点】使用材质函数实现分层材质中的材质layer,使用material blend standard节点进行分层材质混合(地形分层材质中使用landscape开头的blend节点)

  • 【节点】Dither temporalAA节点常用于蒙版半透明,各向异性效果(金属拉丝/头发高光)、风格化等场景

    • 使用masked材质域 + Dither temporalAA实现半透明材质能减少性能消耗,关键属性opacity mask

     

 

后处理材质基础

  • 关于后期处理的重要基础知识

    • 材质模式设置为postprocess

    • Scene texture节点:

      • texture-id选择渲染后的不同信息,如PostprocessInput,输出4维数据

      • texture-id选择normal能够获取方向信息

        • R(X)G(Y)B(Z)选择场景中的不同方向面

      • texture-id选择scene depth获取场景深度信息

        • divide一个常数参数控制深度

    • blend position参数控制调色时机

      • GPU Visualizer窗口:ctrl + shift +‘ ,’ 调出窗口展示如何渲染一帧

      • 材质details中搜索blend

        • 一般选择before tonemaping,在后期盒子调色之前混合后处理材质,避免抖动

    • 后期排序

      • 场景中多个后期盒子叠加,可以设置优先级

      • blend position设置的渲染管线顺序>后期优先级设置

      • 后期盒子中添加了多个后处理材质,材质会按先后顺序计算并叠加

    • custom depth /stencil扣图后期

      • 模型的Render CustomDepth Pass选项

         

      • buffer视口:Lit - BufferVisualizer 选择各个GBuffer通道查看

        • 选择custome depth可以查看勾选了Render CustomDepth Pass选项的模型

     

  • 实例1 - 场景调色

    • 按深度上色:取深度信息的一个通道作为alpha, 对场景进行后期调色

      • 使用黑色和场景后处理输出lerp叠加,实现恐怖效果

    • 用深度驱动曲线分层上色:Curve + Curve Atlas

      • 新建线性颜色曲线:Miscellaneous - Curve - curveLinearColor,设置颜色曲线分布

      • 新建曲线图集:Miscellaneous - Curve Atlas(曲线管理工具),关联颜色曲线

      • 材质中CurveAtlasRowParameter节点,深度信息作为CurveTime输入,曲线输出和后处理输出叠加后给EmissiveColor

     

 

  • 实例2 - 扰动和模糊

    • 根据水normal+噪波图纹理扰动UV,实现屏幕水波纹效果

       

    • 一些屏幕相关节点:

      • Field Of View / Screen Resolution屏幕大小信息

      • Screen Postion屏幕空间位置

      • Screen Aligned UV屏幕空间UV

      • CheapContrast对比度调节

    • 使用DitherTemporalAA节点叠加UV实现噪波模糊效果

      • DitherTemporalAA节点每一个像素介于0-1之间波动,带透明效果

      • UV坐标sub0.5后和DitherTemporalAA相乘实现飞奔时的屏幕模糊效果

         

  • 实例3 - 描边

    • 法1:SceneTexture-Normal通道 + 卷积(相邻像素的法向量距离越大,叠加颜色越明显)

    • 法2:SceneTexture-Depth通道 + 卷积(相邻像素的深度值距离越大,叠加颜色越明显)

     

  • 实例4 - CustomDepth/CustomStencil抠图处理

    • CustomDepth抠图高亮

      • 使用SceneTexture-CustomDepth通道叠加颜色后和后处理输出叠加

      • 场景中勾选了Render CustomDepth Pass选项的所有物体将被高亮

    • CustomDepth Stencil指定场景物体,不同颜色高亮

      • 项目设置里custom Depth-Stencil Pass选择Enabled with stencil

      • 模型中cutomDepth stencel value参数设置不同值

      • 后处理材质中使用SceneTexture-CustomDepth通道获取,if节点判断值区分物体

     

  • 实例5 - 蓝图中控制后期材质,如高亮或描边

    • 法1、MPC(材质参数集)

      • MPC创建:Materials - Material Parameter Collection

      • 后期材质中拖入MPC,使用MPC中的参数替代原参数

      • 任意蓝图中可以直接指定MPC并修改参数:

        • set vector parameter value(3维的参数)

        • set scaler parameter value(1维的参数)

      • MPC是全局参数集,若多个蓝图同时修改该参数集会有竞争问题,此时应该使用MID方法

    • 法2、MID(动态材质实例)

      • 蓝图中添加postprocess组件, 用box包裹该组件可控制后处理影响范围

      • Construct Script中指定后处理材质create dynamic material并保存(隐藏的有点深。。如下图)

      • 设置postprocess组件中的material为保存的动态材质实例

         

      • 蓝图中修改动态材质实例的参数,节点名与MPC相同:

        • set vector parameter value(3维的参数)

        • set scaler parameter value(1维的参数)

         

    • 蓝图控制节点补充:控制模型的customDepth参数

      • set custom depth stencil value节点:设置stencil value

      • set render custom depth节点:设置Render CustomDepth Pass选项

<think>嗯,用户想了解Excel中的VLOOKUP函数的用法和参数含义。首先,我需要回忆一下VLOOKUP的基本结构。VLOOKUP是垂直查找函数,用于在表格的首列查找指定的值,然后返回该行中指定列的数据。它的四个参数分别是查找值、表格范围、列索引号和匹配模式。 接下来,我得确认每个参数的具体作用。第一个参数是lookup_value,也就是用户要查找的值,比如产品ID或者姓名。第二个参数是table_array,即查找的范围,这里要注意的是,查找值必须位于这个范围的第一列,否则函数无法正确工作。第三个参数是col_index_num,也就是用户想要返回的数据在表格范围中的第几列,这个列数是从表格范围的第一列开始算起的,不是整个工作表的列。第四个参数是range_lookup,决定是精确匹配还是近似匹配,通常用FALSE或0来指定精确匹配,避免错误。 然后,用户可能需要一个具体的例子来理解如何使用。比如,假设有一个产品价格表,用户想根据产品ID查找对应的价格。这时候,VLOOKUP就可以在ID列查找,然后返回价格列的数据。同时,要提醒用户注意表格范围最好使用绝对引用,比如$A$2:$C$100,这样在拖动公式时范围不会变化。 可能遇到的问题也需要考虑。比如,如果查找值不在表格的第一列,或者列索引号超过了表格的列数,函数会返回错误。此外,数据格式不一致也可能导致问题,比如查找值是数字,而表格中是文本格式的数字,这时候需要统一格式。还有,当出现#N/A错误时,可能是查找值不存在,或者匹配模式设置不正确,需要检查参数是否正确。 用户可能还会问到如何避免常见的错误,比如部分数据匹配出错的情况。这时候需要检查是否有多余的空格,或者数据格式不一致,或者表格范围没有锁定导致拖动时偏移。此外,XLOOKUP作为VLOOKUP的升级版,可能在某些情况下更方便,比如可以向左查找或者返回多列数据,这也是可以提及的内容。 最后,整理步骤,从基础语法到参数说明,再到具体案例,逐步引导用户理解如何使用VLOOKUP函数。同时,提供常见错误和解决方法,帮助用户在实际应用中避免问题。如果有必要,还可以比较VLOOKUP和其他查找函数的区别,比如HLOOKUP或XLOOKUP,但根据用户的问题,主要集中在VLOOKUP本身即可。</think>### Excel VLOOKUP函数详解 #### 一、基础语法与参数说明 VLOOKUP函数的语法为: $$=VLOOKUP(lookup\_value, table\_array, col\_index\_num, [range\_lookup])$$ 包含4个参数: 1. **lookup_value**(必填):要查找的值(如单元格引用或具体值) 2. **table_array**(必填):包含数据的表格范围(必须包含查找列和返回列) 3. **col_index_num**(必填):返回值所在列的序号(从table_array第一列开始计数) 4. **range_lookup**(可选):匹配类型 - `TRUE`/`1`:近似匹配(默认值,需数据升序排列) - `FALSE`/`0`:精确匹配(常用选项) [^1][^2] #### 二、使用步骤演示(工资表查询案例) 假设需要根据员工编号查询工资: 1. 建立查询单元格(如`B12`) 2. 输入公式: ```excel =VLOOKUP(A12, $A$2:$D$100, 4, 0) ``` - `A12`:待查询的员工编号 - `$A$2:$D$100`:锁定数据区域(绝对引用) - `4`:返回第4列(工资列) - `0`:精确匹配 [^2][^3] #### 三、常见错误与解决方法 | 错误现象 | 原因 | 解决方案 | |---------|------|---------| | #N/A | 查找值不存在 | 检查数据源或改用`IFERROR`容错 | | #REF! | 列序号超出范围 | 确认col_index_num ≤ 表格列数 | | 部分匹配失败 | 数据格式不一致 | 统一数值/文本格式 | | 结果错位 | 表格未锁定 | 使用`$`符号固定区域引用 | [^3][^4] #### 四、进阶技巧 1. **多条件查询**: 使用辅助列合并多个条件字段 ```excel =VLOOKUP(A2&B2, $D$2:$F$100, 3, 0) ``` 2. **通配符匹配**: `"*"`匹配任意字符,`"?"`匹配单个字符 ```excel =VLOOKUP("张*", $A$2:$C$100, 3, 0) ``` 3. **跨表查询**: 引用其他工作表数据 ```excel =VLOOKUP(A2, Sheet2!$A$2:$D$100, 4, 0) ``` [^1][^4]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Ctrlturtle

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值