【USparkle专栏】如果你深怀绝技,爱“搞点研究”,乐于分享也博采众长,我们期待你的加入,让智慧的火花碰撞交织,让知识的传递生生不息!
一、精华版
-
提前规划好纹理的合并策略:包括纹理通道合并(非必要不使用Alpha通道),纹理图集,纹理数组,且许多工作需要在引擎外完成。这对于优化CPU和GPU性能,以及减小包体大小很重要。
-
根据纹理的特点和需求选择合适的格式与分辨率:例如标准图像选择TGA,HDR选择EXR。如果需要生成Mipmap,启用纹理流送,纹理分辨率需要为2的幂次方。如果需要使用压缩设置建议分辨率可以被4整除,因为基础的纹理压缩块为4*4。
-
重视“纹理组”“最大纹理尺寸”设置:我们往往忽略的“纹理组”设置其实非常重要,一方面“纹理组”在我们看不到的地方根据纹理的用途做了许多性能和效果优化;另一方面一些设置提供“来自纹理组”选项,它们大概率是我们可以无脑选的最佳选择。保证美术效果的前提下设置适合的“最大纹理尺寸”对于纹理优化很重要。
-
纹理压缩建议:sRGB颜色空间的纹理(包括UI贴图)选“默认(DXT1/5,BC1/3)”,法线纹理选“法线贴图(DXT5,BC5)”,线性颜色空间的纹理选“遮罩(无sRGB)”,前面3类纹理如果需要更高图像质量选“BC7(可选的A)”,单通道纹理选“透明度(BC4)”,HDR纹理选择“HDR已压缩(BC6H)”。如果不需要Alpha通道则启用“无透明度压缩”,因为A通道占用RGBA压缩纹理一半存储空间。
-
做好纹理资产分类与规划管理:包括资产的文件夹目录与命名规范,色彩空间标准与规范,使用更小分辨率母版纹理作为母材质的默认纹理,避免不必要地加载过多与过大的纹理。
-
善用引用查看器/属性矩阵/UV编辑器/SizeMap等引擎工具,便于排查问题,资产管理,提升效率,优化性能等。
上图为UE5的纹理资产编辑器,与纹理相关的设置基本在界面的右侧面板。本文围绕UE5纹理的各项设置功能详细介绍并深挖其机制原理,并分享一些UE纹理优化的策略和方法。
二、纹理类型
常见的纹理资源类型包括标准的图像纹理(PNG/TGA/JPG)、立方体纹理(EXR)、IES配置文件(IES)、体积纹理和渲染目标。
常见的纹理命名规范:T_美术用途_自定义_512(宽)_1024(高)_4(通道数量)
标准的图像纹理
常用的格式有三种,具体选择那种需要根据他们的特性。TGA和PNG是游戏领域常用的两种格式,它们都是无损的格式。
二者的主要区别:一是在于PNG图片有透明度但没有Alpha通道,而TGA图片有Alpha通道,因此美术在PS中想要对Alpha通道做特殊编辑时使用TGA更方便,PNG图片在引擎内的Alpha通道是引擎根据图片的透明度自动生成。
二是PNG格式可以通过压缩降低文件大小,因此同样的图像内容和分辨率它的资产大小远小于TGA格式。但是二者导入引擎后,分辨率和引擎压缩设置相同的情况下资产大小相同,且PNG文件导入引擎时会多一道解压缩过程。
JPG格式属于有损压缩,体积很小,但是不支持透明度和Alpha通道,且相同分辨率和压缩设置的情况下压缩容量小于TGA和PNG,因此适合用于大分辨率的不透明纹理。
相同纹理分别存储为PNG/TGA/JPG格式后导入UE引擎后压缩容量的差异:
常见的标准图像纹理包括:颜色贴图、漫反射贴图、透明度贴图、法线贴图、自发光贴图、反射贴图、金属度贴图、粗糙度贴图、AO贴图、遮罩贴图、高度贴图、位移贴图和Flowmap等等,它们基本上是作为材质的参数输入。
针对种类多样的贴图我们常见的优化方案是把它们合并进纹理不同的通道,例如把金属度/粗糙度/AO贴图合成一张RGB纹理(即MRAO纹理),把BaseColor纹理与透明度纹理合成一张RGBA纹理。
并且我们可以在UE的纹理编辑器内单独查看每个通道的贴图数据。
立方体纹理
立方体纹理名如其意,由六个正方形纹理面(通常分别表示上、下、左、右、前、后)组成,统一构成一个立方体。通常用于创建环境映射(Environment Mapping)或天空盒(Skybox),提供于材质采样以实时反射周围环境,实现更真实的视觉效果。
立方体纹理常用的格式为DDS(DirectDraw Surface),能够有效支持各种压缩格式(如 DXT1、DXT5),并允许快速的GPU加载。PNG和TGA也可用于立方体纹理的源图像。
立方体纹理在纹理编辑器中的操作和设置与标准图像纹理无太大区别,在工具栏中多了“面”操作和“三维视图”操作。
启用面操作后,可以通过输入数字号码来查看立方体纹理的各个面,从0-5分别对应正X、负X、正Y、负Y、正Z、负Z。
启用三维视图后,可以预览立方体纹理的3D空间效果,按住鼠标左键并拖动就可以旋转在三维视图中的视角。
立方体纹理在设置时主要注意选择正确的纹理组,例如“天空盒”,以及选择正确的压缩方式,建议HDR已压缩(BC6)。
IES配置文件
IES(Illuminating Engineering Society)文件是一类照明行业标准方法,提供了灯具的光强分布数据,包括角度、强度等,这些信息可使光照考虑灯具的反光表面、灯泡的形状以及发生的透镜效应。在UE中它被用于创建更逼真的光源效果,模拟真实世界中的光源,比如各种灯具的照明表现。
IES光照配置文件(IES Light Profiles)被称为“1D 纹理”(渐变纹理),但实际并不属于传统的纹理文件。它们使用的数据格式是为了有效地描述光的强度分布和方向,且它们的使用对象是光源而非材质。
IES文件包含一个曲线,该曲线定义了光源在不同角度下的光强度,这些数据反映了真实世界中灯具的光分布特性。这个曲线沿一个轴线“扫动”,它定义了光的发射方式,对于点光源和聚光灯来说,曲线表明在不同角度下应该有多少光输出。IES光谱曲线的主要作用是作为一个亮度的乘数影响整体光源的强度。使用IES光照配置文件可以避免传统纹理映射过程中的开销和瑕疵。在某些角度下,传统纹理由于分辨率限制可能出现失真,而IES配置文件通过数学模型避免了这种问题。
IES文件虽然本质非纹理,但同样由纹理编辑器查看与设置,它比标准图像纹理多出两项设置:亮度和纹理乘数。
此外关于IES文件的设置建议:纹理组设为“IES光源描述文件”,压缩设置为半浮点(R16F)。
体积纹理
体积纹理(Volume Texture)是一个三维数组,与常规的二维纹理不同,体积纹理提供了额外的深度维度,使其可以在三维空间中进行数据操作和呈现。这种纹理形式常用于需要在三维空间中访问和插值的应用,如云彩、烟雾、体积光、体积效果、模拟流体或其他复杂的场景效果。
体积纹理通常比二维纹理占用更多的内存,因为其数据结构需要存储额外的深度信息,所以尺寸与分辨率需要根据具体需求进行调整,以平衡好效果和性能。
体积纹理的二维展示:
启用三维视图后可以查看体积纹理的三维效果:
在纹理编辑器中体积纹理的设置与标准图像纹理并无本质不同,因为体积纹理可以看作是由普通2D纹理堆叠而来,主要格式包括:PNG/TGA/DDS/EXR,所以它的Mipmap设置、压缩设置和颜色设置可以参照标准图像纹理。
体积纹理的一项额外设置是源2D,设置参数包括:源纹理、瓦片大小X和瓦片大小Y。它的主要功能是通过源纹理中输入的2D纹理,通过瓦片大小X或瓦片大小Y中的参数切分后合成体积纹理。
渲染目标/立方体渲染目标
渲染目标(Render Target)是一种特殊的纹理,用于在运行时将渲染的内容保存到纹理中以供使用。渲染目标的用途有很多:后期处理效果(Post-Processing Effects)、反射和折射、动态纹理、实时光照和阴影、深度和模板信息、Mini-Maps和HUD、第一人称视角效果以及特殊的材质效果。
渲染目标有较高的消耗内存,尤其在高分辨率或多重渲染目标的情况下,更新频率可能会影响性能,需要根据需求适当降低更新频率。
渲染目标相比标准图像纹理有许多特殊的设置,包括:尺寸XY、清除颜色、地址XY、渲染目标格式、自动生成Mip、Mip采样器过滤、Mip U地址、Mip V地址、共享以及纹理渲染目标的目标伽马。
立方体渲染目标可以看作是立方体纹理与渲染目标的结合体,性能开销大,较少在实时渲染中使用,它的设置项如下图:
媒体纹理
媒体纹理(Media Texture)是一种特殊类型的纹理,可以把视频文件作为纹理源,直接在游戏或应用中播放并显示它们。媒体纹理不能够单独使用,需要配合媒体播放器或媒体源等文件才能实现在关卡场景内播放视频。
媒体纹理同样需要在纹理编辑器内完成设置,但它的设置项与其他类型的纹理差异较大。媒体纹理没有了层次细节、压缩、纹理和调整等设置,主要设置项为自动清除、清除颜色、启用Mipmap生成、要输出的Mipmap总数、启用新风格输出、输出格式(默认sRGB/sRGB线性输出)、过滤器、XY轴平铺法和媒体播放器。
纹理数组
2D纹理数组和立方体纹理数组是用于存储多个纹理的高级纹理类型,这些纹理数组在许多应用场景中可以大大简化材质和纹理管理。将需要同时调用的多张纹理贴图合成为纹理数组或纹理图集,可以降低DrawCall优化CPU性能,例如将同一界面出现的UI贴图适合制作成纹理数组或纹理图集。
注:纹理图集与纹理数组功能相似但不是同一个概念,纹理图集主要用于二维游戏和UI元素,是把多个低分辨率的小纹理合并成一个更大的单一纹理,然后重新映射UV使用各个小纹理。纹理图集通过减少渲染期间的状态切换和绘制调用来提高性能。
2D纹理的本质是为多张纹理建立一个组,其主要设置与标准图像纹理无差异,因此需要注意纹理数组内的纹理各项设置统一,层级细节、压缩和颜色等无法个性化设置。纹理数组在纹理编辑器中多了一项源2D设置,这里的源2D与体积纹理的不同,体积纹理是将一张2D纹理切割组成一个3D纹理,而纹理数组是将数个纹理编组管理。
纹理数组的源2D设置项包括:地址XYZ(包裹/限制/镜像)、纹理源(可按需添加),此外在纹理细节面板会显示纹理数组中的纹理数量。
纹理数组信息面板:
纹理数组普通预览与切片预览:
三、层次细节
层次细节设置主要围绕Mipmap,最常用的设置包括Mip生成设置、LOD偏移和纹理组。
Mipmap的使用主要是为了解决纹理分辨率与采样频率之间的矛盾,在三维场景内,离摄像机(屏幕)近的位置有更高的采样频率,需要更高的纹理分辨率,否则容易失真走样;离摄像机(屏幕)远的位置采样频率会变低,应该对应更低的纹理分辨率,否则会出现锯齿和摩尔纹,即Mipmap通过摄像机与场景的距离匹配采样频率与纹理分辨率。
但Mipmap容易导致场景远处的贴图过于模糊,这是由于Mipmap是正方形的而实际场景因为透视需要往往是扭曲的长方形,因此出现了针对各向异性的Ripmap。
Mipmap与Ripmap开启后纹理内存都会增加1/3,单Ripmap需要更多的采样点,渲染时运算消耗更高。
Mipmap与Ripmap的层级数量由引擎根据贴图分辨率自动计算,渲染时使用哪一层级(Level)由Shader自动计算。
我们只需要判断是否需要开启Mipmap,即是否可以通过增加1/3的纹理内存优化3D场景中的贴图表现效果和渲染性能。
如需详细理解Mipmap的原理可以阅读下文:
《纹理映射(Texture Mapping)及Mipmap技术》
1. Mip生成设置
Mip生成设置中提供的主要选项有:来自纹理组、简单平均数、锐化、模糊、无Mip贴图等。
“来自纹理组”是默认也是最常用选项,配合下面的“纹理组”设置可以“无脑”选择最适合纹理用途的Mipmap模式,例如UI纹理只需要在纹理组中选择“UI”,再选择来自纹理组,与层次细节相关的基本设置会自动匹配最佳设置,不必再进行复杂的思考和选择。
注意,如果想要为纹理设置多层Mip,分辨率必须为2的幂次方,例如32、64、128、2048等。
“简单平均数”是指当分辨率较大的一层Mip变成分辨率较小的一层Mip时,使用2x2核尺寸合并成一个新的像素,这个像素的颜色值是先前多个像素的颜色值的平均数。
“锐化”是指当分辨率较大的一层Mip变成分辨率较小的一层Mip时,会使用8x8核和负权重生成相对较锐利的低分辨率纹理版本。“锐化”会优先生成带有细节的纹理,更加突出纹理的边缘和特征。更适合细节丰富的纹理,比如石头、树皮。
Sharpen0并非锐化,但它仍然使用质量向下采样过滤所有锐化设置(4x4高斯核)。与SimpleAverage相比,它效果更模糊但却拥有更高精度。
“模糊”与“锐化”相反,它是通过特殊的卷积核生成更加平滑、低对比度的低分辨率纹理版本。相较于锐化后的纹理,模糊的纹理噪点更少,视觉体验更舒服。
“无Mip贴图”,当选择无Mip贴图时,引擎将不再为纹理生成多层Mip,最上方的细节信息会显示“Mip数量”为1。

2. LOD偏移
我们常在模型优化设置中看到LOD(Level of Detail)这个名词,可以把Mipmap理解为纹理的Level of Detail,所以“LOD偏移”其实是对纹理Mip的偏移。
默认情况下,使用该纹理的材质会根据距离和屏幕空间大小来选择最合适的Mipmap级别,且级别从0开始,代表最高分辨率的纹理,然后逐级降低。而“LOD偏移”设置允许指定渲染时的Mipmap级别。通过调整偏移值,可以使纹理在更早或更晚的距离上切换到不同的Mipmap级别。
正值偏移:会使引擎在使用中选择比正常使用的更低一个级别的Mipmap。这个设置可以在需要节省性能的时候使用,例如在视觉中不重要的部位使用更低分辨率纹理。
负值偏移:会使引擎在使用中选择比正常使用的更高一个级别的Mipmap。适用于需要更高细节精度的场景,如需要近距离清晰观察的物体。
虽然“LOD偏移”是纹理的基础设置,但在游戏项目中并不是很常用。简言之,需谨慎使用LOD偏移,过度调整可能导致性能下降或视觉不一致。特别是在运行复杂场景时,应该较为小心地控制偏移值。
3. 纹理组
在Mip生成设置中的“来自纹理组”选项处我们已经提到了“纹理组”,纹理组设置(Texture Group Settings)的功能正是对“纹理组”进行选择,并设置一系列的属性,以优化纹理在游戏中的使用。这一功能对于管理各种类型的纹理资源至关重要,可以帮助提高性能、降低内存使用,并确保在不同环境中的最佳使用。
与纹理组相关的属性主要包括:最小Mip与最大Mip,LOD偏移,最小/最大过滤器,Mip过滤和Mip生成设置。
下面是引擎对World纹理组的配置:
TextureLODGroups=(Group=TEXTUREGROUP_World,MinLODSize=1,MaxLODSize=4096,LODBias=0,MinMagFilter=aniso,MipFilter=point,MipGenSettings=TMGS_SimpleAverage)
四、层次细节-高级
1. 保留边界
当保留边界(Preserve Border)为True时,Mipmap生成时将保留纹理的边界。比如在角色的边缘或重要的视觉元素上,适当的边界保留可以防止在纹理变换时出现模糊或前景后景融合的问题。
2. 缩减与缩减选项
缩减(Downscale)仅应用于没有Mip(mips < 1.0)的2D纹理,可以根据不同的平台和系统进行针对性的缩减设置,以优化纹理的分辨率从而减少内存使用和提高性能。缩减设置的参数范围为0-8,值为0时使用纹理组中的比例值,为1.0时不缩放纹理,大于1.0时缩放纹理。
缩减选项(Downscale Options),当缩减(Downscale)用于没有Mip的纹理时,可以在此设置纹理缩小时的过滤方式,它们与Mip生成设置的选项类似,主要包括:默认、未过滤、简单均数和锐化。
3. 动画Mip等级数
“动画Mip等级数”(Num Cinematic Levels)同样是与纹理Mip相关的设置,不同之处在于它是针对过场动画与电影级渲染时设置的Mip级数。
此设置指定纹理以过场动画精度强制流入时用于过场动画的高分辨率Mip等级数量。数值为0(即默认值)表示在过场动画时使用默认的Mip级别。数值为1表示将纹理在游戏中的分辨率降低一个Mip等级(Mip级别越低纹理分辨率越高)。数值为2则降低两个Mip等级,以此类推。此外,也可以在“纹理组”中选择“过场动画”,与此项设置配合使用。
4. 从不流送
此设置与“纹理流送”有关,当纹理设置中勾选此项,该纹理将不会被流送。
它允许引擎按需加载和管理纹理,以便在保持高质量的同时优化内存使用和性能。这种方法特别适合大型开放世界游戏或具有复杂纹理的场景,因为它可以有效减少GPU内存的占用。
纹理流送的基础逻辑是根据相机视角和距离动态加载最合适的Mipmap级别来工作。所以说只有能够生成Mip的纹理才有可能被流送。
构建纹理流送数据。
显示当前流送纹理分辨率和所需纹理分辨率之间的关系:
红色:缺失2X+个Mip;
黄色:缺失1个Mip;
白色:良好数据;
青色:多余1个Mip;
绿色:多余2X+个Mip
5. 整体强制常驻Mip等级
如果希望将特定纹理的Mip级别强制常驻,以确保在运行时不会被卸载,可以通过设置纹理的“整体强制常驻Mip等级”(Global Force Resident Mip Levels)属性来实现。这对确保纹理在特定情况下保持较高质量时有效,例如在需要频繁查看的对象上。
五、压缩
纹理压缩可以同时减轻GPU和CPU的负担,减少了资源在CPU中进行解压缩的过程,减小了包体大小,减少了数据量级,更快地加载时间,减轻了带宽计算的压力内存使用效率更高,显著减少显存的使用,使游戏能够加载更多的纹理。
1. 无透明度压缩
此项设置对于拥有Alpha通道的纹理且不需要使用Alpha通道时有用,正确开启后可以节省纹理的一半资产大小,纹理信息也会显示“拥有Alpha通道”为“False”。至于为什么开启“无透明度压缩”后会节省一半的资产大小,是因为RGB纹理压缩与RGBA纹理压缩方式不同。(详见本节的4.压缩设置。)
无透明度压缩开启前:
无透明度压缩开启后:
2. 编辑器显示最终编码
如果启用,则在此编辑器会话期间以最终质量压缩纹理,使其使用最终级别(RDO,Rate Distortion Optimization)编码,而不是默认的快速级别(非RDO,Rate Distortion Optimization)。对应的“编辑器显示最终编码”为“True”,纹理信息中的“编码速度”显示“最终”;为“False”。纹理信息中的“编码速度”显示“快”。
在使用Unreal Engine的纹理压缩方案“Oodle纹理”前,我们需要了解码率失真优化 (RDO,Rate Distortion Optimization)的概念,RDO指在数据编码过程中,通过权衡传输速率与图像质量之间的关系,寻求最佳的压缩效果。Oodle提供了4种不同的压缩格式,具有不同的编码/解码速度和压缩比,默认是“Kraken”。
通过设置Oodle的RDO lambda值可以在几乎不影响纹理质量的情况下优化项目包体大小,启用“编辑器显示最终编码”正是显示应用项目RDO lambda值压缩后的纹理效果。
下图是Oodle不同压缩设置的对比图。
3. 编辑器延迟压缩
如果启用,则推迟纹理的压缩,直到在纹理编辑器中保存或手动压缩。如果不启用则实时显示纹理压缩设置对应的压缩结果。
下图是启用前后纹理信息面板显示的对比图,他们的差别主要表现在:格式、资源大小、拥有Alpha通道和编码速度。
启用前:
启用后:
4. 压缩设置
纹理的压缩格式是基于块压缩,且绝大多数的压缩块是4*4像素,所以纹理分辨率如果不能被4整除则无法成块无法压缩。
基于块压缩的纹理能更快读取像素所属字节块进行解压缩以支持随机访问,且相比于普通的图片压缩格式,能够直接实现单个像素的解析,不需要CPU解压成非压缩格式就可以被GPU识别。
常见的纹理格式:
以64位的DXT1为例,一个压缩块中32位存储2个16位的RGB颜色极值,另外32位存储16个2位索引值。128位的DXT5的RGB值存储方式与DXT1相同,区别在于另外64位存储Alpha值:2个8位Alpha极值,16个3位索引值。ETC与ASTC同样是基于块的压缩算法,块的大小为64/128位,数据存储方案存在一些差别。
纹理压缩比:
以下是UE5中常见的几种贴图压缩格式及其特点:
1. 默认(Default,DXT1/DXT5/BC1/BC3)
默认压缩格式,适用于大部分纹理,通常用于BaseColor贴图。如果有Alpha通道,则使用BC3/DXT5,否则使用BC1/DXT1(实际上BC1也是有Alpha通道,只是通道所占位数只有1,所以UE直接忽略掉)。这种格式的压缩比率通常是8:1 。
BC1中的RGB所占比例是5:6:5,所以G通道存储信息的精度更高一些;而BC3中的RGBA所占比例是5:6:5:8,所以可以根据对信息精度的需求选择适合的存储通道。
2. 法线贴图(Normal Map,DXT5/BC5)
专门用于法线贴图的压缩格式,不包含sRGB,可以有效地压缩法线贴图而不损失太多细节 。“法线贴图”的压缩格式为BC5,其中RGB所占用比例是5:6:5,对于法线数据的存储来说是不够的。如果需要更高质量的法线纹理,可以考虑用BC7(R8G8B8A8),这种纹理压缩方式能保证每个通道的比例都为8,能让贴图得到更小的压缩以及更多的细节。
3. 遮罩(Masks)
用于只需要灰度信息的纹理,如粗糙度、金属度、环境光遮挡等,同样是使用DXT1/DXT5/BC1/BC3压缩,不包含sRGB 。“遮罩”与“默认”模式类似,区别在于是否需要勾选sRGB。
“遮罩”纹理往往是将3至4张灰度纹理按照通道合并,再通过压缩可以显著缩小资产大小,但精度也会有相应的损失,为了提高精度也可以选择BC7格式压缩。此外,非必要情况下,建议使用RGB贴图而非RGBA贴图,因为对于BC3/DXT5,每4*4的压缩块为128bits,其中64bits存储RGB Color,另64bits存储Alpha。
相同分辨率下,BC7压缩比法线压缩格式更清晰一些,但也存在像素块明显和容量稍大一些的问题。
注意:BC7压缩格式的法线纹理只能在材质实例中使用,母材质针对法线纹理采样有针对性的优化,纹理采样器的类型需选择“法线”,且使用法线压缩格式的纹理,否则会编译报错。
4. 灰度(Grayscale,G8/16,RGB8)
高质量灰度压缩,不包含sRGB ,适用于需要高质量灰度信息的纹理,如高度图 。
G8/16是常见的灰度格式,“灰度”格式主要用于存储黑白图像,其中每个像素仅包含亮度信息,而没有颜色信息。
G8表示每个像素用8位(1字节)存储灰度值,值的范围从0到255,0表示黑色,255表示白色。G16每个像素用16位(2字节)存储灰度值,提高了灰度级别的分辨率,值的范围从0到65535,允许更细腻的灰度变化,适合需要更高精度的应用。
“RGB8”是一种常见的颜色图像格式,每个像素包含红、绿、蓝(RGB)三个颜色分量的信息,每个分量占用 8 位。
5. 置换贴图(Displacement Map,G8/16)
用于在模型表面添加几何细节的纹理类型,输出到材质顶点位置偏移,改变模型表面的顶点位置,从而创造出更加真实的三维效果。与灰度贴图相似,也是单通道的G8/G16格式。
置换贴图也称作高度贴图(Height Map),其中灰度值代表顶部到底部的高度变化。较暗的值代表低点,而较亮的值代表高点。置换贴图允许物体表面根据纹理表面变化,呈现出细腻的三维效果,而不仅仅是法线的仿真。
6. 向量置换贴图(Vector Displacement Map,RGBA8)
向量置换贴图与普通置换贴图基本相同,区别在于根据其RGB三个通道的信息来改变模型表面在X、Y和Z方向的位移,而普通置换贴图只有一个通道用于改变模型表面的高度位置。
注意!灰度贴图、置换贴图、向量置换贴图都未经过引擎的纹理压缩处理,导致资产大小较大,建议单通道时设为“透明度”,使用BC4压缩。
7. HDR(RGBA16F)
主要用于存储高动态范围图像(HDRI),通常不使用压缩,格式为floatRGBA,每个通道使用16位(float)浮点数来表示颜色值,提供更大的动态范围和更精确的颜色表示,因此常用于基于图像的照明或天空盒的纹理,以还原真实的世界。
HDR(High Dynamic Range)纹理常用的格式为EXR,也可以选择使用HDR或者TIFF。HDR的精度远高于8位,所以RGB通道的数值范围超过1。HDR具有更好的色彩,更高的动态范围和更丰富的细节,并且有效的防止画面过曝超过亮度值1的色彩也能很好的表现,使像素光亮度变得正常,视觉传达更加真实。我们常用的Bloom效果就必需HDR的支持。但也有一些缺点:渲染速度较慢,需要更多的显存,不支持硬件抗锯齿。
与HDR对应的是SDR(标准动态范围),精度为8位,RGB通道的数值范围是0~1,我们使用的绝大多数纹理为SDR。
虽然HDR的视觉效果更好,但是引擎最终输出的画面依然是LDR的,所以需要经过一步ToneMapping(色调映射)把HDR转化为LDR。Academy Color Encording System学院颜色编码系统最流行、最被广泛使用的Tonemapping映射曲线,效果的对比度提高,很好地保留暗处和亮处的细节。
8. 用户界面2D(User Interface 2D,RGBA)
用于UI元素的纹理,通常不压缩,以保证UI元素的清晰度。但正因为这项设置会导致纹理不被压缩,增大了项目的包体和性能压力,所以大部份情况下UI纹理不会使用该项设置,而是使用压缩率与清晰质量更平衡的BC7格式。
9. 透明度(Alpha,BC4)
用于只需要Alpha通道信息的纹理,使用BC4压缩,适合于贴图不需要颜色信息,只需要透明度信息的情况 。“透明度”与“灰度”压缩设置类似,同样是单通道无颜色信息,不同之处在于一个是存储透明度信息,一个是存储亮度信息;一个有压缩,一个无压缩。所以一些灰度纹理可以设置成“透明度”压缩,以节省纹理一半的资产大小。
对于相同分辨率的灰度图,透明度压缩的效果要远远好于遮罩压缩,但压缩容量要稍大一些。不过分辨率高一个Mip级别的情况下,透明度压缩的效果依然好于遮罩压缩。例如,相同图像内容的纹理256分辨率的透明度压缩效果要好于512的遮罩压缩,此时透明度压缩的最终容量要远小于遮罩压缩。
同时,选择透明度压缩后,纹理会变成单通道,但在材质纹理采样器中,RGBA的4个输出通道都可以正常使用,且输出内容均为单通道的图像信息。
10. 距离场字体(Distance Field Font,G8)
用于距离场字体的贴图,只需要单通道灰度信息,使用G8格式。
11. HDR已压缩(HDR Compressed,BC6H)
用于压缩HDR贴图,提供比未压缩HDR更好的压缩率和质量,仅在DirectX 11及以上版本中可用 。
BC6H是一种纹理压缩格式,支持高动态范围(HDR)图像,压缩比为6:1。与传统的纹理压缩格式(如DXT,BC1、BC3和BC5)不同,BC6H处理的是浮点数据,适合用于HDR内容。并且支持RGB颜色空间的无损压缩,能够保存细腻的颜色过渡和深度信息,常用于反射贴图、光照贴图和其他需要高动态范围的数据。
注意!HDRI资产体积往往非常大,大部分情况下需要设置成“HDR已压缩”,而非“HDR”。
12. BC7(DX11,可选的A)
高质量纹理格式,适用于特别重要和需要高质量压缩的纹理,提供4:1的压缩比率,并且可以包含Alpha通道 ,仅在DirectX 11及以上版本中可用。
BC7能够处理不同的压缩模式,和不同类型的纹理,既可以用于RGB,也可以用于RGBA;既可以压缩BaseColor,又可以压缩Normal。它可以在显示高对比度和复杂细节的纹理时减少锯齿现象,适合于需要保持色彩细节和渐变平滑性的场景,所以对需要较高视觉品质的BaseColor/Normal Texture可以采用BC7格式压缩。
13. 其他压缩设置
除此之外,还有些并不常用的压缩设置:半浮点(R16F)、单浮点(R32F)和HDR高精度(RGBA32F)。这些设置虽然可以提供更大的范围和更高的精度,但是并未压缩,资源大小数倍增加,所以大多数情况下游戏项目内不会使用这些设置。
R16F是一种16位单通道(灰度)格式,它将红色通道的值编码为16位半浮点值,并丢弃其他通道。而且提供了比8位格式(如G8)更高的颜色值范围,适合需要较高动态范围的场景。
R32F是一种32位单通道格式,使用32位浮点数来存储红色通道的值,适用于需要极高精度的场景。单浮点格式能够提供比半浮点更高的精度,但也会占用更多的内存和带宽。
RGBA32F这是一种32位四通道格式,每个通道都使用32位浮点数,适合存储高动态范围(HDR)图像。RGBA32F格式可以存储更广泛的颜色和亮度值,适合需要极高精度和宽色域的应用。
六、压缩-高级
1. Oodle纹理SDK版本
该项设置用于选择和管理使用Oodle Texture库时编码纹理的版本。
项目中的每个纹理在创建时都会与特定版本的Oodle Texture SDK关联。这可以保持兼容性,避免未来SDK更新可能导致的纹理行为问题。
默认情况下,当创建新纹理时,它会被分配为当前版本的Oodle Texture SDK。这确保了纹理利用当时最新的功能和优化,而不受后续SDK更新可能引起的变化影响。
如果遇到编码问题或需要利用Oodle SDK新版本中的改进,可以通过在纹理属性中的指定数字字段中输入关键词“latest”来手动更新纹理的版本。这会指示Unreal Engine对该特定纹理使用最新版本的Oodle Texture SDK。
如果将该字段留空,纹理将回退到使用项目的旧版Oodle Texture编码设置。这在旧项目或需要与先前SDK版本保持兼容的纹理中很有用。
当“重新导入纹理”时,引擎会自动更新纹理以使用指定的最新SDK版本。这个自动过程有助于确保资产与最新Oodle Texture更新中的优化和修复保持同步。
2. 最大纹理尺寸
最大纹理尺寸是指生成纹理可以使用的最大分辨率。此设置有助于控制材质和纹理使用的内存和性能,是我们在纹理优化中较常使用的功能。一般情况下美术可以出一张更大分辨率的纹理测试效果,然后通过该项设置降低为适合的纹理分辨率。
此值设置为0时,意味着所有平台上均允许使用该纹理格式的最大尺寸。具体的最大尺寸还取决于所支持的平台和其硬件能力。例如:对于PC,通常支持较大尺寸,如4096x4096或8192x8192。对于移动设备,最大纹理尺寸可能会更小,例如2048x2048或1024x1024。受某些GPU的支持上限约束,引擎支持的纹理分辨率上限为8192(8K)。
虽然较高的纹理分辨率可以提升图形质量,但它也会增加显存的使用和渲染时间。因此,在设置最大纹理尺寸时,需要平衡视觉效果与性能之间的关系。
3. 有损压缩数量
有损压缩数量用于控制每个纹理的Oodle Texture RDO Lambda,即影响纹理压缩质量与文件大小之间的权衡。项目设置中有整体的RDO Lambda级别,如果有必要对特定纹理进行单独调整可以使用此设置。
此项设置提供的选项包括:默认、无有损压缩(即禁用Oodle RDO)、最低(Oodle RDO为1)、低(Oodle RDO为10)、中(Oodle RDO为20)、高(Oodle RDO为30)和最高(Oodle RDO为40)。Oodle RDO的值越高代表:纹理质量越差,体积越小。
该设置主要用于调整特定纹理,以满足项目的需要。例如,在项目整体压缩数量设定后,某些重要的视觉效果或核心资产可能需要更高的图像质量,可以通过该项设置针对性调整压缩品质。
4. ASTC压缩质量
ATSC是移动端常用的高质量纹理压缩格式,其压缩算法与BC7类似。优点是可根据不同图片选择不同压缩率算法,纹理尺寸不需要是2的幂次数,同时支持LDR和HDR,缺点是兼容性不够完善且解码时间较长。
“ASTC压缩质量”指纹理使用ASTC格式压缩时的质量级别。不同的质量设置会影响纹理的清晰度、细节保留以及压缩后的文件大小。
“ASTC压缩质量”的选项包括:默认、最低(12*12)、低(10*10)、中(8*8)、高(6*6)和最高(4*4)。ASTC是基于块的压缩算法,12*12至4*4是指压缩块中的像素数量,像素数量越小则压缩质量越高。
5. 压缩缓存ID
压缩缓存ID是一个标识符,用于跟踪和管理纹理的压缩版本。当你对纹理进行更改(例如更改设置、质量或源文件),并希望这些更改立即生效时,可以使用这个ID。
这一设置常被用于纹理设置更改后触发重新压缩,纹理源文件更新时的重新压缩,消除缓存问题以确保新设置被应用。
6. 烘焙平台平铺设置
烘焙平台平铺设置允许您选择纹理在烘焙时的处理方式。这种设置影响纹理在最终渲染阶段被提交给GPU的方式。
“烘焙平台平铺设置”的选项包括:来自纹理组、烘焙时平铺和烘焙时不平铺。
“来自纹理组”是默认选项,此选项将根据纹理所选择的纹理组来判断烘焙时是否平铺。
“烘焙时平铺”指纹理在烘焙过程中将被处理为平铺格式,意味着纹理将被重复应用,能够更有效地利用内存和带宽。
“烘焙时不平铺”即纹理在烘焙时将保持线性格式,平铺将推迟到实际提交给GPU的时候。这样做的优点是可能会减小在烘焙期间的计算负担,但可能会在实际渲染时增加GPU的工作量。
所以说硬件平台的性能是判断是否烘焙时平铺的重要因素,例如性能受限的移动平台应该选择平铺纹理,以减少纹理的内存占用。
七、纹理
纹理管线:模型空间位置→投影函数→纹理映射→纹理坐标→通讯函数→新纹理坐标→纹理采样→纹理值。
1. 二的幂次方模式
二的幂次方模式设置为了确保纹理尺寸符合2个幂次方,如此能更好压缩纹理并可以开启Mipmap,这对于提高兼容性和性能非常重要。
“二的幂次方模式”提供了三种选择:无、填到为2的幂次方和填到为2的幂次方平方。
填到为2的幂次方(Pad to Power of 2):此选项会将纹理的宽度和高度填充至最近的以2为底的幂次方尺寸。这意味着,纹理将被调整为下一个大于或等于当前宽度和高度的整幂数的尺寸。假如原始纹理的尺寸为300x200像素,选择此选项后,纹理将被填充到512x256像素(下一个以2为底的幂次方尺寸)。
填到为2的幂次方平方(Pad to Square Power of 2):此选项会将纹理填充到最接近的方形以2为底的幂次方尺寸。这意味着纹理的宽度和高度最终将相等,且都是以2为底的幂次方尺寸。如果原始纹理尺寸为300x200,选择此选项后,纹理将被调整为512x512,确保宽高一致。
所以填到为2的幂次方与填到为2的幂次方平方的区别在于最终生成的纹理是否为正方形。
2. 填充颜色
填充颜色主要是在启用“二的幂次方模式”后起作用,这项设置可以确保在纹理被二的幂次方模式扩大尺寸时,边缘区域与原始纹理的外观相匹配,避免出现不自然的视觉效果。
前面已经解释了启用“填到为2的幂次方”、“填到为2的幂次方平方”选项时,UE会将纹理大小调整为最接近的2的幂次方。如果原始纹理的尺寸不是以2为底的幂,调整后会有一些区域需要被填充。此时,就可以使用填充颜色来定义这些新区域的颜色。
3. sRGB
sRGB是纹理非常重要的设置,它指示该纹理及其源图像是否处于sRGB伽玛色彩空间。启用该选项后,UE将在渲染时应用伽玛校正。
sRGB设置只适用于8位和压缩格式的纹理,不适用于16位浮点格式的纹理。
如果使用透明通道(Alpha Channel)单独作为遮罩,建议取消选中sRGB设置,以避免出现颜色和透明度之间的不一致,这可能导致视觉错误。
了解sRGB之前需要先明白色彩空间与Gamma校正:
色彩空间包含三个指标:色域(三个基色的坐标,由此形成三角形);Gamma(如何对三角形内进行切分);白点(色域三角形中心)。Gamma其实是如何对色彩进行采样的一种方式。对色域进行切割的一种方式,均匀切割是线性,sRGB是从外向内先切细,后切粗,对应Gamma值为2.2。
Gamma校正的原因在于我们既需要线性的美术工作流,又需要非线性的颜色存储和显示。
线性工作流:如果使用Gamma空间的贴图,着色器会通过硬件把贴图颜色数据从Gamma空间转到线性空间,然后再渲染计算最终颜色值。所以如果希望颜色表现在美术管线中可控、可靠,需要正确使用Gamma编码及Gamma解码,包括Substance Painter、PhotoShop、Substance 3D Designer的贴图制作与导出流程;Unity、UE的颜色空间设置等。如果没有正确使用线性空间渲染,颜色亮度在叠加混合时会出现错误效果。
非线性转换的目的主要是为了优化存储空间和带宽,传递函数能够更好地帮我们利用编码空间。常用的贴图存储格式RGBA32,每个颜色通道只有8位(即8bit)用于记录信息,且人眼对暗部变化更敏感(韦伯定律),如果要充分利用带宽,应该要用更多位置存储暗部值,即暗部使用更高精度保存,亮部使用更低精度保存。
Gamma校正的过程是将输入的原始图像颜色数据通过特定的Gamma值校正为目标颜色空间的图像颜色,以确保图像在不同的显示设备上都能得到准确和一致的呈现。
八、纹理-高级
1. X轴平铺法/Y轴平铺法
平铺法指UV值在[0,1]之外的表现模式,即(OpenGL)包装模式或(DirectX)纹理寻址模式。
纹理的X轴平铺法设置(X-axis Tiling Method)用于控制纹理在X轴方向上的采样方式。可以通过此设置来控制材质贴图在模型上的行为,特别是在纹理重复和边缘处理时。
纹理的Y轴平铺法设置(Y-axis Tiling Method)与X轴平铺法设置类似,用于控制纹理在Y轴方向上的采样和显示方式。选择合适的Y轴平铺方式可以影响纹理在模型表面上的应用。
X/Y轴平铺法提供了3种选项:包裹、限制和镜像。
Wrap(包裹/重复):在此模式下,纹理会在X/Y轴方向上循环重复。这意味着超出纹理边界的部分会从对面边缘重新开始。即,如果您将一个纹理从左往右拖动,当拖动超出纹理宽度时,它将从左边再次出现。一般用于重复的草地纹理或装饰性图案,地面或墙壁材质在大规模地图中较为常见。
Clamp(限制/夹紧):在此模式下,当纹理坐标超出边界时,纹理将使用边缘色彩来填充超出部分。即,超出纹理范围的像素会被限制为纹理的最边缘像素颜色。一般用于显示特定边缘效果的纹理,如边框或装饰性边缘,避免重复造成的视觉干扰。
Mirror(镜像):在此模式下,纹理会在X/Y轴方向上进行镜像重复。当纹理坐标超出边界时,纹理会从对面边缘反转过来。例如,1.2位置的像素将与0.8位置的像素相同,造成镜像效果。适用于需要在设计中引入变化的重复模式,比如墙面装饰或具有对称特征的材质。
2. 执行透明度覆盖Mip缩放/透明度覆盖阈值
执行透明度覆盖Mip缩放设置(Do Scale Mips for Alpha Coverage)是控制纹理在使用Mipmap时如何处理透明度(Alpha 通道)的一项重要设置。
透明度覆盖阈值设置(Alpha Coverage Threshold)是控制透明纹理如何处理像素透明度的关键参数。
当启用“执行透明度覆盖Mip缩放”时“透明度覆盖阈值”才可以被设置,“透明度覆盖阈值”的参数直接控制“执行透明度覆盖Mip缩放”的效果,即“执行透明度覆盖Mip缩放”保留在指定的透明度覆盖阈值(Alpha Coverage Threshold)以上的像素。
这一功能可以看作是与Mipmap相关的衍生设置,当纹理的Mip级别越高时Alpha通道的值会在插值和平均运算下出现扩散,导致本应该透明的部分变为半透或者不透,此时这一功能就会非常有用,通过设定一个透明度阈值,使低于该数值的像素变为透明。
“透明度覆盖阈值”提供了四个通道(XYZW)可以调整纹理RGBA通道的参数,但一般情况下我们只需要调整W通道对应的Alpha参数。
阈值范围:
0:表示该通道被禁用,此时不会对该通道的透明度值进行任何比较。

0.5到0.9:这是推荐的典型值范围。像素的Alpha值高于阈值将被认为是“可见”或“不透明”的,而小于该值的则会被视为“透明”。例如,值为0.5意味着透明度50%及以下的像素会被视为透明,而50%及以上的视为不透明。

1.0:通常不推荐使用,因为容易出现错误的半透明效果。

这一功能有利于玻璃、烟雾或叶子等透明度变化大的材质,在Mip缩放时正常处理透明度,在不同的距离和视角下保持透明度效果的一致性,能够帮助减少视觉伪影。
3. 使用快速MipGen过滤
使用快速Mip生成过滤设置(Use New Mip Filter)是一个影响Mipmap生成过程中纹理质量和性能的重要选项。当启用此选项时,渲染引擎将使用一种更快速的Mip生成过滤算法。这个算法通常会产生与传统方法相似的结果,但在某些情况下,它可能会导致颜色的偏移(Chroma Shifts,如有这一情况可以考虑禁用该选项以恢复到使用普通的过滤算法)。
快速Mip生成算法可以减少Mip图生成的计算量,从而加快纹理加载和渲染的速度。这对于需要大量纹理且对性能要求较高的项目非常有用。
4. 翻转绿通道
当启用此选项时,纹理的绿通道(Green Channel)将被翻转。具体来说,它将纹理G通道的值从[0, 1]范围内的值转换为[1, 0]范围内的值。
这一功能常用于法线贴图,法线纹理的绿通道通常表示Y轴的法线方向。在不同的引擎或工作流程(例如,Unity、Maya、3ds Max、Blender等软件)中,Y 轴的定义可能有所不同。因此,当从这些应用程序导入法线贴图时,需要翻转绿通道以确保法线方向的正确性。
5. 过滤器
纹理的过滤器设置决定了在采样纹理时使用的过滤模式。这一设置直接影响纹理在渲染时的清晰度、视觉质量以及性能表现。一般情况下保持默认设置就可以,即来自纹理组(Texture Group)。
Nearest(最近):最近过滤是一种最基础的纹理过滤方法。它直接取源纹理中与每个像素最接近的纹素值,而不会进行平滑处理。
优点:处理速度快,渲染性能高,适合像素风格的游戏或需要保持原始纹理风格的场景。
缺点:可能导致锯齿边缘和明显的块状效果,不适合需要高质量纹理的场合。
Bi-linear(双线性):双线性过滤通过对相邻四个纹素进行加权平均来平滑纹理的边缘,从而减少锯齿现象。
优点:在性能和视觉质量之间提供良好的平衡。适合大多数情况,包括2D UI和一些3D纹理。
缺点:在尺寸变化较大(如缩放)的情况下,仍可能出现模糊的效果。
Tri-linear(三线性):三线性过滤是在双线性过滤的基础上增加了对Mip贴图的支持。它先根据距离选择合适的Mip级别,然后对两个相邻Mip级别应用双线性过滤。
优点:提供更平滑的过渡效果,并减少Mip尺寸变化带来的不自然感,适合需要高质量纹理的情况。
缺点:相较于其他过滤选项,计算开销更大,对性能影响较明显。
Texture Group(默认,自纹理组):选择此项时,将使用材质的纹理组设置。这意味着UE会根据纹理组的类型(如UI、场景、角色等)自动选择适合的过滤模式。
优点:提供灵活性,能根据不同的用例自动优化纹理的采样策略,适合对纹理组有预设的项目。
缺点:在某些特定情况下无法做到完全的自定义控制。
6. Mip加载选项
Mip加载选项用以设置如何加载纹理的不同Mipmap级别。
Default(默认):将使用纹理的LOD组设置来决定Mip的加载方式,根据纹理类型和使用情境自动选择最合适的Mip加载策略。能够适应不同场景和性能需求的自动优化,适合大多数情况。
All Mips(所有 Mip):启用此选项后,所有Mip级别的纹理都会被加载到内存中,无论是否需要使用它们。可以确保任何距离和缩放情况下都能得到最佳的视觉效果,但会导致更高的内存消耗和可能增加的加载时间,因此需要谨慎考虑启用。
Only First Mip(仅首个Mip):启用此选项后,仅加载纹理的第一个Mip级别。通常情况下,第一个Mip级别是纹理的全分辨率版本。能够显著降低内存使用量和加载时间,但在缩放或远离相机时可能会明显失去细节,可能导致视觉质量降低。
7. 创建Mips后标准化
创建Mips后标准化设置只对法线纹理生效,对于非法线纹理该项设置显示灰色不可设置。该设置的主要作用是标准化法线贴图中的颜色信息,以保障在生成Mip贴图后法线的准确性和清晰度。
在为法线贴图生成Mips时,法线会被混合,会导致远距离Mip级别的法线细节丧失,从而显示出更加平坦或模糊的视觉效果。开启此设置后,即使在较远的视距下,法线贴图的细节仍将保持清晰和准确,避免远处的法线图像变得软化。
这种由于Mip生成引起的软化效果,与通过合成法线转换为粗糙度所做的有意软化是不同的。后者是为了艺术效果而设计,而此设置则是为了保持贴图的真实性能。
此设置只影响较低的Mip级别,而不会影响顶层Mip级别(即最高分辨率的纹理)。这意味着在近距离观察时,法线细节将不受影响。
8. sRGB使用旧有伽马
sRGB使用旧有伽马设置(sRGB Use Legacy Gamma)主要用于控制纹理在处理sRGB色彩空间时的转换方式。
启用此设置适用于那些需要保持与早期UE版本兼容性的项目,保持旧的伽马设置可确保颜色输出的一致性。大多数情况下建议不要启用该选项,而是使用更先进的线性色彩管理,以获得最佳的视觉效果。
9. 源颜色设置
纹理的源颜色设置是对纹理颜色管理的关键配置。提供了关于纹理编码和颜色空间的重要选项,以确保颜色在渲染过程中的准确性和一致性。
编码重载(Encoding Override)
允许开发者指定纹理的源编码格式,而不仅限于默认的sRGB编码。通过这一选项,用户可以选择更适合特定需求的纹理编码,例如使用线性编码(Linear)或其他自定义编码方式,选择正确的编码对于保持颜色信息的完整性和准确性非常重要。
颜色空间(Color Space)
允许用户定义纹理的源颜色空间。不同的颜色空间(如sRGB、Adobe RGB、Linear RGB等)具有不同的色彩呈现特性和色域表现,确保从外部图像编辑软件导入的纹理在UE中显示的颜色与原始意图一致。
RGBA色度坐标(RGBA Chromaticity Coordinate)
当“颜色空间”设置为“自定义”时可用,允许用户为源颜色空间的每个颜色通道(红色、绿色、蓝色和白色)单独指定色度坐标。通过精确指定色度坐标,用户能够更好地控制颜色的表现。
颜色适应方法(Chromatic Adaptation Method)
当源白点(White Point)与工作颜色空间的白点不同时可用,选择一种色度适应方法,能够确保颜色在转换过程中保持一致。在不同的色彩空间和显示设备中,白点的变化可能导致颜色失真。应用适当的色度适应方法可以解决这些问题,从而使最终渲染的图像展现出准确和自然的色彩。
10. 资产用户数据
纹理的资产用户数据设置提供了一种灵活的方式,让开发者可以为每个纹理资产附加自定义数据。这些数据可以是任何与纹理相关的信息,用于组织、分类或存储特定的元数据。
九、调整
纹理的调整设置允许开发者以非破坏性的方式(即在不更改源纹理的情况下控制视觉效果)对纹理进行多种颜色和视觉效果的调整,而无需离开纹理编辑器。这种功能非常适合快速迭代和效果试验,能够有效提高工作效率。
十、文件路径
源文件
此处会显示源纹理资产的路径与创建时间,可以通过这种方式重新导入新的纹理资产。
十一、复合
1. 合成纹理
合成纹理仅对粗糙度纹理或者带有粗糙度通道的纹理有效,输入的参数为法线纹理(与粗糙度纹理相同大小或更高的分辨率)。它的功能是根据法线的变化来修改粗糙度纹理的粗糙度数值,即法线纹理中的高度变化可以影响表面的光滑度,从而使其在渲染时更加真实。
合成纹理会根据法线纹理的变化使粗糙度纹理变得更粗糙,即粗糙度值更高,纹理更亮。
这一功能还可以用于为没有粗糙度的纹理在引擎内直接生成与法线对应的粗糙度纹理通道,例如,先把一张只有RGB通道的纹理设为BC7格式得到一个纯白色的Alpha通道,然后在“调整-最大透明度”设置中把Alpha通道的数值1映射到更小的数值,最后在“复合纹理”中引用对应的法线贴图,如此该张纹理的Alpha通道就变成了粗糙度信息。
2. 合成纹理模式
指定复合纹理(法线贴图)用于修改纹理的哪个通道(R、G、B或A),即对应纹理的粗糙度通道。
3. 合成幂
确定复合纹理(法线贴图)对目标通道(粗糙度通道)的影响程度。 [1:默认,<1减少影响,>1增加影响]。
十二、细节/Oodle面板
1. 纹理细节
2. Oodle 面板
展示了关于当前选定纹理的压缩设置和参数,以及压缩后的纹理在磁盘上占用空间的预览。这些设置决定了纹理在压缩过程中的表现,包括压缩比率、画质、性能等。用户可以快速查看和调整影响纹理压缩效果的参数,以确保最佳的视觉效果和存储效率。
1. Oodle纹理编码信息
这部分显示了当前纹理的编码状态,包括使用的压缩算法类型、编码参数以及是否启用了不同的功能,例如Rate Distortion Optimization (RDO)。可以帮助用户快速了解纹理是如何被压缩的,特别是在实际应用中的表现如何。
2. 尝试编码
尝试编码可以在编辑器中实时调整各种纹理编码参数,然后查看这些调整对纹理的直接影响,适合在开发过程中优化和验证纹理质量。
需要注意的是,尝试编码中的更改将不会被保存,即此功能主要用于实时验证和调整,而不是进行最终保存或应用。
3. 磁盘容量
“磁盘容量”显示了在项目的压缩设置下,经过RDO编码的纹理文件在磁盘上的大小,以模拟实际项目打包时的压缩效果。可以与“尝试编码”部分的设置结合使用,以更全面地了解不同RDO Lambda/投入/通用平铺参数的设置对应的压缩优势。
十三、其他
1. 材质中的纹理设置
字体纹理采样:
字体可以被看做是一张独特的纹理,它同样可以在纹理编辑器中打开设置。材质中与字体直接相关的节点有FontSample和FontSampleParameter。
FontSample能够从字体资源中将纹理页面采样为常规2D纹理,字体轮廓值储存在Alpha通道,通常需要连接在“不透明蒙版”。
Font参数用于设置要使用的默认字体资产;Font Texture Page指定当前使用的字体纹理页面。
FontSampleParameter是FontSample的参数化节点,二者用法相同。
场景颜色:
Scene Color材质节点可以看作是当前屏幕空间的RT纹理。
纹理采样/2D纹理采样参数/立方体纹理采样参数:
TextureSample节点的主要功能是从给定的纹理中输出颜色值,支持多种类型的纹理,例如2D纹理、立方体纹理(Cubemap)和电影纹理(Movie Texture)。
TextureSample主要参数包括:
1. Mip值模式
该设置用于确定如何计算纹理的“MIP”级别,有四种模式可供选择:
- 无(None):使用默认的硬件计算Mip等级。
- Mip等级(绝对):指定要使用的特定Mip级别,0Level为完整分辨率。
- Mip偏差(相对):偏移硬件计算的采样Mip等级,选择此项后节点会有“Bias”输入,可以直接输入数值增减MipLevel,此功能与纹理的LOD偏移类似。
- 导数:手动计算Mip级别,允许使用DDX(UVs)和DDY(UVs)作为输入。在这种模式下,性能可能会受到影响,不过在某些情况下能够提供更高的灵活性。
2. 采样器源
此项设置的选项包括:自纹理资产、共享:包裹和共享:限制。如果选择“自纹理资产”纹理采样器则根据纹理中的平铺设置进行采样,如果选择“共享:包裹”或“共享:限制”则替代纹理中的设置,以设定此纹理采样器所引用的所有纹理按照此处设定处理平铺模式。
3. 自动查看Mip偏差
启用时材质会在每个视图中基于相机位置和角度动态调整Mip级别。这种偏差会增加或减少被采样纹理的Mip级别,以增强清晰度和改善动态效果,尤其是在使用时间抗锯齿时。
4. 常量坐标
当节点的UV输入没有连入时,可以在此设置UV的坐标索引。
5. 常量Mip值
当Mip值模式设为Mip等级(绝对)时,此设置可用,输入的数值与MipLevel对应。
6. 纹理
指定表达式所取样的纹理。要设置纹理,请先在“内容浏览器”中选择纹理。然后,在此表达式的属性窗口中选择“纹理(Texture)”属性,并单击“使用当前选择(Use Current Selection)”按钮。
7. 采样器类型
采样器类型(Sampler Type)设置直接影响纹理采样的方式以及输出数据的类型。这一设置确定了你希望从纹理中获取什么样的数据,例如颜色、法线信息或深度等。正确选择采样器类型能够确保材质在渲染时表现出预期的效果。
常用的采样器类型包括:
Color(颜色):
这是最常用的采样器类型,适用于常规的颜色纹理。从纹理中提取的是RGB(红、绿、蓝)值,通常用于基础的漫反射材料或其他需要颜色信息的场景。
Normal(法线):
该设置用于法线贴图(Normal Map)。法线贴图包含法线信息,用于在模型表面上创建细节和凸起效果。通过正确的法线数据采样,能够增加模型的细节感,使得光照计算更为准确,从而增强表面的真实感。
8. 为默认网格体绘制纹理
在使用网格绘制模式时启用该选项,相关纹理将自动被加载为当前选择的纹理。
2D纹理采样参数(TextureSampleParameter2D)节点是TextureSample节点的参数化形式,功能和参数设置均相同,区别在于2D纹理采样参数节点可以在材质实例或者通过蓝图/代码修改的材质参数。
立方体纹理采样参数(TextureSampleParameterCube)节点是TextureSample节点的参数化形式,功能和参数设置均相同,区别在于立方体纹理采样参数节点可以在材质实例或者通过蓝图/代码修改的材质参数。且与不同2D纹理采样参数节点,它只接受立方体贴图。
精灵纹理采样器:
精灵纹理采样器节点可自动将特定的精灵纹理传递给材质,当材质应用于带有精灵资产的对象时,这个节点能确保使用与该精灵资产相关联的纹理,方便我们在材质中为精灵添加特殊的效果。
它的参数与普通纹理采样器的基础参数相同,额外的“采样额外纹理/额外插槽索引/插槽显示名”可以实现在材质中采样多张额外的源纹理。
下图为精灵纹理材质的放置位置以及源纹理与额外纹理。
纹理对象/纹理对象参数:
TextureObject节点的主要作用是创建一个可用作纹理函数输入的纹理引用,在材质函数中将某个纹理对象与TextureSample节点结合使用,从而实现对该纹理的实际采样。它的参数与普通纹理采样器的基础参数相同。
纹理对象参数(TextureObjectParameter)节点是TextureObject节点的参数化,通过将纹理设为参数可以调整材质实例的外观而无需重编译整个材质,也可以提供给其他材质节点(如材质函数)使用。
纹理属性:
TextureProperty用于访问和管理纹理属性,包括纹理的尺寸、纹理的纹素大小。
1. Texture Size(纹理尺寸)
即是纹理的分辨率,比如宽度和高度(以像素为单位)。可以用它来判断纹理的细节程度及性能影响。
2. Texel Size(纹素大小)
Texel是纹理中单个像素的单位,Texel Size提供了纹理的一组空间数据,可用于在计算中调整纹理效果。尤其在进行UV操作、显示贴图或进行动态范围调整时。
粒子SubUV纹理采样/SubUV纹理采样参数:
ParticleSubUV是一个专为粒子系统设计的纹理子图像采样材质节点,它使用的是与Flipbook相似的算法。它的优点在于特效美术师可以动态地调整播放速度、循环方式、起始帧和结束帧等设置,常用于火焰、烟雾、动画等特效的实现。
同样的,它的参数设置与普通纹理采样器一样,SubUV纹理采样参数(TextureSampleParameterSubUV)是粒子SubUV纹理采样(ParticleSubUV)节点的参数化形式。
2. 引用查看器
引用查看器是非常实用的项目资产管理与故障排查工具,它以图形形式展示了一个或多个资产之间的引用关系,能方便地查看不同资产之间的依赖,帮助维护资产,避免不必要的丢失或冗余。
在UE中如果一个资产(Asset)以某种方式使用了另一个资产,我们称第一个资产引用了第二个资产。并且它们的引用关系是单向的(单向依赖),被引用的资产不反过来引用其引用者。
对于纹理来说,引用查看器方便查看哪些纹理资产被使用,并直观地找到它们的引用对象,它的好处主要有:
-
通过查看纹理是否存在引用关系,以清理未使用的纹理资产。但此方法并非100%准确,有些纹理的引用方式是通过表格填写纹理资产地址,引用查看器不能识别此类资产引用。
-
通过引用查看器可用快速定位到引用纹理的资产的文件目录,或者快速定位资产使用的纹理所在目录。
-
可用于快速排查故障,例如,材质实例引用的纹理不仅包括材质实例使用中的纹理,还包括材质实例母材质中使用的默认纹理。如果这些纹理有一些不在项目打包文件目录中会出现报错,特别是母材质中使用的纹理具有隐蔽性。此外,因为材质实例会加载母材质中的默认纹理,所以为降低不必要资产的加载,建议使用小尺寸的占位符贴图来解决这个问题。
3. 属性矩阵批量编辑
属性矩阵(Property Matrix)可以在处理多个对象时进行批量编辑,提供了一种更简便的工作流程,允许在一组对象上设置多样的属性值,而不必为每个对象单独调整,节省了大量时间。它可以处理数千个对象的编辑操作,非常适合大规模场景或复杂项目的管理。
属性矩阵支持数组和结构体类型的属性,能够直接在表格中编辑复杂的对象属性,可以为任何属性暴露列,便于快速查看和编辑。这意味着属性矩阵可以批量修改纹理编辑器中的所有纹理设置,在对大量纹理进行性能优化,效果提升,设置更改时,这一工具可以进行批量处理,不仅提升了效率,还提升了操作的准确率。
4. UV编辑器
UV编辑器是UE5中的一项新功能,专门用于创建,修改和检查UV。UV编辑器提供了更具交互性的2D视图,可以对UV进行更精细的编辑,实现在引擎内解决纹理与UV布局相关的问题。它提供的强大功能包括:缝边、UDIM管理和多资产工作流等。
在内容浏览器中找到相应的网格,右键选择以打开UV编辑器。
5. 尺寸贴图
尺寸贴图(SizeMap)用于直观展示资产及其引用内容的大小和占用空间,具备交互性与可视性。虽然它的中文名字中有贴图,但是它的使用对象是所有类型的项目资产,贴图指的是它的数据呈现方式(TreeMap图)。
通过SizeMap,可以清晰地了解哪些资产占用了过多的内存或存储空间,这有助于识别不必要的资源,进行清理和优化。它不仅展示了资产本身的大小,还会显示该资产所引用的其他资产的大小。这可以找出不同资产间的依赖关系,以发现性能瓶颈的主要问题,解除不必要的资产引用,从而更有效地管理和优化这些资源。
纹理在使用SizeMap评估内存大小与磁盘大小时有助于快速发现性能和包体瓶颈,例如,当内存大小大于磁盘大小时说明纹理的压缩存在问题。
参考
UE5文档官网
技术美术百人计划
这是侑虎科技第1794篇文章,感谢作者RE-Ding供稿。欢迎转发分享,未经作者授权请勿转载。如果您有任何独到的见解或者发现也欢迎联系我们,一起探讨。
作者主页:https://www.zhihu.com/people/ding-yan-qing-75
再次感谢RE-Ding的分享,如果您有任何独到的见解或者发现也欢迎联系我们,一起探讨。