淘先锋技术网

首页 1 2 3 4 5 6 7

 

 

目录

         图形学基础知识

         材质和材质实例概念

         动态材质实例概念

         材质细节面板关键参数

         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选项