{"id":13830018,"url":"https://github.com/ufbx/ufbx","last_synced_at":"2025-07-09T10:32:33.853Z","repository":{"id":38027031,"uuid":"190929602","full_name":"ufbx/ufbx","owner":"ufbx","description":"Single source file FBX loader","archived":false,"fork":false,"pushed_at":"2025-06-14T10:38:51.000Z","size":15124,"stargazers_count":1076,"open_issues_count":24,"forks_count":67,"subscribers_count":14,"default_branch":"master","last_synced_at":"2025-06-14T11:32:02.185Z","etag":null,"topics":["c","cpp","fbx","single-source"],"latest_commit_sha":null,"homepage":"","language":"C","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"other","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/ufbx.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null}},"created_at":"2019-06-08T19:59:31.000Z","updated_at":"2025-06-14T06:39:00.000Z","dependencies_parsed_at":"2024-01-13T15:45:06.198Z","dependency_job_id":"503eeda1-24da-4311-99c1-67483358ea44","html_url":"https://github.com/ufbx/ufbx","commit_stats":null,"previous_names":[],"tags_count":32,"template":false,"template_full_name":null,"purl":"pkg:github/ufbx/ufbx","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ufbx%2Fufbx","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ufbx%2Fufbx/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ufbx%2Fufbx/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ufbx%2Fufbx/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/ufbx","download_url":"https://codeload.github.com/ufbx/ufbx/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ufbx%2Fufbx/sbom","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":264440271,"owners_count":23608682,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["c","cpp","fbx","single-source"],"created_at":"2024-08-04T10:00:53.199Z","updated_at":"2025-07-09T10:32:28.841Z","avatar_url":"https://github.com/ufbx.png","language":"C","funding_links":[],"categories":["Game Programming","C"],"sub_categories":[],"readme":"# ufbx [![CI](https://github.com/bqqbarbhg/ufbx/actions/workflows/ci.yml/badge.svg)](https://github.com/bqqbarbhg/ufbx/actions/workflows/ci.yml) [![codecov](https://codecov.io/gh/ufbx/ufbx/branch/master/graph/badge.svg)](https://codecov.io/gh/ufbx/ufbx)\n\nSingle source file FBX file loader.\n\n```cpp\nufbx_load_opts opts = { 0 }; // Optional, pass NULL for defaults\nufbx_error error; // Optional, pass NULL if you don't care about errors\nufbx_scene *scene = ufbx_load_file(\"thing.fbx\", \u0026opts, \u0026error);\nif (!scene) {\n    fprintf(stderr, \"Failed to load: %s\\n\", error.description.data);\n    exit(1);\n}\n\n// Use and inspect `scene`, it's just plain data!\n\n// Let's just list all objects within the scene for example:\nfor (size_t i = 0; i \u003c scene-\u003enodes.count; i++) {\n    ufbx_node *node = scene-\u003enodes.data[i];\n    if (node-\u003eis_root) continue;\n\n    printf(\"Object: %s\\n\", node-\u003ename.data);\n    if (node-\u003emesh) {\n        printf(\"-\u003e mesh with %zu faces\\n\", node-\u003emesh-\u003efaces.count);\n    }\n}\n\nufbx_free_scene(scene);\n```\n\n## Documentation\n\n[Online documentation](https://ufbx.github.io/)\n\n## Setup\n\nCopy `ufbx.h` and `ufbx.c` to your project, `ufbx.c` needs to be compiled as\nC99/C++11 or more recent. You can also add `misc/ufbx.natvis` to get debug\nformatting for the types.\n\n## Features\n\nThe goal is to be at feature parity with the official FBX SDK.\n\n* Supports binary and ASCII FBX files starting from version 3000\n* Safe\n  * Invalid files and out-of-memory conditions are handled gracefully\n  * Loaded scenes are sanitized by default, no out-of-bounds indices or non-UTF-8 strings\n  * Extensively [tested](#testing)\n* Various object types\n  * Meshes, skinning, blend shapes\n  * Lights and cameras\n  * Embedded textures\n  * NURBS curves and surfaces\n  * Geometry caches\n  * LOD groups\n  * Display/selection sets\n  * Rigging constraints\n* Unified PBR material from known vendor-specific materials\n* Various utilities for evaluating the scene (can be compiled out if not needed)\n  * Polygon triangulation\n  * Index generation\n  * Animation curve evaluation / layer blending\n  * CPU skinning evaluation\n  * Subdivision surface evaluation\n  * NURBS curve/surface tessellation\n* Progress reporting and cancellation\n* Support for Wavefront `.obj` files as well\n\n## Platforms\n\nThe library is written in portable C (also compiles as C++) and should work on\nalmost any platform without modification. If compiled as pre-C11/C++11 on an\nunknown compiler (not MSVC/Clang/GCC/TCC), some functions will not be\nthread-safe as C99 does not have support for atomics.\n\nThe following platforms are tested on CI and produce bit-exact results:\n\n* Windows: MSVC x64/x86, Clang x64/x86, GCC MinGW x64\n* macOS: Clang x64, GCC x64\n* Linux: Clang x64/x86/ARM64/ARM32/PowerPC, GCC x64/x86/ARM64/ARM32, TCC x64/x86\n* WASI: Clang WASM\n\n## Testing\n\n* Internal tests run on all platforms listed above\n  * 592 test cases / 604 FBX files\n* Fuzzed in multiple layers\n  * Parsers (fbx binary/fbx ascii/deflate/xml/mcx/obj/mtl) fuzzed using AFL\n  * Structured FBX binary/ascii fuzzing using AFL\n  * Built-in fuzzing for byte modifications/truncation/out-of-memory\n  * Semantic fuzzing for binary FBX and OBJ files\n* Public dataset: 4.7GB / 323 files\n  * Loaded, validated, and compared against reference .obj files\n* Private dataset: 33.6GB / 12618 files\n  * Loaded and validated\n* Static analysis for maximum stack depth on Linux GCC/Clang\n* In total 95% branch line coverage (99% partial line coverage)\n\n## Versioning\n\nThe latest commit in the [`master`](https://github.com/ufbx/ufbx/tree/master)\nbranch contains the latest stable version of the library.\n\nOlder versions are tagged as `vX.Y.Z`, patch updates (`Z`) are ABI compatible\nand work with older versions of the header from the same minor version (`Y`).\nMinor versions within a major verision (`X`) are expected to be source\ncompatible after `1.0.0` but the `0.Y.Z` releases can break for every minor\nrelease.\n\n## License\n\n```\n------------------------------------------------------------------------------\nThis software is available under 2 licenses -- choose whichever you prefer.\n------------------------------------------------------------------------------\nALTERNATIVE A - MIT License\nCopyright (c) 2020 Samuli Raivio\nPermission is hereby granted, free of charge, to any person obtaining a copy of\nthis software and associated documentation files (the \"Software\"), to deal in\nthe Software without restriction, including without limitation the rights to\nuse, copy, modify, merge, publish, distribute, sublicense, and/or sell copies\nof the Software, and to permit persons to whom the Software is furnished to do\nso, subject to the following conditions:\nThe above copyright notice and this permission notice shall be included in all\ncopies or substantial portions of the Software.\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\nIMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\nFITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\nAUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\nLIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\nOUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\nSOFTWARE.\n------------------------------------------------------------------------------\nALTERNATIVE B - Public Domain (www.unlicense.org)\nThis is free and unencumbered software released into the public domain.\nAnyone is free to copy, modify, publish, use, compile, sell, or distribute this\nsoftware, either in source code form or as a compiled binary, for any purpose,\ncommercial or non-commercial, and by any means.\nIn jurisdictions that recognize copyright laws, the author or authors of this\nsoftware dedicate any and all copyright interest in the software to the public\ndomain. We make this dedication for the benefit of the public at large and to\nthe detriment of our heirs and successors. We intend this dedication to be an\novert act of relinquishment in perpetuity of all present and future rights to\nthis software under copyright law.\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\nIMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\nFITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\nAUTHORS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN\nACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION\nWITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.\n----------------------------------------\n```\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fufbx%2Fufbx","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fufbx%2Fufbx","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fufbx%2Fufbx/lists"}