Open WangShuXian6 opened 11 months ago
放置立方体 右键新建 材质-材质 M_FirstMaterial
打开材质 M_FirstMaterial
https://docs.unrealengine.com/5.3/zh-CN/constant-material-expressions-in-unreal-engine/#constant4vector 它们对你想做的任何事情都非常重要。 constant/1 float 【按住1键+鼠标左键】 constant2Vector/2 float 【按住2键+鼠标左键】 constant3Vector/3 float 【按住3键+鼠标左键】 constant4Vector/4 float 【按住4键+鼠标左键】
RGB三个字母,它们不一定意味着红色通道、绿色通道或蓝色通道。 这取决于你插入的是什么插座。【例如插座 base color】
Constant(常量)表达式输出单个浮点值。这是最常用的表达式之一,并可连接到任何输入,而不必考虑该输入所需的通道数。例如,如果您将一个常量连接到需要 3 个矢量的输入,那么该常量值将用于全部 3 个元素。提供单个数值时,使用说明区域中的小三角形图标来折叠节点可能非常有用
项目 | 说明 |
---|---|
属性 | |
R | 指定表达式所输出的浮点值。 |
示例:0.7、-0.24 和 1.1 通过在材质编辑器的图形区域中按住 1 键并 单击鼠标左键,可快速创建 Constant(常量)节点。
Constant2Vector(常量 2 矢量)表达式输出双通道矢量值,即输出两个常量数值。
项目 | 说明 |
---|---|
属性 | |
R | 指定表达式所输出的矢量的红色(第一个)通道的浮点值。 |
G | 指定表达式所输出的矢量的绿色(第二个)通道的浮点值。 |
示例:(0.4, 0.6) 和 (1.05, -0.3)
用法示例:Constant2Vector(常量 2 矢量)对于修改纹理坐标非常有用,因为这些坐标也是双通道值。 通过在材质编辑器的图形区域中按住 2 键并 单击鼠标左键,可快速创建 Constant2Vector(常量 2 矢量)节点。
Constant3Vector(常量 3 矢量)表达式输出三通道矢量值,即输出三个常量数值。您可以将 RGB 颜色看作 Constant3Vector(常量 3 矢量),其中每个通道都被赋予一种颜色(红色、绿色、蓝色)。
项目 | 说明 |
---|---|
属性 | |
R | 指定表达式所输出的矢量的红色(第一个)通道的浮点值。 |
G | 指定表达式所输出的矢量的绿色(第二个)通道的浮点值。 |
B | 指定表达式所输出的矢量的蓝色(第三个)通道的浮点值。 |
示例:(0.4, 0.6, 0.0) 和 (1.05, -0.3, 0.3)
通过在材质编辑器的图形区域中按住 3 键并 单击鼠标左键,可快速创建 Constant3Vector(常量 3 矢量)节点。
Constant4Vector(常量 4 矢量)表达式输出四通道矢量值,即输出四个常量数值。您可以将 RGBA 颜色看作 Constant4Vector(常量 4 矢量),其中每个通道都被赋予一种颜色(红色、绿色、蓝色、alpha)。
项目 | 说明 |
---|---|
属性 | |
R | 指定表达式所输出的矢量的红色(第一个)通道的浮点值。 |
G | 指定表达式所输出的矢量的绿色(第二个)通道的浮点值。 |
B | 指定表达式所输出的矢量的蓝色(第三个)通道的浮点值。 |
A | 指定表达式所输出的矢量的alpha(第四个)通道的浮点值。 |
示例:(0.4, 0.6, 0.0, 1.0) 和 (1.05, -0.3, 0.3, 0.5) 通过在材质编辑器的图形区域中按住 4 键并 单击鼠标左键,可快速创建 Constant4Vector(常量 4 矢量)节点。
数据类型:constant3Vector/3 float 右键-constant3Vector 或者 按住3键+鼠标左键 双击可直接更改颜色
为立方体-材质-元素0-分配材质 M_FirstMaterial
按住3键+鼠标左键 添加 constant3Vector 节点 如果使用 constant,则默认为绿蓝通道赋值0. 如果使用 constant2Vector,则默认为蓝通道赋值0.
控制材质粗糙度。粗糙度为0(光滑)为镜面反射,而为1()为完全粗或漫反射。 数据类型:constant/1 float
材质 M_Reflective 粗糙度 0
材质 M_Rough 粗糙度 1
对比:
https://docs.unrealengine.com/5.3/zh-CN/math-material-expressions-in-unreal-engine/ 将零或一插入基色中会看到什么? 如果数值为0,我们会得到一个黑色的表面,
如果数值是1,则会得到一个白色的表面。
颜色只是数值,0是黑色,1是白色,数值不同,得到的颜色也不同。
快捷键: L+左键
A,B节点需要数据类型:constant/1 float Alpha 数据类型:constant/1 float A 0,B 1,输出0.5
LinearInterpolate 表达式会以第三个输入值为遮罩参数,然后在两个输入值之间进行插值。 可以想象成两张纹理根据一张遮罩进行过渡,类似Photoshop中的图层遮罩。 遮罩Alpha的强度决定了两个输入值贡献的权重。
如果Alpha是0.0,就使用第一个输入值。 如果Alpha是1.0,就使用第二个输入值。 如果Alpha在0.0和1.0之间,输出是两个输入之间的插值。 Alpha默认0.5. 注意,混合是按通道进行的。 所以,如果Alpha是一个RGB颜色,则Alpha的红色通道会定义A和B的红色通道之间的插值,它 独立 于Alpha的绿色通道,后者定义了A和B的绿色通道之间的插值。
添加纹理节点 TextureSample https://docs.unrealengine.com/5.3/zh-CN/texture-material-expressions-in-unreal-engine/#texturesample TextureSample 表达式输出纹理中的颜色值。此纹理可以是常规Texture2D(包括法线贴图)、立方体贴图或电影纹理。
项目 | 说明 |
---|---|
属性 | |
纹理(Texture) | 指定表达式所取样的纹理。要设置纹理,请先在 内容浏览器 中选择纹理。然后,在此表达式的属性窗口中选择"纹理(Texture)"属性,并单击"使用当前选择(Use Current Selection)"按钮。 |
取样类型(Sampler Type) | 此节点所要取样并输出的数据类型。 |
Mip值模式(MipValueMode) | 选择如何根据计算的默认硬件来定制样本的MIP级别或导数。影响外观及性能。 |
输入 | |
UV(UVs) | 接收UV纹理坐标,以用于纹理。如果没有任何值输入到UV,那么将使用材质所应用到的网格体的纹理坐标。如果TextureSample代表立方体贴图纹理,那么UV坐标必须是三通道值,而不能是双通道值。 |
DDX(UV)(DDX(UVs)) | 接收UV输入的DDX以用于各向异性过滤。默认情况下,硬件自动执行此过滤,并且速度更快。但是在某些情况下,可能需要使用DDX材质表达式显式地设置此项目,以避免延迟贴花的2x2像素块瑕疵之类的瑕疵。仅当 Mip值模式(MipValueMode) = 导数(Derivative) 时才可用。 |
DDY(UV)(DDY(UVs)) | 接收UV输入的DDY以用于各向异性过滤,这与DDX(UV)接收UV输入的DDX相同。 |
输出 | |
RGB | 输出颜色的三通道RGB矢量值。 |
R | 输出颜色的红色通道。 |
G | 输出颜色的绿色通道。 |
B | 输出颜色的蓝色通道。 |
A | 输出颜色的alpha通道。如果纹理未包含alpha通道,那么将"alpha"通道连接到任何内容(虽然在技术上不合法)的结果将始终为零(黑色)。 |
选择 节点 TexTureSample -细节面板-材质表达式纹理base-纹理-T_Perlin_Noise_M [来自新手包]
Alpha 需要
打开 纹理 T_Perlin_Noise_M 默认情况下,该纹理三个通道显示在一起。
红色 R通道
绿色 G通道
蓝色 B通道
在这个纹理中,你可以看到三个通道的值,都是一样的,因为图案都是一样的。 所以Alpha使用R或G或B,都有相同的结果。 使用红色通道。可以看到立方体表面变得粗糙。
有些地方完全粗糙,有些地方则是完全反射的。有些地方适中。
如果你把我们的GB一起插入阿尔法,这也是可行的。 尽管这个插座正在寻找一个单一的浮点,但如果你把三个通道插入阿尔法插座、 引擎所做的就是自动为你丢弃多余的值。 所以在这里,你实际上只有一个值插入到alpha中。
噪声纹理在驱动立方体表面的图案。
以某种方式扩大噪声、纹理或缩小噪声纹理的规模。
字母U和V,它们表示2D纹理的轴。 U代表水平轴,而V代表垂直轴. 使用UV而不使用X和Y的唯一原因是我们已经在三维空间中使用了它们。 我们在三维空间中用X、Y和Z来表示这三个不同的轴,以便更好地区分它们。
https://docs.unrealengine.com/5.3/zh-CN/coordinates-material-expressions-in-unreal-engine/
TextureCoordinate(纹理坐标)表达式以双通道向量值形式输出 UV 纹理坐标,从而允许材质使用不同的 UV 通道、指定平铺以及以其他方式对网格的 UV 执行操作。
项目 | 说明 |
---|---|
属性 | |
坐标索引(Coordinate Index) | 指定要使用的 UV 通道。 |
U 平铺(UTiling) | 指定 U 方向上的平铺量。 |
V 平铺(VTiling) | 指定 V 方向上的平铺量。 |
撤销镜像 U(Un Mirror U) | 如果为 true,那么撤销 U 方向上的所有镜像。 |
撤销镜像 V(Un Mirror V) | 如果为 true,那么撤销 V 方向上的所有镜像。 |
用法示例: 如需访问网格体的第二个 UV 通道,请创建一个 TextureCoordinate(纹理坐标)节点,将其"坐标索引"(CoordinateIndex)设置为 1(0 表示第一个通道,1 表示第二个通道,等等),并将其连接到 TextureSample(纹理取样)节点的 UV 输入。
TexCoord 控制U和V的平铺的次数。默认都为1。 UV数据类型:TexCoord[0] / TextureCoordinate 平铺越多,单个图片越小。
M+左键
精确控制UV。 通过使用分量遮罩对U和V进行单独控制。
https://docs.unrealengine.com/5.3/zh-CN/material-data-manipulation-and-arithmetic-in-unreal-engine/
分量遮罩(Component Mask) 材质表达式的作用与上文所述的"附加(Append)"节点刚好相反。 ComponentMask不是对数据进行组合,而是提供一种将数据分成其组成部分或通道的方法。
分量遮罩(Component Mask)的功能类似于"门"。 对于连接到输入端的任何数据,都可以准确选择允许哪些通道到达输出端。 下图显示了一个Constant4Vector向量,其中包含值(0, 1, 0.7, 0.5)。 在图表中选择"遮罩(Mask)"节点时,"细节(Details)"面板中会显示四个复选框。
这些复选框确定节点将输出哪些通道。目前没有勾选,所以"遮罩(Mask)"节点不会输出任何信息。 如果尝试将该节点插入下游的输入端,则会显示错误。
通过这些复选框可以过滤信息,仅使用需要的通道。
假设需要使用 A通道 中的值来控制材质的不透明度, 则可以通过选中相应的复选框来启用A通道,然后将"遮罩(Mask)"的输出引脚连接到 不透明度输入(Opacity Input)。
ComponentMask会丢弃未选中的R、G和B通道,仅输出A通道中的值,在本例中该值为0.5。
从分量遮罩中出来的东西真的取决于你插入的是什么。 如果你插入的是纹理,坐标值,那么从这里出来的结果将是UV. 如果你插入的是一个纹理样本RGB,那出来的结果将是红色通道、绿色通道和蓝色通道。 所以对于Component Mask来说,这些名字其实是可以互换的。 有时是U和V,有时是红色通道和绿色通道。
第一个 mask使用 R通道 第一个 mask使用 G通道
https://docs.unrealengine.com/5.3/zh-CN/material-data-manipulation-and-arithmetic-in-unreal-engine/
AppendVector材质表达式将 输入A 中的数据与 输入B* 中的数据进行组合,并输出一个多通道向量(float2、float3或float4)。 在此示例中,两个常量附加在一起输出一个float2向量:(1, 2)**.
用法示例 如果你希望能够独立修改两个值但需要将它们传递到需要多通道数据的输入中,通常可以使用"附加(Append)"节点。如下图所示,美术师可采用一种方法控制材质实例中纹理的平铺(Tiling)或 UV缩放,但只能统一进行控制。
此示例的缺点是材质图表只包含一个参数,但UV坐标有两个通道。 使用此解决方案无法独立控制纹理的宽度和高度。
使用 AppendVector 便可以解决这个问题。为每个轴创建一个单独的标量参数,然后将它们传递到"附加(Append)"节点中。 "Append(附加)"节点将这两个参数组合成一个float2向量,然后乘以纹理坐标。
由于 平铺X(Tiling X) 和 平铺Y(Tiling Y) 是不同的参数,因此现在可以独立控制纹理的宽度和高度。
附加顺序 AppendVector表达式按照数据附加到节点的顺序对数据进行组合。输入B中的数据始终附加到输入A中数据的末尾。请参考下面的两幅图像。
在第一张幻灯片中,附加的结果为 (0.05, 0.2, 0.8),即节点预览显示的浅蓝色。
在第二张幻灯片中,附加的结果为 (0.8, 0.05, 0.2),即节点预览显示的粉色。
AppendMany 是一个材质函数,其功能与AppendVector表达式相同,但最多可以将四个单独的浮点/标量值组合成一个多通道向量。
AppendMany函数的另一个好处是它提供了三个不同的输出引脚。 因此,你可以根据具体情况下的需求,访问部分或全部附加通道。
AppendMany节点在其输入端仅接受浮点/标量值。如果将float2、float3或float4向量传递到AppendMany节点中,则除第一个值之外的所有值都将被丢弃。
最终效果
导入png图片为纹理 纹理 T_Arrow
新建材质 M_MovingArrow 打开 M_MovingArrow 添加纹理节点 TextureSample.为纹理选择 T_Arrow
TextureSample RGB输出到 基础颜色
选择 主节点 M_MovingArrow-细节面板-材质-混合模式-半透明 此时主节点 不透明度 插槽可用
T_Arrow纹理由白色和黑色数值组成,箭头为白色1。其他为黑色0。黑色0对应不透明度0,即全透明。使用其任意通道即可。 将 TextureSample R通道输出给 主节点 不透明度 插槽。
虚幻中的UV 随时间,增加U坐标值,使箭头水平移动。
添加 时间 Time 节点 [材料动画必须,输出随时间不断增加的值] 添加速度常量 ,乘以时间获取移动距离。 距离添加到 TexCoord 节点,使材质移动。 箭头向左上移动。U,V都在移动。
使用 分量遮罩 Component Mask 拆分 UV,只移动,增加【R通道】U轴移动距离,U轴速度为-0.1. V轴为G通道。 此时箭头向右移动。
https://docs.unrealengine.com/5.3/zh-CN/animating-uv-coordinates-in-unreal-engine/
可以通过在控制板中搜索 Panner 或使用右键单击上下文菜单,Panner材质表达式(Panner Material Expression)添加到材质图表。 还可以按住 P 键并左键单击材质图表中的任意位置,在鼠标指针处插入一个Panner。 Panner材质表达式接受两个输入:坐标(Coordinates)时间(Time)
属性 | 说明 |
---|---|
坐标(Coordinate) | 接收可以通过表达式来修改的基本 UV 纹理坐标。 |
时间(Time) | 接收用来确定当前平移位置的值。这通常是用来提供常量平移效果的时间表达式,但是,也可以使用常量或标量参数来设置特定偏移,或者通过蓝图来控制平移。 |
属性 | 说明 |
---|---|
速度 X(Speed X) | 纹理坐标沿水平或 X 轴方向移动的速度。 |
速度 Y(Speed Y) | 纹理坐标沿垂直或 Y 轴方向移动的速度。 |
常量坐标(Const Coordinate) | 仅在未连接坐标的情况下使用。 |
小数部分(Fractional Part) | 仅输出平移计算结果的小数部分,以提高精度。输出将大于或等于 0 并且小于 1。 |
更容易的移动纹理
选中 平移节点-细节面板-材质表达式偏移-速度X--0.5 [U方向向右移动]
添加 TexCoord 节点,U平铺2,V平铺3.输出到 Panner - coordinate 插槽,将在水平平铺2次,竖直平铺3次。
2倍时间流速
更快的修改材质属性。
M_MovingArrow 材质-右键-创建材质实例 MI_MovingArrow
为 平面物体选择 MI_MovingArrow 材质
打开 M_MovingArrow 材质。
将速度属性公开: 速度节点-右键-转换为参数 重命名为 MovingSpeed
打开 MI_MovingArrow ,MovingSpeed 出现在细节面板-参数组 启用MovingSpeed后可修改
平铺参数 UV Tile
MI_MovingArrow
新建材质 M_DirtyPlatform,材质实例 MI_DirtyPlatform
M_DirtyPlatform
MI_DirtyPlatform
选择节点 + C键
选择 注释,细节面板-材质表达式注释-字体大小 可控制字体
新建材质 M_FireBall
打开 材质 M_FireBall Texture Sample -材质表达式纹理Base-纹理-T_Fire_Tiled_D
将 Texture Sample 纹理输出到主材质-基础颜色
添加 panner 节点,用以移动UV.
panner 节点-材质表达式偏移-速度X-0.1 这使火球材质水平移动
将 Texture Sample 纹理 -RGB 输出到主材质 -自发光颜色 节点
添加 panner 节点,Texture Sample 纹理节点。
Texture Sample -材质表达式纹理Base-纹理-T_Fire_Tiled_D。 panner 节点-材质表达式偏移-速度Y-0.2
添加 Multiply 节点 【M+左键】 接收 2个 Texture Sample 纹理节点的RGB输出。 Multiply输出给主材质-基础颜色。
添加 Multiply 节点,分别增加材质的基础颜色,自发光颜色RGB值。
基础颜色亮度
添加 TexCoord 0 纹理坐标 0 .控制 平移节点 panner 的 坐标(Coordinate).
添加Time 控制火的时间流速 平移节点 panner 的 Time.
分别控制U,V方向的移动速度 平移节点 panner 的 Speed. 当前只控制U,U=0.2 ,V=0.
Time保持默认。 优化 坐标速度和移动速度。
sine 需要参数 time 时间
正弦节点 sine 输出 浮点 -1 至 1 。
https://docs.unrealengine.com/5.3/zh-CN/math-material-expressions-in-unreal-engine/
Saturate Saturate 节点将值限定在0与1之间。小于0的值被提升到0;大于1的值降低为1;0到1之间(包括0和1在内)的值保持不变。在大多数现代图形硬件上,Saturate的指令成本几乎是免费的,所以您可以在任何时候使用该节点来将输入或输出值限制在0到1之间,而不影响您的材质的性能。
使用示例: 该节点可用于将输出或输入值限制在0和1之间。
控制火球自发光颜色亮度
同时控制火球基础颜色亮度
由于颜色最低为0,此时火球闪烁会变黑
修改正弦波的值,防止材质变黑
Lerp输出给基础颜色和基础自发光颜色
此时火球不会变黑。
SIne_Remapped 等同于以上节点之和。 Value 1 :同 Lerp A. Value 2 :同 Lerp B. sine phase:接受 Time 时间参数 输出限制后的浮点。
使用 SIne_Remapped 替代以上sine相关节点【类似正弦Lerp,但不会限制负数】 公开参数
use world position offset to drive mesh 使用全局位置偏移驱动网格体
使用新手包-SM_Rock 岩石
新建材质 M_MyRock 添加纹理节点 TextureSample,使用纹理 T_Rock_Basalt_D,用于基础颜色
SM_Rock 岩石 使用材质 M_MyRock
法线可以伪造细节,存在于纹理,计算光线如何反射。
添加纹理节点 TextureSample,使用法线normal纹理 T_Rock_Basalt_N,用于主材质的-Normal
岩石将立体化
数据类型:constant3Vector/3 float
B通道改为10,将使球体在Z方向上升10cm。
删除 3 float 。 添加 SIne_Remapped 节点 添加 1 float 表示上升最低点 30 添加 1 float 表示上升最低点 100 为 SIne_Remapped 输出的 1 float ,合并一个 2 float,形成 3 float 赋值给 world position offset 。
此时 物体将上下浮动。
为时间添加参数 FloatSpeed 控制f浮动速度。
为 SIne_Remapped 的 sine phase [时间]节点使用2个正弦波。 一个原时间,一个调整速度后的时间。合并。
更多修改方法
使用噪声 noise textures 材质 改变半透明度。
新建材质 M_Dissolve 主材质-细节面板-材质-混合模式-半透明
添加纹理节点 TextureSample,使用纹理 T_Perlin_Noise_M,将 R 通道用于-不透明度 3个通道都可以,因为值都一样。 噪声纹理的黑色部分为0,使物体完全透明。白色部分为1,是物体完全显示。灰色适中。
https://docs.unrealengine.com/5.3/zh-CN/image-adjustment-material-functions-in-unreal-engine/
白色更白,黑色更黑。
CheapContrast(低成本对比度)函数通过将直方图的高端重新映射到低端值,并将直方图的低端重新映射到高端值,提升输入的对比度。 这类似于在 Photoshop 中应用色阶调整,以及将黑色和白色标志拉入到一个位中。用户可控制提升对比度的程度。
项目 | 说明 |
---|---|
输入 | |
输入(标量)(In (Scalar)) | 要提升对比度的通道或者黑白图像。 |
对比度(标量)(Contrast (Scalar)) | 要提升对比度的程度。默认值为 0,这表示不更改。 |
此函数接收标量值而非 RGB,这意味着它特别适合于黑白图像或单一通道。要提升全色图像的对比度,请使用 CheapContrast_RGB(低成本对比度_RGB)。
0为原对比对。改为1.
噪声纹理的值在 0-1之间
噪声纹理+1,则使其全白,不透明度为1,物体全部显示。 添加 add 节点-右键节点-开始预览节点。 可以预览当前节点的效果
噪声纹理-1,则使其全黑,不透明度为1,物体全部不显示。
随时间输出 -1 到1的正弦值。 这将完成溶解效果。
此时 SIne_Remapped 输出的 -1 至 1 ,加上噪声纹理的值 -1 至 1,结果为 -2 至 2.超出了 0-1. 使用 saturate 限制纹理的最终输出为 0-1.
使用噪声纹理
添加紫色到自发光颜色-物体将变为紫色。
添加 纹理节点 Texture Sample -纹理-LowResBlurredNoise 像素较低,非常模糊
复制添加 纹理节点 Texture Sample -纹理-T_Perlin_Noise_M 【主材质使用的溶解纹理】 将 纹理 T_Perlin_Noise_M 的UV值输出到 纹理 LowResBlurredNoise
提高对比度,并使用主材质不透明度
添加命名重路由声明节点 GlowEdge
1-
节点 反转 GlowEdge 形成溶解边缘
新建actor蓝图 BP_MovingArrow
打开 BP_MovingArrow,添加立方体组件,调整大小。 使用材质 MI_DirtyPlatform
添加 平面组件 使用材质 MI_MovingArrow
添加 boxCollision 组件
打开 BP_MovingArrow ,选择组件 boxCollision. 打开事件图表 添加事件-组件开始重叠时
launch character 时角色类特有函数
添加变量 Speed,编译后才可设置默认值。 值为1000
添加 arrow 箭头组件 用于获取朝向
获取向前朝向 get forward vector
获取向前朝向 get up vector
打开 材质 M_Dissolve 添加变量 DIssolveAmount 手动控制溶解量,断开原节点
新建材质实例 MI_Dissolve 修改变量 DissolveAmount 手动控制溶解量
打开 BP_DissolveCube 添加立方体组件,使用材质 MI_Dissolve,MI_Dissolve溶解值设为1不溶解。 添加boxCollision组件,移动到立方体外侧
选择组件 boxCollision,添加重叠事件 获取第三人称角色
之前使用的均为静态材质实例,无法在运行时更改材质参数。 需使用 动态材质实例,这只在运行时存在,可以在运行时更改材质参数。
create dynamic material instance 动态材质实例-parent-选择 MI_Dissolve
选择 create dynamic material instance 输出节点【输出材质实例】-右键-提升为变量 CreatedDissolveMaterialInstance
CreatedDissolveMaterialInstance 存储创建的动态材质实例 类型为 材质动态实例
拖出获取变量CreatedDissolveMaterialInstance,连接 set scalar parameter value 。 set scalar parameter value 参数名 parameter name 填写 DissolveAmount
使用时间轴改变参数 双击打开时间轴 DissolveTimeline
添加浮点型轨道
右键-添加关键帧到时间轴 时间:0 值:0.7
右键-添加第二个关键帧到时间轴 时间:1.2 值:-0.6
缩放窗口,到显示2个关键帧。
选择2个关键帧,按1键使曲线平滑
重命名轨道为 DissolveTrack
打开事件图表,将时间轴 DissolveTrack 输出给 材质参数value
选择组件 box collision -添加事件 z组件结束重叠时
时间轴具由反向执行功能 Reverse 为重叠结束事件 连接角色节点-再连接到 时间轴 反向执行功能 Reverse 即可恢复物体材质,将参数倒转。
主材质:控制它的 UV、基色、金属、镜面粗糙度、法线和环境光遮挡。
基于物理的材质主要输入及其最佳使用方法的概述。 https://docs.unrealengine.com/5.3/zh-CN/physically-based-materials-in-unreal-engine/
基于物理的渲染(Physically based rendering) (PBR)意味着表面接近光线在真实世界的表现方式,而不是我们直观以为的应有方式。 相较于完全依赖美术师直觉来设置参数的着色工作流程,遵守PBR原则的材质更准确,并且通常看起来更自然。
基于物理的材质在所有光照环境中都能有同等程度的良好表现。 此外,材质值的复杂程度和相互依赖程度可以降低,这样材质创建工作流程对于用户更加友好。 这些优点甚至适用于非真实感渲染,正如Pixar [4]和Disney [3]的电影中所展现的那样。
这些是与虚幻材质的基于物理的方面直接相关的材质属性。
所有这些输入都设计为接受0到1之间的值。对于基础颜色,这意味着RGB值在0到1之间的颜色或纹理取样。
基于物理的值可以根据真实世界材质进行测量。下面给出了一些示例。
基础颜色定义了材质的总体颜色。 "基础颜色"输入接受 Vector3 (RGB) 值,其中每个通道自动限制在0到1之间。 如果取自真实世界,这是使用极化筛选器(极化会删除对齐时非金属的高光度)拍照时的颜色。
为非金属测量的基础颜色值(仅限强度):
材质 | 基础颜色强度 |
---|---|
木炭 | 0.02 |
新沥青 | 0.02 |
旧沥青 | 0.08 |
裸土 | 0.13 |
青草 | 0.21 |
沙漠沙 | 0.36 |
新混凝土 | 0.51 |
海洋冰 | 0.56 |
新雪 | 0.81 |
为金属测量的基础颜色:
材质 | 基础颜色(R, G, B) |
---|---|
铁 | (0.560, 0.570, 0.580) |
银 | (0.972, 0.960, 0.915) |
铝 | (0.913, 0.921, 0.925) |
金 | (1.000, 0.766, 0.336) |
铜 | (0.955, 0.637, 0.538) |
铬 | (0.550, 0.556, 0.554) |
镍 | (0.660, 0.609, 0.526) |
钛 | (0.542, 0.497, 0.449) |
钴 | (0.662, 0.655, 0.634) |
铂 | (0.672, 0.637, 0.585) |
"粗糙度"输入控制了材质表面有多粗糙或光滑。 在材质中,这表现为反射在材质上看起来有多尖锐或模糊。
粗糙材质会沿比光滑材质更多的方向反射光线,这样产生的是漫反射,有时很细微。光滑表面会更均匀地反射光线,这样产生的是清晰、集中的反射或镜面高光。
粗糙度为0(光滑)会产生镜面反射。
粗糙度为1(粗糙)会产生漫反射或无光泽的表面。 0到1之间的粗糙度值。顶部为非金属,底部为金属。
粗糙度经常在使用灰阶纹理的对象上映射,以向表面添加物理变体。 粗糙度贴图上的深色区域在材质上看起来像镜子,而浅色区域则比较粗糙,看起来反射度较低。
下面的视频显示了粗糙度值从0增加到1的过程,其中perlin纹理控制着 浅色(粗糙) 和 深色(光滑) 值的分布。在值为0时,材质预览完全像镜子。在值为1时,材质完全无光泽。 中间值更有意思,因为表面的一些部分看起来光滑,一些部分看起来粗糙。 粗糙度贴图经常用于向塑料和金属等材质添加凌乱、污迹或其他瑕疵。
请务必理解粗糙度与高光度之间的相互影响,尤其是当你在采用PBR工作流程之前在虚幻引擎中工作时。
高光度(Specularity) 指的是表面反射的高光(specular light)量。 此值是材质类型所固有的,通常默认值0.5是准确的。"高光度"输入 不用于反射/高光度贴图 或添加表面变体。 这些应该在"粗糙度"贴图中进行处理。
"金属感"输入接受0到1之间的值,并定义你的材质是作为金属还是非金属表现。
在大多数情况下,你应该将"金属感"视为虚幻引擎中的二进制属性。 对于纯表面(例如纯金属、纯岩石、纯塑料,等等),你应该将"金属感"设置为 0或1,而不是中间值。创建被腐蚀、有灰尘或生锈的金属之类的混合表面时,你可能发现你需要0到1之间的某个值。
非金属 的"金属感"值为0。这是默认值。
金属 的"金属感"值为1。
0到1的"金属感"值。
你可能起初不愿意将材质设置为完全的金属感。除非你有充足理由,否则尽量不要使用小数值。
此示例展示了当"粗糙度"相对较低的材质上"金属感"从0增加到1时,表面如何变化。
相同材质中往往金属和非金属都有。 假设一个金属面板,其中油漆涂层覆盖了部分或全部金属。
油漆是非金属,因此在油漆覆盖的所有区域中,"金属感"值应该为0。 在面板中看得到金属的所有地方,"金属感"值应该为1。
这应该使用传递到"金属感"输入的黑白遮罩进行处理。 油漆没有与金属混合,而是位于其上方。 你的"金属感"贴图不应包含中间灰阶值,只能包含黑色和白色。 你还可以使用材质层实现类似结果。
"高光度"输入接受0到1之间的值,并控制表面反射多少高光。
"高光度"值为0表示完全不反射。
"高光度"值为1表示完全反射。
虚幻引擎使用 默认高光度0.5 ,这表示大约4%的高光度反射。 对于绝大多数材质,此值是准确的。
对于漫反射程度很高的材质,你可能倾向于将此值设置为0。别这样做!所有材质多有高光度,请参阅此帖子以了解示例[5]。制作漫反射程度很高的材质的正确方法是使用很高的"粗糙度"值。
修改"高光度"的一个原因是添加微型遮蔽区或小尺度阴影,比如从法线贴图中表示的裂口添加。这些有时被称为空腔。 小尺度的几何体(尤其是仅存在于高精度多边形中并烘焙到法线贴图中的细节)不会被渲染器的实时阴影选取。
要捕获此阴影,你可以生成空腔贴图,它通常是追踪距离非常短的AO贴图。这会乘以输出之前的最终"基础颜色",并乘以0.5("高光度"默认值)作为"高光度"输出。
确切地说,就是:基础颜色=空腔旧基础颜色,高光度=空腔0.5。
在高级用途中,这一步可以用于控制折射率(IOR)。我们发现这对于99%的材质都不是必需的。下面是基于测量的IOR的"高光度"值。
测量的"高光度"值:
材质 | 高光度 |
---|---|
玻璃 | 0.5 |
塑料 | 0.5 |
石英 | 0.570 |
冰 | 0.224 |
水 | 0.255 |
奶 | 0.277 |
皮肤 | 0.35 |
测量的材质示例。顶部:木炭、新混凝土、旧沥青。底部:铜、铁、金、铝、银、镍、钛
主材质的想法是项目中只有一个相同类型的材质。
基于此材质,有多个材质实例。
只需为新创建的材质实例使用材质实例,而不是一个接一个地创建。
不仅可以节省空间和时间,还可以提高场景性能。
castle_brick_02_red_ao_2k
castle_brick_02_red_arm_2k
castle_brick_02_red_diff_2k
castle_brick_02_red_disp_2k
castle_brick_02_red_nor_dx_2k
castle_brick_02_red_nor_gl_2k
castle_brick_02_red_rough_2k
diff/Diffuse 漫反射 : 颜色贴图主要为Diffuse 漫反射、Albedo 反射率、Base Color基础颜色 三种。一般认为这三者是等同的。
添加 Texture Sample 纹理节点,分配纹理 Diffuse 漫反射 castle_brick_02_red_diff_2k。 Texture Sample -RGB 输出至 主材质 基础颜色
为关卡地板使用材质 MI_Master。
快捷键:S+左键 https://docs.unrealengine.com/5.1/zh-CN/material-parameter-expressions-in-unreal-engine/ ScalarParameter(标量参数)表达式输出单个浮点值 (Constant(常量)),这个值可在材质实例中访问和更改,或者由代码快速访问和更改。
项目 | 说明 |
---|---|
属性 | |
参数名称(Parameter Name) | 指定用于在材质实例和代码中识别参数的名称。 |
组(Group) | 提供在一个MaterialInstanceConstant内按组或目录组织参数名称的方法。一个材质中所有拥有同一个组属性名称的参数都会被列在实例的该目录下。 |
默认值(Default Value) | 指定常量采用的初始值。 |
打开 M_Master 添加节点 纹理坐标 TexCoord 0 添加节点 标量参数 ScalarParameter ,参数名 重命名为 UV TIle 添加节点 Multiple
打开 MI_Master ,调节 UV TIle 控制地板平铺
打开 M_Master 添加 分量遮罩 Component Mask 节点,分别遮罩 R,G通道
添加 Append 合并UV坐标
添加节点 Constant4Vector(常量 4 矢量),转换为参数 :Advance UV Control
重命名 Constant4Vector 节点的 RGBA 4个通道 U Tile V Tile
使用 Constant4Vector 分别控制纹理坐标 TexCoord的 U,V
使用Add节点控制偏移
重命名 Constant4Vector 节点的 RGBA 4个通道,分别控制 纹理坐标 TexCoord的U,V平铺,U,V偏移 U Tile V Tile U Offset V Offset
使用切换节点分支,统一控制纹理坐标 TexCoord的UV https://docs.unrealengine.com/5.1/zh-CN/material-parameter-expressions-in-unreal-engine/#staticswitchparameter StaticSwitchParameter(静态开关参数)表达式接收两个输入,并且在参数值为 true 时输出第一个输入的值,否则输出第二个输入的值。
此参数称为"静态"是因为它不可在运行时更改,而只能在材质实例编辑器中设置。静态开关是在编译时(而非运行时)进行应用。这意味着删除的材质分支决不会执行,因此静态开关在运行时实际上是自由的。另一方面,对于材质中 使用的 每一种静态参数组合(滥用静态参数组合可能会导致着色器激增),都必须通过编译来产生材质的新版本。请尽量减少材质中的静态参数数目以及实际使用的静态参数排列数。
项目 | 说明 |
---|---|
属性 | |
参数名称(Parameter Name) | 指定用于在材质实例和代码中识别参数的名称。 |
组(Group) | 提供在一个MaterialInstanceConstant内按组或目录组织参数名称的方法。一个材质中所有拥有同一个组属性名称的参数都会被列在实例的该目录下。 |
默认值(Default Value) | 如果为 true,那么输出将是第一个输入。否则,输出将是第二个输入。 |
扩展标题显示(Extended Caption Display) | 如果为 true,那么表达式的标题栏将显示表达式的值。 |
输入 | |
A | 接收具有任意数目通道的值。 |
B | 接收具有任意数目通道的值。 |
用法示例:静态开关可用于除去材质的整个分支,而不会产生运行时成本。各个实例可具有不同的值,这使您能够建立模板化的着色器设置,而不会影响性能。
添加节点 Static Switch Parameter:AdvanceUV Control 添加统一控制参数 UV Tile
统一控制纹理
单独控制纹理
独立控制参数缓存
合并统一控制参数缓存 优化了分支节点名称
control the color output from the texture 控制纹理的颜色输出:亮度 brightness 、饱和度 saturation、对比度 contrast,色调 tint
去饱和度(Desaturation) 表达式对其输入进行去饱和,即根据特定百分比将其输入的颜色转换为灰色阴影。
项目 | 说明 |
---|---|
属性 | |
亮度系数(Luminance Factors) | 指定每个通道对去饱和颜色的影响量。此属性用于控制,在去饱和之后,绿色比红色亮,而红色比蓝色亮。 |
输入 | |
小数(Fraction) | 指定要应用于输入的去饱和量。此百分比的范围为0.0(完全原始颜色,不去饱和)到1.0(完全去饱和)。 |
程序员需知:定义去饱和颜色 D、输入颜色 I 和亮度系数 L。输出将为 O = (1 - 百分比)( D.dot( I )) + 百分比 I
添加饱和度节点 Desaturation 乘以常量 Saturation,常量0表示原饱和度。1表示完全去包和。负值为过度饱和。
1-
OneMinus 节点反转 Desaturation,使参数Saturation与饱和度成正比。更符合直觉。1为原始饱和度
Power 表达式接收两个输入:基值(Base)和指数(Exp)。它将基值提高到指数的幂,并输出结果。换句话说,它返回 Base 乘以自身 Exp 次。
属性 | 说明 |
---|---|
常量指数(Const Exponent) | 接受指数值。仅在未使用指数输入时使用。 |
输入 | |
基数(Base) | 接受底数值。 |
Exp | 接受指数值。 |
示例:当底数为0.5且指数为2.0时,幂为0.25。
使用示例:如果您传递给Power的颜色在[0,1]范围内,Power可以作为一种对比度调整,其中非常亮的值会略微降低,但是较暗的值会急剧下降。
亮的更亮,暗的更暗。
当您将多个纹理放入场景中时,您需要纠正它们的颜色以便它们与您的场景相匹配或者与整个心情的主题相匹配。
参数分组
将 texture sample 纹理贴图转换为参数 BaseColorTexture 设置 BaseColorTexture- 细节面板-分组- 01-BaseColor
UV Tile : Global Control 分组
手动控制分组优先级。 UV Tile : 00-Global Control 分组 Saturation: 01-BaseColor Contrast: 01-BaseColor AdvanceUV Control Switch: 00-Global Control Advance UV Control: 00-Global Control
设置-细节面板-排序优先级
控制金属感纹理
TextureSampleParameter2D(纹理取样参数 2D)表达式与 TextureSample(纹理取样)完全相同,只不过它是可在材质实例中以及通过代码来修改的参数。
项目 | 说明 |
---|---|
属性 | |
参数名称(Parameter Name) | 指定用于在材质实例和代码中识别参数的名称。 |
组(Group) | 提供在一个MaterialInstanceConstant内按组或目录组织参数名称的方法。一个材质中所有拥有同一个组属性名称的参数都会被列在实例的该目录下。 |
纹理(Texture) | 指定表达式所取样的纹理。 |
取样类型(Sampler Type) | 此节点所要取样并输出的数据类型。 |
Mip 值模式(MipValueMode) | 通过计算的默认硬件选择如何定制取样的mip等级或派生物。这会影响外观及性能的噪声值。 |
输入 | |
UVs | 接收 UV 纹理坐标,以用于纹理。如果没有任何值输入到 UVs,那么将使用材质所应用于的网格的纹理坐标。 |
输出 | |
RGB | 输出颜色的三通道 RGB 矢量值。 |
R | 输出颜色的红色通道。 |
G | 输出颜色的绿色通道。 |
B | 输出颜色的蓝色通道。 |
A | 输出颜色的alpha通道。如果纹理未包含alpha通道,那么将"alpha"通道连接到任何内容(虽然在技术上不合法)的结果将始终为零(黑色)。 |
数据类型 :Constant 所有属性都要使用相同的UV平铺/平移参数 Cached UV Input
默认0.5 范围 0-1
数据类型 :Constant
限制高光度最大值为1
需要UV参数 限制在0-1
粗糙度纹理使用 castle_brick_02_red_rough_2k
正确设置纹理压缩 https://docs.unrealengine.com/5.3/zh-CN/textures-in-unreal-engine/ https://docs.unrealengine.com/4.27/zh-CN/RenderingAndGraphics/Textures/TextureCompressionSettings/
Default 默认 Mormal Map 法线贴图 Masks SRGB
打开纹理
当纹理没有Alpha通道,或者不准备使用Alpha通道时,启用。 如果启用,纹理的Alpha通道在任何压缩纹理输出格式中将被强制为不透明。如果输出格式为未压缩RGBA,则不适用。 当前纹理没有Alpha通道,所以勾选。
构建纹理时使用的压缩设置 基础颜色纹理-使用默认值
Texture及其源是否处于SRGB伽马颜色空间中。只能与8位和压缩格式一起使用。若将alpha通道单独用作遮罩,应撤销勾选此项。 基础颜色纹理:启用
没有 Alpha通道
粗糙度纹理:可以使用 默认值/遮罩(无sRGB)
如果使用默认值,则不能启用sRGB。 因为没有将其插入基础颜色插槽。 仅使用这些值确定表面粗糙度。 因为每个通道都只包含灰度值,即黑白值。这不是sRGB。
Texture Sample 纹理节点-细节面板-材质表达式纹理Base-采样器类型Sampler Type Color颜色 【真实颜色使用】 Linear Color 线性颜色【非真实颜色使用,不用做基础颜色,纹理不能启用sRGB】
BaseColor 基础颜色:颜色 Metalic 金属感: 线性颜色 Roughness 粗糙度: 线性颜色
Metalic 金属感/Roughness 粗糙度: 线性颜色 时会变黑,这是由于默认材质使用了sRGB,与线性颜色冲突。 所以需要更换默认材质。更换为未启用sRGB的占位材质即可。例如black系列
法线贴图可以伪造重要的物理细节,但不增加网格。 它是通过每个单独像素的法线或面向方向来完成的。这就是它被称为法线贴图的原因。 数据类型:constant3Vector/3 float
法线没有Alpha通道, 无透明度压缩:启用 压缩设置:法线贴图
添加 节点 TextureSampleParameter2D(纹理取样参数 2D) 名称:NormalTexture 细节面板-材质表达式纹理Base-采样器类型-法线 Param-非sRGB的法线normal占位材质
使用UV参数
法线贴图使用RGB通道存储的xyz位置信息constant3Vector/3 float。
打开 MI_Master,法线贴图使用纹理 castle_brick_02_red_nor_dx_2k
打开 M_Master
在虚幻引擎中,应当使用 DIrectX 格式法线贴图。 使用OpenGL法线会出现错误的阴影。必须修改材质。
OpenGL法线之所以出现错误的阴影,是因为其中Y轴被翻转了。【用于Unity引擎】 修复OpenGL法线贴图翻转的Y轴/G绿色通道 打开 OpenGL法线材质 castle_brick_02_red_nor_gl_2k 细节面板-高级-反转绿通道 翻转后两种格式材质相同。
https://docs.unrealengine.com/4.27/zh-CN/RenderingAndGraphics/PostProcessEffects/AmbientOcclusion/ 因遮蔽而造成的光源衰减近似值。 数据类型:constant/1 float
AO没有Alpha通道 无透明度压缩:启用 压缩设置:默认 sRGB:不启用 AO 的RGB3个通道,完全一样。也不用做基础颜色。所以不启用sRGB。
添加 节点 TextureSampleParameter2D(纹理取样参数 2D) 名称:AOTexture 细节面板-材质表达式纹理Base-采样器类型:线性颜色 AOTexture材质:castle_brick_02_red_ao_2k 使用UV参数
输出任意一个通道作为AO即可
R通道:AO G通道:粗糙度 B通道:金属感 默认0 Alpha:无
因为这三个材质均为 constant/1 float
新建包-导入-位图-导入所有纹理
文件-新建-Substance图形-空模板 拖入 AO,Roughness,Matalic【如果有】 按空格-RGBA Merge AO连接R, Roughness连接G. 输出-输出节点
扳手图标-导出输出 导出输出即可
导入混合图到UE。
打开材质-细节面板-无透明度压缩:启用 【否则不显示材质】 压缩-压缩设置:遮罩(无sRGB)[因为将用作遮罩纹理]
完成打包材质。
新建材质 M_ChannelUnpackingTest 选择 纹理 castle_brick_02_red_diff_2k,castle_brick_02_red_nor_dx_2k 后,直接拖入材质编辑器,自动创建 相关的 Texture Sample 纹理节点.
导入打包好的材质 直接使用R,G通道即可 R:环境光遮挡 G:粗糙度
打开材质 M_Master
添加 节点 TextureSampleParameter2D(纹理取样参数 2D) 名称:ORM 细节面板-材质表达式纹理Base-采样器类型:线性颜色 ORM 材质:使用无sRGB的black占位图 使用UV参数 分组:07-ORMTexture
在主材质上使用 StaticSwitchParameter 来控制使用ORM或独立纹理 分组:00-Global Control
置换贴图:castle_brick_02_red_disp_2k 置换贴图提供高度值, 需要对平面表面细分。
Displacement Map(置换贴图,也叫移位贴图)可以改变模型对象的几何形状,但要达到较好的置换效果需要提高模型本身的顶点数,通常结合曲面细分使用。因此在提供最真实的效果的同时也会大幅增加渲染性能的开销。
blender-添加-网格-栅格
打开左下角栅格面板
增加足够的顶点: x向细分,y向细分 :300 尺寸:4M
右侧面板-添加修改器-置换 置换修改器 上 新建纹理-DisplaceTexture DisplaceTexture使用castle_brick_02_red_disp_2k贴图纹理
降低置换强度到 0.15
添加修改器-平滑 防止网格尖刺
导出模型文件为 DisplaceBrick.fbx
导入值UE。 拖入关卡 使用材质 MI_Master
DisplaceBrick.fbx 使用 MI_MasterWithDIsplace
打开 MI_MasterWithDIsplace 调整 UV Tile
MI_MasterWithDIsplace 具由高度细节。 MI_Master 只是一个平面。
在任意项目中使用自己的预定义资产,代替资产迁移。
新建空白项目 MyBpTemplate
打开带有自定义材质的项目 LearnMaterial 准备迁移材质
打开 材质 M_Master
选择 基础颜色纹理节点 BaseColorTexture 将纹理替换为 DefaultTexture [引擎系统自带基础颜色占位纹理,带sRGB]
选择 金属感 纹理节点 MetalicTexture 将纹理替换为 127grey [引擎系统自带线性颜色占位纹理,无sRGB]
选择 粗糙度 纹理节点 RoughnessTexture 将纹理替换为 127grey [引擎系统自带线性颜色占位纹理,无sRGB]
选择 法线 纹理节点 NormalTexture 将纹理替换为 T_Default_Normal [引擎系统自带法线占位纹理,无sRGB]
选择 环境光遮挡 纹理节点 AOTexture 将纹理替换为 127grey [引擎系统自带线性颜色占位纹理,无sRGB]
选择 打包AO,Roughness, Metalic 纹理节点 ORM 将纹理替换为 127grey [引擎系统自带线性颜色占位纹理,无sRGB]
选择 M_Master-右键-zi'chan资产操作-迁移-确定-选择 新的模板项目的Content文件夹下 完成
打开引擎模板目录 E:\UnrealEngine-5.3.2\Templates
新建文件夹 TP_MyBpTemplate
将模板项目MyBpTemplate的 文件 MyBpTemplate.uproject,Config 文件夹,Content文件夹拷贝至TP_MyBpTemplate。
将引擎 E:\UnrealEngine-5.3.2\Templates\TP_Blank\Config\TemplateDefs.ini
配置文件 拷贝至TP_MyBpTemplate 的 E:\UnrealEngine-5.3.2\Templates\TP_MyBpTemplate\Config
目录下。
纯蓝图模板使用 TP_BlankBP
文件夹。
修改该文件 TemplateDefs.ini
LocalizedDisplayNames=(Language="en", Text="MyBpTemplate")
LocalizedDisplayNames=(Language="zh-Hans", Text="我的蓝图模板")
LocalizedDescriptions=(Language="zh-Hans", Text="我的材质模板。")
源码版引擎-执行 GenerateProjectFiles.bat
完成。
新建项目-游戏-我的蓝图模板
知道你所看到的会是什么样子
是一片森林。 是一座房子还是一座鬼屋? 是一片沙漠还是某种外星环境或赛博朋克?
导入场景模型 材质-材质导入法-不创建材质 导入纹理-不启用 2.1 Geometry.zip
全选导入的静态网格体-拖入关卡
基础光照设置
https://docs.unrealengine.com/5.3/zh-CN/directional-lights-in-unreal-engine/ 模拟太阳和月亮
定向光源 将模拟从无限远的源头处发出的光线。这意味着此光源投射出的阴影均为平行,因此适用于模拟太阳光。定向光源放置后,可对其 移动性 进行如下设置:
静态 ——(左图)即无法在游戏中改变光源。这是速度最快的渲染方法,可用于已烘焙的光照。
静止 ——(同见左图)即光源通过 Lightmass 只烘焙静态几何体的投影和反射光照。其他则为动态光源。此设置还允许光源在游戏中改变颜色和强度,但其并不会移动,且允许部分烘焙光照。
可移动 ——(左图)即为完全动态光源,可进行动态投影。这是最慢的渲染方法,但在游戏过程中拥有最高灵活性。
https://docs.unrealengine.com/5.3/zh-CN/point-lights-in-unreal-engine/ 点光源(Point Light) 的工作原理很像一个真实的灯泡,从灯泡的钨丝向四面八方发出光。然而,为了性能考虑,点光源被简化为从空间中的一个点均匀地向各个方向发射光。放置的点光源可以设置为三个移动设置之一:
静态(Static) - (如左图所示)它意味着,不能在游戏中更改光源。这是最快的渲染方法,并且允许烘焙的光照。
固定(Stationary) - (亦如左图所示)它意味着,光源将仅有自己的阴影和来自 全局光照(Lightmass) 烘焙的静态几何体的反射光照,所有其他光照都将为动态。该设置还允许光源在游戏中更改颜色和强度,但它不会移动且允许局部烘焙光照。
可移动(Moveable) - (如左图所示)这意味着光是完全动态的,并考虑到了动态阴影。从渲染的角度看这是最慢的,但顾及到了游戏进程中的最大灵活性。
https://docs.unrealengine.com/5.3/zh-CN/rectangular-area-lights-in-unreal-engine/
矩形光源(Rect Light) 从一个定义好宽度和高度的矩形平面向场景发出光线。您可以用它来模拟拥有矩形面积的任意类型光源,如电视或显示器屏幕、吊顶灯具或壁灯。 矩形光源的行为并非在所有情况下都与真实面积光源一样。请参阅下面有关移动性设置的讨论
https://docs.unrealengine.com/5.3/zh-CN/sky-lights-in-unreal-engine/ 天空光照(Sky Light)捕获关卡的远处部分并将其作为光源应用于场景。这意味着,即使天空来自大气层、天空盒顶部的云层或者远山, 天空的外观及其光照/反射也会匹配。你还可以手动指定要使用的立方体贴图。
https://docs.unrealengine.com/5.3/zh-CN/spot-lights-in-unreal-engine/
聚光源 从圆锥形中的单个点发出光照。使用者可通过两个圆锥形来塑造光源的形状:内圆锥角 和 外圆锥角。在内圆锥角中,光照将达到完整亮度。从内半径的范围进入外圆锥角的范围中时将发生衰减,形成一个半影,或在聚光源照明圆的周围形成柔化效果。光照的半径将定义圆锥的长度。简单而言,它的工作原理类似于手电筒或舞台照明灯。
和其他光源一样,聚光源可设为以下3种移动性设置中的一种:
静态(Static) ——(左图)即无法在游戏中改变光源。这是最快的渲染方法,可用于已烘焙的光照。
固定(Stationary) ——(同见左图)即光源通过Lightmass仅烘焙静态几何体的投影和反射光照。其他则为动态光源。此设置还会允许光源在游戏中改变颜色和强度,但其不会移动并允许部分烘焙光照。
可移动(Moveable) ——(左图)即为完全动态光源,可进行动态投影。这是最慢的渲染方法,但在游戏过程中拥有最高灵活性。
拖入点光源
点光源-细节面板-使用色温 启用 点光源-细节面板-温度-降低到4100,【温暖橘色光】
调整 矩形光-光源 -源宽度,源高度,与窗户一致 矩形光-光源-使用色温 矩形光-光源-温度-3600 温暖橘色光 矩形光-光源-强度-3 cd
此时 移动到墙角会自动曝光 移动到中心灯光会自动变量
https://docs.unrealengine.com/5.2/zh-CN/post-process-effects-in-unreal-engine/ 后期处理效果(Post-processing effect)使美术师和设计师能够对影响颜色、色调映射、光照的属性和功能进行组合选择,从而定义场景的整体外观。要访问这些功能,可以将一种称为 后期处理体积(Post Process Volume) 的特殊类型的体积添加到关卡。可以放置多个体积来定义特定区域的外观,也可以将其设置为影响整个场景。
放置Actor-视觉效果-后期处理体积 添加 后期处理体积
后期处理体积-细节面板-镜头-exposure-计量模式[亮度计算法]-手动 默认效果只在体积内生效。故场景灯光无变化。
后期处理体积-细节面板-后期处理体积设置-无限范围(未指定)-启用 后期处理体积将影响整个关卡。 场景变黑。
后期处理体积-细节面板-镜头-exposure-曝光补偿-14 这将增加场景亮度
此时移动到角落,场景曝光将保持不变。
https://docs.unrealengine.com/5.3/zh-CN/using-the-emissive-material-input-in-unreal-engine/
use simple shapes as lights 使用简单的形状作为灯光
添加平面
新建材质 M_Emissive
基于 M_Emissive 创建材质实例 MI_Emissive
窗户平面使用材质实例 MI_Emissive
调整窗户平面 MI_Emissive 颜色与场景一致
下载长条灯罩light导入关卡 添加圆柱体制作灯管 灯管使用材质实例 MI_Emissive 按G键,不显示选择场景的物体的轮廓。
在灯管下添加矩形灯光 矩形灯光-光源-衰减半径 -减小值555
使用色温 4100
在UE内容浏览器中选择基础层材质实例,然后在Bridge中选择按顺序选择下载的3种材质(基础→中→上)。这将在内容浏览器目标中 BlendMaterials 目录创建 Blend 材质。
bridge-home-surface 下载材质 砖墙,混凝土,裂缝
在 内容-Megascans-Surfaces 目录下,过滤出材质实例
基础材质实例 砖墙基础颜色
金属材质实例 裂缝材质
混凝土材质实例
后选的材质会覆盖在先选的材质之上。
MI_Brick_Wall_wmknbhe_2K
实际应按顺序选择3个材质实例,虚幻5.3.2依然存在bug,所以只能选择少于3个材质实例。
实际只需选择一个,虚幻5.3.2依然存在bug,所以随便选。
材质名称改为:MI_WallBlend 点击按钮 创建材质混合 这将在 内容-BlendMaterials 目录创建混合材质 MI_WallBlend
打开混合材质实例 MI_WallBlend
按选择顺序修复 各layer 的纹理 相关纹理使用对应材质目录下的纹理即可。 材质不包含的纹理不需要替换。
将 混合材质实例 MI_WallBlend 赋给 墙面
当前墙壁只显示一种材质-基础材质 砖墙。 且UV平铺需要调整。
create meterial variation by ourselves 自己创造材质变化
默认只显示基础材质。
顶点绘制允许你把某些东西钉在顶点上。
这些绿点是曲面的顶点,可以快速告诉你这个曲面有多少个顶点。
渲染场景,显示笔刷线框
这些表面有很多顶点,而且它们的密度比一般墙壁的要高很多。方便顶点绘制。
缩小笔刷尺寸
颜色绘制-通道 RGB红绿蓝3个通道分别对存了混合材质实例 MI_WallBlend的 3各layer Middle/Base/Top R 红色:Middle Layer G 绿色:Base Layer B 蓝色:Top Layer 勾选的通道对应的layer将被绘制或擦除。 X键 切换绘制/擦除模式。
绘制颜色 -改为黑色 才可以将材质绘制到网格体。 点击后方交换图标即可切换为黑色。或按X键。 这将和擦除颜色调换。
https://docs.unrealengine.com/5.3/zh-CN/using-decals-in-unreal-engine/
贴花作为材质实例,可以直接拖放到网格体上使用。
对于不受场景的水材质影响的贴花,需要找到贴花的主材质,断开其中的粗糙度节点。
两个贴花叠加时,可以修改: 贴花-排序顺序
https://docs.unrealengine.com/5.3/zh-CN/foliage-mode-in-unreal-engine/ 植被模式(Foliage Mode) 允许你在经过筛选的Actor和几何体上批量绘制或擦除 静态网格体(Static Meshes) 或 Actor植被(Actor Foliage) 。借助此模式,你可以在大型户外场景中填充植被。 选择多种资产后绘制
添加关卡序列,命名为Shot1
添加 电影摄像机Actor 到关卡 电影摄像机Actor是具有专业电影摄像机功能的摄像机Actor 重命名为Shot1Camera
关卡序列-轨道-Actor到Sequencer-选择相机
左上设置按钮-布局-选择两窗口 均为透视视角
左窗口-允许过场动画控制-取消 取消后,不允许过场动画(Sequencer)预览在这个视口中播放。 关卡序列的调整不会影响该窗口。
在右窗口,选择一个物体,点击关卡序列-相机切换-相机图标 shi'kou视口将锁定到选定物体前方。
在左窗口移动电影摄像机,在右窗口预览电影摄像机视口。
经调整后用于过场动画预览的视口布局。 右窗口使用过场动画视口。 过场动画视口右上角可以设置脚本按钮 例如在屏幕上添加3*3网格
在关卡序列中创建动画
光圈 Aperture 焦距 Focal Length 对焦距离 Foucs Distance
光圈 Aperture 影响曝光 焦距 Focal Length 影响镜头可视范围,能容纳的物体 对焦距离 Foucs Distance 可以创造景深效果
更多设置
细节面板-当前摄像机设置-焦距设置-聚焦方法-手动 细节面板-当前摄像机设置-焦距设置-手动聚焦距离-吸管吸取物体
细节面板-当前摄像机设置-焦距设置-绘制调试聚焦平面
选择 当前摄像机名称-摄像机图标 将shot1Camera锁定到选中的视口 激活后,此时在右侧窗口,鼠标右键+wasd可控制 电影摄像机 的移动。
找到满意位置后,点击 相机切换后的相机图标锁定右窗口视口。
将时间xia显示为秒,窗口将按秒显示。
点击 序列的相机下的 Transform-右侧 圆形加号-即可在当前时间添加关键帧 移动电影摄像机后,继续添加关键帧。
点击播放按钮预览电影摄像机
序列右下角 更改动画时间 将结束线拖至时间轴末尾 将镜头结束线也拖至时间轴末尾
点击序列的 曲线编辑器 选择当前电影摄像机 查看运动曲线
选择曲线上的多个关键帧点,右键-从 自动 改为 线性。 更适合序列动画。
通过主序列渲染动画。 主序列可包含多个镜头。 类似主材质。
添加一个关卡序列 ,命名MasterSequence
在 主序列 MasterSequence 中,添加镜头轨道
该轨道中可以添加关卡序列。 点击轨道右侧加号,选择之前的镜头 Shot1 修改时间轴时间,与镜头时间相同。 将时间轴结束线拖至最后。 镜头的相机图标也可以锁定视角放置移动电影摄像机。
双击序列可进入镜头详情 点击 箭头可返回主序列
点击序列的渲染图标即可渲染 渲染前需要启用渲染插件 Movie Render Queue
编辑器-窗口-过场动画-影片渲染队列 点击 渲染,添加主序列
点击 设置的配置
选择导出的格式 设置-png序列 只保留 png
重载抗锯齿: 我们是否应该在影片渲染期间重载项目的抗锯齿设置?若在编辑器中常规工作,开启TAA时此操作将十分实用,但会强制关闭其以使用诸多空间样本进行高质量渲染
临时采样数:越大,质量越好,渲染时间越长。 我们应该组合在一起产生每个输出顿的顿数。 这将如此数量的子步的结果混合在一起,生成一个输出顿。请参考CameraShutterAngle以控制每个子顿之间经过的时间量。请参考SpatialSampleCount以了解我们将多少个样本进行平均以生成一个子步。(这意味着染复杂度为SampleCountTileCount'2SpatialSampleCount*NumPasses)。
点击渲染:
渲染完成后为png图片组
须在视频编辑软件中合成视频。
帧率与UE项目一致
将序列文件夹拖入序列1轨道 V1
全选轨道 V1的图片-右键-速度/持续时间 持续时间:00:00:00:01 波纹编辑,移动尾部剪辑:启用
缩放时间轴,预览动画
到处媒体即可
新建空白关卡
进入地形模式 创建地形
进入 无光照模式 以显示地形。
项目设置-引擎-渲染-虚拟纹理-启用虚拟纹理支持 :启用 节省编译着色器时间。
项目设置-引擎-渲染-虚拟纹理-启用虚拟纹理支持-在纹理导入时启用虚拟纹理 : 关闭 启用时新导入的纹理将成为虚拟纹理,该纹理会非常模糊。可能会导致编辑器崩溃。
项目设置-编辑器-纹理导入-虚拟纹理-自动虚拟纹理大小 : 10000 如果导入的纹理大于等于该值,将会作为虚拟纹理导入。 所以需要一个极大的值。
重启编辑器。
进入光照模式,场景将全黑。
https://docs.unrealengine.com/5.3/zh-CN/directional-lights-in-unreal-engine/ 非常具有方向性。用于模拟阳光月光
拖入 定向光源
视觉效果
此时物体不能被照亮:
拖入 光源-天空光 天空光 可照亮物体。
拖入 视觉效果-指数级高度雾 https://docs.unrealengine.com/5.3/zh-CN/exponential-height-fog-in-unreal-engine/
https://docs.unrealengine.com/5.3/zh-CN/post-process-effects-in-unreal-engine/
拖入 视觉效果-后期处理体积 默认只影响立方体内部空间
后期处理体积-细节面板-后期处理体积设置-无限范围(未指定)-启用 后期处理体积将影响整个关卡。
后期处理体积-细节面板-镜头-exposure-计量模式[亮度计算法]-手动 【默认场景变黑】 后期处理体积-细节面板-镜头-exposure-曝光补偿-10.8 这将增加场景亮度
新建空白关卡,添加地形。 编辑器-窗口-环境光照混合器 依次点击按钮创建对应光照。点击后显示设置面板
构建光照:构建-仅构建光照
窗口-世界场景设置 世界场景设置-细节面板-Lightmass-高级-强制无预计算光照-启用 这使用Lumen光照。 是否强制不创建光照贴图和其他预计算光照,即使引擎认为其是必要项时也同样如此。此方法适用于改良全动态光影关卡中的迭代。注意:启用此项后,以通常方式预计算的光影交互将丢失
将定向光-变换-移动性-改为 固定 或 可移动。 否则 会出现光照警告。
手动添加的其他光源同样需要设置。环境光照混合器创建的光源无需设置。
进入地形模式
使用噪点纹理生成高度信息 噪点-不刷设置-笔刷尺寸-设置为极大值 可以覆盖全部关卡
进入选项模式 下载草地材质
如果纹理上右VT标志,表明是虚拟纹理,使用后会非常模糊。需要修复。 1-可以禁用虚拟纹理。耗时。
2-手动设置为非虚拟纹理:we纹理-虚拟纹理流送-关闭
批量设置纹理属性:
多选纹理-右键-资产操作-编辑属性矩阵中的选择 选择多行编辑
新建 主材质 M_AutoLandscape,基于主材质新建 材质实例 MI_AutoLandscape 地形使用 MI_AutoLandscape
打开 M_AutoLandscape
添加 Texture Sample,使用基础颜色纹理
将 之前 主材质 M_Master的基础颜色部分节点复制到 M_AutoLandscape 替换Texture Sample纹理。
地形材质通常有多层,例如9层。 每层的基础颜色纹理都需要使用如上的节点的参数调节。 这将使主材质 M_AutoLandscape 变得混乱。 所以需要材质函数。
https://docs.unrealengine.com/5.3/zh-CN/material-functions-in-unreal-engine/
材质函数相当于材质的"片段",允许你保存为模块并在多个材质中复用。
材质函数 允许你将材质图表的一部分打包成可复用的资产,分享到一个函数库中,并轻松插入到其他材质中。它们旨在让你能够快速访问一些常用材质网络,实现简化材质创建。材质函数允许你将复杂的材质逻辑抽象成一个节点,使美术师更容易创建材质。
材质函数的另一个好处是,只要编辑单个函数,就会影响所有使用该函数的材质。因此,如果你需要修复某个材质函数,你不必再去修改其他使用该函数的许多个材质。
例如 材质函数 FlattenNormal
右键-材质-材质函数 名称为 MF_ 开头:MF_LandscapeMaterialProcess
打开 MF_LandscapeMaterialProcess
添加 材质表达式函数输入 节点 FunctionInput
输入命名:BaseColorTexture
输入类型:函数输入2D纹理
BaseColorTexture输入需要纹理对象数据。 Texture Sample RGB 输出 常量3数据。 两者不兼容。不能使用 Texture Sample。
为 BaseColorTexture添加一个预览纹理对象 Texture Object.
将 MF_LandscapeMaterialProcess 直接拖入 M_AutoLandscape 图表中
每次更新 MF_LandscapeMaterialProcess 后,需删除,重新拖入MF_LandscapeMaterialProcess 到用到的材质中。
需要使用 Texture Object Parameter 将 Texture Sample 转为 Texture Object。使基础颜色纹理可输入给 MF_LandscapeMaterialProcess。 添加 Texture Object Parameter 节点:BaseColorTexture
使 MF_LandscapeMaterialProcess 输出RGB信息而非纹理对象
添加节点 SetMaterialAttributes ,单独设置材质属性 材质属性-属性设置类型-添加多列
将 Texture2D输出给 Texture Sample 的 Tex 节点。然后将 Texture Sample RGB 输出给 SetMaterialAttributes 的 新添加的 基础颜色 节点。
总输出改名为 :ProcessLandscapeMaterial
在 Texture Sample 和 SetMaterialAttributes 之间处理基础颜色参数。
打开 M_AutoLandscape, 选中主材质输出-细节面板-材质-使用材质属性 启用
此时 MF_LandscapeMaterialProcess 输出 兼容 主材质输入类型 将 MF_LandscapeMaterialProcess 输入给 主材质的 材质属性
MI_AutoLandscape 材质实例可配置基础颜色纹理 MI_AutoLandscape -BaseColorTexture 使用下载的草地纹理
MF_LandscapeMaterialProcess 可以复制多个,为其他层的材质所使用。
而不需要复制以上的复杂参数节点。
多输入材质函数
将 M_AutoLandscape 中控制基础颜色的参数节点复制到 MF_LandscapeMaterialProcess
添加 添加 材质表达式函数输入 节点 FunctionInput, 输入类型 :函数输入标量 用以控制基础颜色亮度 【常量1类型】
编辑器-构建-仅生成物理材质 【生成地形物理材质】
继续复制M_AutoLandscape的饱和度节点
input (Texture 2d)-材质表达式-排序优先级-5
打开 M_AutoLandscape 新建 constant3Vector/3 float 重命名:BaseColorAdjustment 分别命名RGB通道为 Brightness,Saturation,Contrast alpha 通道命名:N/A RGB通道默认值均为1.
MF_LandscapeMaterialProcess M_AutoLandscape
按距离混合不同纹理 blend different texture by distance
深度材质表达式 https://docs.unrealengine.com/5.3/zh-CN/depth-material-expressions-in-unreal-engine/ DepthFade(深度消退)表达式用来隐藏半透明对象与不透明对象相交时出现的不美观接缝。
当前地形材质UV平铺过于规则
CameraDepthFade 节点输出mask值,介于0-1.
新建材质 M_TilingBreak 新建 M_TilingBreak 材质实例 MI_TilingBreak
添加节点 CameraDepthFade 参数:消退距离,消退偏移,用于顶点着色器 Creates a gradient of O near the camera towhite at Fade Length. Useful for preventingparticles from camera clipping.0 在“淡入淡出长度”(Fade Length)下,在摄影机附近创建一个渐变为0的白色。有助于防止摄影机剪裁粒子。0
添加参数 FadeFallOff 消退过渡长度[由黑色到白色的过渡长度,越小越锐利,分界越明显] ,默认500 添加参数 FadeStartDistance 消退开始距离[距离相机],默认500
地形使用 材质实例 MI_TilingBreak
黑色表示材质完全存在,白色表示材质完全消失,中间过渡表示材质部分存在。 FadeStartDistance 消退开始距离[距离相机],增大后黑色增多。 FadeFallOff 消退过渡长度,过渡处,黑色完全变白的长度。 黑色在距离相机500单位处开始消退,再经过500单位才会完全消退变白。
将 CameraDepthFade 的输出赋值给 Lerp的Alpha节点,即可控制分解材质的UV平铺,打破材质平铺的规律性。 当值为黑色时,纹理会很小,而当值为是白色的,会有一个更大的纹理。
M_TilingBreak
将一种纹理分别复制两份,近处纹理,远处纹理。 进处纹理UV平铺较少,材质更大,默认0.3. 远处纹理UV平铺较大材质较密,默认1.
使用 CameraDepthFade 控制两个纹理距离相机的距离,以及纹理之间的过渡。
近处材质密集,远处材质稀疏,之间有过渡。 近距离时,材质UV不在规则平铺,但在高出依然会规则平铺。
打破纹理瓷砖排列的一种有效方法 an effient way to break up tiling
MF_TextureBombing_Landscape 纹理轰炸材质函数,使用以下纹理来分解纹理的平铺。
添加 纹理轰炸 节点 Texture_Bombing 该纹理非常丰富,建议使用简化版的自制 TextureCellBombing 对于报错节点使用自带的纹理
添加 Texture Object 节点 连接 Texture :基础颜色纹理 添加 Landscape Layer Coords 节点 连接 UVs 控制UV 【材质函数不使用TextureCoord,TextureCoord在使用材质函数的地方使用】 添加 常数1 节点 CellBombingTextureScale 连接 CellBombingTextureScale :控制UV缩放比例,默认1 添加 常数1 节点 TextureScale 连接 InputTextureScale :控制纹理缩放,默认1 添加 常数1 节点 RandomOffsetVariation 连接 RandomOffsetVariation 随机偏移变化,默认1 添加 StaticBoolParameter 节点 UseRotationVariation 连接 UseRotationVariation 旋转变化,默认1 添加 常数1 节点 RandomRotationVariation 连接 RandomRotationVariation 旋转变化,默认1 添加 StaticBoolParameter 节点 IsNormalMap 连接 IsNormalMap 旋转变化,只在用于法线贴图是为true,其余纹理不需要
添加 StaticSwitchParameter 节点 UseTextureCellBombing ,使用距离混合或纹理轰炸来打破纹理瓷砖式平铺。
纹理轰炸 效果
纹理轰炸效果应在基础颜色亮度等各种调节参数之前生效 点击节点右上角箭头可折叠节点。
对于函数输入functionInput (StaticBool)类型,需要一个预览输入节点 StaticBool,防止报错。
添加常量1节点 CellBombingTextureScale -默认值0.1 -分组 03-TilingBreak
添加常量4节点 GrassLayer_TilingAdjustment-分组 04-GrassLayer
3通道默认值都为1 R:InputTextureScale G:RandomOffsetVariation B:RandomRotationVariation A:N/A
添加 StaticBoolParameter 节点 GrassLayer_UseRotationVariation -分组 04-GrassLayer
其他参数-分组 04-GrassLayer,参数名称全部添加前缀 GrassLayer_
地形使用材质实例 MI_AutoLandscape
拆散瓷砖式平铺的收尾工作 finishing touches for breaking up tiling
该蓝图所在材质位置:新手包 starterContent-materials-M_Metal_Gold
粘贴到 材质函数 MF_LandscapeMaterialProcess
将宏观变化节点与基础颜色相乘即可。
缓存基础颜色 CachedBaseColorOutput
缓存hong宏观变化 CachedMacroVariationOutput
相乘
更好的效果
将用到的纹理 T_MacroVariation 放到函数同文件夹下 新建材质函数 MF_MacroVariation 复制宏观变化节点 使用文件夹下的纹理 T_MacroVariation。
添加开关 functionInput bool类型 :UseMacroVariation
GrassLayer_UseMacroVariation
MI_AutoLandscape
摆脱塑料外观 get rid of the plastic look
选择 SetMaterialAttributes 节点,添加属性 Specular
缓存基础颜色RGB: CachedBaseColorRGBOutput
高光度需要常量1数据。 使用CachedBaseColorRGBOutput红色通道。绿色也可以。限制为 0-0.5。 添加bool类型函数参数: UseBaseColorAsSpecular 添加开关 高光度缓存为 CachedSpecularOutput
打开 M_AutoLandscape,添加高光开关 GrassLayer_UseBaseColorAsSpecular
MI_AutoLandscape
添加函数参数,Texture2D类型:NormalTextureInput 为 NormalTextureInput 添加 TextureObject 输入,使用系统占位法线纹理 DefaultNormal
对法线贴图使用纹理轰炸 MF_TextureBombing_Landscape 缓存 LandscapeCoords :CachedLandscapeCoordinnate
缓存 CellBombingTextureScale :CachedCellBombingTextureScale 用以颜色,法线的共用。
缓存 TextureScale : CachedTextureScale
缓存 RandomOffsetVariation: CachedRandomOffsetVariation
缓存 UseRotationVariation: CachedUseRotationVariation
缓存 RandomRotationVariation:CachedRandomRotationVariation
添加 StaticBool 函数参数,默认true,输出至 IsNormalMap
添加 mask 遮罩 MF_TextureBombing_Landscape -RGB :RG通道 xy ,使用函数参数常量1:NormalStrength 控制。 添加 mask 遮罩 MF_TextureBombing_Landscape -RGB :B通道 z
NormalStrength :法线强度
正常强度下,你的X、Y值越高,B值就会越高。 这就是你如何控制法线强度的方法。
缓存法线 CachedNormalOutput
为 SetMaterialAttributes 添加 Normal 属性
添加 TextureObject [使用默认占位法线纹理 DefaultNormal] 节点 GrassLayer_NormalTexture 至 NormalTextureInput。
添加 常量1 节点 GrassLayer_NormalStrength 【默认值 1】至 NormalStrength
GrassLayer_NormalTexture 分配草材质法线贴图纹理
Ambient Occulusion and Roughness
材质草自带封装纹理 ORD R:环境光遮挡 G:粗糙度 B:位移 【虚幻5尚未支持】
为 SetMaterialAttributes 添加 AmbientOcclus, Roughness 属性
添加函数参数,Texture2D类型:ORDTextureInput 添加 Texture Object ,使用纹理 T_DefaultMaskTexture
打开材质草的ORD纹理 其压缩-压缩设置-遮罩(无sRGB),所以MF_LandscapeMaterialProcess ORD也需要有相应的mask设置。 所以 Texture Object 必须使用纹理 T_DefaultMaskTexture。
复制法线的大部分节点 纹理轰炸函数输出RGB:分别使用mask R,mask G。 mask R:使用函数参数 常量1 控制:AOStrength 缓存为 CachedAOOutput
mask G:使用函数参数 常量1 控制:MinRoughness,MaxRoughness 限制粗糙度。 缓存为 CachedRoughnessOutput
添加 TextureObjectParamater :GrassLayer_ORDTexture,使用纹理 T_DefaultMaskTexture 。连接至 ORDtextureInput。
添加 constant4Vector :GrassLayer_DetailedAdjustment 详细调整其他参数。
R:NormalStrength 默认值1 G:AOStrength 默认值1 B:MinRoughness 默认值0 A:MaxRoughness 默认值0.8
删除之前的 GrassLayer_NormalStrength 参数,由R通道替代。
GrassLayer_ORDTexture 分配材质草的ORD纹理
在原高光度节点添加另一种高光控制 原节点:
添加 常量1函数参数 UseBaseColorAsSpecularAmount 添加 Lerp
GrassLayer_BaseAdjustment 的 A通道 重命名:BaseColorAsSpecularAmount 连接至 UseBaseColorAsSpecularAmount
删除基础颜色的宏观控制部分节点。【将在M_AutoLandscape统一控制宏观变化】 将以下节点删除
总输出的基础颜色节点,由 CachedBaseColorMacroVariationOutput 改为 CachedBaseColorOutput
宏观控制 应在全部层上统一生效,而非单个层分别调节。
使用 GetMaterialAttributes 获取 MF_LandscapeMaterialProcess 的输出材质,以单独设置。
选择 GetMaterialAttributes-材质属性-属性获取类型 添加一个属性 BaseColor
拖入材质函数 MF_MacroVariation ,但直接输出给 结果将无法修改属性。 所以需要添加另一个 SetMaterialAttributes 。 选择 SetMaterialAttributes,添加属性 BaseColor。
这将可以调节基础颜色参数。
缓存获取的未经过宏观变化的基础颜色 CachedDefaultBaseColorOutput
添加宏观变化强度参数 MacroVariationStrength 【03-TilingBreak】 添加宏观变化开关 UseMacroVariation 【03-TilingBreak】 将获取的基础颜色与宏观变化相乘,然后缓存为 CachedBaseColorOutput
删除 GrassLayer_UseMacroVariation 参数。 缓存 草地层 MF_LandscapeMaterialProcess 输出:CachedGrassLayer
复制 MF_LandscapeMaterialProcess 处理土壤层
缓存 草地层的 CellBombingTextureScale 为 CachedCellBombTextureScale
复制草地层的 MF_LandscapeMaterialProcess 和所有输入参数。 缓存参数除外,缓存参数不能复制,复制将会生成新的缓存参数。两者不同。
土壤层 MF_LandscapeMaterialProcess 使用 CachedCellBombTextureScale
分组名称使用 05-SoilLayer
参数名称使用 SoilLayer_
前缀
缓存 土壤层 MF_LandscapeMaterialProcess 输出:CachedSoilLayer
选择 LandscapeLayerBlend, 图层-添加层 AutoLandscapeMaterial [自动应用到地形] 图层-添加层 GrassMaterial 图层-添加层 SoilMaterial 图层名称不可有空格,否则层不可见。
此时材质将变黑,此时需要创建图层信息。
进入地形模式-绘制-绘制
如果默认不显示任何材质层,bug.
需要 打开材质实例 MI_AutoLandscape,将草地纹理重制,然后重新设置纹理。
点击图层右侧加号-权重混合层(法线)- 可保存到默认创建的目录 这将直接绘制好默认层材质。草地层为默认材质层。
依次为每个层 创建图层信息。
选择 土壤层即可绘制土壤材质到地形上
打开 MF_MacroVariation 选择 Texture Sample-材质表达式纹理采样-采样器源-改为 共享:包裹 设置全部3个Texture Sample。
如果不共享,最多只能平移三层。
ALT+左键 旋转地形。 中键 缩放地形。
添加 山 Mountain 节点
Bulky:启用 使山脉隆起。
Height:山脉高度。
空格键使地形居中显示。
从 Mountain 输出节点 拖拽-输入 Fold -选择 Fold节点 添加
点击节点,将预览该使用该节点效果后的地形。
默认为0.5K分辨率操作高分辨率可显示更多细节。性能消耗genggeng多。
downcutting-downcutting 水流侵蚀
可以添加多个 Erosion,多次应用侵蚀效果
启用后所有效果可及时渲染。
混合模式
ratio 决定第二个地形的比例。
即使选择其他节点,也只预览固定的节点。 调整其他节点,预览对pin节点产生的效果。
使用Max混合模式,使最高点保留。
默认无边框,不适合导入虚幻。 增加 Zero Borders -margin -4 增加边界
点击 apply changes 应用效果。
Wizard-右键-mark for export [标记为导出该节点的数据]
Y轴为地形坡度。可直接用于虚幻。 min-50 max-80 Y轴为50-80度之间的都是坡度。
Slope-右键-mark for export [标记为导出该节点的数据]坡度数据也导出。黄点标注。
选择 格式 Slope-ALL-png Wizard-Exporting,Output,Flow-png
defintion-resolution-1009 [虚幻专用分辨率] options-Range-Raw [倒是虚幻避免伪影] 选择构建目录
start build -开始导出 导出的各信息文件
Slope.png 坡度图 Wizard.png 高度图 Wizard-Flow.png 模拟水流流动
删除默认地形。只保留光照。 删除地形图层,强制删除。
进入 地形模式-管理-从文件导入 高度图文件 按钮-选择 Wizard.png 点击 导入 按钮
默认地形太低,在选项模式将其拉高。 为地形分配材质实例 MI_AutoLandscape
创建图层信息 地形模式-绘制-依次在各材质层点击加号【权重混合层(法线)】-创建图层信息
地形模式-管理-导入
为土壤层导入水流信息 勾选 土壤层-再选择 Wizard-Flow.png 点击 导入,将显示水流沟壑
地形模式-雕刻-平滑
下载 cliff 悬崖材质
打开 M_AutoLandscape 选择草地层全部节点-右键-折叠节点 重命名-GrassLayer 双击可进入节点内部
复制土壤层节点,修改参数为坡度层。
前缀:SlopePayer_
分组:06-SlopeLayer [先将分组名清空,在粘贴]
缓存坡度层:CachedSlopeLayer
折叠土壤层:SoilLayer 折叠坡度曾:SlopeLayer
为 坡度层分配纹理
重置地形材质为空。重新选择材质实例 MI_AutoLandscape。防止新材质层不生效。
进入地形模式-绘制-绘制-点击坡度层加号-创建图层信息-权重混合层(法线)
进入地形模式-管理-导入-勾选 坡度层 ,选择 Slope.png 点击 导入
山顶不应该长草。 在山峰生成白色遮罩。山峰以下生成黑色遮罩。
自动材质通过mask遮罩生成材质。白色区域1表示生成,黑色区域0表示不生成。
打开 M_AutoLandscape 添加常量1参数:SlopeLayer_CellBombTextureScale 替换 坡度层的 CachedCellBombTextureScale 这可以单独控制坡度层纹理轰炸缩放。不使用全局参数。
打开 MI_AutoLandscape SlopeLayer_CellBombTextureScale-0.01 SlopeLayer_TilingAdjustment-InputTextureScale-0.1 此时坡度纹理变大恢复正常
要创建坡度蒙版,需要处理不同的法线。
存在不同类型的法线。
通过顶点间向量的叉乘求取的法线称为面法线(face normal). 垂直于表面。长度很短。主要提供方向信息。 每个面法线都可以告诉我们该面朝哪个方向。
三角形每个顶点附带的法线信息称为顶点法线(vertex normal) 顶点法线中的线不是来自面,而是来自顶点。 顶点法线可以告诉我们该顶点面向哪个方向。 通过使用顶点法线可以提供的方向信息,我们可以设法获取坡度。
https://docs.unrealengine.com/5.3/zh-CN/coordinates-material-expressions-in-unreal-engine/
VertexNormalWS 表达式输出世界场景空间顶点法线。它只能用于在顶点着色器中执行的材质输入,例如WorldPositionOffset。该表达式对于设置网格体增大或缩小很有用。请注意,沿法线偏移位置会导致几何图形沿UV缝隙拆分。 获取虚幻中的顶点法线:VertexNormalWS 可以使用此节点来获取使用此材质的任何匹配的顶点法线。
Dot节点 输出结果将告诉我们两个向量的面方向有多相似。
顶点法线,有方向信息,所以是向量。是长度为一的向量。 向量,通过使用乘积,它可以告诉我们两个向量的方向有多么不同。返回一个浮点数。 如果这两个向量平行,则该值将为 1。 如果它们垂直,则该值将为0。 如果它们完全相反。该值将为负值. 这就是我们获得地形坡度的方法。
假设我使用顶点法线与另一个向量点积运算。 该向量的 x 轴为零,y 轴为零,z 轴为 1。长度为1。 将这个向量与顶点法线进行比较。
坡度即两个向量之间的角度。是一些灰度值。范围在0和1之间。
新建主材质 M_SlopeMask
添加VertexNormalWS节点
添加 constant3Vector/3 float,值为 0,0,1 表示Z轴1。
添加 Dot 点积,输出至基础颜色。【将输入的顶点法线与0,0,1,比较】 获取所有的顶点法线,与向量0,0,1比较,即垂直向上的为1,全白。
基于 M_SlopeMask 新建材质实例 MI_SlopeMask
地形使用材质 MI_SlopeMask 平坦的地方,顶点法线接近0,0,1.为白色1。
添加节点 Power 提高对比度以增加灰度值。 添加 constant1 坡度遮罩强度 SlopeMaskStrength 默认1
提高 SlopeMaskStrength 至50,对比度增大,只有顶点法线接近0,0,1的水平面才为纯白色1.
我们希望斜坡上是白色值1,平坦的地面为黑色值0。【坡度值】。所以需要反转该值。并且限制在0-1.
添加 Saturate 限制:0-1。
添加 CheapContrast 调整遮罩边缘的锐度。
添加 constant 1: SlopeMaskSharpness 坡度遮罩明锐度。默认1。
添加 1- 反转值,使水平面为黑色,垂直面【斜坡】为白色。负值白色已过滤。
坡度遮罩锐度0.1。 坡度遮罩强度1。
地形材质使用材质实例 MI_AutoLandscape
将草地层与土壤层一起作为默认材质层。
BlendMaterialAttributes 混合2各材质层; 草地层与土壤层输入A,B节点。 坡度遮罩输入Alpha节点。控制2种材质的比例。
新建 MF_SlopeBlend 坡度混合材质函数 总输出为:SlopeBlendedMaterial
拷贝 M_SlopeMask 的全部节点,作为 坡度遮罩,输入至 BlendMaterialAttributes的Alpha节点 Alpha =0,使用A。表示地面。草地材质的平面。 Alpha=1,使用B。表示斜坡。土壤材质的山坡。
添加 materialAttributes 函数输入材质属性:BaseMaterial 赋值给 A.
添加 materialAttributes 函数输入材质属性:SlopeMaterial 赋值给 B.
添加 函数输入标量 :SlopeMaskStrength 控制坡度遮罩强度,越小,坡度材质越少【土壤层】。 添加 函数输入标量 :SlopeMaskSharpness 控制坡度遮罩锐度,越小,材质过度越柔和。 替换之前节点的2个参数。
将材质函数 MF_SlopeBlend 拖入M_AutoLandscape
缓存 MF_SlopeBlend的输出为 CachedAutoLandscapeMaterial landscape Layer Blend 默认层使用 CachedAutoLandscapeMaterial
MF_SlopeBlend - BaseMaterial : 草地层
MF_SlopeBlend - SlopeMaterial : 土壤层
MF_SlopeBlend - SlopeMaskStrength: constant1 - SlopeMaskStrength 默认1 -分组:01-SlopeBlend
MF_SlopeBlend - SlopeMaskSharpness: constant1 - SlopeMaskSharpness 默认0.5 -分组:01-SlopeBlend
地形默认拥有草地层和土壤层。土壤层仅存在于陡峭斜坡悬崖上。
过渡区域的混合材质 blend material for transitioning areas 当前草地与土壤之间的缺少过度材质
继续使用 MF_SlopeBlend 混合 草地与土壤层 添加constant 1 参数 TransitionSlopeMaskStrength -坡度遮罩过渡强度 默认1 添加constant 1 参数 TransitionSlopeMaskEdgeSharpness -坡度遮罩过渡边缘锐度 默认1
MF_SlopeBlend - BaseMaterial : 草地层
MF_SlopeBlend - SlopeMaterial : 土壤层
MF_SlopeBlend - SlopeMaskStrength: constant1 - TransitionSlopeMaskStrength -坡度遮罩过渡强度 默认1 -分组:01-SlopeBlend
MF_SlopeBlend - SlopeMaskSharpness: constant1 - TransitionSlopeMaskEdgeSharpness 默认1 -分组:01-SlopeBlend
为其添加开关 UseTransitionSlopeBlend 分组:01-SlopeBlend 过渡混合材质 UseTransitionSlopeBlend 输出至最终的 MF_SlopeBlend 混合材质。
岩石土壤更明显,过渡柔和。
避免锐角拉伸 avoid streching in sharp angles
https://zhuanlan.zhihu.com/p/623046123
Triplanar projection是一种基于表面法线的纹理投影技术,它可以在表面的三个平面方向上使用三个2D纹理来进行投影,从而创建出更加真实和自然的纹理映射效果。该技术可以避免纹理拉伸的效果,常用于拥有不规则与复杂表面物体的材质。
当前山峰岩石材质存在纹理拉伸问题:
左:拉伸 ,右:正常
WorldAlignedTexture 的修改加强版。 处理颜色纹理
MF_TriplanarProjection 材质函数与MF_TriplanarProjection_Normal 材质函数文件: 024 TriplanarProjection.zip
处理法线纹理
新建 M_TriplanarProjection 主材质 基于 M_TriplanarProjection 新建 MI_TriplanarProjection 材质实例 打开 M_TriplanarProjection 拖入 材质函数 MF_TriplanarProjection
添加节点 TextureObject ,使用纹理 S_WindDirectional 添加 constant 1 参数:TextureBlendEdgeSharpness 默认1 添加 constant 1 参数:TextureScale 默认1
线性投影:相同的纹理被投影三次。
TextureBlendEdgeSharpness 改为 15: 现在,把同一个纹理从x轴、y轴和Z轴共投影三次,这就是避免拉伸的方法。
普通投影:
添加开关控制 UseTriplanar 三平面投影与普通投影
添加一个球体,使用材质 MI_TriplanarProjection
该纹理仅从上到下投影一次,顶部发生了一些奇怪的拉伸。
这在平坦表面没有影响,但在斜坡,山峰处会拉伸纹理。因为斜坡在水平方向仅被投影一次。 但在x长度一样时,斜面比平面的表面积更大,y,z被拉长,导致纹理也被拉长。 在一个坐标相同时,斜面的其他坐标比平面更长。 所以其他坐标需要多次投影。
apply triplanar to landscape 使用 三平面投影 替代 纹理轰炸 。
不修改原自动地形材质函数。 拷贝 材质函数 MF_LandscapeMaterialProcess 为 MF_Triplanar_LandscapeMaterialProcess 打开 MF_Triplanar_LandscapeMaterialProcess 使用 三平面投影 MF_TriplanarProjection 替代 纹理轰炸 MF_TextureBombing_Landscape 法线部分使用 MF_TriplanarProjection_Normal 替代。
保留 函数参数 CellBombingTextureScale 纹理轰炸缩放:重命名为-TriplanarEdgeBlendSharpness 对应缓存 CachedCellBombingTextureScale :重命名为- CachedTriplanarEdgeBlendSharpness
保留 函数参数 TextureScale 纹理缩放 :重命名为-TriplanarTextureScale 对应缓存 CachedTextureScale 重命名为-CachedTriplanarTextureScale 删除多余的函数参数
使用 MF_TriplanarProjection_Normal 替代 纹理轰炸 MF_TextureBombing_Landscape
同基础颜色
在 SlopeLayer 部分,拖入 MF_Triplanar_LandscapeMaterialProcess 为 MF_Triplanar_LandscapeMaterialProcess 添加参数: 添加 constant1 参数 TriplanarEdgeBlendSharpness 默认0,分组:06-SlopeLayer 添加 constant1 参数 TriplanarTextureScale 默认1,分组:06-SlopeLayer
拷贝 MF_LandscapeMaterialProcess 的输入参数,连接至 MF_Triplanar_LandscapeMaterialProcess 。 只拷贝需要的参数。
添加开关 UseTriplanar ,切换 普通投影 MF_LandscapeMaterialProcess 和 三平面投影 MF_Triplanar_LandscapeMaterialProcess 分组 :06-SlopeLayer 。优先级 :-1
开启三平面投影
调整UV平铺: TriplanarEdgeBlendSharpness :10 TriplanarTextureScale:0.02 山峰斜坡不再拉伸。
因为投影了3次,比普通投影1次更加消耗性能。 所以只将 三平面投影 应用在 主材质 M_AutoLandscape 的 SlopeLayer 坡度层上。 山峰斜面由坡度层生成控制。
解决办法:运行时虚拟纹理
use height to blend materials 使用高度值混合材质,为山峰添加雪材质层。使雪材质层只存在于山顶位置。
使用顶点法线来获取高度遮罩。
绝对世界位置 Absolute World Position: 该节点将输出使用该材质的对象的每个像素的位置数据
WorldPosition(全局位置)表达式输出当前像素在全局空间中的位置xyz。要实现可视化,只需将输出连接到"自发光"(Emissive):
World Position Example
常见用法是确定从摄像机到像素的径向距离,而不是像 PixelDepth(像素深度)那样确定正交距离。WorldPosition(全局位置)也可用作纹理坐标,并让不相关的网格在它们彼此邻近时进行纹理坐标匹配。以下是使用 WorldPosition.xy 对纹理进行二维贴图的基本示例:
Planar projection WS
创建 示例材质 M_HeightMask,材质实例 MI_HeightMask 打开 M_HeightMask 添加节点 Absolute World Position 【通过搜索 World Position】
通过组件遮罩B通道,新版直接使用Z值,当前只使用 Absolute World Position 输出的Z位置。 预览窗口中的球体的中心为世界原点,所以球体上半部分的Z坐标值大于0,为正值,显示为白色,下半部分负值显示为黑色。
在关卡添加一个较高的立方体测试材质 MI_HeightMask
查看 立方体的世界坐标 21018,-5096,1695。 立方体自身的原点在立方体中心。
当前Z值为正数,立方体显示为白色。 要使立方体出现黑色,需要将Absolute World Position输出的Z值 减去 大于(立方体的世界位置Z值 - 立方体高度的一半)的值。
打开 M_HeightMask 添加constant 1 参数:HeightMaskStartHeight 遮罩的开始高度
调整 HeightMaskStartHeight 值为立方体的世界位置Z坐标:1695.506733 【即立方体自身中心点Z】 立方体中心点以上为正值白色,中心点以下为负值黑色。【中心点附近会有1到0到-1的小段灰色位置】 这就是创建高度遮罩的原理。
https://docs.unrealengine.com/5.3/zh-CN/math-material-expressions-in-unreal-engine/#divide Divide 表达式取两个输入,将第一个输入除以第二个输入,并输出值。
如果使用多个通道传递值,每个通道将单独相除。例如,如果将RGB颜色值传递给每个输入,则将第一个输入的R通道除以第二个输入的R通道中,结果存储在输出的R通道中;将第一个输入的G通道除以第二个输入的G通道中,结果存储在输出的G通道中,以此类推。
两个输入必须有相同数量的值,但其中一个值是单个浮点值时例外。在这种情况下,将多通道输入的每个通道除以单个浮点值,并将结果存储在输出值的单独通道中。
如果除数在任何通道内都介于0和0.00001之间,则将其提升至0.00001。如果除数在任何通道内都介于0和-0.00001之间,则将其降低至-0.00001。这避免了出现除以零的错误可能性。但是,这也意味着通道的输出值可能非常大。
属性 | 说明 |
---|---|
常量A(Const A) | 接受要被除的值,即被除数。仅在未使用A输出时使用。 |
常量B(Const B) | 接受要除以的值,即除数。仅在未使用B输出时使用。 |
输入 | |
A | 接受要被除的值,即被除数。 |
B | 接受要除以的值,即除数。 |
示例:A=(1.0)且B=(5.0),相除得(0.2),显示为深灰色。
打开 M_HeightMask 添加constant 1 参数 HeightMaskFallOff 默认1 [通过Absolute World Position的Z的除,使Z值稀疏,1至-1占比增大,灰色区域变大] 添加节点 Divide
调节 HeightMaskFallOff =100. 中心灰色区域变多,这类似于 CameraDepthFade 相机深度消退 函数。
准备将学材质层应用到白色部分。 HeightMaskStartHeight 调节雪材质生效的高度。 HeightMaskFallOff 调节雪材质与其他材质的过渡区域大小。
使用高度值混合雪材质到默认材质中
下载雪材质snow
打开 M_AutoLandscape
进入 SlopeLayer 层,拷贝下半部分节点
粘贴为新的层 折叠为 SnowLayer,
MFLandscapeMaterialProcess 输出缓存为 CachedSnowLayer
参数前缀使用 `Snowlayer 分组为
07-SnowLayer`
在 混合材质部分 Landscape Layer Blend 节点,增加材质层 SnowMaterial 使用 CachedSnowLayer 材质
打开 MI_AutoLandscape 配置 SnowLayer 的雪材质纹理
重置地形材质为空,再次使用材质实例 MI_AutoLandscape。 防止地形编辑不显示雪材质层。
进入地形模式-绘制-绘制 dian'ji点击雪材质层右侧加号添加地形信息 权重混合层(法线)
创建 材质函数 MF_HeightBlend 总输出为 HeightMask 从示例主材质 M_HeightMask 拷贝所有节点到 MF_HeightBlend
替换普通参数为函数参数, 使用Saturate 将结果限制在0-1
打开 M_AutoLandscape 添加节点 BlendMaterialAttributes
拖入材质函数 MF_HeightBlend
BlendMaterialAttributes - Alpha : MF_HeightBlend BlendMaterialAttributes - A : MF_SlopeBlend BlendMaterialAttributes - B : CachedSnowLayer
添加 constant 1 参数 :SnowMaskStartHeight 默认0,分组 02-HeightBlend 添加 constant 1 参数 :SnowMaskFallOff 默认1000,分组 02-HeightBlend 均连接至 MF_HeightBlend
最终雪混合节点输出至 地形默认材质层 CachedAutoLandscapeMaterial
调节参数使雪材质只在山顶出现。 此时雪材质与其他材质的分界线明显,需要修复。
为边缘提供随机性 provide randomness to the edge
打开 M_HeightMask
添加节点 Subtract 到节点末尾,进一步调节高度遮罩的高度值。 通过减去一个噪声纹理,使减去的高度不固定,随机化。
M_SlopeMask 坡度遮罩 材质已经具由这种随机化。 M_SlopeMask 具由参数 坡度边缘锐利度,坡度遮罩强度。 将 M_SlopeMask 材质全部节点拷贝至 M_HeightMask 其输出连接至 Subtract 的B节点。 现在即可调整 参数控制雪材质边缘。
调高 HeightMaskFallOff :3000 配合 SlopeMaskStrength: 3 降低锐度 SlopeMaskSharpness : 0.1
即可使雪材质边缘再3000单位的消退区域内不规则化。
不修改原高度混合材质函数。 拷贝 MF_HeightBlend ,新材质函数副本为 MF_HeightBlendSubtractSlope 打开 MF_HeightBlendSubtractSlope
将 M_SlopeMask 材质全部节点拷贝至 MF_HeightBlendSubtractSlope 替换 constant1 参数为 函数输入标量 SlopeMaskStrength 重命名为 EdgeAdjustmentMaskStrength 边缘细节遮罩强度 SlopeMaskSharpness 重命名为 EdgeAdjustmentMaskSharpness 边缘细节遮罩锐利度
添加节点 Subtract 输入至 Saturate 节点。
总输出重命名为 HeightBlendedMaterial
添加 参数 函数输入材质属性 :BaseMaterial 添加 参数 函数输入材质属性 :TopMaterial
添加 BlendMaterialAttributes 合并 BaseMaterial,TopMaterial Saturate 节点 输入至 HeightBlendedMaterial - Alpha.
BlendMaterialAttributes 输出至总输出
打开 M_AutoLandscape 将材质函数 MF_HeightBlendSubtractSlope 拖入雪混合部分。 替换材质函数 MF_HeightBlend
删除雪混合部分的 BlendMaterialAttributes
配置 MF_HeightBlendSubtractSlope: TopMaterial :CachedSnowLayer BaseMaterial : MF_SlopeBlend 的输出 SlopeBlendedMaterial HeightMaskStartHeight : SnowMaskStartHeight HeightMaskFallOff : SnowMaskFallOff EdgeAdjustmentMaskStrength :新建constant 1 参数 SnowEdgeAdjustmentStrength 默认1 ,分组 02-HeightBlend EdgeAdjustmentMaskSharpness :新建constant 1 参数 SnowEdgeAdjustmentMaskSharpness 默认1 ,分组 02-HeightBlend
MF_HeightBlendSubtractSlope 输出至 CachedAutoLandscapeMaterial 地形默认材质层
锐度0.5 强度 6
修复缩放问题 移动文件后,文件夹-右键-修复重定向器 修复。
土壤材质同意缩放为较小值。地面土壤材质会模糊。 但山峰使用了三平面投影不会模糊。导致只有地面的土壤模糊。 但缩放过大时,会导致山峰平铺。
斜坡处土壤岩石,由于缩放比例太大而模糊。
这是由于 06-Slopelayer : TriplanarTextureScale 为 0.02 过小导致, 将其改为 0.1.土壤岩石将不模糊。
但山峰岩石土壤材质会出现规则的瓷砖式UV平铺错误。
打开 M_AutoLandscape 进入 坡度层 SlopeLayer 部分修改
缓存 MF_Triplanar_LandscapeMaterialProcess 为 CachedTriplanarSlope
缓存 MF_LandscapeMaterialProcess 为 CachedTextureBombedSlope
添加 BlendMaterialAttributes BlendMaterialAttributes A : CachedTextureBombedSlope BlendMaterialAttributes B : CachedTriplanarSlope BlendMaterialAttributes Alpha : 拖入材质函数 MF_HeightBlend 的输出
添加 constant 4 参数:TriplanarAdjustment 分组 06-SlopeLayer TriplanarAdjustment R 名称 TriplanarStartHeight 默认0: 输入至 MF_HeightBlend :HeightMaskStartHeight TriplanarAdjustment G 名称 TriplanarMaskFallOff 默认 500: 输入至 MF_HeightBlend :HeightMaskFallOff TriplanarAdjustment B 名称 TriplanarEdgeBlendSharpness 默认15 缓存为 CachedEdgeBlendSharpness TriplanarAdjustment A 名称 TriplanarTextureScale 默认 0.02 缓存为 CachedTriplanarTextureScale
MF_Triplanar_LandscapeMaterialProcess 替换输入参数: TriplanarEdgeBlendSharpness :CachedEdgeBlendSharpness TriplanarTextureScale : CachedTriplanarTextureScale
BlendMaterialAttributes 输出至 UseTriplanar 的 True 节点 CachedTextureBombedSlope 输出至 UseTriplanar 的 False 节点
使用Lerp根据高度混合分别处理不同高度的材质缩放。
调节 06-SlopeLayer :TriplanarAdjustment
拷贝 02-HeightBlend 的 SnowMsakStartHeight 数值 雪存在的地方,
赋值给 06-SlopeLayer :TriplanarAdjustment :TriplanarStartHeight
在高处使用三平面投影。通过 TriplanarAdjustment 调整。
在低处使用纹理轰炸。通过 SlopeLayer_TilingAdjustment 调整。
地面岩石不再模糊
高处山峰不会拉伸和规则平铺
https://docs.unrealengine.com/5.3/zh-CN/runtime-virtual-texturing-in-unreal-engine/
运行时虚拟纹理 (RVT)在运行时使用GPU按需创建其纹素数据,工作方式与传统纹理映射类似。较大区域上的RVT缓存着色数据非常适用于使用贴花类材质的地形和适配地形的样条。
运行时虚拟纹理缓存,就是整个地形材质的材质结果。 它可以将所有材质数据缓存到纹理中。 之后我们可以通过自上而下的方法将该纹理重新应用到我们的地形上。
可以提高材质的性能,更具体地说,它可以提高复杂地形材质的性能。
查看场景的性能: 渲染场景,显示着色器复杂度 优化视图模式-着色器复杂度
红色表示一个非常糟糕的结果。场景性能很低。
但使用运行时虚拟纹理可以将着色器复杂性从红色变为绿色。
它还可以帮助我们将非地形Actor与地形融合在一起。 这块岩石目前正在与我们的地形材质混合。 岩石顶部的材质是它的原始材质,岩石底部的材质是地形材质。 之间有一个很好的过渡区域,显示这两种不同的材质相互融合。 而这只能通过运行时虚拟纹理来实现。
运行时虚拟纹理的缺点和限制是它不适用于动态事物。 例如,CameraDepthFade 相机深度消退。运行时虚拟纹理不适用于任何动态事物。 它不知道相机。也不知道时间 Time。 如果当前正在使用运行时虚拟纹理的材质进行动画,动画则不会工作。 例如使用 World Position Offset 制作的岩石浮动材质。
在项目设置中启用RVT支持 Enable RVT support in project settings 将材质数据输出到RVT Output material data to RVT 将RVTasset指定到地形 Assign RVTasset to landscape 指定RVTVolume体积 Specify RVTVolume 在地形材质中使用RVT数据 Use RVT data in landscape materia
编辑-项目设置-引擎-渲染-虚拟纹理-启用虚拟纹理支持
https://docs.unrealengine.com/5.3/zh-CN/vector-operation-material-expressions-in-unreal-engine/#transform Transform(变换) 材质表达式将三通道向量值从一种参考坐标系转换到另一种参考坐标系。
默认情况下,材质的所有着色器计算都在切线空间中完成。向量常量、摄像机向量和光线向量等在材质中使用之前,都会转换到切线空间。Transform表达式允许将这些向量从切线空间转换到全局空间、局部空间或视图空间坐标系。另外,它允许将全局空间和局部空间向量转换到任何其他参考坐标系。
当材质图表中选中了Transform节点时,细节面板中会显示以下属性:
属性 | 说明 |
---|---|
源(Source) | 指定要转换的向量的当前坐标系。这可以是以下其中一项:全局(World)、局部(Local)或切线(Tangent)。 |
目标(Destination) | 指定要将向量转换到的目标坐标系。这可以是以下其中一项:全局(World)、视图(View)、局部(Local)或切线(Tangent)。 |
Transform节点会对镜像 UV 加以考虑,例如,以使凸显仅影响人物的右侧边缘。
对于生成全局空间法线以便对立方体贴图进行取样,Transform节点非常有用。法线贴图可转换到全局空间。以下示例将法线从 切线空间 转换到 全局空间,以便对立方体贴图进行取样。
将法线转换到视图空间可用于创建边缘效果。这可通过使用网格法线生成纹理坐标(通常称为"球面映射")来实现。使用这种方法,正对着摄像机的法线将映射到纹理坐标的中心,而垂直于摄像机的法线将映射到纹理坐标的边缘。例如,你可以使用Transform表达式来映射一张准星纹理,让它始终面对摄像机。 值为 (0,0,1) 的 Constant3Vector(常量 3 向量)输送到设置了 TRANSFORM_View 的 Transform,接着将结果传递到 ComponentMask(分量蒙版)(仅传递 R 和 G)。因为 Transform将输出 -1 到 1 范围内的值,我们必须使这些值偏离以使其处于 0-1 范围内。实现方法是乘以 0.5 再加上 0.5。然后,直接将结果连接到纹理的"坐标"(Coordinates)。 围绕静态网格体旋转时,准星会一直对准屏幕。但如果把变幻节点中的 目标 改为 世界空间(World Space) 而非视图空间,则准星会朝上。
由于插值器受限制,VertexColor(顶点颜色)与 Transform节点互斥。如果您同时使用 Transform节点和 VertexColor(顶点颜色),那么 VertexColor(顶点颜色)的结果为全白色。
目前,Transform节点无法正确处理不一致的比例缩放。
使用节点 材质表达式运行时虚拟纹理输出 Runtime Virtual Texture Output 输出RVT
打开 M_AutoLandscape 在 混合材质层 部分,添加 Runtime Virtual Texture Output
缓存 混合材质层 的 SetMaterialAttributes 为 CachedDefaultLandscapeMaterialOutput 用来缓存获取地形材质
添加 GetMaterialAttributes CachedDefaultLandscapeMaterialOutput 输出至 GetMaterialAttributes
GetMaterialAttributes 添加属性:BaseColor,Specular,Roughness,Normal BaseColor,Specular,Roughness 输出至Runtime Virtual Texture Output 同名节点。
Normal 需要经过变换才能输出至 Runtime Virtual Texture Output 同名节点.
添加 切线空间 到 世界场景空间 TransformVector [节点名为Transform]
原因是为了使法线贴图能够在关卡中的其他静态匹配上正常工作。 如果我们想要将所有静态匹配与该地形材质混合,我们必须执行此步骤。这将保证一切正常。 因此,需要将法线从切线空间转换为工作空间,并将其插入法线插座。
WorldHeight 将存储我们整个地形的更多信息。稍后可以用它来生成一个遮罩来混合材质。
添加 绝对世界位置 Absolute World Position ,用Mask遮罩其B通道只获取高度 Z值,输出至Runtime Virtual Texture Output 的 WorldHeight。
将Runtime Virtual Texture Output输出数据的所有数据存储到这个纹理中。
新建 运行时虚拟纹理 RVT_Landscape 右键-纹理-运行时虚拟纹理 这将在创建资产后存储我们地形的材质数据。 需要将其分配给我们的地形。
选择地形,搜索 virtual 细节面板-虚拟纹理-在虚拟纹理中绘制 指定要使用哪个纹理来存储数据。 添加一行,选择 RVT_Landscape 所有输出数据都将进入该虚拟纹理。
为了输出数据能够正常工作,我们还需要指定一个体积,运行时虚拟纹理数据工作的体积。
选择地形,搜索 virtual 细节面板-虚拟纹理-创建体积 点击按钮即可 这将创建 RuntimeVirtualTextureVolume0
该虚拟纹理体积将自动包含整个地形 重命名该体积为 RVTVolume_Lanscape
放置Actor面板-体积 添加 运行时虚拟纹理体积 选择 运行时虚拟纹理体积-细节面板-从边界构造变换-边界对齐Actor-点击吸管工具 选择地形 选择 运行时虚拟纹理体积-细节面板-虚拟纹理-虚拟纹理-选择 RVT_Landscape
选择 运行时虚拟纹理体积-细节面板-从边界构造变换-设置边界-设置边界 按钮,点击使体积适配地形
使用节点 Runtime Virtual Texture Sample 打开 M_AutoLandscape 需要将 运行时虚拟纹理输出 返回到地形 添加 Runtime Virtual Texture Sample Runtime Virtual Texture Sample-细节面板-虚拟纹理-虚拟纹理-选择 RVT_Landscape 注意虚拟纹理内容。
添加 SetMaterialAttributes,为其添加属性 BaseColor,Specular,Roughness,Normal Runtime Virtual Texture Sample 的 BaseColor,Specular,Roughness 节点连接至 SetMaterialAttributes 同名节点。 Normal 需要经过变换再连接。 与运行时虚拟纹理输出相反,需要变换回来以获得正确的阴影。 添加 TransformVector [节点名为Transform] 源:世界场景空间 目标: 切线空间 转换Normal,连接。
缓存 SetMaterialAttributes 【运行时虚拟纹理输出】为 CachedRVTLandscapeMaterial
在混合材质层,即最终输出部分,添加开关 UseRuntimeVirtualTexture 决定是否使用运行时虚拟纹理 分组:00-GlobalControl UseRuntimeVirtualTexture - True :CachedRVTLandscapeMaterial UseRuntimeVirtualTexture - False :CachedDefaultLandscapeMaterialOutput
UseRuntimeVirtualTexture 输出至最终输出 M_AutoLandsacpe
启用运行时虚拟纹理 进入 优化视图模式-着色器复杂度 查看性能
将 RVT与其他材质混合
创建示例材质 M_RVTBlend,材质实例MI_RVTBlend
在关卡添加测试球体,使用材质实例 MI_RVTBlend
打开 M_RVTBlend
添加 BlendMaterialAttributes
选择主材质输出节点 M_RVTBlend-细节面板-材质-使用材质属性-启用 将主输出折叠以接受BlendMaterialAttributes输出的完整材质。
添加 SetMaterialAttributes 以设置颜色属性为材质 SetMaterialAttributes 添加属性 BaseColor
SetMaterialAttributes 输出的物体材质缓存为 CachedOriginalMaterial
添加节点 Runtime Virtual Texture Sample,使用虚拟纹理 RVT_Landscape 为 Runtime Virtual Texture Sample 添加节点 SetMaterialAttributes SetMaterialAttributes 添加属性 BaseColor,Specular,Roughness,Normal
添加 TransformVector [节点名为Transform] 用以转换Normal 源:世界场景空间 目标:切线空间
SetMaterialAttributes 输出的地形材质缓存为 CachedRVTLandscapeMaterial
需要使用存储在运行时虚拟纹理中的高度数据. 需要为高度数据创建一个运行时虚拟纹理资产并将它分配给地形。并且需要指定它自己的体积。
新建 运行时虚拟纹理 RVT_Height 打开 RVT_Height-布局-虚拟纹理内容-场景高度
选择地形-细节面板-虚拟纹理-在虚拟纹理中绘制-再添加一个资产,选择 RVT_Height。 这将存储地形材质输出的高度信息。 为了让数据能够正常工作,还需要指定它自己的体积。
将关卡中已存在的 虚拟纹理体积 RVTVolume_Landscape 拷贝一份,重命名为 RVTVolume_Height
指定 RVTVolume_Height 的纹理资产 RVTVolume_Height-虚拟纹理-虚拟纹理-RVT_Height 现在可以访问来自运行时虚拟纹理的高度数据。
打开 M_RVTBlend 添加节点 Runtime Virtual Texture Sample,使用虚拟纹理 RVT_Height 缓存 Runtime Virtual Texture Sample 的 WorldHeight 为 CachedRVTHeight
添加 Absolute Wold Position 绝对世界位置 ,遮罩 B通道获取高度Z值。对其减去 CachedRVTHeight
现在通过雪材质一样的原理来设置物体材质与地形材质在物体上的分布。 只是分界点Z存储在 CachedRVTHeight。
添加 SetMaterialAttributes SetMaterialAttributes 添加属性 BaseColor 为 CachedRVTHeight 添加控制参数 RVTMaskStartHeight
预览遮罩效果 打开 MI_RVTBlend RVTMaskStartHeight :50
打开 M_RVTBlend 使用高度值混合材质
为 RVT添加 控制 Divide, 添加控制参数 RVTMaskFallOff 默认100 添加 Saturate 限制高度遮罩 0-1 添加 1- 反转高度遮罩,使上黑下白,上位物体材质,下位地形材质。 缓存高度遮罩为 CachedRVTMask 删除多余的 SetMaterialAttributes
将 CachedRVTMask 输出至 BlendMaterialAttributes 的 Alpha BlendMaterialAttributes 混合后的材质输出给主材质输出 M_RVTBlend
完整图
打开 MI_RVTBlend 无论如何移动物体,地面上的物体将与地形材质混合。
使材质不模糊 打开 RVT_Landscape
尺寸-虚拟纹理大小(以切片计)-10
找到物体位置 打开石头材质实例,找到父项主材质 复制一封 父项主材质为 M_MS_Default_Material_RVTBlend 打开 M_MS_Default_Material_RVTBlend
输出重命名为:RVTBlendedMaterial
打开 M_RVTBlend 主材质,复制 地形运行时虚拟纹理材质 部分节点 至 MF_RVTBlend
打开 M_RVTBlend 主材质,复制 RVT Height 高度值 部分节点 至 MF_RVTBlend
打开 M_RVTBlend 主材质,复制 高度遮罩 部分节点 至 MF_RVTBlend RVTMaskStartHeight 分组:00-RVTBlend RVTMaskFallOff 分组:00-RVTBlend
打开 MF_RVTBlend 添加 函数输入材质属性 BaseMaterialForBlending ,缓存为 CachedBaseMaterial
添加 BlendMaterialAttributes
添加 开关参数 UseRVTBlend 分组 00-RVTBlend
MF_RVTBlend 完整图:
打开 M_MS_Default_Material_RVTBlend 拖入材质函数 MF_RVTBlend 至最终输出 原材质输出至 MF_RVTBlend 输入节点。 MF_RVTBlend 输出至总输出节点。
原材质:
整合 MF_RVTBlend:
岩石的材质实例 MI_Canyon_Sandstone_Rocks_Pile_umcjabuva_2K 的父项材质改为 混合版材质 M_MS_Default_Material_RVTBlend
岩石的材质实例 MI_Canyon_Sandstone_Rocks_Pile_umcjabuva_2K : 调节 参数 UseRVTBlend RVTMaskStartHeight RVTMaskFallOff
打开 MI_AutoLandscape 增加材质粗糙度 06-SlopeLayer -- SlopeLayer_DetailedAdjustment -- MinRoughness 06-SlopeLayer -- SlopeLayer_DetailedAdjustment -- MaxRoughness
https://docs.unrealengine.com/5.3/zh-CN/grass-quick-start-in-unreal-engine/
优点: 可以实时预览所有更改。 它的工作原理与我们的材质实例非常相似。 每当进行一些更改时,界面就能够实时看到更改。
局限性: 它的局限性是它严重依赖遮罩。 为了使这种方法发挥作用,需要一个遮罩来指定叶子生长的位置。 生成遮罩的方法也有多种。
此方法生成的树叶不会发生碰撞。
对于草来说,通常我们不希望发生任何碰撞。 使用这种方法来生成树,这些树也将不会发生碰撞。 这意味着如果您控制场景中的角色,您可以穿过这些树木。
https://docs.unrealengine.com/5.3/zh-CN/procedural-foliage-tool-in-unreal-engine/
优点: 可以指定一个体积来告诉引擎希望叶子在哪里生长,我们可以根据自己的喜好指定具体的位置。
它不需要遮罩。
有时这可以节省计算所有遮罩所需的大量时间,甚至可以手工绘制这些遮罩。
用这种方法生成的树叶可以发生碰撞。
缺点: 速度可能很慢。 无法预览我们所做的所有更改。 如果你的体积很大并且里面有很多树叶,这有时可能需要很长时间
open world demo collection 开放世界演示集
megascans trees:european black alder (early access) Megascans树木:欧洲桤木(抢先体验) Megascans - 该抢先体验合集包含22种唯一模型,覆盖不同树龄,可帮你构建起照片级逼真的桤木树林。该资产包含有一种强大的植被主材质,可控制季节和风向。
目录:BlackAlder,KiteDemo
LOD、剔除距离和地形层样本 LOD,Cull Distance and Landscape Layer Sample
设置步骤: 1-创建一个地形草类型资产 create a LGT asset 2-在材质图中创建一个专门为此资产设计的节点。 3-指定遮罩。 要使此方法发挥作用,需要一个遮罩来指定植被的位置。
指定静态网格体。
右键-植被-地形草类型 名称:LGT_Grass 打开 LGT_Grass 细节-草地-草地种类 添加一个草地种类:
草地网格体 - SM_fieldGrass_01
草地密度质量 - 200 决定草的密度
起始剔除距离: 如使用PerlnstanceFadeAmount材质节点,实例将开始淡出的距离。0值则禁用。 直接决定树叶或网格何时开始消失。 当它们与相机之间的距离达到该值时,其中一些将开始消失。 通过适当设置这个距离,我们可以得到更好的性能。
起始剔除距离质量:
结束剔除距离: 使用一个PerlnstanceFadeAmount材质节点时实例完全淡出的距离。为0则禁用此项。 整个簇超过此距离时,簇将被完全剔除,完全不会被渲染。 当距离达到该值时,该网格的所有类型都将在我们的场景中消失。
结束剔除距离质量:
最小 LOD: 指定将用于此组件的最小LOD。 如为-1(默认),将转而使用静态网格体资产的MinLOD。 它可以帮助我们减少网格的多边形数量。 依赖于场景中草与相机的距离。与相机距离越远,草地细节越少。 例如草 : LOD 0 - 765 个三角形 LOD 1 - 278 个三角形 LOD 2 - 18 个三角形
屏幕尺寸 current screen size 决定了应该使用哪种LOD。 打开一个树木的静态网格体
LOD选取器-LOD 可手动更改设置
当屏幕尺寸为 1 时,使用LOD 0 当屏幕尺寸为 0.99 时,使用LOD 1
缩放:指定草地实例缩放类型 统一 - 草地实例将拥有统一的X、Y和Z标度 自由 - 草地实例将拥有随机的X、Y和Z标度 锁定XY - X和Y将为相同的随机标度,Z将为另一个标度
投影动态阴影:可极大提高场景性能
打开 M_AutoLandscape
添加 节点 材质表达式地形草地输出 LandscapeGrassOutput LandscapeGrassOutput - 细节-U材质表达式地形草地输出-草地类型-索引0-草地类型-选择一个地形草地类型 :LGT_Grass
打开 M_AutoLandscape
添加 节点 材质表达式地形图层采样 LandscapeLayerSample 地形图层采样输出一个浮点数,即遮罩。 没有输入,但可以通过参数名指定遮罩
参数名为该地形材质的某一材质层。 材质层 由 Landscape Layer Blend 节点指定
例如GrassMaterial 如果在参数名称中输入此名称,将输出一个仅包含白色值的遮罩.在使用该层的部分上
设置 LandscapeLayerSample 参数名:SoilMaterial LandscapeLayerSample 输出至 LandscapeGrassOutput 这将地形材质中土壤层材质遮罩输出给 地形草地类型 的 地形草 :LGT_Grass
现在,地面上将出现草地植被。 这是由于地形默认层为草地层+土壤层,土壤层教习庶,故地形草地类型 LGT_Grass 也稀疏。 它的工作原理是每当我们将这一层土壤层绘制到地形上时,草也会在该层上生成。
例如进入地形模式-绘制-绘制 选择土壤层绘制。【土壤层输出遮罩值1,由 LGT_Grass 使用】 将出现大片土壤和之上的草地类型 LGT_Grass 植被。
我们想要的是一键生成草,而不是手动绘制图层。为此,需要创建另一个遮罩。
填充植被 populate foliage
地形模式-绘制-绘制-土壤层-右键-清除图层 在整个地形上将此图层清除至0%。若此图层为权重混合(法线)图层,将对其他混合权重图层进行调整,以便抵消.
想更有效地生成草,显然我们需要一个新的遮罩。 我希望草生成的区域就在这里的某个地方。 不希望草生成山峰,因为这没有意义,也不在斜坡上。 所以需要在山峰的Y值的反转。 同时需要坡度的Y值的反转。HeightMask [HeightMask也由雪材质所使用]
打开 M_AutoLandscape 拖入材质函数 MF_HeightBlend 至 Landscape Grass 节点附近 添加constant 1参数 FoliageMaskStartHeight 植被遮罩起始高度 分组:00-GlobalControl 添加constant 1参数 FoliageMaskFallOff 植被遮罩消退距离 默认500 分组:00-GlobalControl
MF_HeightBlend - HeightMaskStartHeight : FoliageMaskStartHeight MF_HeightBlend - HeightMaskStartFallOff : FoliageMaskFallOff
MF_HeightBlend 输出至 Landscape Grass
此时,植被会在山上生成。所以需要反转该值。
MF_HeightBlend 之后添加 oneMinus 节点
打开 MI_AutoLandscape 手动调整 FoliageMaskStartHeight,FoliageMaskFallOff 以生成植被。 参考地面上的物体的位置 Z 1499 FoliageMaskStartHeight - 1499 FoliageMaskFallOff - 100
继续 增大 FoliageMaskStartHeight -2763 植被将出现在斜坡上,这不符合自然规律。
之所以长在斜坡上,是因为我们只有一个高度值HeightMask来限制草。 因此同时需要坡度值SlopeMask的反转来限制。 当前植被减去SlopeMask即可。
打开 MF_SlopeBlend 添加节点 FunctionOutput ,重命名 SlopeMaskUsed 将 坡度遮罩同时输出至 SlopeMaskUsed
打开 M_AutoLandscape 1-定位到 材质混合过渡 部分 缓存材质混合过渡的坡度混合函数 MF_SlopeBlend 的 输出节点 SlopeMaskUsed 为 CachedTransitionSlopeBlendMask
2-定位到 坡度混合 部分 缓存 坡度混合 的坡度混合函数 MF_SlopeBlend 的 输出节点 SlopeMaskUsed 为 CachedSlopeBlendMask
3-从植被遮罩中减去2个坡度遮罩 CachedTransitionSlopeBlendMask 和 CachedSlopeBlendMask
添加Saturate 限制最后的值在 0-1 之间。
添加开关 UseAutoGrass 控制是否自动生成植被 -分组 00-GlobalControl True 植被 False 输入0
4-打开 MI_AutoLandscape 开启自动植被生成 同时斜坡没有植被
植被比较消耗性能。
https://docs.unrealengine.com/5.3/zh-CN/virtual-shadow-maps-in-unreal-engine/ 高分辨率阴影系统。该系统专为处理电影级品质资产以及为大型开放世界动态打光而设计。
虚拟阴影贴图(VSM)是一种全新的阴影贴图方法,可以提供稳定的高分辨率阴影。通过与虚幻引擎5的Nanite虚拟几何体、Lumen全局光照和反射以及世界分区功能结合使用,它能够实现电影级的品质效果,为大型开放场景提供光照。
虚拟阴影贴图只是分辨率非常高的阴影贴图。
但是它提供的阴影质量,在我们的场景中可能非常昂贵。
在项目设置(Project Settings)的 引擎(Engine)>渲染(Rendering) 的 阴影(Shadows) 分段中,你可以设置项目支持的 阴影贴图方法(Shadow Map Method) ,可以是 虚拟阴影贴图(Virtual Shadow Maps) 或是此前虚幻引擎版本中的传统 阴影贴图(Shadow Maps) 。
虚拟阴影贴图 比 阴影贴图 效果更好,但性能稍差。
输入控制台命令: 通过键入此控制台命令并键入0将禁用不匹配的跨页。 对于植被,Epic 建议我们关闭此功能,这可以明显提高性能。
r.Shadow.Virtual.NonNanite.IncludeInCoarsePages 0
使用这个命令,可以关闭远处植被的阴影
r.Shadow.Virtual.UseFarShadowCulling 0
打开 地形草地类型 LGT_Grass 草地-草地种类-索引0-投射动态阴影 关闭 但植被效果会降低。
打开 地形草地类型 LGT_Grass 通过 草地-草地种类-索引0-草地网格体 找到该植被的静态网格体 文件
打开 SM_FieldGrass_01 静态网格体 细节-LOD选取器-LOD 改为手动 手动设置每一级别LOD,增大对应LOD的 屏幕尺寸,使该LOD尽早在大屏幕尺寸时启用。 以减少场景的三角形数量。LOD2比LOD1 的三角形数量更少。
通过减少这个距离,场景中的草就会减少. 打开 地形草地类型 LGT_Grass
起始剔除距离: 结束剔除距离:
我们导入到场景中的大多数植被都会有风效果。
打开 地形草地类型 LGT_Grass 通过 草地-草地种类-索引0-草地网格体 找到该植被的静态网格体 文件 再定位其主材质 M_FieldGrass_01
打开 M_FieldGrass_01 定位到 Wind 部分节点,断开时间Time节点 这将禁用此类材质的所有风和所有运动。
PerInstanceFadeAmount and Dither AA
当前 移动时的植被边缘过于明显
这是因为 结束剔除距离之外的草的不透明度立即为0. 我希望不透明度从0慢慢增加到1。
这与不透明度密切相关。 这意味着需要对材质图内部的不透明度进行一些处理。 实现植被的不透明度和半透明度。
https://docs.unrealengine.com/4.27/zh-CN/Resources/ContentExamples/MaterialNodes/1_8/ 不透明遮罩(Opacity Mask) 类似于不透明度(Opacity),但仅在使用遮罩(Masked)混合模式时可用。与不透明度(Opacity)一样,它的值在0.0到1.0之间,但与不透明度(Opacity) 不同 的是,结果中看不到不同深浅的灰色。 在遮罩模式下时,材质要么完全可见,要么完全不可见。当你需要可以定义复杂实心表面(如铁丝网、链环围栏等等)的材质时,它将成为一种理想的解决方案。不透明部分仍将遵循光照。
你可以使用基础材质节点上的 不透明度遮罩剪切值(Opacity Mask Clip Value) 属性来控制剪切发生点。欲知更多详情,请参阅遮罩混合模式文档
打开 地形草地类型 LGT_Grass 通过 草地-草地种类-索引0-草地网格体 找到该植被的静态网格体 文件 打开草的静态网格体 你可以看到通常对于不同的负载会使用不同的材质。 单击此放大镜可以选择其中之一,它将带您到材质实例所在的位置。
双击打开材质实例 M_FieldGrass_Inst_01,向下滚动到 父项,M_FieldGrass_01 是它的主材质。
打开 主材质 M_FieldGrass_01 查看 连接到 不透明蒙版 的节点 Diffuse 漫反射
定位Diffuse 漫反射使用的纹理 T_FieldGrass_01_D
打开 纹理 T_FieldGrass_01_D,查看Alpha 通道,即 该材质不透明蒙版使用的通道
植被使用不透明蒙版而不使用不透明度是因为不透明蒙版的性能消耗更低。 通过不透明蒙版操作来实现半透明通常比直接操作要便宜得多。 不透明度,不透明蒙版非常相似,但有一些差异。 不透明蒙版仅在蒙版模式下可用。 不透明蒙版,材质最终结果将是完全可见或不可见。所以没有中间过渡。 如果插入灰度值,则需要调整不透明度蒙版剪切值。
需要根据距离值来缓慢的溶解。 使用节点 PerInstanceFadeAmount(按实例消退量) https://docs.unrealengine.com/5.3/zh-CN/constant-material-expressions-in-unreal-engine/#perinstancefadeamount
输出结果与相机深度消退类似。 它将输出一个遮罩,但该遮罩的行为方式将取决于消退距离。 PerInstanceFadeAmount(按实例消退量)表达式输出一个浮点值,该值与应用于实例化静态网格(例如植物叶子)的消退量相关联。它是常量,但对于网格的每个实例,可以是不同的数值。
使用节点 DitherTemporalAA 它会根据数据模式在地图上戳洞,只是一堆小黑点。
输入为 PerInstanceFadeAmount ,决定 DitherTemporalAA 开始溶解的距离
新建材质函数 FoliageFade 输出改为名:FadeInOpacityMask
添加 PerInstanceFadeAmount 读取距离值 PerInstanceFadeAmount - Random 定义随机性
添加 DitherTemporalAA
添加 函数输入标量 OriginalOpcityMask 读取材质的原始不透明蒙版, 缓存为 CachedOriginalOpcityMask 不开启消退时使用该值
将 OriginalOpcityMask 与 PerInstanceFadeAmount 相乘合并
添加开关 UseFoliageFade 分组:00-FoliageFade ,默认为True
打开草地主材质 M_FieldGrass_01 da 拖入 MF_FoliageFade 连接在 不透明蒙版处,源节点输入至 MF_FoliageFade。 起始剔除距离1000, 结束剔除距离2000
启用MF_FoliageFade:
未启用MF_FoliageFade:
这在起始剔除距离和结束距离较大时非常明显 起始剔除距离3000, 结束剔除距离3500
解决方案: 打开草地主材质 M_FieldGrass_01 细节面板- 【搜索 dither】材质-高级-颤动LOD转换 启用 不同LOD的过渡线不在那么明显
打开 地形草地类型 LGT_Grass 草地-草地种类-添加一个种类-SM_DeadLeaves 从索引0的草位置找到其他类别草。【过滤静态网格体】
草低密度:10 起始剔除距离500, 结束剔除距离1000
打开 SM_DeadLeaves 的主材质 M_DeadLeaves
拖入 MF_FoliageFade 到不透明蒙版。 按 Ctrl + 左键 重新连接
起始剔除距离2000, 结束剔除距离5000
在地形材质中创建树木 地形草地类型
虚幻引擎使用Nanite 解决多边形过多时的性能问题。
打开 LGT_Trees 细节面板-草地-草地种类-添加一个种类 草地网格体-SM_BlackAlder_Field_02 草地密度-0.1 【关键】 树木性能消耗较高。 缩放X-最小 0.7. 最大1.2 增加随机性 起始剔除距离3000, 结束剔除距离5000 最小 LOD -1
打开 M_AutoLandscape 定位到自动生成植被区域
在Saturate 输出节点 缓存 植被 遮罩数据为 CachedFoliageMask
选择 材质表达式地形草地输出 节点
在 细节面板-草地类型-新增一种草地类型 命名:Trees 草地类型 :LGT_Trees
添加开关 UseAutoTrees 输出至 Landscape Grass 的 Trees。 分组 00-GlobalControl UseAutoTrees 的输入使用 CachedFoliageMask 和 常量0
开启 UseAutoTrees
打开 E:\Unreal Projects 532\LearnMaterial\Config\DefaultEngine.ini
每次打开编辑器时,该命令会自动运行
r.Shadow.Virtual.Enable=1
r.Shadow.Virtual.NonNanite.IncludeInCoarsePages=0
这是由于风力强度过大,需要找到其父项材质修改。 通过 LGT_Trees 找到树木静态网格体。 点击第一个定位到其材质实例,打开 定位到父项主材质 MAI_BlackAlder 打开 父项主材质 MAI_BlackAlder 调节 10-wind-wind animation strength :0.01 风力动画强度
下载资产包 Landscape Backgrounds
有一些非常漂亮的背景,可以让我们隐藏场景中的空白。
内容浏览器-PhotoR_Backgrounds-Meshs :这里有适合不同季节的山。 Modular_Spring 文件夹,过滤静态网格体
导航到场景边缘,拖入山网格体,缩放至约场景大小,
设置/导航到场景书签:ctrl + 数字0-9 【非小键盘】 移动到自定义位置后设置。 按 0 -9 可移动到自定义位置。
复制多个山,包围场景。旋转调整位置。
打开 M_AutoLandscape 定位到植被遮罩区域 在 Saturate 之后添加节点 Subtract ,减去土壤材质层,表示土壤层裸漏,上面不生成植被。可用于生成小路。 添加 Landscape Layer Sample 节点。 细节面板-参数名: SoilMaterial 【 土壤材质层】
参数名来自 Landscape Layer Blend 节点的索引图层名称
完整:
可进入地形模式,使用土壤层绘制小路。
https://docs.unrealengine.com/5.3/zh-CN/post-process-effects-in-unreal-engine/ 在渲染之前应用于整个渲染场景的效果。 PostProcessVolume
后期处理效果 面板
PostProcessVolume-细节面板-镜头-Exposure-计量模式-手动 PostProcessVolume-细节面板-镜头-Exposure-曝光补偿-10.8
PostProcessVolume-细节面板-镜头-颜色分级-Temperature-色温类型-色温 PostProcessVolume-细节面板-镜头-颜色分级-Temperature-色温-5420 【黄昏】
PostProcessVolume-细节面板-镜头-Lens Flares-强度-2
选择定向光 DirectionalLight
细节面板-光束-光束泛光 启用 细节面板-光束-泛光范围-0.05 细节面板-光束-泛光颜色-淡黄色
Materials -
--Example
----HeightMask
------M_HeightMask
------MI_HeightMask
----RVTBlend
------M_RVTBlend
------MI_RVTBlend
----SlopeMask
------M_SlopeMask
------MI_SlopeMask
----TilingBreak
------M_TilingBreak
------MI_TilingBreak
----TriplanarProjection
------M_TilingBreak
------MI_TilingBreak
--Foliage
----Grass
------LGT_Grass
----Trees
------LGT_Trees
--MaterialFunction
----FoliageFade
------MF_FoliageFade
----HeightBlend
------MF_HeightBlend
------MF_HeightBlendSubtractSlope
----MacroVariation
------MF_MacroVariation
------T_MacroVariation
----RVTBlend
------MF_RVTBlend
----SlopeBlend
------MF_SlopeBlend
----TriplannerProjection
------MF_TriplanarProjection
------MF_TriplanarProjection_Normal
----MF_LandscapeMaterialProcess
----MF_Triplanar_LandscapeMaterialProcess
--RuntimeVirtualTexture
----RVT_Height
----RVT_Landscape
--TextureCellBombing
----MF_TextureBombing_Landscape
----T_Voronoi_Perturbed_4k
--M_AutoLandscape
--MI_AutoLandscape
--M_Master1
虚幻引擎5 材质系统 Unreal Engine 5 Material
https://docs.unrealengine.com/5.3/zh-CN/unreal-engine-materials/