#5 纹理设置 到目前为止,我经使用的是默认的纹理导入设置。让我们看一下其中的一些选项,看看它们的作用。
(默认的导入设置)
Wrap Mode 决定了使用UV坐标在0–1范围之外进行采样时会发生什么。当设置为“clamped”时,将限制UV使其保持在0–1范围内。这意味着边缘以外的像素与边缘上的像素相同。当设置为repeat时,UV会环绕。这意味着边缘以外的像素与纹理相反侧的像素相同。默认模式是重复纹理,从而使其平铺。
如果你不是平铺纹理,则需要 clamp UV坐标。这样可以防止纹理重复,它将复制纹理边界,从而导致纹理看起来很拉伸。
(Tiling 为 (2, 2) 模式为clamped)
保持在0–1范围内时,Wrap模式有关系吗? 当UV坐标接触0和1边界时,这很重要。使用双线性或三线性滤波时,在对纹理进行采样时会对相邻像素进行插值。这对于纹理中间的像素很好。但是,位于边缘的像素的相邻像素是什么?答案取决于自动换行模式。
clamped,边缘上的像素会相互融合。这会产生一个很小的区域,像素不融合,但并不明显。
重复时,边缘的像素将与纹理的另一侧融合。如果两边不相似,你会注意到另一边有一点渗入边缘。放大测试纹理的四边形的一角,以查看差异。
(边上的 Tiling)
#5.1 Mipmaps和Filtering
当纹理的像素(纹理像素)与投影到的像素不完全匹配时会发生什么?存在不匹配,必须以某种方式解决。如何完成此操作由“Filter Mode ”控制。
最直接的过滤模式是Point (无过滤器)。这意味着当在某些UV坐标处采样纹理时,将使用最近的纹理像素。除非纹理像素精确映射到显示像素,否则这将使纹理具有块状外观。因此,它通常用于像素完美的渲染,或者在需要块状样式时使用。
默认为使用双线性(bilinear filtering)过滤。在两个纹理像素之间的某个位置对纹理进行采样时,将对这两个纹理像素进行插值。由于纹理是2D的,因此沿U轴和V轴都会发生。因此,它是双线性过滤,而不仅仅是线性过滤。
当纹理像素密度小于显示像素密度时,此方法有效,因此当你放大纹理时,结果看起来会很模糊。当你缩小纹理时,它在相反的情况下不起作用。相邻的显示像素最终将获得相距一个以上纹理像素的样本。这意味着将跳过纹理的某些部分,这会导致剧烈的过渡,就像图像被锐化一样。
解决此问题的方法是,每当纹理像素密度变得太高时,都使用较小的纹理。显示屏上出现的纹理越小,应使用的版本越小。这些较小的版本称为mipmap,并且会自动为你生成。每个连续的Mipmap的宽度和高度均为上一个级别的一半。因此,当原始纹理大小为512x512时,mip映射为256x256、128x128、64x64、32x32、16x16、8x8、4x4和2x2。
mipmap是什么意思? 单词mipmap是MIP地图的缩写。字母MIP代表拉丁语multum in parvo,在狭小空间中转换为多种语言。这是兰斯·威廉姆斯(Lance Williams)首次描述点胶(mipmapping)技术时创造的。
(Mipmap级别)
你可以根据需要禁用Mipmap。首先,将“Texture Type ”类型设置为“Advanced ”。然后就可以禁用mipmap并应用更改。观察差异的一种好方法是使用一个类似四边形的平面对象,并从一个角度观察它。
(有mipmap和没有mipmap)
那么应该在哪里使用了哪个mipmap级别呢?它们看起来有什么不同?我们可以通过在高级纹理设置中启用Fadeout Mip Maps 来使过渡可见。启用后,“Fade Range ”滑块将显示在检查器中。它定义了一个mipmap范围,在该范围内,mipmap将过渡为纯灰色。只需一步就可以完成过渡,就可以实现向灰色的过渡。将单步范围向右移动得越远,转换就会越晚。
(mipmap的高级设置)
为什么淡化到灰色? 它用于细节纹理,我们将在以后的教程中进行介绍。
你可能会认为它可以用于雾化效果,但是事实并非如此。使用哪种mipmap取决于纹理像素与显示像素密度,而不是3D距离。
(连续的mipmap级别)
一旦知道了各种mipmap级别在哪里,就应该能够看到它们之间的纹理质量突然变化。随着纹理投影的变小,纹理像素密度增加,这使其看起来更清晰。直到突然出现下一个mipmap级别,然后又变得模糊。
因此,如果没有mipmap,你将会从模糊变为锐利,甚至变得过于锐利。使用mipmap,可以从模糊变成锐利,再到突然变得模糊,再到锐利,再到突然变得模糊,依此类推。
这些模糊的锐利边界是双线性滤波的特征。你可以通过将过滤器模式切换为Trilinear来摆脱它们。此功能与双线性过滤相同,但也可以在相邻的mipmap级别之间进行插值。因此是三线性的。这使采样更加昂贵,但可以平滑mipmap级别之间的转换。
(正常和灰色Mipmap之间的三线性过滤)
另一种有用的技术是各向异性过滤。你可能已经注意到,将其设置为0时,纹理变得模糊。这与选择mipmap级别有关。
各向异性是什么意思? 粗略地说,当事物在不同方向上看起来相似时,则各向同性。例如,无特征的立方体。如果不是这种情况,则是各向异性的。例如,一块木头,因为它的纹理沿一个方向而不是另一个方向。
当纹理由于角度而投影成一个透视角度时,通常会导致其一个维度比另一个维度变形更大。一个很好的例子是带纹理的地平面。在一定距离处,纹理的前后尺寸将比左右尺寸小得多。
选择哪个mipmap级别是基于最差的尺寸。如果差异很大,那么你将获得一维非常模糊的结果。各向异性过滤通过解耦尺寸来减轻这种情况。除了均匀缩小纹理外,它还提供在两个维度上缩放不同数量的版本。因此,您不仅拥有256x256的mipmap,而且还有256x128、256x64等的mipmap。
(没有和有各向异性过滤)
请注意,这些额外的Mipmap不会像常规Mipmap那样预先生成。而是通过执行额外的纹理样本来模拟它们。因此,它们不需要更多空间,但采样成本更高。
(各向异性双线性滤波,过渡为灰色)
各向异性过滤的深度由Aniso Level控制。设为0时,禁用。为1时,它将启用并提供最小的效果。在16,它达到最大。但是,这些设置受项目质量设置的影响。 你可以通过Edit/ Project Settings/ Quality 访问质量设置。在“Rendering ”部分中找到“Anisotropic Textures setting”设置。
禁用各向异性纹理后,无论纹理的设置如何,都不会进行各向异性过滤。设置为“Per Texture ”时,它由每个单独的纹理完全控制。也可以将其设置为“Forced On ”,这就像将每个纹理的“ Aniso Level”设置为至少9一样。但是,“ Aniso Level”设置为0的纹理仍不会使用各向异性过滤。
下一章节介绍 组合纹理。
本系列会在Unity社区:放牛的星星、知乎、个人公众号:壹种念头 进行连载发布。公众号会首发,源码会在公众号给出,欢迎关注。
本文深入探讨Unity中纹理的处理方式,包括WrapMode、Mipmaps、Filtering等关键概念,以及各向异性过滤的应用,帮助读者理解纹理在游戏开发中的高效使用。
4046

被折叠的 条评论
为什么被折叠?



