Oodle纹理

概述了使用Oodle纹理编码解决方案来优化项目中的纹理。

Choose your operating system:

Windows

macOS

Linux

Oodle纹理(Oodle Texture) 向各种BCn/DXTn格式提供了快速、高质量的纹理编码。配置Oodle纹理之后,它会自动在后台运行。你可以全局设置Oodle纹理,然后为LOD组和单独的纹理更具体地进行定义。

Oodle纹理不会编码ASTC或其他移动设备格式。

启用Oodle纹理

虚幻引擎中默认启用了Oodle纹理的插件。

Oodle纹理插件

除了该插件之外,Oodle纹理还需要 DefaultEngine.ini 文件中的一个设置。

\Engine\Config\DefaultEngine.ini
[AlternateTextureCompression]
TextureCompressionFormat="TextureFormatOodle"
TextureFormatPrefix="OODLE_"
bEnableInEditor=True

由于 虚幻引擎 中默认启用了Oodle纹理,这些行应该已存在于你的 BaseEngine.ini 文件中。

我们强烈建议保留 bEnableInEditor=true,以在编辑器和打包版本之间保持一致的行为。如果设置为 false,美术师在编辑器中查看编码结果时,所看到的结果将不同于烘焙系统所生成的结果。 你可以检查日志,验证Oodle纹理是否已启用:

LogTextureFormatOodle: Display: Oodle Texture 2.9.0 init RDO On with DefaultRDOLambda=30

Oodle用于给定纹理时,格式将包含前缀 OODLE_

LogTexture: Display: Building textures: test (OODLE_AutoDXT, 256X256)

Oodle纹理的关键概念

你需要理解两个概念,才能利用Oodle纹理:RDO(率失真优化(Rate Distortion Optimization))Lambda

理解RDO

RDO这个术语指的是牺牲质量(失真),换取大小(率)。对于纹理编码,这听起来有点奇怪,毕竟DXTn/BCn纹理不会随质量改变大小,它们基于格式、分辨率和mip数量采用固定大小。

Oodle纹理可以选择公开一种方式来管理所生成的编码纹理数据,这样一来,当包含纹理的uasset被压缩以通过IOStore/.pak文件系统发布时,它会压缩得更小。因此,Oodle纹理中的RDO仅减小发布大小。

此外,它调整为使用Kraken压缩格式。请参阅Oodle数据,了解更多信息。

理解Lambda

有一个参数用于确定造成了多大程度的失真,进而确定生成的文件缩小了多少,该参数称为Lambda。

Lambda可以设置为0到100之间的值,数字越低,失真越少,质量越高。Lambda值为30左右时,仍可生成高质量的结果。Lambda值为0将完全禁用RDO,达到理论上最佳的质量。但是,即使要追求最佳质量,我们也推荐将Lambda值设为1,因为此时的成本效益比仍然非常出色,产生的失真极少,同时又能带来可观的发布大小收益。

一般而言,我们预期Lambda在全局设置,不会经常被覆盖。若要为你的项目确定合适的值,需要多方协作,根据发布大小需求来确定。最好将全局Lambda设置为最高的值(最低质量),然后根据需要针对LOD组或特定纹理选择性设置更高质量/更低Lambda。

漫反射/反射率贴图之外的其他纹理很可能需要较低的Lambda(通常为5-20),尤其是法线贴图,因为肉眼看不出来的失真对于高光度高光之类的纹理可能会更加明显。

配置Oodle纹理

Oodle纹理主要使用 DefaultEngine.ini 文件进行配置,但也会在纹理LOD组上以及逐个纹理公开Lambda。

全局配置

DefaultEngine.ini file 中的 TextureFormatOodle 分段包含Oodle纹理的全局设置。

\Engine\Config\DefaultEngine.ini
[TextureFormatOodle]
DefaultRDOLambda=30
GlobalLambdaMultiplier=1.0
bForceAllBC23ToBC7=False
bForceRDOOff=False
bDebugColor=False

设置

定义

DefaultRDOLambda

这是别处未设置时将使用的RDO Lambda。

GlobalLambdaMultiplier

这用于缩放传递给编码器的Lambda。它用作最后一刻的控制措施,不必细究单独的纹理或LOD组,即可管理发布大小。该值直接应用于Lambda,意味着大于1的乘数值会增加失真并降低质量,而介于0到1之间的乘数值会减少失真并提高质量。结果会舍入到最接近的整数来使用。它无法禁用RDO(结果至少为1)。

bForceAllBC23ToBC7

启用此项后,只要请求BC2或BC3(即DXT3和DXT5)格式,Oodle就会改为压缩BC7纹理。BC7通常质量更高,但根据你的最低规格,有可能不可用。

bForceRDOOff

启用此项后,将始终禁用RDO,无论特定于纹理的RDO设置如何。

bDebugColor

启用此项后,纹理将压缩为表示其编码格式的纯色,用于目测识别。

格式

颜色

BC1

红色(0xff0000)

BC2

深绿色(0x008000)

BC3

绿色(0x00ff00)

BC4

深黄色(0x808000)

BC5

黄色(0xffff00)

BC6

紫色(R = .5f, G = 0.0f, B = .8f)

BC7(不透明)

深蓝色(0x8080ff)

BC7(透明)

蓝色(0x0000ff)

配置纹理LOD组

表示RDO Lambda的LOD组参数称为 有损压缩量(Lossy Compression Amount)。此参数在 DefaultDeviceProfiles.ini 文件中为LOD组定义。

TextureLODGroups=(Group=TEXTUREGROUP_WorldNormalMap,MinLODSize=1,MaxLODSize=8192,LODBias=0,MinMagFilter=aniso,MipFilter=point,MipGenSettings=TMGS_SimpleAverage,**LossyCompressionAmount=TLCA_Low**)

"有损压缩量(Lossy Compression Amount)"可以采用以下值:

说明

TLCA_Default

继承。如果在纹理上设置,则从LOD组继承。如果在LOD组上设置,则从 DefaultRDOLambda 继承。

TLCA_None

禁用RDO (0)

TLCA_Lowest

5 - 最佳质量,最大文件大小。

TLCA_Low

15

TLCA_Medium

30

TLCA_High

40

TLCA_Highest

60 - 最差质量,最小文件大小。

配置单个纹理

RDO Lambda还可以使用"有损压缩量(Lossy Compression Amount)"参数为单个纹理设置,并采用上面所示的相同值。

要为单个纹理设置该参数,请执行以下操作:

  1. 内容浏览器(Content Browser) 中双击要为其设置RDO Lambda的纹理,以在 纹理编辑器(Texture Editor) 窗口中将其打开。

  2. 细节(Details) 面板中,展开 压缩(Compression) 分段,然后点击箭头图标以显示 高级(Advanced) 选项。

    打开高级压缩选项

  3. 使用 有损压缩量(Lossy Compression Amount) 参数旁边的下拉菜单选择所需的值。

    使用"有损压缩量"下拉菜单选择RDO Lambda