空间材质

简介

SpatialMaterial 是一种默认的3D材质,旨在提供艺术家在材质中寻找的大部分功能,而无需编写着色器代码。 但是,如果需要其他功能,可以将其转换为着色器代码。

本教程解释了 SpatialMaterial 中出现的大多数参数。

SpatialMaterial 添加到一个物体有三种方法。它可以在网格的 Material(材质) 属性中添加。可以用网格(比如一个 MeshInstance 节点)在节点的 Material(材质) 属性中添加,或者用网格在节点的 Material Override(材质重载) 属性中添加。

../../_images/add_material.png

如果你把材质加到网格本身上,每次那个网格被使用的时候都会有那个材质。如果你用网格向一个节点添加材质,那个材质仅会被那个节点使用,也会覆盖网格的材质属性。如果材质被添加到了节点的 Material Override(材质覆盖) 属性上,它仅会被那个节点使用,它也会覆盖那个节点的常规材质属性和网格的材质属性。

标志

空间材质有许多标记,用于确定材质的一般用途。

../../_images/spatial_material1.png

透明

在Godot中,除非特别配置,否则材质不透明。 这背后的主要原因是透明材质使用一种不同的渲染技术(从后到前排序并按顺序渲染)。

这种技术效率较低(会发生许多状态变化),并且使得材质无法用于许多需要完全不透明几何形状的处理中/处理后效果(例如SSAO,SSR等)。

因此,除非另有说明,否则Godot中的材质是不透明的。 启用透明度的主要设置是:

  • 透明标记(这一个)
  • 混合模式设置为“Mix(混合)”以外的模式
  • 启用距离或接近淡入淡出

Use Shadow to Opacity(使用阴影转为不透明度)

光照会改变alpha值,阴影部分是不透明的,而没有阴影的地方是透明的。对于AR中将阴影堆叠到一个照相机反馈中很有用。

Unshaded(无阴影)

在大多数情况下,材质通常受到照明的影响(有阴影)。

但是,在某些情况下,您可能只想显示反射(颜色)而忽略其余部分。 切换此标志将删除所有阴影并显示纯净,未光照的颜色。

../../_images/spatial_material26.png

Vertex Lighting(顶点照明)

由于depth pre-pass (深度预通过),Godot的每像素成本或多或少是一致的。所有照明计算都是通过在每个像素上运行照明着色器来完成的。

由于这些计算成本很高,因此在某些极端情况下可以大大降低性能,例如绘制几层透明度(这在粒子系统中很常见)。 在这些情况下,切换到每顶点光照可能会有所帮助。

此外,在低端或移动设备上,切换到顶点照明可以显着提高渲染性能。

../../_images/spatial_material2.png

请记住,启用顶点照明时,只有定向照明会产生阴影(出于性能原因)。

No Depth Test(无深度测试)

为了使近距离物体出现在远处的物体上,进行深度测试。 禁用它会导致对象出现在其他所有内容之上(或之下)。

禁用此选项对于在世界空间中绘制指标最有意义,并且与Material的 Render Priority 属性一起效果很好(请参阅本页底部)。

../../_images/spatial_material3.png

Use Point Size(使用点大小)

此选项仅在渲染的几何体由点组成时有效(通常从3D DCC导入时由三角形组成)。 如果是这样,那么这些点可以被调整大小(见下文)。

World Triplanar(世界三平面)

使用三平面映射时(见下文,在UV1和UV2设置中),在对象局部空间中计算三平面。 此选项使triplanar在世界空间中工作。

Fixed Size(固定大小)

这使得无论距离如何,对象都以相同的大小呈现。 这主要用于指示物(无深度测试和高渲染优先级)和某些类型的广告牌。

Do Not Receive Shadows(不接受阴影)

使对象不会接收任何可能会被投射到其上的阴影。

Disable Ambient Light(禁用环境光)

使物体不会接收任何会照亮它的环境照明。

Ensure Correct Normals(确保正确法线)

当网格应用非一致缩放时修复法线。

Vertex Color(顶点颜色)

This setting allows choosing what is done by default to vertex colors that come from your 3D modelling application. By default, they are ignored.

../../_images/spatial_material4.png

Use as Albedo(用作反照率颜色)

选择此选项意味着用顶点颜色作为反照率颜色。

Is sRGB(是sRGB)

大多数3D DCC可能会将顶点颜色导出为sRGB,因此切换此选项将有助于它们看起来正确。

参数

``SpatialMaterial``还有几个可配置的参数来调整渲染的许多方面:

../../_images/spatial_material5.png

Diffuse Mode(漫反射模式)

指定击中对象时漫反射光散射所使用的算法。 默认为 Burley。 也有其他模式可用:

  • ** Burley:** 默认模式,原始的Disney Principled PBS漫反射算法。
  • Lambert: 不受粗糙度的影响。
  • ** Lambert Wrap:** 当粗糙度增加时,将Lambert拓展至覆盖90度以上。 适用于头发和模拟廉价的次表面散射。 这种实现是节能的。
  • ** Oren Nayar:** 此实现旨在将微表面考虑在内(通过粗糙度)。适用于粘土类材质和某些类型的布料。
  • Toon: 为照明提供硬边缘,光滑度受粗糙度的影响。 建议您从环境的环境光设置中禁用sky contribution(天空补偿),或禁用空间材质中的环境光以获得更好的效果。

../../_images/spatial_material6.png

Specular Mode(镜面模式)

指定镜面blob的呈现方式。 镜面blob是在对象中反射的光源的形状。

  • ** ShlickGGX:** 现在PBR 3D引擎使用的最常见的blob。
  • Blinn: 在上一代引擎中很常见。 现在不值得使用,但为了兼容性而留在这里。
  • ** Phong:** 同上。
  • Toon: 创建一个toon blob,根据粗糙度改变大小。
  • 禁用: 有时候blob很烦人。消失吧!

../../_images/spatial_material7.png

Blend Mode(混合模式)

控制材质的混合模式。 请记住,Mix 以外的任何模式都会强制对象通过透明管道。

  • Mix: 默认混合模式,alpha控制对象可见的程度。
  • Add: 物体添加性地混合,非常适合耀斑或类似火焰的效果。
  • ** Sub:** 物体被减去材质。
  • ** Mul:** 物体被乘以材质。

../../_images/spatial_material8.png

Cull Mode(剔除模式)

确定渲染背面时不绘制对象的哪一侧:

  • Back: 当不可见时,对象的背面被剔除(默认)。
  • Front: 当不可见时,物体的正面被剔除。
  • Disabled: 用于双面对象(不进行剔除)。

Depth Draw Mode(深度绘制模式)

指定何时必须进行深度渲染。

  • Opaque Only(仅限不透明,默认): 仅为不透明对象绘制深度。
  • Always(始终): 为不透明和透明对象深度绘制。
  • Never(从不): 不进行深度抽取(不要将其与上面的No Depth Test(无深度测试)选项混淆)。
  • Depth Pre-Pass(深度预通过): 对于透明物体,首先使用不透明部分进行不透明的通过,然后在上方绘制透明度。 将此选项与透明草或树叶一起使用。

../../_images/material_depth_draw.png

Line Width(线宽度)

绘制线条时,指定要绘制的线条的宽度。 大多数现代硬件都不提供此选项。

Point Size(点大小)

绘制点时,指定点大小(以像素为单位)。

Billboard Mode(广告牌模式)

为绘图材质启用广告牌模式。 这会控制物体面向摄像头的方式:

  • Disabled: 禁用广告牌模式。
  • Enabled: 启用广告牌模式,对象的-Z轴将始终面向摄像机。
  • ** Y-Billboard:** 物体的X轴会始终与相机对齐。
  • Particles: 最适合粒子系统,因为它允许指定动画选项。

../../_images/spatial_material9.png

以上选项仅适用于Particle Billboard。

Billboard Keep Scale(广告牌保持缩放)

启用在广告牌模式下缩放网格。

Grow(增长)

沿法线指向的方向增长对象顶点:

../../_images/spatial_material10.png

这通常用于创建廉价的轮廓。 添加第二个material pass,使其变为黑色, 无阴影(unshaded),反向剔除(Cull Front),并添加一些增长:

../../_images/spatial_material11.png

使用Alpha Scissor

当不需要“0”或“1”以外的透明度时,可以设置阈值以防止对象渲染半透明像素。

../../_images/spatial_material12.png

这通过不透明管道渲染对象,这更快,并允许它使用处理中/处理后效果,如SSAO,SSR等。

材质颜色,贴图和通道

除了参数之外,定义材质本身的是颜色,纹理和通道。 Godot支持很多颜色,纹理和通道。 它们在下面详细描述:

Albedo(反照率)

Albedo 是材质的基色,所有其他设置都在其上运行。 设置为 Unshaded 时,这是唯一可见的颜色。 在以前版本的Godot中,这个通道被命名为 Diffuse 。 名称的改变主要是因为在PBR(Physically Based Rendering, 基于物理渲染)中,这种颜色影响的计算远不止漫射光照路径。

反照率颜色(Albedo Color)和纹理可以一起使用,因为它们会被相乘。

反照率颜色和纹理的 Alpha通道 也用于对象透明度。如果你使用带 alpha通道 的颜色或纹理,请确保启用透明度或 alpha scissoring 以使其正常工作。

Metallic(金属)

由于其简单性,Godot使用金属模型而不是别的模型。 此参数定义材质的反射程度。 反射越多,漫射/环境光的影响越小,反射的光越多。 这种模型被称为“能量守恒(energy-conserving)”。

The Specular parameter is a general amount for the reflectivity (unlike Metallic, this is not energy-conserving, so leave it at 0.5 and don’t touch it unless you need to).

最小的内部反射率是“0.04”,因此不可能使材质完全不反射,就像在现实生活中一样。

../../_images/spatial_material13.png

Roughness(粗糙度)

粗糙度\会影响反射的发生方式。 值``0``使其成为完美的镜子,而``1``的值完全模糊了反射(模拟自然微表面)。 最常见的材质类型可以通过*MetallicRoughness* 的正确组合来实现。

../../_images/spatial_material14.png

Emission(发射)

发射 指定材质发出的光量(请记住,这不包括环绕几何体的光,除非使用 GI探针 )。 此值将添加到生成的最终图像中,并且不受场景中其他光照的影响。

../../_images/spatial_material15.png

Normal map

Normal mapping allows you to set a texture that represents finer shape detail. This does not modify geometry, only the incident angle for light. In Godot, only the red and green channels of normal maps are used for better compression and wider compatibility.

../../_images/spatial_material16.png

注解

Godot需要法线贴图使用X +,Y-和Z +坐标。换言之,如果你导入了用于其他引擎的材质,就需要转换法线贴图,将它的Y轴翻转过来。否则,法线贴图显示的Y轴方向会相反。

可以在 这里 找到关于法线贴图(包括常见引擎的坐标顺序表)的更多信息。

Rim(边缘)

一些织物具有小的微毛,导致光在其周围散射。 Godot使用 Rim 参数模拟它。 与仅使用发射通道的其他边缘照明实施方式不同,这实际上考虑了光(没有光意味着没有边缘)。 这使得效果显著地更加可信。

../../_images/spatial_material17.png

边缘大小取决于粗糙度,并且有一个特殊参数来指定它必须如何着色。 如果 Tint0,则灯光的颜色用于边缘。 如果 Tint1,则使用材质的反照率。使用中间的值通常效果最佳。

Clearcoat(清漆)

此选项仅在使用GLES3后端时适用。

Clearcoat 参数用于为材质添加辅助的透明涂层。 这在汽车油漆和玩具中很常见。在实践中,它是在现有材质之上添加的较小的镜面高光。

Anisotropy(各向异性)

此选项仅在使用GLES3后端时适用。

这会更改镜面高光的形状并将其与切线空间对齐。各向异性通常与头发一起使用,或使诸如拉丝铝之类的材质更加逼真。 与流向贴图结合使用时效果特别好。

../../_images/spatial_material18.png

Ambient Occlusion(环境光遮蔽)

可以指定烘焙的环境遮挡贴图。 此贴图会影响有多少环境光到达物体每个表面(默认情况下它不会影响直接光)。 虽然可以使用屏幕空间环境遮挡(Screen-Space Ambient Occlusion, SSAO)来生成环境遮挡,但没有什么能比良好烘焙的AO贴图的质量更好。 建议尽可能烘焙环境遮挡。

../../_images/spatial_material19.png

深度

此选项仅在使用GLES3后端时适用。

在材质上设置深度贴图会做一个ray-marching搜索,以模拟沿视图方向的空穴的正确位移。 这不是真正增加的几何,而是一种深度的幻觉。 它可能不适用于复杂的对象,但它会为纹理产生逼真的深度效果。 为获得最佳效果,Depth 应与法线贴图一起使用。

../../_images/spatial_material20.png

Subsurface Scattering(表面下散射)

此选项仅在使用GLES3后端时适用。

此效果模拟穿透物体表面,散射然后散出的光。创造逼真的皮肤,大理石,有色液体等有用。

../../_images/spatial_material21.png

Transmission(传输)

这可以控制有多少光从被点亮的一侧(正对灯光)传输到暗侧(背对灯光)。 这适用于植物叶子,草,人耳等薄物体。

../../_images/spatial_material22.png

Refraction(折射)

此选项仅在使用GLES3后端时适用。

当启用折射时,它会取代alpha混合,而Godot会尝试从正在渲染的对象后面获取信息。 这允许以类似于现实生活中的折射的方式扭曲透明度。

../../_images/spatial_material23.png

Detail(细节)

Godot允许使用辅助反照率和法线贴图生成细节纹理,可以通过多种方式进行混合。 通过将其与二级UV或三平面模式相结合,可以实现许多有趣的纹理。

../../_images/spatial_material24.png

有几种设置可以控制细节的使用方式。

Mask(遮罩):细节遮罩是一个黑白图像,用来控制纹理的混合位置。白色为细节纹理,黑色为常规材质纹理,不同深浅的灰色用于材质纹理和细节纹理的部分混合。

混合模式:有四种模式控制纹理的混合方式。

  • 融合:合并两个纹理的像素值。黑色时,仅显示材质纹理;白色时,仅显示细节纹理。灰色的值在两者之间创建一个平滑的混合。
  • 相加:将一个纹理与另一个纹理的像素值相加。与融合模式不同的是,两个纹理在蒙板的白色部分而不是灰色部分完全混合。原始纹理在黑色部分基本没有变化
  • 相减:将一个纹理的像素值与另一个纹理的像素值相减。第二种纹理在蒙版的白色部分被完全减去,在黑色部分只被减去一点,灰色部分根据具体实际纹理减去不同的程度。
  • 相乘:将上方纹理中每个像素的 RGB 通道数与下方纹理中相应像素的值相乘。

Albedo:在此处放置要混合的Albedo纹理。如果此插槽中没有任何内容,则默认情况下将其解释为纯白。

法线:在此处放置需要混合的法线纹理。如果这个槽中没有任何东西,它将被解释为一个平坦的法线贴图。即使材质未启用法线贴图也可以使用这个槽。

UV1和UV2

Godot每种材质支持两个UV通道。二级UV通常可用于环境遮挡或发射(烘焙的光照)。 UV可以缩放和偏移,这在使用重复纹理时很有用。

Triplanar Mapping(三平面映射)

UV1和UV2都支持三平面映射。 这是获得纹理坐标的另一种方法,有时称为“自动纹理”。 纹理在X,Y和Z中采样,并由法线混合。 可以在世界空间或对象空间中执行三平面映射。

在下图中,你可以看到所有基元如何与世界三平面共享相同的材质,因此砖纹理在它们之间平滑地继续。

../../_images/spatial_material25.png

Proximity and distance fade(接近和距离渐隐)

Godot允许材质通过彼此接近以及取决于与观察者的距离而隐去。 接近隐去对于诸如软粒子或大量水平滑地过渡到海岸是有用的。 距离渐隐对于仅在给定距离之后存在的光轴或指示物是有用的。

请记住,启用这些功能会启用Alpha混合,因此将它们用于整个场景通常不是一个好主意。

../../_images/spatial_material_proxfade.gif

Render priority(渲染优先级)

可以更改对象的渲染顺序,尽管这对于透明对象有用(或执行深度绘制但没有颜色绘制的不透明对象,例如地板上的裂缝)。