173 lines
5.5 KiB
Python
173 lines
5.5 KiB
Python
# Copyright (c) 2023, Shukant Pal and Contributors
|
|
# SPDX-License-Identifier: Apache-2.0
|
|
|
|
from dataclasses import dataclass
|
|
from .ktx_pack_uastc_flag_bits import KtxPackUastcFlagBits
|
|
|
|
|
|
@dataclass
|
|
class KtxBasisParams:
|
|
"""Data for passing extended params to KtxTexture2.compressBasis()."""
|
|
|
|
uastc: bool = False
|
|
"""True to use UASTC base, false to use ETC1S base."""
|
|
|
|
verbose: bool = False
|
|
"""If true, prints Basis Universal encoder operation details to stdout. Not recommended for GUI apps."""
|
|
|
|
no_sse: bool = False
|
|
"""True to forbid use of the SSE instruction set. Ignored if CPU does not support SSE."""
|
|
|
|
thread_count: int = 1
|
|
"""Number of threads used for compression. Default is 1."""
|
|
|
|
compression_level: int = 0
|
|
"""
|
|
Encoding speed vs. quality tradeoff. Range is [0,5].
|
|
|
|
Higher values are slower, but give higher quality. There is no default.
|
|
Callers must explicitly set this value. Callers can use
|
|
KTX_ETC1S_DEFAULT_COMPRESSION_LEVEL as a default value. Currently this is 2.
|
|
"""
|
|
|
|
quality_level: int = 0
|
|
"""
|
|
Compression quality. Range is [1,255].
|
|
|
|
Lower gives better compression/lower quality/faster.
|
|
Higher gives less compression/higher quality/slower.
|
|
This automatically determines values for max_endpoints, max_selectors,
|
|
endpoint_rdo_threshold, and selector_rdo_threshold for the target quality
|
|
level. Setting these parameters overrides the values determined by quality_level
|
|
which defaults to 128 if neither it nor both of max_endpoints and max_selectors
|
|
have been set.
|
|
|
|
Both of max_endpoints and max_selectors must be set for them to have any effect.
|
|
quality_level will only determine values for endpoint_rdo_threshold and selector_rdo_threshold
|
|
when its value exceeds 128, otherwise their defaults will be used.
|
|
"""
|
|
|
|
max_endpoints: int = 0
|
|
"""
|
|
Manually set the max number of color endpoint clusters.
|
|
|
|
Range is [1,16128]. Default is 0, unset. If this is set, max_selectors
|
|
must also be set, otherwise the value will be ignored.
|
|
"""
|
|
|
|
endpoint_rdo_threshold: int = 0
|
|
"""
|
|
Set endpoint RDO quality threshold. The default is 1.25.
|
|
|
|
Lower is higher quality but less quality per output bit (try [1.0,3.0].
|
|
This will override the value chosen by quality_level.
|
|
"""
|
|
|
|
max_selectors: int = 0
|
|
"""
|
|
Manually set the max number of color selector clusters. Range is [1,16128].
|
|
|
|
Default is 0, unset. If this is set, max_endpoints must also be set, otherwise
|
|
the value will be ignored.
|
|
"""
|
|
|
|
selector_rdo_threshold: int = 0
|
|
"""
|
|
Set selector RDO quality threshold. The default is 1.5.
|
|
|
|
Lower is higher quality but less quality per output bit (try [1.0,3.0]).
|
|
This will override the value chosen by @c qualityLevel.
|
|
"""
|
|
|
|
input_swizzle: bytes = bytes(4)
|
|
"""
|
|
A swizzle to apply before encoding.
|
|
|
|
It must match the regular expression /^[rgba01]{4}$/. If both this and
|
|
pre_swizzle are specified KtxTexture2.compressBasis() will raise INVALID_OPERATION.
|
|
"""
|
|
|
|
normal_map: bool = False
|
|
"""
|
|
Tunes codec parameters for better quality on normal maps (no
|
|
selector RDO, no endpoint RDO) and sets the texture's DFD appropriately.
|
|
|
|
Only valid for linear textures.
|
|
"""
|
|
|
|
pre_swizzle: bool = False
|
|
"""
|
|
If the texture has swizzle metadata, apply it before compressing.
|
|
|
|
Swizzling, like rabb may yield drastically different error metrics
|
|
if done after supercompression.
|
|
"""
|
|
|
|
separate_rg_to_rgb_a: bool = False
|
|
"""
|
|
This was and is a no-op.
|
|
|
|
2-component inputs have always been automatically separated
|
|
using an "rrrg" input_swizzle.
|
|
"""
|
|
|
|
no_endpoint_rdo: bool = False
|
|
"""
|
|
Disable endpoint rate distortion optimizations.
|
|
|
|
Slightly faster, less noisy output, but lower quality per output bit.
|
|
"""
|
|
|
|
no_selector_rdo: bool = False
|
|
"""
|
|
Disable selector rate distortion optimizations.
|
|
|
|
Slightly faster, less noisy output, but lower quality per output bit.
|
|
"""
|
|
|
|
uastc_flags: int = KtxPackUastcFlagBits.FASTEST
|
|
"""
|
|
A set of KtxPackUastcFlagBits controlling UASTC encoding.
|
|
|
|
The most important value is the level given in the
|
|
least-significant 4 bits which selects a speed vs quality tradeoff.
|
|
"""
|
|
|
|
uastc_rdo: bool = False
|
|
"""Enable Rate Distortion Optimization (RDO) post-processing."""
|
|
|
|
uastc_rdo_quality_scalar: float = 0.
|
|
"""
|
|
UASTC RDO quality scalar (lambda).
|
|
|
|
Lower values yield higher quality/larger LZ compressed files, higher
|
|
values yield lower quality/smaller LZ compressed files. A good range to
|
|
try is [.2,4]. Full range is [.001,50.0]. Default is 1.0.
|
|
"""
|
|
|
|
uastc_rdo_dict_size: int = 0
|
|
"""
|
|
UASTC RDO dictionary size in bytes. Default is 4096. Lower
|
|
values=faster, but give less compression. Range is [64,65536].
|
|
"""
|
|
|
|
uastc_rdo_max_smooth_block_error_scale: float = 10.
|
|
"""
|
|
UASTC RDO max smooth block error scale. Range is [1,300].
|
|
Default is 10.0, 1.0 is disabled. Larger values suppress more
|
|
artifacts (and allocate more bits) on smooth blocks.
|
|
"""
|
|
|
|
uastc_rdo_max_smooth_block_std_dev: float = 18.
|
|
"""
|
|
UASTC RDO max smooth block standard deviation. Range is
|
|
[.01,65536.0]. Default is 18.0. Larger values expand the range of
|
|
blocks considered smooth.
|
|
"""
|
|
|
|
uastc_rdo_dont_favor_simpler_modes: bool = False
|
|
"""Do not favor simpler UASTC modes in RDO mode."""
|
|
|
|
uastc_rdo_no_multithreading: bool = False
|
|
"""Disable RDO multithreading (slightly higher compression, deterministic)."""
|