|
发表于 2022-11-30 15:04:01
|
显示全部楼层
<hr/ data-first-child>
- 本笔记是我的UE材质节点学习笔记,这是第三篇,如果想看这个系列可以去我主页翻一下! 笔记属于随手写一下,我是菜鸡的水平,如果很厉害的大佬就可以跳过了哈!如有错误请及时指正!
- 学习主要来自WTF is Material的章节,也就是来自Mathew Wadstein的tutorials~~~ 请有兴趣就去关注原作者!
- 还有一些杂七杂八的从各种地方学的我应该会一同写在一起了,大部分也去ue的document查了一圈,拿了一些示例。我正在学习ue的路上,这个系列应该会持续更,有兴趣的想要一起学习的也可以关注我的更新!
<hr/>
✏️Parameters(convert to Parameters)
转为参数;它更多是指特定节点上的切换,允许他们在实例(instance)材质被使用。
基本上通俗的理解就是:转化原材质的参数,在复制后的代理材质也会拥有原材质一样的功能,可以被修改和实时调整,而不需要取重新打开材质版面修改再重新编译材质。

convertParameters
<hr/>
✏️Physical Material(物理材质)
物理材质,用于定义物理对象在与世界场景动态交互时的响应。
物理材质非常容易使用。创建一个物理材质将提供一组默认值,这与应用于所有物理对象的默认物理材质相同。

create_PhysicalMaterial

parameters_PhysicalMaterial
- 以上示例是创建物理材质以及双击编辑材质。使用物理材质的教学官方文档,链接在此
- 它的物理材质属性在官方可以找到,链接在此
<hr/>
✏️Pixel Depth(Depth)
像素深度,输出当前所渲染像素的深度,即该像素与摄像机之间的距离。
- 此表达式支持正数,不支持负数。这是因为在现代硬件上,渲染器依赖于保守深度优化来维持良好的性能。这就带来了额外的一点好处:如果深度可以 远离 摄像机,硬件深度抑制(hardware depth rejection)可以通过顶点着色器输出重复使用。否则,如果允许像素深度偏移 移向 摄像机,就可能导致对象戳穿一切,这样无论像素是否使用像素深度偏移进行遮挡,像素着色器都会处理这些像素。

PixelDepth
- 在此示例中,已将材质网络应用于地板。请注意当地板后退 2048 个以上单位时,线性插值在两种颜色之间是如何进行混合的。使用了 Power(幂)表达式来加强这两种颜色之间的对比,并产生更有意义的视觉效果。
<hr/>
✏️Pixel Normal WS(Coordinates)
根据当前法线输出向量数据,该数据表示像素所面对的方向。它在世界空间中,逐像素给出对应结果。

pixel-normal-ws
- 在此示例中,PixelNormalWS被输入到底色(Base Color)中。请注意,法线贴图用于给出逐像素结果。
<hr/>
✏️Post Processing Material Property(后期材质)
后期材质,后期处理材质使你能够设置与后期处理一起使用的材质,以创建破坏的视觉屏幕效果、区域类型效果或 只能通过后置处理材质才能实现的游戏整体外观。
- 在ue document中有详细介绍,链接在此
- 以及一些效果示例,链接在此

postProcess

postProcess_02
- 将材质设置为post process时,它的属性栏就会被激活。材质只能使用 自发光颜色(Emissive Color) 输出新颜色。此外,你还可以定义在后期处理过程中应在何处应用此通道, 如果有多个通道,则应按什么顺序处理(优先级)
<hr/>
✏️Power(math)
幂,N次方;它接收两个输入:基值(Base)和指数(Exp)。它将基值提高到指数的幂,并输出结果。换句话说,它返回 Base 乘以自身 Exp 次。
- 示例:当底数为0.5且指数为2.0时,幂为0.25。
<hr/>
✏️Property
材质属性;材质版面details可以具体调整材质的各种属性。
- 它有很详细的官方文档,链接在此
- 官方文档中,它的每一个属性以及下拉菜单都有详细介绍。

material-properties-all
<hr/>
✏️quality switch(utility)
质量开关;通过调整质量设置,来切换引擎质量的显示,来配合硬件的性能,适配对应相应的画质表现。允许设置low,mid,high。
允许根据引擎在不同质量级别之间的切换使用不同的网络,例如在较低端的设备上使用较低的质量。

qualitySwitch
<hr/>
✏️Radial Gradient Exponential(Gradient)
指数径向渐变;函数使用 UV 通道 0 来产生径向渐变,同时允许用户调整半径和中心点偏移。

RadialGradientExponential_02
<hr/>
✏️Rotate About Axis(utility)
绕轴旋转,给定旋转轴、该轴上的某个点以及旋转角度的情况下,旋转三通道矢量输入。此表达式适合于使用&#34;全局位置偏移&#34;(WorldPositionOffset)产生简单剪切的动画。

RotateAboutAxisExample
<hr/>
✏️Rotator(coordinate)
旋转,以双通道向量值形式输出 UV 纹理坐标,该向量值可用来创建旋转纹理。

rotatorExample
<hr/>
✏️screen Position(coordinate)
屏幕位置,输出当前所渲染像素的屏幕空间位置。

screen-position
<hr/>
✏️sin和cosine(math)
常见使用用途是输出某种有规律的waves。
sine,正弦。表示输入范围和[-1, 1]的输出范围上反复输出正弦波的值。它与Cosine表达式的输出之间的区别是输出波形被四分之一的周期所抵消,这意味着&#34;Cos(X)&#34;等于&#34;Sin(X + 0.25)&#34;。
sine最常用于通过将一个 时间(Time) 表达式与其输入连接来输出连续的振荡波形,但它也可以用于在世界场景空间或屏幕空间或任何其他需要连续、平滑循环的应用中创建波纹。波形的可视化表示如下图所示,缩放到[0, 1]输出范围:

SineWave
、

SineExample
cosine, 余弦;表示在[0, 1]的输入范围和[-1, 1]的输出范围上反复输出余弦波的值。
cosine最常用于通过将一个 时间 表达式与其输入连接来输出连续的振荡波形,但它也可以用于在世界场景空间或屏幕空间或任何其他需要连续、平滑循环的应用中创建波纹。波形的可视化表示如下图所示,缩放到[0, 1]输出范围:

CosineWave

CosineExample
<hr/>
✏️sphere mask(utility)
球体蒙版;根据距离计算来输出蒙版值。
如果某一个输出是某个点的位置,而另一输入是具有某半径的球体的中心,那么蒙版值将是0(位于球体外部)和1(位于球体内部),并存在一定的过渡区域。此表达式可作用于单分量、双分量、三分量和四分量矢量。
- 示例:当摄像机距离预览对象超过256个单位时,该对象将平滑地渐变为黑色。

SphereMaskExample
<hr/>
✏️square Root(math)
平方根;。如果应用于向量,则每个分量将分别处理。输出的也是一个数学结果。
- 对于0到1范围内的纹理,这会降低图像的对比度。例如,在下面的校准纹理中,深色值会变得更亮,白色值会向灰色转变。

square-root
<hr/>
✏️substract(math)
减法;接受两个输入,将第一个输入减去第二个输入,然后输出差值。
- 两个输入必须有相同数量的值,但其中一个值是单个常量值时例外。在这种情况下,将多通道输入的每个通道减去常量值,并将结果存储在输出值的单独通道中。
- 示例:0.5与0.2相减得0.3;(0.2,-0.4,0.6)与(0.1,0.1,1.0)相减得(0.1,-0.5,-0.4);(0.2,0.4,1.0)与0.2相减得(0.0,0.2,0.8)。
- Subtract可以用来加深颜色和偏移UV。
<hr/>
✏️swizzle(miscellaneous)
通道扰乱,主要作用是flip原来的x和y,比如xyz会变成yxz。

swizzle
<hr/>
✏️Time(constant)
时间;用来向材质(例如,Panner(平移)、Cosine(余弦) 或其他时间相关操作)添加经历时间。代表时间流逝,但是会不断更新。
- 它有两个参数:
- Ignore Pause(如果为 true,那么时间将一直推进,即使游戏暂停也是这样。)
- Period (如果为 true,那么这将是时间回绕前经过的时间量。针对移动材质,这将以全精度在 CPU 上执行周期计算,而在 GPU 上,将以半精度运行(处理长度超过一分钟的周期时,可能会产生问题))

TimeExample
- 上图中说明的网络将创建一个随时间推移而变化的材质,从而连贯地展现白色与黑色之间的正弦曲线过渡。如果启用了时间段,那么将时间段设置为 0 会有效地停止过渡,而设置为 1 相当于时间段为 false。设置接近于 0 的数值将使材质更迅速地变化。
<hr/>
✏️Translucency Property
半透明属性;
最终颜色 = 源颜色 不透明度 + 目标颜色 (1 - 不透明度)。此混合模式与动态光照 不 兼容。
- 需要确保 screnn space reflcetions 为true,开启后支持半透明材质的屏幕空间反射。
- 并且根据场景需求选择Translucency lighting mode,这可以控制半透明(Translucency)在该材质中使用的光照模式。下拉菜单越往下开销越大。
- 材质属性详细查看document,链接在此
<hr/>
✏️Translucency self shadowing Property
半透明自投影;半透明自身阴影是一种获得体积光照半透明对象(例如烟柱或蒸汽柱)的好方法。自投影分为两个主要部分:自身阴影密度(Self Shadow Density)和第二自身阴影密度(Second Self Shadow Density)。这两个部分的存在为变化提供了可能。你可以单独定义各个部分的密度,并使用它们之间的差异在整个自身阴影中获得你需要的模式。
- 在translucent mode下使用,需要有一个base color
- 材质属性详细查看document,链接在此

translucency-self-shadowing
<hr/>
✏️Tesselation Property
曲面细分;增加了额外的几何,用于添加更多物理细节。
- Flat Tessellation,曲面细分的简单形式。此模式会在不平滑网格体的前提下添加更多三角形。
- PN Triangles,使用基于样条的简单曲面细分,这种曲面细分虽然开销更高,但细节表现效果更佳。
- 官方文档链接在此
<hr/>
✏️Texture Coordinate(coordinate)
纹理坐标;双通道,输出uv纹理坐标,改变uv平铺。
- 如需访问网格体的第二个 UV 通道,请创建一个 TextureCoordinate(纹理坐标)节点,将其&#34;坐标索引&#34;(CoordinateIndex)设置为 1(0 表示第一个通道,1 表示第二个通道,等等),并将其连接到 TextureSample(纹理取样)节点的 UV 输入。

texture-coordinates
<hr/>
✏️Texture sample(texture)
纹理贴图,输出input的纹理颜色,一般就是2d贴图为主
- UVs,接收UV纹理坐标,以用于纹理。如果没有任何值输入到UV,那么将使用材质所应用到的网格体的纹理坐标
- DDX(UVs),接收UV输入的DDX以用于各向异性过滤。默认情况下,硬件自动执行此过滤,并且速度更快。但是在某些情况下,可能需要使用DDX材质表达式显式地设置此项目,以避免延迟贴花的2x2像素块瑕疵之类的瑕疵。仅当 Mip值模式(MipValueMode) = 导数(Derivative) 时才可用。
- DDY(UVs),接收UV输入的DDY以用于各向异性过滤,这与DDX(UV)接收UV输入的DDX相同。

TextureSampleExample
<hr/>
✏️value step(gradient)
值阶;接收现有的纹理通道或渐变,并根据用户的输入来输出纯黑白色图像。结果是一个蒙版,它代表与输入值相等的渐变部分。

valueStep
<hr/>
✏️vector to radial value(miscellaneous)
矢量到径向值;将&#34;矢量 2&#34;矢量转换为角度,或者将 UV 坐标数据转换为径向坐标。对于矢量,角度将在一个通道中输出,而矢量长度在另一通道中输出。
- Radial Coordinates(返回输入的径向坐标,对于矢量,角度将在一个通道中输出,而距离在另一通道中输出。)
- Vector Converted to Angle(返回输入矢量的角度,返回径向梯度)
- Linear Distance(返回输入矢量的线性长度,对于 UV,输出距离的径向梯度。)

vectorToRadialValue
<hr/>
✏️vertex Normal WS(coordinate)
世界场景空间顶点法线;它只能用于在顶点着色器中执行的材质输入,例如WorldPositionOffset。
该表达式对于设置网格体增大或缩小很有用

vertexNormalWS
- 如上示例,小球每个顶点的法线会在各自法线方向上移动,会随着正弦运动按比例放大和缩小。
<hr/>
✏️view size(coordinate)
视图大小;表达式输出一个 2D 向量,以给出当前视图的大小(以像素为单位)。这对于使材质根据当前屏幕分辨率产生各种变化来说非常有用。

viewsize
<hr/>
✏️world position(coordinate)
全局位置,输出当前像素在全局空间中的位置。
- 常见用法是确定从摄像机到像素的径向距离,而不是像 PixelDepth(像素深度)那样确定正交距离。WorldPosition(全局位置)也可用作纹理坐标,并让不相关的网格在它们彼此邻近时进行纹理坐标匹配。以下是使用 WorldPosition.xy 对纹理进行二维贴图的基本示例:

world-position-planar
<hr/>
wtf is material 全篇到这里就结束了,这一遍看的很粗略,不过收益很多!还会持续学习!
本文使用 Zhihu On VSCode 创作并发布 |
|