Skip to content

[Feature] Consider UV dencity when choosing texture to compress #79

@anatawa12

Description

@anatawa12

📝 Is your feature request related to a problem?

The LAC currently only sees texture for choosing texture for compression, the texture is only considered.
Therefore, there is risk of compressing low-UV-density well-reduced texture furthermore, which decrease appearance much.

💡 Describe the solution you'd like

Consider UV density of each texture when choosing textures to compress, and target resolution.
This would prevents over-compressing well-optimized textures.

Describe alternatives you've considered

Manually selecting compression quality for each texture can avoid this issue.
However this requires hard work for users and I think this tool aims almost-zero-config so this tool itself should handle UV density.

Additional context

Actual UV density is extremely hard to compute since shaders can apply arbitrary UV transformations, and it can vary based on material properties.
There are two approach I came up with:

  1. To write support code for each shaders.

    Existing tools like AAO and TTT does this approach.
    However this needs much maintenance cost to follow-up shader updates.

  2. Use _ST only
    This is what unity implemented for estimating UV density om Unity streaming mipmap.
    For mip streaming, overestimating density is acceptable since it loads exceeding levels.
    However, for our case, overestimating density might decrease appearance.

In both case, for precise estimation, we need feature to track material property manipulation as AAO has.
However, I think we can implement based on 'current' or 'default' material property instead.

For well-optimized/reduced textures, texture will be complex so estimating uv density might not necessary.
For this reason, I think we should test the result of this feature before releasing this feature, or before stabilizing this tool to v1.

Metadata

Metadata

Assignees

No one assigned

    Labels

    enhancementNew feature or request

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions