Skip to main content

贴图与材质

既然我们已经有了几何体,那现在也是时候为表面添加一些细节了。此类操作需要通过 materials(材质)实现,materials(材质)可以应用于几何体的表面,并且可以将一个着色器,一个或多个纹理结合在一起。

创建 materials(材质)

要创建一个 materials(材质),请在项目选项卡中右键单击,然后选择 Create > Material。默认着色器是一种标准着色器,它是一种基于物理的着色器,也被称为 PBR 着色器

Post Processing(后处理)

在深入了解 PBR 着色器 之前,我们应该先在场景中设置 post processing(后处理)。此操作可以通过 VRWorldToolkit 轻松实现。在顶部菜单栏中点击 VRWorld Toolkit > Post Processing > Setup Post Processing,然后单击 OK 即可。默认设置应该是足够理想的,但如果您想进行更多的调整,我建议您首先阅读 Silent 的这篇指南

获取材质

您可以前往 ambientCG 网站寻找您喜欢的木地板纹理,检查一下它的大小尺寸(我们稍后会到)。

请确保纹理尺寸为正比,因为非正方形纹理可能会需要更多的处理步骤,优化程度更低,压缩效果也不理想。

找到并下载 1K PNG 格式的纹理文件,然后进行解压缩。

接下来在 project(项目窗口)中创建一个名为 _materials 的新文件夹,将解压缩后的文件拖入创建好的 Unity 文件夹内进行导入即可。

PBR 着色器

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

取色器(color picker)

当光线照射到表面时,一部分被反射,一部分被材料吸收。反射的光线使物体可见,而被吸收的波长则决定了表面的颜色。您可以通过点击 albedo(有时也称为 diffuse 或 base color)的 选择器(color picker)来设置基本颜色。

在 选择器(color picker)窗口中,红色、绿色和蓝色通道位于底部。上方则是选择器 UI,其中上下方向控制色值,左右方向控制饱和度,周围的轮盘则用于控制色调。然而,这种设置存在误导性,因为当您增加饱和度时,色值会随之减少。更令人困惑的是,色值减少的程度取决于色调,其中黄色是最亮的,蓝色是最暗的。以下此处视频 更详细地介绍了这个问题,需要时常注意。

specularity(镜面反射)参数

下一个参数是 specularity(镜面反射),它决定了光线在表面上的反射方式。100% specular(反射)的表面会将所有击中它的光线以相同角度进行反射。而另一个极端就是 diffuse reflection(漫反射),光线将会在材质随机内部反弹,然后反射至随机方向。

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

Smoothness(平滑度)参数

Standard标准(standard)着色器 shader上海上还有另一个参数:smoothness(平滑度),此滑块控制反射的清晰度。许多材料,如许多金属,可能都具有很强的反射性,但反射仍然可能是模糊的。这由于表面上许多微小的缺陷造成,虽然肉眼看不见,但仍然影响光线的反射角度。

fresnel(菲涅耳)参数

PBR 的另一个关键组成部分是(fresnel)菲涅耳,它会自动应用;一个表面与光线所处角度越大反射得更多。此外,对于透明表面来说如水在湖面上它们视线在垂直于表面时具有最大 透射性 最大,在平行于表面时具有最大 反射性 最大。您可以在 spherical material previews(球形材质预览)中轻松看到菲涅耳效果。

地板材质实践

现在让我们把阿尔贝多albedo(反射率)纹理映射的木地板放到材料的正确位置上。应该可以看到纹理如何平铺在表面上平铺,但如果我们引入一个2米高的胶囊作为玩家参考,木板看起来会显得太小。因此,为了获得正确的平铺比例,我们必须需要根据我们纹理源网站获取纹理的网站上的尺寸(以米为(单位:米)拿出使用计算器,并用计算出1除以这些尺寸。结果是我们要插的值,将其填入材料中的X和Y平 X 和 Y 平插槽的内容参数现在它是从而得到正确的比例。
当您四处

diffuse(漫反射)/ albedo(反射率)贴图

寻找纹理时,您会看到 diffuse(漫反射阿尔贝多 albedo(反射率)两种类型的纹理这两者它们都应该被放 Matreial(材料)础颜通道种类似纹理类型之间的区别在于漫反射纹理具有包含了无方向性的阴影信息(例如由于裂缝,光线更以照射的区域),而阿尔贝多反射率纹理将所有阴影信息移除并放入到 AO(环境光遮挡或AO映射蔽)贴图中。这样做的好处是材料可以根据光照变化做出响应光照的变化,例如对着它照射手电筒时也能正确呈现

让我们将AO映射插入我们的 AO(环境光遮蔽)贴图添加到 Matreial(材料中。为了使确保其正确显示,请在 Project(项目窗口)项卡中单击纹理,并在Inspector(检查窗口)中取消中标记为“sRGB("sRGB(颜色纹理)”的部分)"选项,因为 AO 贴图一个灰度纹理。

法线贴图

大多数表面都展出细节,这些细节在几何无法难以很好地再现。这就是法线贴图的作用所在。将其放入适当的插槽中,单击出现的“"修复现在"按钮,现在,您应该看到材料在真出更好“弹出”立体感。法线贴图所做的是通过改变每个纹理像素中光线反射的角度,这(也称为纹素法线矢量)来实现这一效果

法线贴图中的每个像素都表示一个向量,其中红色表示水平,绿色表示垂直,蓝色表示深度。法线贴图中的"默认"蓝紫色表示50%红色,50%绿色和100%蓝色,这表示相应表面照明角度没有变化。

Height Map(高度贴图

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

反射

我们谈到讨论了很多关于反射的内容。您可能注意到您应该看到木地板的反射看起来是很十分准确。它看起来,反而像是反射天空这是因为物体的反射设置采用了默认的天空盒。要更改此设置,请在层次结构中右键单击并转到“照明”>“反射探测器,并进入"照明">"反射探测器"菜单

反射探测器本质上是一个360度 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标 Moochie 标准、Silent Filamented或Filamented 或其他社区着色器,在后续课程中介绍)
  • 使用Add-on,如SmartTexture将 SmartTexture 将粗糙度贴图打包到阿尔法或金属纹理中,检查颜色反转并使用亮度(使用时存在崩溃风险,别忘了保存!)
  • 使用图像编辑软件,如GIMP为 GIMP 为阿尔法或金属纹理创建Alpha通道和图层遮罩,反转粗糙度贴图,复制并粘贴为Alpha通道并导出

image.png

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

UV

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

https://youtu.be/bigj13SU1rs

https://youtu.be/d3_2h4cN4cY

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