材质编辑器
材质编辑器使您无需编写任何代码即可直观地创建自己的材质:只需创建和连接节点以构建图形!对于刚接触材质创建且功能强大的用户来说,它足够简单,可以让您做很多事情。功能的简要列表包括:
- 能够创建自己的基础材质(.mgraph)并将它们直接分配给对象或用作数百种其他材质的父材质,以避免一遍又一遍地重新组装材质图。材质层次结构窗口将为您提供帮助。
- 能够使用其他节点创建您自己的自定义图形节点(子图),或使用您的代码。当您更改子图的内容时,所有使用它的材质也会更新。
- 能够在材质类型之间切换(目前有五种可用:Mesh Opaque PBR, Mesh Alpha Test PBR, Mesh Transparent PBR, Mesh Transparent Unlit, Decal PBR)。
- 可选择打开和关闭影响性能的功能。
- 能够构建最终材质的 UI,您可以添加各种参数,甚至可以将它们组合成组以方便使用。
- Connector 是图形节点的特殊“折叠”模式,当它占用较少空间并且可以直接附加到另一个图形节点的输入时。
- Expression 是一个特殊的节点,使您可以编写简单的算术运算,但主要是您可以将它用作混合器,并结合更改数据组件数量的能力。确保你会喜欢它!
- 有能力写代码在一个特殊的 Function 节点中,在这里你甚至可以实现多个函数相互调用。
- 您可以从资源浏览器或直接从文件管理器中拖放纹理,它们将自动导入并添加到图形中的相应节点。
- 循环- 一个复杂但非常酷的功能,使您可以多次重复任意顺序的动作。我们分析了图循环的多种现有实现,并发明了一种几乎与代码中的循环相当的新实现。那么为什么不在代码中编写循环呢?因为使用图使得在循环中实现复杂事物比在代码中更容易。
- 在处理复杂或大型图表时,您可能会发现您的电线到处都是相互交叉的地方,您可能需要更清晰的视觉效果。那个时候门户参加进来。您可以将电线连接到一个位置的 Portal In 节点,然后将 Portal Out 节点放置在您需要的任何其他位置,并从 Portal Out 获取您提供给 Portal In 的内容(就像您在节点图下为电线挖了一条隧道) .
也可以看看#
材质图资源#
材质图资源(.mgraph)既是源材质网络(要编译成材质的基于节点的描述)又是普通基材可以分配给网格表面。
要创建新的材质图,请在 Asset Browser 中单击鼠标右键以打开 Create 菜单,然后选择 Create Material → Material Graph。
为您的图形资源指定一个名称。将在项目的当前文件夹中创建一个新的 *.mgraph 资源。
由于 Material Graph 资源表示基础材质,因此它也可以在材质层次结构并且可以是分配到受支持的表面和对象。根据材质的类型它可以分配给以下对象:
-
网丝材质:
- Static, Dynamic和Skinned网格的表面;
- Mesh Clutter / Mesh Cluster的表面。
-
贴花材质:
- Projected,Orthographic, 和Mesh贴花。
使用材质图#
右键单击 *.mgraph 资源并选择 Edit Graph 或直接双击资源以在 Material Editor 窗口中打开它。
Material Editor 窗口包括显示材质图网络的 Graph View 和设置面板。
材质图网络由节点--负责处理输入数据的功能块。通过组成图网络,您可以定义材质的外观。
Material 节点是材质的主节点。它为图形数据提供一组输入,并根据当前的情况生成特定类型的材质设置.
最后,主节点的输出连接到 Final 节点——主要输出材质节点。
按 Save 按钮保存更改并将材质图编译为基础材质。编译错误(如果有)将列在警告和错误面板和 Console 窗口中。
导航控件#
Mouse Wheel drag | 平移材质图 |
---|---|
Mouse Wheel scroll | 放大/缩小 |
RMB / Space key | 显示节点创建面板 |
LMB click | 选择节点/边缘 |
LMB drag on background | 使用矩形工具选择节点 |
Shift + LMB on node | 添加到节点选择 |
Ctrl + LMB on node | 从节点选择中删除 |
LMB drag on node | 移动选定的节点 |
Ctrl + C | 将选中的节点复制到剪贴板 |
Ctrl + V | 从剪贴板粘贴节点 |
Ctrl + D | 克隆选定的节点 |
Delete Key | 删除选中的节点/边缘 |
常用设置#
通用设置定义了材质支持的特征集。
Type | 输出素材的类型: |
---|---|
Vertex Mode |
|
Vertex Space | 定义向量空间为了顶点调整和镶嵌.选项取决于所选的Vertex Mode:
|
Normal Space |
定义空间法线向量:
|
Depth Mode |
定义如何深度数据被处理:
|
Depth Shadow | 指示自定义深度是否影响阴影的标志。 |
Tessellation | 启用镶嵌相关输入和镶嵌设置。 |
Two Sided | 启用 Two Sided 选项。 |
Write Velocity Offset | 启用 Velocity 输入。 |
Advanced Mode | 启用 编译设置。 |
透明材质设置#
以下设置仅适用于 Mesh Transparent PBR 和 Mesh Transparent Unlit 材质类型。
Blend Mode |
混合预设。可以选择以下之一:
|
---|---|
Blend Src | 用于缩放源颜色(覆盖材质的颜色)的选项。仅在选择 Custom 预设时可用。 |
Blend Dest | 用于缩放目标颜色(被遮蔽材质的颜色)的选项。仅在选择 Custom 预设时可用。 |
Overlap | 启用 Overlap 选项。 |
Depth Test | 启用 Depth Test 选项。 |
Depth Write | 启用 Depth Write 选项。 |
Participate in PostEffects | 启用 Post Processing 选项。 |
贴花材质设置#
以下设置仅适用于 Decal PBR 材质类型。
Normal Under Decal |
定义用于法线映射的切线空间(Tangent-Binormal-Normal 矩阵):
|
---|---|
Normal Blend Mode |
贴花法线的混合模式:
|
Screen Projection | 启用贴花的屏幕投影,而不是将其投影到表面上(仅支持 Mesh 贴花)。 |
编译设置#
这些设置仅适用于 Direct3D 编译器(DirectX API)。
Optimization Level | 着色器优化和算术重构的级别(例如合并一个multiply指令后跟一个add融为一体 mad):
|
---|---|
Warning Mode |
以下模式可用:
|
IEEE Strictness | 强制 IEEE 严格编译。 |
参数#
在 Parameters 面板中,您可以定义材质参数列表。
可以使用以下控件:
- Add 添加一个新参数
- Clone 克隆所选参数
- Move Up 将所选参数在列表中向上移动
- Move Down 将所选参数在列表中向下移动
- Remove 删除选定的参数
添加新参数时,应在参数创建对话框中指定参数的Name 、 Type和默认设置。提供了以下一组参数类型:
- Slider--指定范围内的浮点值(默认为 [0.0f; 1.0f])。
- Color--表示颜色值的 4 分量的浮点向量。
- Texture2D, Texture3D , Texture2DArray , TextureCube--对应类型的纹理。
- Group--用于分组参数的辅助类型。使用 和 按钮重新排列和分组参数。
- Float, Float2, Float3, Float4--浮点值或 N 浮点值的向量。
- Int, Int2, Int3, Int4--整数值或 N 整数值的向量。
要在材质图中使用参数,请将项目拖到 Graph View 以创建相应类型的节点:
警告和错误#
Warnings and Errors 面板使您能够跟踪材质图中的问题,并且仅在有问题时才可见。
该面板列出了图表中的所有问题节点,选择一个条目以在 Message 部分中查看其端口或数据的问题。
之后可能会出现一些警告迁移内容到更高的 SDK 版本。这些是提醒警告,旨在通知某些节点的逻辑变化。您可以使用 Remove Warning 按钮放弃警告。
节点#
材质编辑器的节点是代表数据源和处理指令的功能块,类似于着色器编程中的变量和函数。
大多数节点的输出预览显示在预览球体(对于大多数节点)或平面(对于纹理)上。
一些节点有一组定义它们的行为的设置。双击节点会打开用于调整节点设置的对话框。
不超过一个输入和一个输出的节点端口有一个特殊的连接器模式——为了方便,它们是可折叠的。连接到另一个节点的折叠节点将附加到它。拖动折叠的节点以断开连接并分离节点。
节点分为几组基于它们的适用性和颜色编码以便更好地识别。
端口#
端口定义节点的输入(左侧)或输出(右侧)。连接边缘到端口允许数据流过 Material Graph 节点网络。
每个端口都有一个数据类型,定义了可以连接到它的边缘。所有数据类型都用颜色编码,这意味着它们中的每一个都有用于识别的关联颜色。
float | float2 | float3 | float4 |
int | int2 | int3 | int4 |
matrix--浮点值矩阵: float2×2 、 float3×3 、 float4×4 。 | |||
纹理--任何类型的纹理:Texture 2D,Texture 3D, Texture2DArray 和Texture Cube. | |||
bool--使用的布尔值逻辑节点和循环. | |||
any--任意数据类型,表示端口支持多种数据类型。 | |||
error--表示错误(例如,未提供必需的输入或类型转换失败)。 |
只有一个边缘可以连接到任何输入端口,但您可以将多个边缘连接到一个输出端口。
大多数输入端口都有一个默认输入值。
边缘#
一条边缘表示两个之间的连接端口(输入和输出)。边缘定义了数据如何通过 Material Graph 节点网络。您只能将输出端口的边缘连接到输入端口。
通过从所需的输出端口拖动到所需的输入端口来创建新边缘,反之亦然。要删除边缘,请单击左键选择它并点击 Delete。
端口适配器#
端口适配器是一项功能,使您能够以任意顺序选择数据组件,组合和重新排列它们,提供对元素的方便访问和很大的灵活性。它适用于以下数据类型:
- bool
- float, float2, float3, float4
- int, int2, int3, int4
当您将新边缘拖动到输入端口时,将出现许多可用的连接选项:
- 在输入类型可以提供所有需要的数据组件的情况下,= 选项提供直接连接。
- 选择另一个选项会创建一个负责类型转换的 Expression 节点。
您可以稍后通过双击表达式并编辑字段来更改适配器。 Expression 节点使您能够编写简单的算术运算,甚至可以使用 Unigine 图形 API。
添加新节点#
要添加新节点,请右键单击背景或按空格键并从调色板中选择节点类型或在 Search 字段中键入其名称以找到它。
拖动一个边缘从输入端口打开一个节点创建调色板使用针对相应端口所需数据类型的预设过滤器。
可以直接从资源浏览器中拖动纹理。在这种情况下,将自动添加一个具有相应设置的 Sample Texture 节点。
循环#
有时您需要多次执行某些操作,即使只需要 10 次迭代,克隆相关的节点组也会使您的图变得非常复杂。在 UNIGINE 中,您可以为此创建循环,就像在编程中一样。
要创建循环,请添加 Loop Begin 和 Loop End 节点并连接它们的 Loop 端口。
要将变化的变量添加到循环中,请将具有起始值的节点连接到 Loop Begin 节点的 Add 端口。通过双击 Loop Begin 节点,您可以打开 Input Constructor,使您能够重新排列、重命名、删除现有输入并隐式设置它们的类型以及设置最大迭代次数。
然后,构建一个实现单次迭代功能的图,其结果应传递给 Loop End 节点以进行进一步的迭代。您可以在图表中进一步使用所有迭代的结果。
您可以在逻辑中使用当前迭代的 Index 和 Maximum Iterations 值。 Index 以 0 开始,在最后一次迭代中等于 Maximum Iterations-1。
这是一个简单循环的示例,将值增加 0.1 10 次:
Loop End 节点的 break 输入端口采用布尔值,默认为 false。传递一个真值(例如,通过逻辑节点)将中断循环并退出当前迭代。
自定义代码#
无论材质系统多么先进,您都可能需要一些特定的东西,可能过于复杂而无法通过基本节点实现。或者有时,为数学运算编写几行代码可能会更快,而不是生成一堆节点并将它们连接起来。解决方案很简单:创建一个Function节点并将任何着色器函数包装到其中。输入输出 端口节点应根据函数的签名自动生成。
要向节点添加或编辑代码,请双击节点,代码编辑器窗口将打开。您可以编写任意数量的函数,代码中的最后一个函数将被视为主要函数。
门户网站#
有时,特别是在复杂的材质图中,有太多的交叉边缘使整个图看起来像蜘蛛网,数据流非常难以理解。门户是一组特殊节点,包括单个输入和一个或多个输出,它们都具有相同的名称。门户用于减少边缘的数量并使图形更具“可读性”。
要创建一个门户,首先要添加一个 Portal In 节点。将输入连接到新节点并双击它以调整其颜色和名称。
然后您可以根据需要创建任意数量的 Portal Out 节点。通过双击 Portal Out 节点,您可以选择所需输入门户的名称,以防使用多个门户。
子图#
子图是一种特殊类型的材质图,可以从其他材质图内部引用。当要在单个图形或跨多个图形中多次执行相同的操作时,这可能非常有用。您只需将这些操作打包到一个带有一组输入和输出的盒子中,然后在需要的任何地方使用这个盒子。子图在三个主要方面不同于材质图:
- 子图不生成任何材质,它用作材质图中的构建块。
- 子图没有Material和Final节点。相反,它有两个节点,称为 Inputs 和 Outputs,定义所有输入和输出端口。
- 子图存储在 *.msubgraph 资源中。
基本上,子图的构建过程与创建材质图时的过程相同。
要创建新的子图,请在资源浏览器中右键单击以打开 Create 菜单,然后选择 Create Material -> Material Graph。
单击 Save 应用并保存更改。
所有子图都会自动添加到调色板中,因此如果您开始在搜索字段中输入此类子图的名称节点创建调色板,它将显示在列表中。
配置输入和输出#
双击 Inputs 节点或 Outputs 节点打开构造器面板,可以对子图进行相应的添加、重新排列、删除以及输入输出端口的名称和类型的设置。
通过将节点连接到 Inputs 节点的端口,您可以指定具有默认值的子图的可选端口。