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


创建PBR纹理有多种应用和工作流程。您可以在自定义3D对象创建的建模和纹理阶段使用这些纹理,只要Roblox Studio 支持您使用的特定纹理贴图。
本指南提供了设置网格对象以使用PBR纹理贴图的说明,并描述了Roblox支持的PBR 纹理贴图的常见用例和最佳实践。在创建自己的表面时,请参见材料参考以获取常见材料值、图像比较和服装示例。
启用表面外观
您可以通过添加一个SurfaceAppearance对象来为任何MeshPart添加PBR纹理,该对象会覆盖原始分配的纹理。一般来说,您无法在游戏期间通过脚本修改SurfaceAppearance属性,因为引擎需要一些预处理才能显示这些图形。与添加基本纹理类似,每个纹理图像贴图必须指向适当上传的图像资产ID。
要为MeshPart启用表面外观:
在资源管理器窗口中,将鼠标悬停在MeshPart上,然后单击⊕按钮。
纹理贴图
Studio当前支持四种类型的PBR纹理贴图:颜色、法线、粗糙度和金属度。这些贴图中的每一种对应于对象表面外观的重要方面。纹理贴图只改变视觉外观,而不影响MeshPart对象的几何形状。
请参见以下示例,以获取Roblox支持的纹理贴图和其他资源的概述:
ColorMap属性设置表面的颜色数据,包括贴图中存在的任何透明度。有关更多信息,请参见颜色 (albedo)。



颜色(铝锭)
颜色或铝锭贴图决定了纹理的颜色,主要由颜色信息组成,几乎没有光照或纹理信息。为了进一步自定义,您还可以通过在铝锭纹理中添加不透明度来添加透明度。
Alpha模式
对于需要部分或完全透明区域的对象,例如草、叶子、蕾丝或污垢或污渍的贴花,您可以使用各种Alpha模式将透明度应用于颜色贴图。如果您的颜色贴图图像格式支持alpha通道,您可以应用灰度alpha贴图,其中0.0为透明,1.0为不透明。同样,当使用像.png这样的图像格式时,颜色贴图上的任何不透明度在资产上都作为透明度。
您可以通过设置以下AlphaMode值来应用两种不同的透明度行为:
- 透明 — 根据ColorMap中的透明度移除可见网格。这使网格变得透明,并且在存在透明度时不会显示原始网格颜色。
不透明
您可以使用Enum.AlphaMode.Opaque模式完全忽略ColorMap的alpha通道。在这种情况下,假定alpha值为1(完全不透明)。
以下示例演示Opaque模式如何使用白色物体进行参考:
叠加
您可以使用Enum.AlphaMode.Overlay来显示网格的原始颜色的部分。由于颜色贴图的透明区域暴露了底层颜色,因此您可以设计一种独特的纹理贴图,部分或完全显示网格的Color属性,用于自定义肤色或其他具有独特颜色的情况。
以下示例演示Overlay模式如何使用白色球体进行参考:
以下示例使用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表面颜色。
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通道透明的地方不适用。

法线
法线或表面贴图为您的表面添加纹理深度,行为类似于高度贴图。因此,效果可能会根据观察角度和光照环境而减弱或增强。当没有法线贴图时,值设置为0.0。
在下面的图中,您可以在网格参考和贴图参考之间切换,以比较法线贴图的值:



图像的R、G和B通道分别对应于局部表面向量的X、Y和Z分量。颜色均匀的图像[127, 127, 255]转换为完全平坦的法线贴图。Roblox仅支持OpenGL格式 - 切向空间的法线贴图。
法线贴图显著影响网格的视觉表面,并且可能突出纹理中的棱角缝。尽可能保持纹理缝合隐蔽,以避免网格出现视觉问题。
粗糙度
粗糙度或微表面贴图决定了光线如何在模型表面上散射。当粗糙度为0.0时,表面完全不散射光,导致材料产生更加锐利和明亮的反射和光泽。当粗糙度为1.0时,光线和反射均匀地散布在模型上,导致表面无反光,呈现哑光效果。
粗糙度可能会影响物体在不同角度的反射率,这被称为菲涅尔效应。有关详细信息和维持一致的反射行为的最佳实践,请参见fresnel。
以下图展示了各种粗糙度贴图值的比较:



菲涅尔
菲涅尔是指表面反射与当前观察角度的关系。Studio的菲涅尔处理旨在追求物理现实的准确性,尽管即使用于粗糙表面,在某些角度下仍可能会得到意想不到的高光贡献。在某些情况下,您可以通过将粗糙度贴图调整到约0.1来实现一致的光照响应。
尽管Roblox准确呈现这种光照效果,但表面的亮度和反射性可能在您的纹理内容创建软件(如Substance Painter)和Studio之间表现不一致。请参见服装示例以了解不同应用程序之间的渲染差异。
金属度
金属度决定了表面的反射率。金属度值的范围在0.0到1.0之间。如果不存在金属度贴图,则Roblox将默认值设置为0.0。
请参见以下图的各种金属度贴图值的比较:



不同的PBR渲染器使用不同的工作流程来处理反射率。Studio仅使用金属度工作流程,确定材料是非金属还是金属,有时被称为绝缘体或导体。
在大多数情况下,您应该将此值设置为0.0(非金属)或1.0(金属)。在创建具有适度反射性的更多不常见的表面(如缎或丝绸)时,您可以使用部分金属度值。这种做法可以微妙地伪造材料中的反射,以突出来自颜色/铝锭贴图的颜色,而不是在环境中反射的颜色。








