PBR纹理

*此内容使用人工智能(Beta)翻译,可能包含错误。若要查看英文页面,请点按 此处

基于物理的渲染(PBR)纹理允许您通过在单个对象上使用多种类型的纹理图像或贴图来表示逼真的阴影和光照。结合多种纹理贴图可以更准确地模拟任何照明环境中的颜色、粗糙度和反射率,并可以增强您资产和环境的视觉元素。

一个拥有锁子发型的人形头像,穿着光泽外套、带有贴花的牛仔裤和靴子。
一个短发的人形头像,穿着皮夹克、七分裤和橙色鞋子。

创建PBR纹理有多种应用和工作流程。您可以在自定义3D对象创建的建模和纹理阶段使用这些纹理,只要Roblox Studio 支持您使用的特定纹理贴图。

本指南提供了设置网格对象以使用PBR纹理贴图的说明,并描述了Roblox支持的PBR 纹理贴图的常见用例和最佳实践。在创建自己的表面时,请参见材料参考以获取常见材料值、图像比较和服装示例。

启用表面外观

您可以通过添加一个SurfaceAppearance对象来为任何MeshPart添加PBR纹理,该对象会覆盖原始分配的纹理。一般来说,您无法在游戏期间通过脚本修改SurfaceAppearance属性,因为引擎需要一些预处理才能显示这些图形。与添加基本纹理类似,每个纹理图像贴图必须指向适当上传的图像资产ID。

要为MeshPart启用表面外观:

  1. 资源管理器窗口中,将鼠标悬停在MeshPart上,然后单击⊕按钮。

  2. 从上下文菜单中插入SurfaceAppearance

    在Studio的资源管理器窗口中,SurfaceAppearance对象作为MeshPart的子对象。

    当您准备将纹理贴图添加到SurfaceAppearance对象时,可以单击属性窗口中的每个贴图属性并输入资产ID。

纹理贴图

Studio当前支持四种类型的PBR纹理贴图:颜色法线粗糙度金属度。这些贴图中的每一种对应于对象表面外观的重要方面。纹理贴图只改变视觉外观,而不影响MeshPart对象的几何形状。

请参见以下示例,以获取Roblox支持的纹理贴图和其他资源的概述:

ColorMap属性设置表面的颜色数据,包括贴图中存在的任何透明度。有关更多信息,请参见颜色 (albedo)

一幅完全填充的图像,主要为红色,背景中有各种黑色斑点和白色划痕。
示例贴图
一个空白的白色球体,背景较暗。
示例网格
一个红色球体,表面有黑色斑点和白色划痕,背景较暗。
网格和纹理

颜色(铝锭)

颜色铝锭贴图决定了纹理的颜色,主要由颜色信息组成,几乎没有光照或纹理信息。为了进一步自定义,您还可以通过在铝锭纹理中添加不透明度来添加透明度

Alpha模式

对于需要部分或完全透明区域的对象,例如草、叶子、蕾丝或污垢或污渍的贴花,您可以使用各种Alpha模式将透明度应用于颜色贴图。如果您的颜色贴图图像格式支持alpha通道,您可以应用灰度alpha贴图,其中0.0为透明,1.0为不透明。同样,当使用像.png这样的图像格式时,颜色贴图上的任何不透明度在资产上都作为透明度。

您可以通过设置以下AlphaMode值来应用两种不同的透明度行为:

  • 不透明 — 忽略ColorMap的alpha通道,直接使用颜色贴图中的颜色值。
  • 叠加 — 将ColorMap叠加在底层网格的MeshPart.Color上。使用叠加模式的颜色贴图在透明度存在的地方显示网格的基础颜色。这是默认设置。
  • 透明 — 根据ColorMap中的透明度移除可见网格。这使网格变得透明,并且在存在透明度时不会显示原始网格颜色。
  • 遮罩着色 — 将着色的ColorMap与未着色的ColorMap混合。
不透明

您可以使用Enum.AlphaMode.Opaque模式完全忽略ColorMap的alpha通道。在这种情况下,假定alpha值为1(完全不透明)。

以下示例演示Opaque模式如何使用白色物体进行参考:

带透明度的波点纹理。背景完全透明。
示例颜色/铝锭贴图,带透明度
一个白色的环形物体在一个平面上。
示例网格对象(白色)
这个环形物体表面散布着波点图案。透明度被忽略。
AlphaMode 设置为 Opaque 使用参考贴图和材料
叠加

您可以使用Enum.AlphaMode.Overlay来显示网格的原始颜色的部分。由于颜色贴图的透明区域暴露了底层颜色,因此您可以设计一种独特的纹理贴图,部分或完全显示网格的Color属性,用于自定义肤色或其他具有独特颜色的情况。

以下示例演示Overlay模式如何使用白色球体进行参考:

一幅完全填充的半重复模式的图像,包含8乘8的小浅蓝色方块。背景是棋盘状的,以指示透明度。
示例颜色/铝锭贴图,带透明度
一个白色的空球体背景较暗。
示例网格对象(白色)
一个白色的球体,表面散布着小蓝色方块。
AlphaMode 设置为 Overlay 使用参考贴图和材料

以下示例使用Overlay模式来显示自定义角色的原始肤色:

一幅完全填充的3D人形模型纹理贴图的图像。图像的不同部分棋盘状或部分棋盘状,以指示不同级别的透明度。
包含透明部分的颜色贴图,以暴露原始网格颜色
四个人形模型,肤色不同:浅棕色、黑色、白色、深绿色。
使用Overlay模式的单一颜色贴图的多个角色变体

请参见自定义肤色以获取有关优化皮肤和类似应用的叠加的更多详细信息。

透明

您可以使用Enum.AlphaMode.Transparency模式通过移除网格的可见部分来创建复杂或极为精细的对象,例如蕾丝或网状物,而不需要雕刻网格几何体。由于这不会影响网格对象的几何体,使您能够创建详细对象,而不会对复杂网格模型造成性能影响。

以下示例演示了该模式下部分和完全透明如何在视觉上移除网格的某些部分:

一个表面呈篮筐状的球体。
无透明度
一个表面呈正三角形图案的球体部分不可见。
部分透明度
一个表面呈正三角形图案的球体完全不可见。
完全透明

Transparency模式有两种结果,具体取决于MeshPart.Transparency是设置为0还是至少0.02,尽管数值精度可能导致如0.01这样的较小值触发不透明透明度。

  • 当使用alpha剪切出大多数不透明物体的形状,如树木、蕾丝织物和网状物时,应将MeshPart.Transparency设置为0。当表面的一部分完全不透明时,Roblox引擎可以通过深度基于遮挡来呈现它们。不透明表面通常也与如DepthOfFieldEffect、玻璃和水折射以及水反射等深度基于效果协同工作更好。
  • 当使用alpha为半透明物体或具有平滑透明度渐变的物体添加细节时,应将MeshPart.Transparency设置为至少0.02。这改善了污损窗户和边缘柔和的羽毛等物体的混合质量,但并非所有效果均有效。
遮罩着色

您可以使用Enum.AlphaMode.TintMask模式将SurfaceAppearance.Color着色应用于表面的选择区域。着色在alpha通道完全可见的地方最为强烈,并在alpha通道透明的地方不适用。

一种温暖、浅色砖纹理,砖块之间有较深的灰色纹理的灌浆。
示例砖纹理,展示砖面的颜色细节以及砖块之间的灌浆。

颜色着色

您可以通过修改SurfaceAppearance.Color属性为颜色贴图应用着色。着色不会影响性能,您可以通过重新利用单个颜色贴图并应用不同的着色来节省内存。使用颜色着色可以在您的MeshPart PBR纹理之间创造额外的低成本变化,或者实时编程修改您的PBR表面颜色。

一座带有默认黄色着色和反射性翡翠样性质的雕像。
来自The Mystery of Duvall Drive的雕像网格,没有着色。
一座带有红色着色的雕像,并且从其他纹理贴图中继续保持光泽反射性。
雕像网格,Color设置为红色。
一座带有绿色着色的雕像,并且从其他纹理贴图中继续保持光泽反射性。
雕像网格,Color设置为绿色。

SurfaceAppearance.Color着色作为乘数应用,因此最终效果是Color3(纹理像素颜色)乘以SurfaceAppearance.Color。这意味着在几乎白色的灰度颜色中创建原始SurfaceAppearance.ColorMap会在应用该属性时产生最强的着色效果。

着色仅适用于SurfaceAppearance.ColorMap,而不适用于MeshPart.Color。在应用透明度时,您可以继续使用alpha通道。

SurfaceAppearance.AlphaMode设置为Overlay并且存在alpha通道时,会显示底层的MeshPart.Color,并且SurfaceAppearance.Color着色仅适用于可见的SurfaceAppearance颜色贴图。

SurfaceAppearance.AlphaMode设置为TintMask并且存在alpha通道时,alpha通道控制SurfaceAppearance.Color着色的数量。着色在alpha通道完全可见的地方最为强烈,而在alpha通道透明的地方不适用。

一块悬浮的正方形平面,带有青色石板纹理,逐渐从左侧的完全透明变为右侧的完全不透明。悬浮平面下方有一条细横条,逐渐变化,从左侧的黑色到右侧的白色。
AlphaMode设置为Transparency。底部灰度渐变条表示alpha值。MeshPart.Color设置为红色,SurfaceAppearance.Color设置为青色。

法线

法线表面贴图为您的表面添加纹理深度,行为类似于高度贴图。因此,效果可能会根据观察角度和光照环境而减弱或增强。当没有法线贴图时,值设置为0.0

在下面的图中,您可以在网格参考和贴图参考之间切换,以比较法线贴图的值:

一颗光滑的粘土球体。
0.0
一颗粘土球体,表面有适度的岩石状纹理。
0.5
一颗有着极为岩石状表面的粘土球体。
1.0

图像的RGB通道分别对应于局部表面向量的XYZ分量。颜色均匀的图像[127, 127, 255]转换为完全平坦的法线贴图。Roblox仅支持OpenGL格式 - 切向空间的法线贴图。

法线贴图显著影响网格的视觉表面,并且可能突出纹理中的棱角缝。尽可能保持纹理缝合隐蔽,以避免网格出现视觉问题。

粗糙度

粗糙度微表面贴图决定了光线如何在模型表面上散射。当粗糙度为0.0时,表面完全不散射光,导致材料产生更加锐利和明亮的反射和光泽。当粗糙度为1.0时,光线和反射均匀地散布在模型上,导致表面无反光,呈现哑光效果。

粗糙度可能会影响物体在不同角度的反射率,这被称为菲涅尔效应。有关详细信息和维持一致的反射行为的最佳实践,请参见fresnel

以下图展示了各种粗糙度贴图值的比较:

一颗蓝色光泽的球体,标示粗糙度贴图完全为黑色。
0.0
一颗蓝色半光泽的球体,标示粗糙度贴图为中灰色。
0.5
一颗蓝色哑光的球体,标示粗糙度贴图完全为白色。
1.0

菲涅尔

菲涅尔是指表面反射与当前观察角度的关系。Studio的菲涅尔处理旨在追求物理现实的准确性,尽管即使用于粗糙表面,在某些角度下仍可能会得到意想不到的高光贡献。在某些情况下,您可以通过将粗糙度贴图调整到约0.1来实现一致的光照响应。

尽管Roblox准确呈现这种光照效果,但表面的亮度和反射性可能在您的纹理内容创建软件(如Substance Painter)和Studio之间表现不一致。请参见服装示例以了解不同应用程序之间的渲染差异。

金属度

金属度决定了表面的反射率。金属度值的范围在0.01.0之间。如果不存在金属度贴图,则Roblox将默认值设置为0.0

请参见以下图的各种金属度贴图值的比较:

一颗棕色球体,带有光斑,图例显示金属度贴图完全是黑色的。
0.0
一颗棕色球体,带有光斑和一些反射性,图例显示金属度贴图为中灰色。
0.5
一颗棕色球体,带有明显的光斑和丰富的反射性,图例显示金属度贴图完全是白色的。
1.0

不同的PBR渲染器使用不同的工作流程来处理反射率。Studio仅使用金属度工作流程,确定材料是非金属还是金属,有时被称为绝缘体导体

在大多数情况下,您应该将此值设置为0.0(非金属)或1.0(金属)。在创建具有适度反射性的更多不常见的表面(如缎或丝绸)时,您可以使用部分金属度值。这种做法可以微妙地伪造材料中的反射,以突出来自颜色/铝锭贴图的颜色,而不是在环境中反射的颜色。

©2026 Roblox Corporation、Roblox、Roblox 标志及 Powering Imagination 是我们在美国及其他国家或地区的注册与未注册商标。