#texture #image #texture-format #image-format #dds #ultimate #smash

nutexb

用于处理《超级 Smash Bros. Ultimate》的 nutexb 纹理文件的库

7 个版本

0.7.0 2024年2月19日
0.6.0 2022年2月4日
0.0.5 2021年5月29日
0.0.3 2020年2月5日
0.0.2 2020年1月31日

#1028解析器实现

每月50 次下载

MIT 许可证

31KB
528

nutexb

Nutexb 是《超级 Smash Bros. Ultimate》和一些其他游戏使用的图像纹理格式。扩展名 ".nutexb" 可能代表 "Namco Universal Texture Binary"。

图像数据存储在连续的内存区域中,元数据存储在 layer_mipmapsfooter 中。在 [NutexbFormat] 中支持的图像格式使用与 DDS 文件相同的标准压缩和非压缩格式。图像数据的数组和 mipmaps 存储在经过称为 swizzling 的过程优化的 Tegra X1 内存布局中。此库提供读取和写入 nutexb 文件以及处理 swizzled 图像数据的工具。

读取

使用 NutexbFile::readNutexbFile::read_from_file 读取 [NutexbFile]。在使用应用程序需要标准行主序内存布局的情况下,需要先使用 NutexbFile::deswizzled_data 对图像数据进行 deswizzling。

use nutexb::NutexbFile;

let nutexb = NutexbFile::read_from_file("col_001.nutexb")?;
let surface_data = nutexb.deswizzled_data();

写入

创建 [NutexbFile] 的最简单方法是在使用 "ddsfile""image" 功能时分别调用 NutexbFile::from_ddsNutexbFile::from_image。要手动指定表面尺寸和数据,请使用 NutexbFile::from_surface

use nutexb::NutexbFile;

let image = image::open("col_001.png")?;

let nutexb = NutexbFile::from_image(&image.to_rgba8(), "col_001")?;
nutexb.write_to_file("col_001.nutexb")?;
use nutexb::NutexbFile;

let mut reader = std::io::BufReader::new(std::fs::File::open("cube.dds")?);
let dds = ddsfile::Dds::read(&mut reader)?;

let nutexb = NutexbFile::from_dds(&dds, "cube")?;
nutexb.write_to_file("col_001.nutexb")?;

依赖项

~1.6–5MB
~55K SLoC