5个版本

0.0.12 2024年6月14日
0.0.11 2023年10月20日
0.0.9 2023年10月18日
0.0.8 2023年10月18日
0.0.7 2023年9月30日

#242图形API

每月46 次下载

MIT 许可证

2.5MB
41K SLoC

C++ 41K SLoC // 0.2% comments Python 289 SLoC // 0.2% comments Rust 183 SLoC // 0.1% comments C# 129 SLoC // 0.1% comments JavaScript 49 SLoC // 0.6% comments Shell 13 SLoC // 0.6% comments

包含 (Windows DLL, 520KB) c#/bindings/rsmeshopt.dll

crates.io docs.rs

rsmeshopt

三角形带/三角形扇生成算法

Windows构建说明
# Optionally, for better performance*, swap the compiler: SET CXX=clang-cl
cargo build

* 这将强制编译器使用 clang,假设它在您的路径中。

Linux/Mac构建说明
cargo build

Rust API

提供以下Rust API

pub fn stripify(algo: u32, indices: &[u32], positions: &[f32], restart: u32) -> Vec<u32>;
pub fn make_fans(indices: &[u32], restart: u32, min_len: u32, max_runs: u32) -> Vec<u32>;

C绑定

提供以下C绑定(链接)

还提供了CMake示例。

uint32_t rii_stripify(uint32_t* dst, uint32_t algo, const uint32_t* indices,
                      uint32_t num_indices, const float* positions,
                      uint32_t num_positions, uint32_t restart);

uint32_t rii_makefans(uint32_t* dst, const uint32_t* indices,
                      uint32_t num_indices, uint32_t restart, uint32_t min_len,
                      uint32_t max_runs);

C#绑定

提供以下C#绑定(链接)

public static List<uint> Stripify(StripifyAlgo algo, List<uint> indexData,
                                  List<Vec3> vertexData, uint restart = 0xFFFFFFFF);

public static List<uint> MakeFans(List<uint> indexData, uint restart,
                                  uint minLen, uint maxRuns);

三角形带化算法

枚举 备注
NvTriStrip amorilia/tristrip (NvTriStrip分支) 是NVTriStrip(2000年代早期NVidia免费软件)的分支,特别缺乏缓存支持。这实际上是可以的,因为我们的目标实际上没有后TnL缓存。这里的最佳算法超过50%的时间。
Draco google/draco 这里最快的算法之一,通常与NvTriStrip在压缩率上并列。在某些情况下,它可以优于NvTriStrip。
Haroohie jellees/nns-blender-plugin (Gericom & Jelle) 应产生与N文件等效的结果(至少在DS模型中)。因此,它是最慢的,并且被这里的其他算法超越(它从未获胜)。这仅是库的一半(用C++重写),因为GC/Wii不支持四边形带。这里出于历史/反编译原因。
TriStripper GPSnoopy/TriStripper 这是BrawlBox使用的库。在5%的模型中获胜,但通常不获胜。
MeshOptmzr zeux/meshoptimizer 当给定垃圾几何形状时,它可以优于这里的其他算法。然而,在大多数情况下,它不如这里的其他算法激进,因此不适合GC/Wii。(它是为具有大型后TnL缓存的现代GPU设计的,而三角形带对于现代桌面GPU工作几乎不相关)
DracoDegen google/draco 不使用原始重启的draco算法的替代版本。主要用于具有怪异GPU的Android手机--我们GC/Wii上已经有了原始重启的等效功能,所以不需要这个。
RiiFans riidefi/RiiStudio 用于生成三角形扇面的完全定制算法。因为扇面是一种独特的拓扑结构,在几何上比三角形带更适合。通常,在传递给另一个算法(通常是NvTriStrip)之前,您会先运行一个预扫描。提供了控件,让用户选择优化器应该有多激进--太激进会导致在更适合带的情况下使用三角形扇面。在实践中,RiiStudio尝试了各种激进程度,并选择最终结果最好的那个。未来的工作将包括一个统一的算法,能够更好地决定是否输出带或扇面。

依赖项

~0–2MB
~39K SLoC