Skip to main content

贴图与材质

既然我们已经有了几何体,现在是时候为表面添加一些细节了。这是通过 materials(材质) 来实现的。materials(材质) 可以应用于几何体的表面,并结合一个着色器和一个或多个纹理。要创建一个材质,请在项目选项卡中右键单击,然后选择“Create > Material”。默认着色器是标准着色器,它是一种基于物理的着色器,也称为PBR着色器。

在深入了解之前,我们应该在场景中设置后期处理。这可以通过VRWorldToolkit轻松实现。在顶部菜单栏中,转到VRWorld Toolkit > Post Processing > Setup Post Processing,然后单击“OK”。默认设置应该是理想的,但如果您想进行调整,我建议您首先阅读 Silent 的这篇指南

我建议您前往 ambientCG 网站,在那里找一个您喜欢的木地板纹理,并检查其尺寸(我们稍后会需要这些)。确保尺寸相同,因为非正方形的纹理可能需要更多步骤、优化程度较低,压缩效果也不佳。下载1K PNG,解压缩,然后通过在项目选项卡中创建一个名为“_materials”的新文件夹,并将文件拖入Unity以导入。

这将是最理论化的课程,因为理解PBR着色器的工作原理是制作正确、美观材料的必要条件。只有一个PBR着色器可以确保所有材料都应用了一致的光照,就像现实生活中一样。PBR基于真实的物理原理,所以要理解PBR,您必须了解光在现实世界中如何与表面相互作用。

当光线照射到表面时,部分光线会被反射。一些光线会被材料吸收,但反射的光线使它们可见。被吸收的波长和没有被吸收的波长共同确定表面的颜色。您可以通过点击albedo(有时也称为diffuse或base color)的颜色选择器来设置基本颜色。

下一个参数是镜面反射,它决定了光线在表面上的反射方式。100% 镜面反射的表面将反射所有以相同角度击中它的光线。在光谱的另一端是漫反射,光线在材料内部反弹,然后以随机方向反射。

在“shader dropdown”中,您会看到一个标准着色器和一个标准(specular)着色器。这两种着色器对PBR的理解方式不同,因为金属和非金属(即电介质)之间存在截然不同。电介质通常没有镜面反射成分,而金属通常没有漫反射成分。镜面反射工作流程给了艺术家更多的控制,但也允许创造在物理上不可能的材质。因此,金属工作流程通常更简单、更直观;在使用具有镜面反射贴图的材质时,建议使用金属工作流程。

对于Standard shader上的另一个滑块:平滑度,这个滑块控制反射的清晰度。许多材料,如许多金属,可能具有很强的反射性,但反射仍然可能模糊。这是由于表面上许多微小的缺陷,虽然肉眼看不见,但仍然影响光线的反射角度。

PBR的另一个关键组成部分是菲涅耳,它会自动应用;一个表面在更强烈的角度下反射得更多。此外,对于透明表面,如水在湖面上,它们在垂直于表面时具有最大透射性,在平行于表面时具有最大反射性。您可以在球形材质预览中轻松看到菲涅耳效果。

现在让我们把阿尔贝多映射的木地板放到材料的正确位置!您应该可以看到纹理如何在表面上平铺,但是如果我们引入一个2米高的胶囊作为玩家参考,木板看起来太小了。因此,为了获得正确的平铺比例,我们必须从我们获取纹理的网站上的尺寸(以米为单位),拿出计算器,并用1除以这些尺寸。结果是我们要插入材料中的X和Y平铺插槽的内容,现在它是正确的比例。
当您四处寻找纹理时,您会看到漫反射和阿尔贝多,这两者都应该进入基色槽。这两种类似纹理类型之间的区别在于,漫反射纹理具有无方向性的阴影(例如,由于裂缝,光线更难到达),而阿尔贝多纹理将所有阴影信息移除并放入环境光遮挡或AO映射中。这样做的好处是,材料可以响应光照的变化,例如对着它照射手电筒。

让我们将AO映射插入我们的材料!为了使其正确显示,请在项目选项卡中单击纹理,并在检查器中取消选中标记为“sRGB(颜色纹理)”的部分,因为这是一个灰度纹理。

大多数表面都展示出细节,这些细节在几何方面无法很好地再现。这就是法线贴图的作用。将其放入适当的插槽中,单击出现的“修复现在”按钮,现在您应该看到材料现在真的“弹出”。法线贴图所做的是改变每个纹理像素中光线反射的角度,这也称为纹素。
(法线贴图中的每个像素都表示一个向量,其中红色表示水平,绿色表示垂直,蓝色表示深度。法线贴图中的“默认”蓝紫色表示50%红色,50%绿色和100%蓝色,这表示相应表面照明角度没有变化。)

高度贴图用于在材料中模拟深度。这也应该设置为非sRGB,如AO贴图。当我们应用它时,我们应该看到材料的变化,但可能看起来有点不对劲。这是因为Unity中使用了一种称为“视差映射”的技术来近似它们,但当以锐角观看时它会断裂。通常,我也不将强度设置得很高,无论是默认的0.02还是更低。

我们谈到了很多关于反射的内容,您应该看到木地板的反射看起来不是很准确。它看起来像是反射天空!这是因为物体的反射设置为默认的天空盒。要更改此设置,请在层次结构中右键单击并转到“照明”>“反射探测器”。

反射探测器本质上是一个360度相机,捕捉其周围的球形视图。得到的图像称为立方体贴图,用于物体的反射。

将反射探测器放在房间的中央。在检查器窗口中的反射探测器组件下,应该有两个按钮,首先单击左侧的按钮。这是边界,边界内的对象将受到探测器反射的影响。右侧是探测器原点,或者反射探测器将从哪里捕获。

现在让我们为窗户制作材料!创建一种新材料,将其命名为玻璃,并将其拖到窗户上。将渲染模式更改为透明,选择阿尔贝多颜色窗口,并在RGBA通道下减小A通道到0。A通道代表透明度,它控制透明度。现在将平滑度增加到最大。现在我们有了一个可以透过的窗户!请注意,如果您增加金属性或高光,透明度会降低。请记住,增加高光不仅会减少基色,还会降低透明度。

要理解的下一个重要概念是材料槽。每个多边形都分配有一个材料,材料槽是网格的一部分。当您单击对象时,可以在检查器窗口的底部看到分配的材料。

我们应该始终压缩在世界中使用的纹理,因为它们将被访问该世界的每个人下载。为此,请在检查器中单击纹理文件并选中“crunch compression”。现在,您的纹理将有更小的文件大小,但以压缩伪影为代价(但不会有人注意到或关心)。然后单击Android图标并选中“覆盖Android设置”。然后在格式下,单击RGBA压缩ASTC 6x6块(这种压缩算法将确保我们的纹理在Quest上看起来不会很糟糕。或者,您可以切换到4x4块以获得更好的压缩,但文件大小更大)。我们还应该减少两个平台上的最大纹理大小;这也将对世界的下载大小产生最大的影响。

经过仔细阅读您提供的中文论文,我对其进行了润色和修改。改动内容如下:

有一些其他的设置我们应该改变。在“高级”选项下,选中“流式传输Mip地图”(VRChat所需),将过滤器更改为“三线性”,并将Aniso级别更改为8。接下来,点击右上角的滑块图标跳转到检查器(在?气泡和3个垂直点之间)以创建预设。这样,从现在开始导入的每个纹理都将采用此预设的设置(从UnityPackage导入的纹理除外)。

另外,您还可以进入VRWorldToolkit>Quick Functions>Mass Texture Importer,在此一次性更改场景中的所有纹理。当世界构建完成后,您可以通过进入VRWorld Toolkit>World Debugger>Build Report,查看世界中所有资产按文件大小从大到小排序的报告。

不幸的是,Unity的标准着色器不支持直接插入粗糙度贴图。粗糙度贴图在整个材质中提供了不同的平滑度,增加了现实感(例如,潮湿的道路上有水坑,水坑会很光滑,而道路则不会)。Unity仅支持将平滑度贴图(即光泽贴图的逆)作为金属或阿尔法纹理的Alpha通道。实现粗糙度贴图的方法有很多:

  • 最简单的方法是使用不同的着色器,如Autodesk Interactive(或Moochie标准、Silent Filamented或其他社区着色器,在后续课程中介绍)
  • 使用Add-on,如SmartTexture将粗糙度贴图打包到阿尔法或金属纹理中,检查颜色反转并使用亮度(使用时存在崩溃风险,别忘了保存!)
  • 使用图像编辑软件,如GIMP为阿尔法或金属纹理创建Alpha通道和图层遮罩,反转粗糙度贴图,复制并粘贴为Alpha通道并导出

image.png

这个木纹纹理就是一个很好的例子,展示了平滑度贴图在不同材质之间的差异;需要注意的是,钉子具有较高的光泽度和光滑度,而木材具有较少的光泽度和变化的中间光滑度,这与纹理的颗粒相匹配。

在UV窗口和UV缝合方面,单击 ProBuilder 选项卡中的UV编辑器。UV坐标告诉网格如何将纹理投影到面上。在UV编辑方面,ProBuilder会为您完成大部分工作,但最重要的是了解如何进行UV缝合。要执行此操作,请在打开UV窗口的情况下,单击场景视图中的某个面,然后按住Shift并单击另一个相邻面。通过这样的操作,UV将缝合在一起,使纹理在面之间连续无缝。

https://youtu.be/bigj13SU1rs

https://youtu.be/d3_2h4cN4cY

现在您可以探索其他纹理来装饰房间,然后进入下一个阶段:照明!