【问题标题】:Encode ASTC on device (iOS)?在设备(iOS)上编码 ASTC?
【发布时间】:2017-02-21 01:26:39
【问题描述】:

是否有任何库能够按需将图像数据编码为 ASTC 纹理? 我知道这是 CPU 密集型的,但还是很感兴趣。

【问题讨论】:

    标签: ios textures metal astc


    【解决方案1】:
    import ImageIO
    import MetalKit
    
    let loader: MTKTextureLoader
    let srcImage: CGImage
    let ktxData = NSMutableData()
    let dest = CGImageDestinationCreateWithData(ktxData, "org.khronos.ktx" as CFString, 1, nil)!
    CGImageDestinationAddImage(dest, srcImage, 0, ["kCGImagePropertyASTCBlockSize": 0x88] as CFDictionary)
    CGImageDestinationFinalize(dest)
    try loader.newTexture(data: ktxData as Data, options: [])
    

    kCGImagePropertyASTCBlockSize 选项显示为 8x8 块大小(即每像素 2 位);唯一允许的其他大小是 4x4(每像素 8 位),这是默认值。

    要获得最佳性能,请将kCGImageDestinationLossyCompressionQuality: 0.0 添加到CGImageDestinationAddImageFromSource 的选项中。

    其他可能的标志是kCGImagePropertyASTCUseLZFSEkCGImagePropertyASTCPreTwiddlekCGImagePropertyASTCFlipVerticallykCGImagePropertyASTCWeightChannelsEqually(所有布尔值)。

    【讨论】:

    【解决方案2】:

    在 iOS 10 中,Apple 为系统添加了 ASTC 编码。您可以通过 /usr/include/AppleTextureEncoder.h、/usr/lib/libate.dylib 访问它,或者(更简单)使用通过 CG/ImageIO.framework 提供的常用图像编码工具将其编码为 ASTC。请参阅 CGImageDestination 和相关对象。也可以通过 Xcode 中的图像资产目录压缩来实现。

    系统 ASTC 编码器比 ARM 参考编码器快得多。支持块大小 4x4 和 8x8。性能应该类似于 JPEG 或 PNG 编码。

    【讨论】:

    • 我可以使用 CGImageDestination,但是如何设置 8x8 块大小?
    • 是CPU还是硬件?
    【解决方案3】:

    https://github.com/ARM-software/astc-encoder 是参考压缩器(由 ARM 和 AMD 创建)。让源代码在 iOS 设备上运行可能并不难。它可能非常慢,但它确实提供了各种速度选项,因此也许有人会为您在质量和速度之间取得适当的平衡。

    【讨论】:

    • 当用户离开应用程序时,我正在考虑放入一个长时间运行的后台任务。随着时间的推移,它可以逐渐将未压缩的纹理交换为 ASTC。
    • 噢,我似乎不能直接使用它:“此机密和专有软件只能在 ARM Limited (C) COPYRIGHT 2011-2012 ARM Limited 的许可协议授权下使用。保留所有权利。 "
    • 我认为您的授权在这里:github.com/ARM-software/astc-encoder/blob/master/license.txt。它不是标准许可证,在我看来它好像是许可的,类似于 zlib/mit,但 IANAL 所以请仔细阅读。
    • 如果我来实现这个,我会直接与他们联系,谢谢!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-11-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多