【转载】UE4学习笔记:我的材质集合

1,244 阅读9分钟

第一部分

版权声明:本文为CSDN博主「蓬 蒿 人」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。

原文链接:blog.csdn.net/yb0022/arti…

以下材质都是我学习过程中制作的材质,或者使用中用到的,基本上都可以在官方文档找到制作教程

1、半透明材质(Transparency)

参考:docs.unrealengine.com/zh-CN/Engin…

将材质属性的 Blend Mode 设置为 Translucent 就可以制作半透明材质,但是这种半透明材质无法添加某些光照属性,如 金属性粗糙度 ,效果如下

image.png

image.png

如果要添加 光照 信息,可以设置 Translucency 属性下的 Lighting Mode ,然后保存上述材质,可以得到一个半透明的金属球

image.png

image.png

2、自发光材质(Emissive)

参考:docs.unrealengine.com/zh-CN/Engin…

自发光材质只要将需要发光的颜色连接到 Emissive Color 输入节点,使用贴图接入可以使物体不同部分发出不同的光

image.png

image.png

3、镂空材质(OpacityMask)

参考:docs.unrealengine.com/zh-CN/Engin…

要实现下面的额镂空材质,只要使用一张 OpacityMask 贴图就可以了。

image.png

先将材质属性的 Blend Mode 设置为 Masked,为了能看到里面需要使用双面材质,勾选Two Sided 即可,另外 Opacity Mask Clip Value 可以调节阈值,决定镂空部分和实体部分的分界值,低于阈值的部分镂空。

image.png

材质连接也很简单,将单一通道的贴图或者多通道贴图的某一通道连接到材质的 OpacityMask 输入节点就可以了,如下图

image.png

4、光泽度材质(Shiny)

参考:docs.unrealengine.com/zh-CN/Engin…

光泽度材质可以通过调节 SpecularRoughness 来实现,使用贴图某一通道作为 Roughness 输入,使物体表面不同部分的粗糙度不一样

image.png

image.png

通过调节不同的高光值后的效果

image.png

5、细节纹理材质(DetailTexturing)

参考:docs.unrealengine.com/zh-CN/Engin…

使用细节纹理材质可以 让相机接近物体时展示纹理的细节部分,相机远离时渐渐隐藏细节部分 ,主要用到 DetailTexturing 材质函数,函数会有一个 主纹理贴图采样主法线贴图采样 输入,一个 细节纹理贴图对象细节法线贴图对象(注意是 TextureObject 而不是 TextuerSample),以及其它一些参数,输出最终的纹理和法线。按下图连接

image.png

以下是 靠近相机远离相机 的 效果

image.png

image.png

6、菲涅尔材质(Fresnel)

参考:docs.unrealengine.com/zh-CN/Engin…

菲涅尔效果 在摄像机方向与法线方向垂直时反射的光线最强,平行时最弱 ,就像用眼睛看着水面时的效果。使用 Fresnel 材质节点就可以模拟这种效果,主要用到 ExponentInNormal,分别输入 菲涅尔效果的衰减观察点的法线 ,这里要将法线贴图 从切线空间转到世界空间 中,不然就得不到想要的效果,比如一个规则的球体的法线在切线空间中都是(0,0,1)

image.png

image.png

Fresnel 也可以用下面的材质函数自己实现,该函数已经将法线 由切线空间转到世界空间FresnelExponent 控制衰减FresnelIntensity 控制菲涅尔效果的强度

image.png

7、透明涂层材质(ClearCoat)

参考:docs.unrealengine.com/zh-CN/Engin…

透明涂层材质能使物体看起就像表面有一层 半透明的涂层 (如车漆),效果如下图

image.png

制作透明涂层材质要将 Shading Model 设置为 ClearCoat ,这样材质上就会多出 ClearCoatClearCoatRoughness 两个输入,ClearCoat 决定透明涂层的强度ClearCoatRoughness 决定透明涂层的粗糙度

image.png

image.png

8、双法线透明涂层材质(ClearCoatDualNormal)

参考:docs.unrealengine.com/zh-CN/Engin…

双法线透明涂层会 多出一个法线输入,作为透明涂层的法线 。首先要在工程设置中启用 双法线透明涂层

image.png

材质按下图连接,ClearCoatBottomNormal 就是透明涂层的法线输入,是一个单独的节点,并不在材质主节点上,FlattenNormal 在法线贴图和 (0,0,1) 之间按 Flatness 值进行线性插值,Flatness1 时完全使用 (0,0,1) 作为法线,为 0 时完全使用法线贴图。保存材质后看效果,可以看到表面的涂层也有了凹凸感

image.png

image.png

image.png

9、次表面散射材质(Subsurface Scattering)

参考:docs.unrealengine.com/zh-CN/Engin…

次表面材质可以用来模拟皮肤等效果,光线透过次表面材质的物体时会在内部散射,在背面也能看到散射的光

image.png

次表面材质要将 Shading Model 设置为 SubSurface,然后材质的 SurfaceColor 输入变为可用,接入次表面的颜色即可,不透明度 Opacity 能决定散射的光线量,0 允许所有光线散射,1 不允许任何光线散射。

image.png

image.png

10、延迟贴花材质(MeshDecals, Deferred Decal)

参考:docs.unrealengine.com/zh-CN/Engin…

延迟贴花材质可以在物体表面添加一些特殊的效果,比如 污渍 效果。材质属性按如下设置

image.png

材质如下图连接,保存看效果

image.png

image.png

使用 DecalActor 可以在任意物体表面应用延迟贴花材质,将上述材质应用于地面,如下图

image.png

第二部分

版权声明:本文为CSDN博主「蓬 蒿 人」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。

原文链接:blog.csdn.net/yb0022/arti…

1、关闭深度测试

关闭深度测试的材质无论前面是否有遮挡物都会显示,如下面的一个纯红色材质

image.png

勾选材质属性 Translucency 栏下的 Disable Depth Test

image.png

这种材质可以用于坐标轴,如下图所示的 坐标轴 使用的这种材质,虽然在地板下面也能看到

image.png

2、后期处理材质(Post Process)

一般用于后期处理体积,影响场景(后期处理体积内)最终整体渲染效果,更多关于后期处理材质内容参考:

docs.unrealengine.com/en-US/Engin…

后期处理材质需要将 MaterialDomain 选择为 PostProcess

image.png

下面材质将 SceneTexture(还可以修改为其他类型实现不同的效果)作为 PostProcessInput 输入,如下连接节点,将场景输出颜色乘以 (0,0.8,1)

image.png

最终效果如下,整个场景的输出像素值都乘以某一个颜色,从而呈现各种色调的效果

image.png

该材质的用法是放到后期处理体积的 Post Process Material 属性中

image.png

3、世界绝对位置作为贴图 UV(Absolute World Position)

世界绝对位置 作为贴图的 UV 可以使贴图 不会 因为模型的大小、缩放或 UV 值而变形,比如石子路,路可以无限延长,而贴图 不会 拉伸,而且无缝衔接,材质连接如下

image.png

上面的材质只能保证在 XY 平面正常贴图,也可以改成 XZ 或者 YZ 平面,但是要在三维平面中保持贴图正常就 需要 其他一些计算了(我也不知道要怎么计算,所以就只举例二维平面的),世界绝对位置一般要乘以某个值再作为贴图 UV 比较合适,这里是 0.01 ,根据具体情况设置不同的值,贴到地面后效果

image.png

4、线框材质(Wireframe)

线框材质只要将材质属性的 Wireframe 选项勾选即可

image.png

材质连接图

image.png

效果如下

image.png

5、灯光材质(Light Function)

灯光材质将 Material Domain 设置为 Light Function

image.png

材质连接图如下,其中贴图是用不同颜色绘制的不同形状

image.png

在场景中放置一个聚光灯照向地面,灯光的颜色改成了蓝色,Light Function Material 设置为上面的材质

image.png

效果如下图

image.png

可以看出贴图的灰度值 影响 灯光的亮度,而贴图的颜色值 不影响 灯光的颜色,灯光的颜色就是聚光灯本身设置的颜色

6、分层材质(Layered)

分层材质可以用于积雪覆盖等效果,更多内容参考:

docs.unrealengine.com/en-US/Engin…

先创建两个材质函数 LayerBaseLayerTop 作为底层和顶层

LayerBase

image.png

LayerTop

image.png

Input In(Vector3) 节点的属性 Use Preview Value as Default 勾选,就可以使用材质函数中默认的输入

image.png

创建材质 LayerMaterial ,勾选 Use Material Attributes

image.png

按下图连接材质 MatLayerBlend_Simple 用于混合材质,WorldAlignedBlend 输出 混合Alpha

image.png

效果图如下

image.png

7、子 UV 材质(SubUV)

子 UV 材质在粒子系统中使用的比较多,用于播放动画,比如爆炸的效果使用的下面一张贴图

image.png

创建材质 SubUV ,如下设置属性

image.png

材质节点连接图

image.png

创建一个 粒子系统,应用上面材质

image.png

设置 Required 模块的 SubUV,水平和垂直个数都是 6

image.png

添加 SubImage Index 模块

image.png

设置 SubImage Index 模块的 SubUV 属性栏,在粒子的生命周期中从第 0 帧到第 35 帧变化

image.png

跟 SubUV 相关的主要就是这些属性,再设置其他属性比如 粒子生成速率 ,*生命周期 *以及 速度方向 等就可以实现一个爆炸的粒子效果。

20200119114623968.gif

此外 FlipBook 也可以播放动画,如下图所示连接材质

image.png

直接就可以播放爆炸动画了

20200119114623968.gif

8、变换贴图(Transform UV)

该材质留出几个材质参数节点,可以用于 缩放 旋转平移 材质贴图,通过控制贴图的 UV 实现,材质连接图如下

image.png

ScaleUScaleV 用于缩放 UV,并不是我们理解的缩放贴图,如果要改成缩放贴图 应该 使用倒数,效果如下图

image.png

材质主节点还有一个 Customized UV0 输入,可以将上面的材质按下图连接,实现同样的效果

image.png

Customized UV0 默认不显示,我们可以通过修改材质属性的 Num Customized UVs 项将它显示出来,也可以填写更大的值显示 Customized UV0Customized UV1 直到 Customized UVn

image.png

9、修改顶点位置(Panner)

材质主节点的 World Position Offset 输入可以修改顶点的位置偏移,比如下面的材质,位置偏移从法线贴图的 B 分量获取,再加上 Panner 节点让纹理贴图随时间移动就实现了水面流动的效果

image.png

Panner 节点参数

image.png

最终效果

20200119114623968.gif

10、立方体贴图材质(TextureCube)

立方体贴图需要输入 三维 的 UV 坐标,UVToLongLat 材质函数可以将 二维 UV 坐标转为 三维 UV 坐标,如下图 TextureSample 节点的纹理贴图是一个立方体贴图 TextureCube

image.png

效果

image.png

上面材质的 TextureSample 节点纹理贴图可以换成 CubeRenderTarget ,并将 CubeRenderTarget 作为 SceneCaptureCube渲染目标 从而获取当前场景的全景图。

image.png

UVToLongLat 相对应的有一个 LongLatToUV 材质函数,将 三维 UV坐标转换为 二维 的,与 UVToLongLat 相反,大致用法如下,但并不准确,也得不到立方体贴图的其中一面

image.png

TextureSample 是一个全景图样子的二维贴图 Texture2D,如下图

image.png

只得到了很小的一角

image.png