美术资源检测 — 让你的网格无可挑剔

美术资源检测 — 让你的网格无可挑剔

伴随此次本地资源检测2.0版本更新,我们上线了全新的美术资源检测功能。为了帮助大家对相关规则能有更全面的理解 ,接下来将就现有的8项规则进行讲解,希望让大家特别是美术同学能够深入了解、轻松上手。


1、美术资源检测功能总体介绍

美术资源的生产是游戏研发中的重要环节,而美术资源的质量一方面决定着游戏的显示效果,另一方面也影响着游戏的性能。UWA本地资源检测的“美术资源检测”功能就是为了帮助项目团队在美术研发工作流中检查模型、贴图的质量,排查可能造成显示异常或者产生较大性能开销的资源,从而规范美术资源的研发流程。


2、规则介绍

2.1 网格的枢点不在底部

规则中的枢点(Pivot),指的是模型坐标轴的原点。在DCC中(常见的有3ds Max、 Maya、 Blender等),对于会用作场景道具类的模型,为了后期的编辑修改和使用上的方便,一般都是以模型的底部所在平面作为XZ面去构建坐标体系。

所以Unity中如果网格(Mesh)的局部坐标原点不在模型的底部,那么模型在导入时很有可能出现了问题,最常见的是会导致穿模,比如杯子嵌在桌面里,水生物体浮空等。所以本条规则会判断网格的局部坐标原点是否在底部,以此作为最直观的衡量依据。

参数与阈值
规则的阈值设定指的是能够接受的模型枢点与模型包围盒底部的最大差距(即误差容忍值-tolerance),参数默认为0.4f。

注意事项
本条规则聚焦的是以模型底部去设定局部坐标轴原点的这类情况,一般适用于在地面、在桌面上放置的这类场景道具。对于武器、角色等,因为模型的特点,它们的局部坐标系构建往往不以模型底部为参考,所以本条规则可能并不适用这些类型的网格。

2.2 网格的纹理的面密度均值过小

我们将“网格的纹理面密度”定义为:模型的三角面上,单位面积对应的纹素(纹理元素)的个数。如果面密度过小,那意味着这个面的像素个数太少,对应纹理的分辨率可能就不符合这个面的使用需求。那从整体而言,就反馈出了模型总的分辨率过低,导致模型的贴图看起来会很模糊。此外,本条规则对“网格的纹理面密度”的结果进行了开平方的操作,因此,计算得到的衡量“纹理密度”的值的单位为“像素/米”。

参数与阈值
最小纹理面密度均值,单位是像素/米;阈值用来设定允许的最小密度,默认值为128f,即允许1x1的表面积上最低填充128x128个像素。

注意事项
本条规则是通过材质的mainTexture属性获取贴图信息,所以如果网格中使用了自定义Shader,可能就会导致找不到贴图尺寸,也就查不到像素分辨率。

2.3 网格的纹理的面密度方差过大

上条规则中,聚焦的是纹理面密度的均值,本条规则聚焦的是面密度的方差值。面密度方差过大,说明模型各个三角面的分辨率差别很大,会导致部分贴图糊而部分不糊 。

这种情况下,除了采用的纹理分辨率不统一以外,一般是模型的UV出现了问题,需要美术设计人员进行进一步的排查。

参数与阈值
阈值用来设定允许的纹理面密度方差的最大值,即允许最大UV密度方差。默认为1000.0f。

注意事项
本条规则运行时会通过材质的mainTexture属性获取贴图信息,如果使用了自定义Shader可能导致找不到贴图尺寸,因此查不到像素分辨率。

2.4 网格的UV覆盖范围过大

在“纹理—模型表面”的映射过程中,如果UV范围过大,会造成UV压缩时精度损失,从而使得模型的贴图出现扭曲。所以本条规则会检查UV在U方向上或者V方向上的覆盖范围是否超过了阈值。

参数与阈值
阈值可以设定允许的最大UV范围 , 默认为16。

2.5 网格的屏幕顶点密度过大

该规则会筛选出那些在一定距离和固定视角下,渲染时在屏幕空间的顶点密度过大的模型。

屏幕顶点密度可以理解为,网格的顶点数与网格在屏幕上占用的像素数之间的比值。如果该比值过大,就意味着同屏的面片数过高。这种情况下,网格的性能开销会比较大,而对显示的贡献却很小,就会造成不必要的性能消耗。我们常说的LOD技术的作用就是避免类似的性能浪费。

对于模型的顶点密度,UWA探究出一个合理的方案,计算出在特定的FOV与Distance下,模型顶点密度的“评估值”,该评估值与模型的顶点数呈正相关,与模型占用的屏幕大小呈负相关。研发人员可在进行一定量的检测后,根据实际资源的合理性与评估值之间的关系,设定适合项目使用的阈值。

网格在屏幕上占用的像素量受相机的FOV以及相机到模型的距离(Distance)影响,因此该规则开放了【相机FOV】和【相机距离】两个参数,供研发人员根据实际情况进行配置。

参数与阈值
阈值会设定所允许的最大密度(评估值), 默认为40f。

2.6 网格存在不可见面片

本条规则会对模型进行保守估计,判断模型是否存在处于内部不可见,或背向视野的三角面,如下图。

这些不可见的面可能会增加同屏面数,导致性能上的开销。规则检测后会返回一串不可见面的面序号,美术成员可以根据这些面序号对那些看不见的面片进行判断,经确认后可以予以去除。

2.7 网格的硬边与UV边界不一致

对于硬表面物体(如机甲类、枪械类和战车类的3D建模),本条规则会检查这些硬边是否分离为UV边界。如果在硬边处没有拆分UV,那么法线烘焙就可能有黑边。图7-1和7-2分别为硬边处没有拆分UV与拆分UV的效果图。


图7-1:硬边处没有拆分UV的效果


图7-2:硬边处拆开UV的效果

规则检测中会生成一张指示图,用红线提示可能有问题的地方。下图中,中间为硬表面物体示意图,右边为该物体模型的UV图,左边为规则生成的指示图,红线表示硬边没有拆分UV的情况。

参数或阈值
阈值会设定一个“异常像素数”:当红色指示图中的红色像素数大于该阈值时,该资源被判定为检测失败。默认为32。

注意事项
本条规则主要适用于角色、硬表面等有独特法线贴图的物件的检查,对于那些使用连续贴图的道具、建筑等模型,该规则可能并不一定适用。

2.8 网格存在UV Shell边距过小的问题

本条规则会检查网格模型的UV Shell的边距是否大于1像素,若UV Shell边距过小可能会有像素溢出,使得模型展示出现杂色。规则检测中会生成一张导引图,用黄色提示可能有问题的地方。下图右侧为模型的UV图,左侧为规则生成的指示图,黄线表示UV边距过小的位置。

参数或阈值
本条规则的阈值也是设定“异常像素数”:当指示图中的黄色像素数大于该阈值时,该资源被判定为检测失败。默认为4。

注意事项
本条规则主要适用于角色、硬表面等有独特法线贴图的物件的检查,对于重叠UV的模型不适用。


从某种程度上来说,对流程的优化就相当于对算法的迭代。UWA致力于为行业打造一套好用又强大的研发流水线,助力游戏研发迈入工业化时代,提高研发团队的工作效率。所以此次美术资源检测服务的推出,不仅是作为单一产品的更新,更是我们以UWA Pipeline为核心,将这套流水线进一步完善,在将来可以为研发团队提供更大的助力。

需要说明的是,每一项检测规则的阈值都可以由开发团队依据自身项目的实际需求去设置适合自身的阈值范围,这也是本地资源检测的一大特点。同时,也欢迎大家来使用UWA本地资源检测服务,可帮助大家尽早对项目建立科学的美术规范