空间材质

简介

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

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

There are three ways to add a SpatialMaterial to an object. It can be added in the Material property of the mesh. It can be added in the Material property of the node using the mesh (such as a MeshInstance node), or in the Material Override property of the node using the mesh.

../../_images/add_material.png

If you add a material to the mesh itself, every time that mesh is used it will have that material. If you add a material to the node using the mesh, the material will only be used by that node, it will also override the material property of the mesh. If a material is added in the Material Override property of the node, it will only be used by that node. It will also override the regular material property of the node and the material property of the mesh.

标志

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

../../_images/spatial_material1.png

透明

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

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

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

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

Use Shadow to Opacity

Lighting modifies the alpha so shadowed areas are opaque and non-shadowed areas are transparent. Useful for overlaying shadows onto a camera feed in AR.

无阴影

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

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

../../_images/spatial_material26.png

顶点照明

由于深度预通过,Godot的每像素成本或多或少均匀。 所有照明计算都是通过在每个像素上运行照明着色器来完成的。

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

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

../../_images/spatial_material2.png

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

没有深度测试

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

禁用此选项对于在世界空间中绘制指标最有意义,并且与Material的* Render Priority *属性非常相似(请参阅本页底部)。

../../_images/spatial_material3.png

使用磅值

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

世界三平面

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

固定大小

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

不接受阴影

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

禁用环境光

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

Ensure Correct Normals

Fixes normals when non-uniform scaling is used.

顶点颜色

此设置允许选择默认情况下对来自3D建模应用程序的顶点颜色执行的操作。 默认情况下,它们会被忽略。

../../_images/spatial_material4.png

用作反照率

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

是sRGB

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

参数

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

../../_images/spatial_material5.png

漫反射模式

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

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

镜面反射模式

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

  • ** ShlickGGX:** 现在PBR 3D引擎使用的最常见的blob。
  • ** Blinn:** 在上一代发动机中很常见。 现在不值得使用,但为了兼容性而留在这里。
  • ** Phong:** 同上。
  • 香椿: 创建一个香椿斑点,根据粗糙度改变大小。
  • 禁用: 有时候blob阻碍了。走开!
../../_images/spatial_material7.png

混合模式

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

  • 混合: 默认混合模式,alpha控制对象可见的程度。
  • 添加: 物体混合添加,非常适合耀斑或类似火焰的效果。
  • ** Sub:** 减去对象。
  • ** Mul:** 物体成倍增加。
../../_images/spatial_material8.png

剔除模式

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

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

深度绘制模式

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

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

行宽

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

点大小

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

广告牌模式

为绘图材质启用广告牌模式。 这可以控制对象面向摄像头的方式:

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

以上选项仅适用于Particle Billboard。

Billboard Keep Scale

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

增长

沿法线指向的方向生成对象顶点:

../../_images/spatial_material10.png

这通常用于创建廉价的轮廓。 添加第二个材质传递,使其变为黑色和无阴影,反向剔除(剔除前面),并添加一些增长:

../../_images/spatial_material11.png

使用Alpha Scissor

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

../../_images/spatial_material12.png

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

材质颜色,地图和渠道

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

反照率

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

反射颜色和纹理可以一起使用,因为它们相乘。

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

金属的

由于其简单性,Godot使用金属模型而不是竞争模型。 此参数定义材质的反射程度。 反射越多,漫射/环境光的影响越小,反射的光越多。 这种模式被称为“节能”。

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

粗糙度

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

../../_images/spatial_material14.png

发射

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

../../_images/spatial_material15.png

法线

法线贴图允许您设置表示更精细形状细节的纹理。 这不会修改几何体,只会修改光的入射角。 在Godot中,只使用法线贴图的红色和绿色通道来实现更广泛的兼容性。

../../_images/spatial_material16.png

轮缘

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

../../_images/spatial_material17.png

轮辋大小取决于粗糙度,并且有一个特殊参数来指定它必须如何着色。 如果* Tint 为“0”,则灯的颜色用于轮辋。 如果 Tint *是“1”,则使用材质的反照率。 使用中间值通常效果最佳。

清漆

This feature is only available when using the GLES3 backend.

The Clearcoat parameter is used to add a secondary pass of transparent coat to the material. This is common in car paint and toys. In practice, it’s a smaller specular blob added on top of the existing material.

各向异性

This feature is only available when using the GLES3 backend.

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

../../_images/spatial_material18.png

环境光遮蔽

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

../../_images/spatial_material19.png

深度

This feature is only available when using the GLES3 backend.

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

../../_images/spatial_material20.png

次表面散射

This feature is only available when using the GLES3 backend.

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

../../_images/spatial_material21.png

传输

这可以控制从被点亮的一侧(可见光到光线)传输到暗侧(与灯光相反)的光线。 这适用于植物叶子,草,人耳等薄物体。

../../_images/spatial_material22.png

折射

This feature is only available when using the GLES3 backend.

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

../../_images/spatial_material23.png

详情

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

../../_images/spatial_material24.png

UV1和UV2

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

Triplanar映射

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

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

../../_images/spatial_material25.png

接近和距离褪色

Godot允许材质通过彼此接近以及取决于与观察者的距离而褪色。 接近褪色对于诸如软颗粒或大量水的效果是有用的,并且平滑地混合到海岸。 距离淡化对于仅在给定距离之后存在的光轴或指示器是有用的。

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

../../_images/spatial_material_proxfade.gif

渲染优先级

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