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 次下载
2.5MB
41K SLoC
包含 (Windows DLL, 520KB) c#/bindings/rsmeshopt.dll
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