纹理的基本概念
这一集介绍的很详细,我复制的原文档
纹理类型
Default | This is the most common setting used for all Textures. It provides access to most of the properties for Texture importing. For more information, see the Default Texture type. 这是所有纹理最常用的设置。它提供对纹理导入的大多数属性的访问。有关详细信息,请参阅默认纹理类型。 |
Normal map | The Normal map texture type formats the texture asset so it’s suitable for real-time normal mapping. For more information, see the Normal map texture type documentation. 法线贴图纹理类型对纹理资源进行格式化,因此适合实时法线贴图。有关更多信息,请参阅法线贴图纹理类型文档。 For more information on normal mapping in general, see Importing Textures. 有关法线贴图的更多一般信息,请参阅导入纹理。 |
Editor GUI and Legacy GUI 编辑器 GUI 和旧版 GU | The Editor GUI and Legacy GUI texture type formats the texture asset so it’s suitable for HUD and GUI controls. For more information, see the Editor GUI and Legacy GUI texture type documentation. 编辑器 GUI 和旧版 GUI 纹理类型对纹理资源进行格式化,使其适用于 HUD 和 GUI 控件。有关更多信息,请参阅编辑器 GUI 和旧版 GUI 纹理类型文档。 |
Sprite (2D and UI) 精灵(2D 和 UI) | The Sprite (2D and UI) texture type formats the texture asset so it’s suitable to use in 2D applications as a Sprite. For more information, see the Sprite (2D and UI) texture type documentation. Sprite(2D 和 UI)纹理类型格式化纹理资源,因此适合在 2D 应用程序中用作 Sprite 。有关更多信息,请参阅 Sprite(2D 和 UI)纹理类型文档。 |
Cursor | The Cursor texture type formats the texture asset so it’s suitable to use as a custom mouse cursor. For more information, see the Cursor texture type documentation. 光标纹理类型格式化纹理资源,因此适合用作自定义鼠标光标。有关更多信息,请参阅光标纹理类型文档。 |
Cookie | The Cookie texture type formats the texture asset so it’s suitable to use as a light cookie in the Built-in Render Pipeline. For more information, see the Cookie texture type documentation. Cookie 纹理类型对纹理资源进行格式化,因此适合在内置渲染管道中用作轻量 cookie。有关更多信息,请参阅 Cookie 纹理类型文档。 |
光照贴图 | The Lightmap texture type formats the texture asset so it’s suitable to use as a Lightmap. This option enables encoding into a specific format (RGBM or dLDR depending on the platform) and a post-processing step on texture data (a push-pull dilation pass). For more information, see the Lightmap texture type documentation. Lightmap 纹理类型格式化纹理资源,因此适合用作 Lightmap 。此选项支持编码为特定格式(RGBM 或 dLDR,具体取决于平台)以及纹理数据的后处理步骤(推拉扩张通道)。有关更多信息,请参阅光照贴图纹理类型文档。 |
Directional Lightmap 定向光照贴图 | The Directional Lightmap texture type formats the texture asset so it’s suitable to use as a directional Lightmap. For more information, see the Directional Lightmap texture type documentation. 定向光照贴图纹理类型格式化纹理资源,因此适合用作定向光照贴图。有关更多信息,请参阅定向光照贴图纹理类型文档。 |
Shadowmask | The Shadowmask texture type formats the texture asset so it’s suitable to use as a shadowmask. For more information, see the Shadowmask texture type documentation. Shadowmask 纹理类型格式化纹理资源,因此适合用作 Shadowmask 。有关更多信息,请参阅 Shadowmask 纹理类型文档。 |
Single Channel | The Single Channel texture type formats the texture asset so it only has one channel. For information on the properties available only for the this type, see the Single Channel texture type documentation. 单通道纹理类型格式化纹理资源,使其只有一个通道。有关仅适用于此类型的属性的信息,请参阅单通道纹理类型文档。 |
纹理大小
选择合适纹理大小应尽量遵循以下经验:
- 不同平台、不同硬件配置选择不同的纹理大小,Unity下可以采用bundle变体设置多套资源、通过Mipmap限制不同平台加载不同level层级的贴图。
- 根据纹理用途的不同选择不同的纹理加载方式,如流式纹理加载Texture Streaming、稀疏纹理Sparse Texture、虚拟纹理VirtualTexture等方式。
- 不能让美术人员通过增加纹理大小的方式增加细节,可以选择细节贴图DetailMap或增加高反差保留的方式。
- 在不降低视觉效果的情况下尽量减小贴图大小,最好的方式是纹理映射的每一个纹素的大小正好符合屏幕上显示像素的大小,如果纹理小了会造成欠采样,纹理显示模糊,如果纹理大了会造成过采样,纹理显示噪点。这一点做到完美平衡很难保障,可以充分利用Unity编辑器下SceneView->DrawMode->Mipmap来查看在游戏摄像机视角下哪些纹理过采样,哪些纹理欠采样,进而来调整纹理大小。
通过场景中的 SceneView->DrawMode->Mipmap
切换到MipMap
观察纹理采样情况,红色的是过采样,蓝色的是欠采样。
对于静距离下的欠采样,我们有必要提高纹理精度,对于远距离的欠采样,可以根据后期的雾效等因素忽略。
纹理颜色空间
默认大多数图像处理工具都会使用sRGB颜色空间处理和导出纹理。但如果你的纹理不是用作颜色信息的话,那就不要使用sRGB空间,如金属度贴图、粗糙度贴图、高度图或者法线贴图等。一旦这些纹理使用sRGB空间会造成视觉表现错误。
意思是单通道贴图不要使用sRGB。
纹理压缩
纹理压缩是指图像压缩算法,保持贴图视觉质量的同时,尽量减小纹理数据的大小。默认情况下我们的纹理原始格式采用PNG或TGA这类通用文件格式,但与专用图像格式相比他们访问和采样速度都比较慢,无法通用GPU硬件加速,同时纹理数据量大,占用内存较高。所以在渲染中我们会采用一些硬件支持的纹理压缩格式,如ASTC 、ETC、ETC2、DXT等。
如下图为未压缩、ETC2、ASTC6x6三种格式文件大小对比,我们可以看到在质量相差不大的情况下ASTC6x6压缩下大小可以减少到接近未压缩的十分之一。
纹理图集
纹理图集是一系列小纹理图像的集合,
- 优点:
一是采用共同纹理图集的多个静态网格资源可以进行静态合批处理,减少DrawCall调用次数。
二是纹理图集可以减少碎纹理过多,因为他们打包在一个图集里,通过压缩可以更有效的利用压缩,降低纹理的内存成本和冗余数据。
- 缺点
美术需要合理规划模型,并且要求模型有相同的材质着色器,或需要制作通道图去区分不同材质。制作和修改成本较高。
纹理过滤
- Nearest Point Filtering: 临近点采样过滤最简单、计算量最小的纹理过滤形式,但在近距离观察时,纹理会呈现块状。
- Bilinear Filtering: 双线性采样过滤会对临近纹素采样并插值化处理,对纹理像素进行着色。双线性过滤会让像素看上去平滑渐变,但近距离观察时,纹理会变得模糊。
- Trilinear Filtering: 三线性过滤除与双线性过滤相同部分外,还增加了Mipmap等级之间的采样差值混合,用来平滑过度消除Mipmap之间的明显变化。
- Anisotropic Filtering: 各向异性过滤可以改善纹理在倾斜角度下的视觉效果,跟适合用于地表纹理。
纹理Mipmap
对于屏幕
- Mipmap纹理
逐级减低分辨率来保存纹理副本。相当于生成了纹理LOD,渲染纹理时,将根据像素在屏幕中占据的纹理空间大小选择合适的Mipmap级别进行采样。
- 优点:
GPU不需要在远距离上对对象进行全分辨率纹理采样,因此可以提高纹理采样性能。
同时也解决了远距离下的过采样导致的噪点问题,提高的纹理渲染质量。
- 缺点:
由于Mipmap纹理要生成低分辨率副本,会造成额外的内存开销。