Skip to content

bevyengine/bevy_mikktspace

Repository files navigation

Bevy Mikktspace

License Crates.io Downloads Docs Discord

This is a rewrite of the Mikkelsen Tangent Space Algorithm reference implementation in Rust. It is loosely based on mikktspace, an existing port, except bevy_mikktspace has:

  • exact byte-for-byte output equivalence with the original C source under all conditions1.
  • fully idiomatic rust with no unsafe code, to support building in no-unsafe contexts.
  • no dependencies, to avoid needing perpetual dependency-version-bump releases in the future.

Requires at least Rust 1.85.1.

Examples

cube_tangents

Demonstrates generating tangents for a cube with 4 triangular faces per side.

cargo run --example cube_tangents

Features

The original reference implementation has a couple bugs, which are largely inconsequential in most practical applications. However, fixing them would mean diverging from exact output equivalence, so bevy_mikktspace offers features to control this behavior:

  • corrected-edge-sorting: Correct a comparison in the reference's edge quicksort implementation. This can only differ on the last triangle in a model.
  • corrected-vertex-welding: Guarantees the smallest-index vertex is chosen when welding. This differs from the reference on NaN vertices.

License agreement

Licensed under either of

at your option. AND parts of the code are licensed under:

Unless you explicitly state otherwise, any contribution intentionally submitted for inclusion in the work by you, as defined in the Apache-2.0 license, shall be dual licensed as above, without any additional terms or conditions.

Footnotes

  1. Extensive fuzz-testing against the reference implementation revealed divergence in NaN handling in https://github.com/gltf-rs/mikktspace, which is probably inconsequential for practical uses.

About

A safe Rust implementation of the Mikkelsen Tangent Space Algorithm.

Resources

License

Apache-2.0, MIT licenses found

Licenses found

Apache-2.0
LICENSE-APACHE
MIT
LICENSE-MIT

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages