mirror of
https://github.com/storytold/craft-libs.git
synced 2026-11-14 06:22:24 +00:00
* craft-mesh: FBX 7.x reader from EffectCraft (`fbx`) EffectCraft's FBX reader (crates/model/src/fbx.rs: binary with 32- and 64-bit record offsets and zlib arrays, ASCII, geometry layer elements, the Model transform chain, Lambert/Phong materials, textures) onto the crate's Scene. The reader was written by vangel76 (EffectCraft #736); its memory budget and shared instanced meshes by DWAA1660 (EffectCraft #1234). It includes the fixes of the open EffectCraft PR #2955: a binary child record must end within its parent, a failed array inflate reports only its status, textures that end at one image share it and its bytes are charged to the budget, and material slots and connections are found through maps. What differs from the app's copy, because the model here is neutral: polygons stay whole and layer elements stay indexed pools (no vertex unification, no computed normals or tangents); images are bytes, not decoded pixels; the axis system is not applied (Document::axes_to_y_up gives it); the memory budget is Limits::max_data_bytes; a file without meshes is a scene, not an error. base64_decode moves from the gltf module to the crate root so both formats share it (gltf re-exports it). * craft-mesh: read FBX 6.x FBX 6.1 files differ from 7.x in how the scene is laid out, not in the record syntax: a Model holds its own Vertices and layer elements, properties are Properties60/Property (no label field), Connect lines name objects by Class::Name instead of by id, and GlobalSettings sits among the objects. The reader now takes all four, and NormalIndex beside NormalsIndex, so 6.x geometry, transforms, the hierarchy and materials are read. 6.x textures (connected to Models) are not. Ported from storytold/deckcraft#1380 (crates/mesh/src/fbx), whose reader took 6.1 to 7.7; its mesh building, axis turn and rasteriser stay in DeckCraft. --------- Co-authored-by: Ethan Dale <ethandale@Ethans-MacBook-Pro.local>