欢迎光临散文网 会员登陆 & 注册

UE5.2 Content Example 材质篇#1

2023-06-24 14:45 作者:bili_3493273303780263  | 我要投稿


目录

第零章 导读

第一章 Material Nodes (材质基础--黑铁级)

1.1 BaseColor

1.2 Metallic

1.3 Specular

1.4 Roughness

1.5 Emissive

1.6 Opacity

1.7 Opacity

1.8 OpacityMask

1.9 Normal

1.10 WorldPositionOffset

1.11 SubSurfaceColor

1.12 Refraction

第二章 Material Properties (材质属性--青铜级)

2.1 BlendMode

2.2 ShadingModel

2.3 Translucent Lighting Mode

2.4 Two Sided

2.5 Material Domain

2.6 Separate Translucency

2.7 Volumetric Directional Lighting Intensity

2.8 Opacity Mask Clip Value

2.9 Cast Translucent Shadow as Masked

2.10 Refraction Depth Bias

第三章 Material Instances (材质实例--)

3.1 Material

3.2 Instance

3.3 Instance of an Instance

3.4 Groups

第四章 Static Meshes (静态网格体

4.1  Static mesh

4.2 Mobility

4.3 UV Mapping

4.4 Lightmap UVs

4.5 Generate Unique UVs

4.6 Material Elements

4.7 Collision

第五章 Skin Rendering (皮肤渲染)

5.1 Skin and Subsurface

5.2 Sub Surface Lighting Conditions

第六章 Decals (贴花)


第七章 Advanced Materials (材质的高级用法--)

4.1  flexible Master Material

4.2 Material Functions

4.3 Material Layers

4.4 Vertex Animation

4.5 Radial Motion Blur


 第八章 Substrate(新一代材质系统--)

5.1  Limitations of Legacy Materials

5.2  Legacy Material Conversion

5.3 Layering and Mixing 

5.4 Adding and Weighting

5.5 Iridescence

5.6 Domain Materials

5.7 Monolithic Material BSDF

5.8 Substrate Slab

5.9 Opaque Blend Modes

 第九章 MathHall (数学殿堂)

    9.1 Functions

        1.1 Introduction

        1.2 ABS

        1.3 Frac

    9.2  Vector

        

2. Basic Trigonometry

第七章 蓝图通信



 Binding an Event Dispatcher to a custom event on spawn


第零章:

上传存档~~~。。,。。


第一章 Material Nodes (材质节点)

为何第一节是材质节点呢,

何为material nodes(材质节点):

    节点分为,输入处理的节点、和主材质节点。

    红色部分就是我们的输入节点,它可以是一个多维数组,也可以是一个函数等等

    黄色部分为,主材质节点(Main Material Node) ,它的作用就是UE5材质图表中的最后一站。 连接到主材质节点输入中的材质表达式节点组合将决定在关卡中编译并使用的最终材质的总体外观。

1.1 BasicColor (基础颜色)

1.1.1材质---底色为白色,1.1.2材质实例---底色修改为红色,材质---底色是草皮纹理,材质实例,底色修改为砖块纹理

1.1.1 Base Color (底色)

     底色,画板中最后一层的颜色

     它定义了材质的整体颜色。它接收 3维向量(Vector3),对应RGB 值,并且每个通道都自动限制在【0,1】 之间。

此时,材质的最终颜色=底色。

如果是从现实世界获得的,那么这是使用偏振滤光器拍摄时获得的颜色 (偏振在校准时会消除非金属材质的镜面反射)。


1.1.2 Material Instance (材质实例)

在做开发时,我们总是需要不断的修改材质连接的各个节点,以此来达到我们想要的效果,但是,每一次在原材质上进行编辑-->编译,都需要浪费大量的时间,这显然不可取。

所以便有了我们接下来的Material Instance(材质实例),它可以在运行时对其进行参数化和修改,而不需要修改原始材质。材质实例允许开发者在不改变材质本身的情况下,根据需要对其进行定制化和调整。

材质实例化用于创建一种父材质,你可以将其用作基础,生成各种各样不同外观的子项(材质实例)。

为了实现这种灵活性,就有了 继承(inheritance) 这一概念:

    父材质的属性会传递给其子项。 父材质中指定为 参数(parameters) 的属性在 材质实例编辑器(Material Instance Editor) 中公开给美术师。


在材质编辑器界面中,我们可以看见,他有两个重要的部分,第一部分是我们的参数面板,第二部分就是我们的继承项,父项。

    他们都是可做公开变量,提供给子项修改其中的内容。

你可以在参数面板进行一个实时响应的修改,而不需要再次编译。

同理,我们的texture纹理也是能作为底色,并且创建其Material Instance (材质实例)

草皮材质

虽然父项是草皮贴图,但是通过把草皮的texture sample(纹理贴图采样节点)---> 转换成了参数节点,所以我们可以在父项中修改它,替换成了石砖贴图。

经过uv坐标系来定位颜色后,最终输出了这张草皮贴图的颜色。

这样就可以节省很多力气再去重新制作材质的过程,也节省了空间。


1.2 Metallic (金属色)

金属度=0 一般为,塑料,木头,毛毛等等,金属度 = 0.5  ,金属度 = 1

Metallic金属色):

    一般特征:不透明,反射可见光,具备特有光泽。

    在UE5里。光泽,指定物体表面的金属质感程度,控制光照在物体表面的反射方式。较高的金属度会导致物体表面更具金属质感,反射光线较强。

    光泽的位置取决于光源的位置,就像下图水槽上的银色火龙头。人眼看到金属反射出来的光强和观测角度有关,这就是所谓“光泽”。光在介质表面反射折射的结果。

对于纯表面,例如纯金属、纯石头、 纯塑料等等,此值将是 0 或 1,而不是任何介于它们之间的值。创建受腐蚀、落满灰尘或生锈金属之类的混合表面时, 您可能会发现需要 介于 0 与 1 之间的值。


在案例中,我们设置他的金属度=1,粗糙度=0,此时该材质在肉眼中看起来就和门把手一样逼真。


1.3 Specular (高光 ,默认不设置 =0.5)

灰度值。如果没有连接任何输入,它会默认为0.5。这个默认值通常用于材质中遮挡微小阴影的反射效果。

Specular控制物体表面的高光反射强度和颜色。高光反射是指物体表面在光线照射下出现明亮的区域,反映了光的强度和颜色。

在编辑 Non-Metal Surfaces(非金属表面)材质时,你有时可能希望调整它反射光线的能力,尤其是它的 Specular (高光) 属性。 要更新材质的高光度,需输入介于0(无反射)和1(全反射)之间的标量数值。


1.4 Roughness (粗糙度)

Roughness 粗糙度指的是材质表面的光滑程度。

    如果一个物体的粗糙度过高,那么该物体就会因为漫反射原理,从而失去高光

    较高的粗糙度值表示表面更加粗糙,光线在其上会散射得更多,产生模糊和扩散的效果。

    较低的粗糙度值表示表面更加光滑,光线会在其上反射得更加明确和集中,产生清晰的高光效果。

通过调整粗糙度,可以控制材质的光照反射效果,从而影响表面的外观。

完全光滑

粗糙度(Roughness)输入控制材质表面的粗糙或平滑程度。

与平滑的材质相比,粗糙的材质将向更多方向散射所反射的光线。 这决定了反射的模糊或清晰度(或者镜面反射高光的广度或密集度)。 

粗糙度 0(平滑)是镜面反射。

而粗糙度 1(粗糙)是漫反射(或无光)表面。


1.5 Emissive (自发光)

控制物体表面的自发光属性,使其在没有外部光照的情况下发出光线。

由于支持HDR光照,所以允许大于1的值。


1.6 Opacity(不透明度)

Opacity 控制物体的透明度,较高的不透明度表示物体是完全不透明的,较低的不透明度表示物体具有一定的透明效果。


1.7 Opacity (不透明度)

1号石墩关闭次表面散射,3号开启

    当和次表面材质一起使用时,不透明度(Opacity) 会有不同的表现。

    这个参数并不控制穿过物体后能够看到的内容,而是控制在整个表面上可散射的光照数量。在示例1号石墩中可以看到,低不透明度会使大量光照穿过表面,而高不透明度则只显示非常少的散射。

SubSurface Scattering 次表面散射 

    它是一种用于模拟光线在物体内部传播和散射的效果的技术。模拟了光线进入物体表面后在物体内部发生多次散射的现象,从而产生了透明或半透明物体特有的光照效果。


1.8 OpacityMask(不透明遮罩

 OpacityMask(不透明遮罩)通过遮罩来定义物体的不透明度分布,可以实现部分透明效果。

    类似于不透明度(Opacity),但仅在使用遮罩(Masked)混合模式时可用。

与不透明度(Opacity)一样,它的值在【0,1】之间,但与不透明度(Opacity) 不同 的是,结果中看不到不同深浅的灰色。 

在遮罩模式下时,材质要么完全可见,要么完全不可见。当你需要可以定义复杂实心表面(如铁丝网、链环围栏等等)的材质时,它将成为一种理想的解决方案。不透明部分仍将遵循光照。

你可以使用基础材质节点上的 不透明度遮罩剪切值(Opacity Mask Clip Value) 属性来控制剪切发生点。欲知更多详情,请参阅遮罩混合模式文档。







1.9 Normal(法线)

用于模拟物体表面的凹凸细节,通过改变光照的表面法线来产生更真实的阴影和高光效果。

法线,一条垂直与物体表面的线段,当光线照射到多边形时,我们将光线的角度与多边形的法线进行比较。光线将使用相对于法线方向的相同角度反弹:

同一个模型,但是仅仅用了一张法线贴图,最终效果却截然不同

我们就以这个斑点墙面为例,如果都靠面数来视线这些凸起效果,那么一整面墙下来,整体的多边形面数将会非常的高,然后使用法线贴图的话,仅仅只需一个长方体即可。



1.10 WorldPositionOffset(世界位置偏移)

控制物体顶点在世界空间中的位置偏移,可以用于创建动态效果。

如水波纹、风吹效果,动态树叶随风飘动,可交互草地等等效果。

左摇
右摆

世界位移(World Displacement) 的工作方式与世界位置偏移(World Position Offset)非常相似,但它使用曲面细分顶点,而非网格体的基础顶点。

为了启用此功能,材质上的曲面细分(Tessellation)属性必须设为 无(None) 以外的值。

VertexNormalWS 表达式输出世界场景空间顶点法线。

它只能用于在顶点着色器中执行的材质输入,例如WorldPositionOffset。该表达式对于设置网格体增大或缩小很有用。请注意,沿法线偏移位置会导致几何图形沿UV缝隙拆分。










1.10 SubSurfaceColor(次表面颜色)

:用于模拟透明物体内部的散射和颜色渗透效果,常用于模拟皮肤、蜡烛等物体的效果。

  • BSSRDF 双向散射分布函数(Bidirectional Scattering-Surface Reflectance Distribution Function)

  • BRDF     双向反射分布函数 (Bidirectional Reflectance Distribution Function)

Subsurface Scattering的原理是基于光在物质内部传播时的相互作用。当光线进入物体表面后,一部分光线会被吸收,而另一部分光线会穿过物体并在内部发生散射。在物体内部,光线会与物质的分子或细微结构相互作用,改变光线的方向和能量分布。最终,一部分散射后的光线会重新离开物体表面,从而形成透射光。

一般在透明或半透明的物体特别有用。如皮肤、蜡烛、果冻等,可以增加物体的视觉深度和光线交互效果,使其看起来更加真实和有质感。

    次表面散射属于高级计算机图形学方面的知识了,这里不过多解释,我目前也没去深入学习过。


https://www.slideserve.com/emera/subsurface-scattering
https://www.slideserve.com/emera/subsurface-scattering
https://www.slideserve.com/emera/subsurface-scattering



1.11 Refraction(折射):

控制物体在光线穿过时的折射效果,可以模拟透明物体的折射现象。

常见折射指数

空气   水 

1.00  1.33 1.31





玻璃

1.52

钻石

2.42













第二章 Material Properties (材质属性)

Examples of Different Material Properties


1.1 BlendMode (混合模式)

不透明,遮罩,半透明,叠加,

1.1.1 Opaque(不透明)

透明度和不透明度

在虚幻引擎中,透明度的工作方式是为每个像素分配0到1之间的 不透明度(Opacity) 值。

    不透明度(Opacity) 为1时,表面完全不透明,这意味着它会阻止照射到它上面的100%的光线。 

    不透明度(Opacity) 为0时,表面允许所有光线通过。

0到1之间的不透明度值会产生部分可透视的像素。下图显示了静态网格体上从0增加到1的不透明度值。

不透明度值比例
https://docs.unrealengine.com/5.2/zh-CN/using-transparency-in-unreal-engine-materials/

1.1.2 Masked(遮罩)

"遮罩"(Masked)混合模式用于您需要以二元(开/关)方式选择性地控制可见性的对象。

相机在观察一个前方时,使用了遮罩材质的正方体,黑色部分为不渲染,所以视线直接透了过去,我们看见了背后的石墩,而黄色的部分对应着像素渲染的地方,所以视线被挡下,我们看见了,黄颜色的部分。

黑色部分,不会被引擎渲染,白色部分渲染


1.1.3 Translucent (半透明)

当使用半透明材质时,需要注意的一个重要问题是它们目前不支持镜面反射。这意味着你在表面上将看不到任何反射。然而,可以使用类似于此示例中的节点网络中的立方体贴图来模拟这种反射。立方体贴图纹理简单地添加在基本颜色之上。

请注意透明和不渲染之间的区别。

透明的表面,例如玻璃,仍然会与光进行交互,产生反射(镜面反射)。在遮罩模式下被剔除的像素根本不会绘制;在这些区域你将看不到任何反射。

如果你想保留反射或镜面反射效果,最好使用透明混合模式,或考虑使用分层材质。

此外,由于遮罩区域不渲染这些特征,它们在GPU上不会被计算,从而节省了性能。


1.1.3 Additive

"叠加型"(Additive)混合模式无非就是获取材质的像素,并将其与背景的像素相加。

简单地说,将材质的像素与背景的像素相加。这与Photoshop中的线性叠加(加法)混合模式非常相似。这意味着没有加深的效果;由于所有像素值都被相加在一起,黑色像素将被渲染为透明。这种混合模式适用于各种特殊效果,如火焰、蒸汽或全息影像。

与半透明混合模式一样,这种混合模式也不支持镜面反射(即反射)。混合的加法性质可能意味着你不会使用它,但是可以使用上面在半透明部分展示的使用Cubemap的方法来模拟类似于反射的效果。

在下面的图像中,添加了一个第二个球体到场景中。请注意,当两个球体重叠时,像素会相加,因此变亮。

Additive材质的一个缺点是它们在浅色背景下往往难以看清。球体的侧视图演示了这一点。




Modulated

















贴花常用于制作子弹孔、血迹、轮胎痕迹以及其它相似的项作为游戏中发生的事件。它们也可以用于设计师使用位于墙上的污迹、破损效果的纹理来丰富场景。

















Material Instances





































这张地图介绍了蓝图之间相互交流的方式。包括通过投射直接交流、使用事件分发器以及使用接口在蓝图之间发送数据的演示。


鼠标直接手写的,可能难以分辨

物理学:角速度,一个矢量

动画方面:

1,我们可以看见light flash timeline的flash float value是63.54821 ---- 0.7 的这么一个浮点范围,控制着alpha透明通道,我们可以看下该颜色是什么,使用draw debug函数绘制下。


2. 而Update Light Color函数的作用就是动态的修改材质实例,和改变光源的强度和颜色。

通信方面:

1

2

创建好后,为他进行赋值操作

3

此时,我们就可以看见,该变量成功的获取了,灯泡的对象引用


1.2 Blueprint communication via actor casting

    1.2除了增加了一个旋转体,其他并无什么变化

Y,即为Yaw,z轴的旋转值

1.4 Communicating with all actors of a specific class

    1.4是直接靠游戏运行时来获取light的对象引用了,而不是我们编辑器运行时状态。

使用该函数返回所有的actor,只存在与当前关卡中的actor

然后再将返回后的actor数组逐一转换类型

2 事件分发器概述

事件分发器(Event Dispatchers)是一种Actor通信方法,采用此方法时,当一个Actor触发了一个事件后,监听该事件的所有其他Actor都会收到通知。

在这种方法中,负责发送事件的Actor需要创建一个 事件分发器(Event Dispatcher),所有监听该事件的Actor都会订阅该事件分发器。此通信方法采用一对多关系,每当当前Actor触发事件分发器后,监听该Actor的其他Actor都会收到通知。

2.1 Using an Event Dispatcher function to call an event in the Level Blueprint

    2.1开始就是使用 event dispatch了

由我们的BP Button Dispatch类新建一个event dispatch,然后在该类上进行一个事件的调用




单位时间内,bomb转过的角度,来实现球体的初始抛射方向

引线动画逻辑代码块实现流程:

时局图

1,时间轴控制我们的火花位置,和火花烧焦的引线效果长度。

2,0-1的输出值

3,通过2号的值复制给我们的材质参数以此来改变烧焦的引线效果

引线材质

4,材质实例赋值操作,基操,不解释。

5,插值控制位置,插值的速率由时间轴的Fuse lerp Float Value控制

Z轴到27过,开始执行爆炸事件

6,每一刻关键帧执行到了都会调用我们的“设置相对位置事件”以此,我们实现了一个动态的火花,和火花烧焦后引线变黑的效果。

那么依照这个原理,后面的那些灯泡和button对象的实现原理也是如此,便不在多复述。






UE5.2 Content Example 材质篇#1的评论 (共 条)

分享到微博请遵守国家法律