For the complete documentation index, see llms.txt. This page is also available as Markdown.

材质

了解导入到 Decentraland 的 3D 模型支持哪些材质属性和纹理。

材质被嵌入到一个 .gltf 或 .glb 文件。

💡 提示: 安装 Decentraland Tools Blender 插件。它包含一些实用功能,可帮助你编辑和导出 3D 模型、穿戴物和表情动作。

本文档指的是作为 3D 模型一部分导入的材质。对于通过代码定义并应用于基本形状的材质,请参阅 材质 .

着色器支持

并非所有着色器都可用于导入到 Decentraland 的模型中。请确保使用以下之一:

  • 标准材质: 支持任何着色器,例如漫反射、高光、透明度等。

  • PBR(基于物理的渲染)材质:这种着色器更灵活,因为它包含漫反射、粗糙度、金属度和发光等属性,可让你配置材质与光线的交互方式。

下图显示两个使用相同颜色和纹理创建的相同模型。左侧模型使用了所有 PBR 材质,其中一些包括 金属度, 透明度,以及 发光度。右侧模型使用了所有 标准 材质,其中一些包括 透明度 和 发光度.



目前可与 Decentraland 引擎配合使用的 PBR 属性

  • 基础颜色

  • 金属度

  • 粗糙度

  • 高光

  • 发光

  • 发光强度

  • Alpha

  • 法线



为了在世界中直观看到这些属性的表现,你可以前往这个 测试世界 来查看不同对象和材质,以及它们如何与灯光和世界环境互动。



基础/漫反射颜色

定义对象表面的基础颜色。它本身不会受到光照影响,因此通常会与粗糙度、金属度、高光等其他节点结合使用。

金属度

金属着色器是用于模拟金属表面外观的一种渲染技术。金属着色器会考虑金属的物理特性及其与光的相互作用,以呈现金属特有的光亮和反射效果。



粗糙度

粗糙度材质与光线如何与材质表面交互的真实模拟有关。通常会使用粗糙度贴图为模型表面提供一系列“光滑”或“粗糙”的变化。一般会使用灰度值纹理贴图来提供这类信息。



该属性在非金属和金属材质模型之间进行混合。值为 1.0 时,会得到完全的镜面反射,并由基础颜色着色,不包含漫反射或透射。值为 0.0 时,材质由一个漫反射或透射基础层和上方的镜面反射层组成。

高光

在基于物理的渲染(PBR)着色器中,高光属性指的是光线与表面的反射率和光泽度之间的交互。镜面反射是光线在表面上的镜面式反射。在 PBR 中,该属性用于控制表面对光线进行镜面式反射的程度。金属等材质通常具有较高的镜面反射,会产生锐利而明亮的高光;而塑料等非金属材质的镜面反射较低,会产生更宽、更柔和的高光。



Alpha

你可以将材质设置为 透明。透明材质可在不同程度上被看穿,这取决于它们的 透明度。要做到这一点,请启用材质的透明属性,然后将其 透明度 设置为所需数值。Alpha 为 1 会使材质完全不透明,Alpha 为 0 则会使其不可见。

下图显示两个使用标准材质创建的相同模型。左侧仅使用不透明材质,右侧在部分区域同时使用了透明和不透明材质。



透明度主要有两种模式: Alpha 裁剪 和 Alpha 混合。主要区别如下:

  • Alpha 裁剪: Alpha 裁剪会根据灰度值的裁剪阈值,将渲染结果绝对化为 0 或 1。之前的颜色会被表面颜色覆盖,但前提是 alpha 值高于裁剪阈值。


  • Alpha 混合: Alpha 混合会在 0 和 1 之间插值。你可以使用 alpha 混合将表面颜色叠加在之前的颜色之上。



发光

你也可以将材质设置为 发光。发光材质会发出自身的光。请注意,在渲染时,它们并不会真正照亮场景中的附近对象,只是看起来周围有一圈模糊的光晕。

下图显示两个使用标准材质创建的相同模型。右侧模型的部分表面带有发光的发光材质。




要在 Blender 中让材质发光,只需添加一个 发射 着色器到材质上。

发光强度

发出光的强度。值为 1.0 时,可确保图像中的对象与发光颜色完全相同,即使其“无阴影”。



你可以在 测试世界 查看发光强度在世界中的表现

法线

PBR 着色器中的“normal”节点是用于控制材质表面法线的基本组件。法线是定义某个点处表面垂直方向的向量,它们在决定光线如何与表面交互方面起着至关重要的作用。



顶点绘制

Decentraland 引擎目前不支持 3D 模型的顶点绘制。

材质限制

请注意,每个地块的材质限制为:

log2(n+1) x 20 个场景中的材质数量。它包括作为模型一部分导入的材质。

需要注意的是,每种材质对于每个对象都代表一次 draw call,因此尽量将材质数量保持在最低并尽可能复用材质至关重要,例如使用纹理图集等技术,这也有助于场景中的资源保持统一风格。

材质命名

为了保持有序且健康的美术流程,我们建议正确命名材质。一个方法是使用以下命名规范。

例如,假设我们做了两棵不同的树,一棵是适合春天、会发光的树,另一棵是适合冬天、冰冷且金属感的树。我们可以将材质命名为: "TreeSpring_Emissive_MAT" 以及另一个 "TreeWinter_Metallic_MAT"

总之,

  • 🟢 建议 使用以对象和分类开头的名称: "Wood_Oak_MAT", "SciFiFence_Metallic_MAT"等。

  • 🔴 避免 使用如下名称: "Material009", "material1",这会使场景和模型非常难以追踪和分析。

覆盖 glTF 材质

你可以覆盖一个 glTF 模型的材质,使用 GltfNodeModifiers 组件。请参阅 修改 glTF 材质 了解更多详情。

材质最佳实践

  • 如果你的场景包含多个使用相同纹理的模型,请将纹理作为外部文件引用,而不是将其嵌入 3D 模型中。

嵌入式纹理会为每个模型重复一份,并增加场景体积。 .glb 文件默认会嵌入纹理,但你可以使用 glTF pipeline 将其提取到外部。

注意:在引用一个不会被嵌入的纹理文件后,请确保该文件不会被移动或重命名,否则对该文件的引用将会丢失。该文件也必须位于场景文件夹内,这样它才能随场景一起上传。

  • 设置材质透明度时,请尽量始终使用 Alpha 裁剪 而不是 Alpha 混合,除非你确实需要一个半透明材质(例如玻璃)。这样可以避免引擎将错误的模型渲染到另一个模型前面的问题。

  • 作为经验法则,请记得始终设置 背面剔除 到你的材质中。这会让你的场景性能更好,因为引擎只会渲染模型的可见面。只有在以下情况才取消勾选 背面剔除 :当你需要模型双面渲染时(例如,由 3D 平面制作的树叶组)。


  • 使用 Decentraland 默认纹理 ,这些纹理已由玩家预加载,可让你的资源渲染快得多。

  • 阅读 本文 以了解使用 PBR 纹理于 glTF 模型的完整美术流程的详细概述。

  • 你可以在以下位置找到关于如何使用 Blender 创建与 glTF 兼容材质的详细参考: Blender 文档 .

  • 在以下网站查找免费的高质量 PBR 纹理: cgbookcase .

最后更新于