{"id":16204100,"url":"https://github.com/aras-p/obj_parse_tester","last_synced_at":"2025-03-19T07:31:07.415Z","repository":{"id":140930526,"uuid":"491006106","full_name":"aras-p/obj_parse_tester","owner":"aras-p","description":"Comparing various C++ OBJ parsing libraries","archived":false,"fork":false,"pushed_at":"2023-01-20T09:44:54.000Z","size":565,"stargazers_count":17,"open_issues_count":0,"forks_count":1,"subscribers_count":3,"default_branch":"main","last_synced_at":"2025-03-09T05:31:12.408Z","etag":null,"topics":["wavefront-obj"],"latest_commit_sha":null,"homepage":"https://aras-p.info/blog/2022/05/14/comparing-obj-parse-libraries/","language":"C","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":null,"status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/aras-p.png","metadata":{"files":{"readme":"readme.md","changelog":null,"contributing":null,"funding":null,"license":null,"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}},"created_at":"2022-05-11T07:39:38.000Z","updated_at":"2024-06-22T07:06:35.000Z","dependencies_parsed_at":null,"dependency_job_id":"f7ab3dfe-c285-4073-93a5-c51b460d9072","html_url":"https://github.com/aras-p/obj_parse_tester","commit_stats":null,"previous_names":[],"tags_count":0,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/aras-p%2Fobj_parse_tester","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/aras-p%2Fobj_parse_tester/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/aras-p%2Fobj_parse_tester/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/aras-p%2Fobj_parse_tester/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/aras-p","download_url":"https://codeload.github.com/aras-p/obj_parse_tester/tar.gz/refs/heads/main","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":243976644,"owners_count":20377695,"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":["wavefront-obj"],"created_at":"2024-10-10T09:56:31.928Z","updated_at":"2025-03-19T07:31:07.403Z","avatar_url":"https://github.com/aras-p.png","language":"C","readme":"# Testing various Wafefront .OBJ parsing libraries\n\nTest code for \"[**Comparing .obj parse libraries**](https://aras-p.info/blog/2022/05/14/comparing-obj-parse-libraries/)\" blog post.\n\n### Libraries:\n\n* `tinyobjloader`: https://github.com/tinyobjloader/tinyobjloader, 2021 Dec 27 (8322e00a), v1.0.6+. MIT license.\n* `tinyobjloader_opt`: using the experimental multi-threaded parser from the above.\n* `fast_obj`: https://github.com/thisistherk/fast_obj, 2022 Jan 29 (85778da5), v1.2+. MIT license.\n* `rapidobj`: https://github.com/guybrush77/rapidobj, 2022 Jun 18 (0e545f1), v0.9. MIT license.\n* `blender`: part of Blender codebase for building just the OBJ parser ([tree](https://github.com/blender/blender/tree/6ad9d8e2/source/blender/io/wavefront_obj/importer)), 2022 Jun 19, version 3.3.0 alpha. GPL v3 license.\n* `assimp`: https://github.com/assimp/assimp, 2022 May 10 (ff43768d), version 5.2.3+. BSD 3-clause license.\n* `osg`: part of https://github.com/openscenegraph/OpenSceneGraph code, just the OBJ parser ([tree](https://github.com/openscenegraph/OpenSceneGraph/tree/68340324/src/osgPlugins/obj)), 2022 Apr 7, v3.6.5+. LGPL-based license.\n\n\n### Features\n\n| Feature        |tinyobjloader|fast_obj|rapidobj|blender|assimp|osg|\n| :---                     |:---:|:---:|:---:|:---:|:---:|:---:|\n| Base meshes              | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ |\n| Base materials           | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ |\n| [PBR](http://exocortex.com/blog/extending_wavefront_mtl_to_support_pbr) materials | ✓ |   | ✓ |   | ✓ |   |\n| Vertex colors ([xyzrgb](http://paulbourke.net/dataformats/obj/colour.html)) | ✓ |   |   | ✓ | ✓ | ✓ |\n| Vertex colors ([MRGB](http://paulbourke.net/dataformats/obj/colour.html))   |   |   |   | ✓ |   | ✓ |\n| Lines (`l`)              | ✓ |   | ✓ | ✓ | ✓ | ✓ |\n| Points (`p`)             | ✓ |   |   |   | ✓ | ✓ |\n| Curves (`curv`)          |   |   |   | ✓* |   |   |\n| 2D Curves (`curv2`)      |   |   |   |   |   |   |\n| Surfaces (`surf`)        |   |   |   |   |   |   |\n| Skin weights (`vw`)      | ✓ |   |   |   |   |   |\n| Subdiv crease tags (`t`) | ✓ |   |   |   |   |   |\n| Line continuations (`\\`) |   |   |   | ✓ | ✓ | ✓ |\n| Platform: Windows        | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ |\n| Platform: macOS          | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ |\n| Platform: Linux          | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ |\n\n\\* Blender OBJ parser has limited support for curves: only `bspline` curve type is supported.\n\n\n### Testing on models:\n\n* `sponza`: 20MB, 0.15M verts, 381 objects, 25 materials. \"Crytek Sponza\" from [McGuire Computer Graphics Archive](https://casual-effects.com/data/).\n* `Monkey-6`: 330MB, 2.0M verts, 1 object, 1 material. Blender's Monkey mesh, subdivided to level 6.\n* `rungholt`: 270MB, 2.5M verts, 1 object, 84 materials. \"Rungholt\" Minecraft map from [McGuire Computer Graphics Archive](https://casual-effects.com/data/).\n* `Blender3Splash`: 2.5GB, 14.4M verts, 24k objects, 113 materials. Blender 3.0 splash scene \"[Sprite Fright](https://cloud.blender.org/p/gallery/617933e9b7b35ce1e1c01066)\", exported as OBJ.\n\n\n### Time in seconds it takes to load an .obj file:\n\nWindows 10, AMD Ryzen 5950X, VS2022 17.1:\n\n| Library           |sponza|Monkey-6|rungholt|Blender3Splash|\n| :---              |  ---:|    ---:|    ---:|          ---:|\n| tinyobjloader     | 0.17 | 2.75   | 2.83   | 19.57        |\n| tinyobjloader_opt | 0.04 | 0.41   | 0.40   |  3.12        |\n| fast_obj          | 0.04 | 0.70   | 0.58   |  5.16        |\n| rapidobj          | 0.02 | 0.19   | 0.19   |  1.25        |\n| blender           | 0.07 | 0.94   | 0.83   |  6.92        |\n| assimp            | 0.20 | 2.98   | 3.88   | 21.98        |\n| osg               | 0.82 |12.88   |12.04   | 96.42        |\n\nWindows 10, AMD Ryzen 5950X, clang 13:\n\n| Library           |sponza|Monkey-6|rungholt|Blender3Splash|\n| :---              |  ---:|    ---:|    ---:|          ---:|\n| tinyobjloader     |      | 2.65   | 2.42   | 16.47        |\n| tinyobjloader_opt |      | 0.38   | 0.38   |  2.69        |\n| fast_obj          |      | 0.71   | 0.58   |  5.25        |\n| rapidobj          |      | 0.19   | 0.17   |  1.62        |\n| blender           |      | 0.80   | 0.74   |  5.98        |\n| assimp            |      | 2.74   | 3.53   | 19.90        |\n\nmacOS 12.3, Apple M1 Max, clang 13:\n\n| Library           |sponza|Monkey-6|rungholt|Blender3Splash|\n| :---              |  ---:|    ---:|    ---:|          ---:|\n| tinyobjloader     | 0.14 | 2.09   | 2.12   | 14.72        |\n| tinyobjloader_opt | 0.03 | 0.47   | 0.38   |  5.07        |\n| fast_obj          | 0.02 | 0.33   | 0.30   |  2.40        |\n| rapidobj          | 0.01 | 0.10   | 0.10   |  0.63        |\n| blender           |      | 0.73   | 0.76   |  5.53        |\n| assimp            | 0.13 | 1.89   | 2.17   | 14.26        |\n| osg               | 0.46 | 7.04   | 5.83   | 53.14        |\n\n### Memory usage:\n\nMemory usage in MB (peak/end), Windows/VS2022:\n\n| Library           |rungholt    |Blender3Splash|\n| :---              |        ---:|          ---:|\n| tinyobjloader     |  395 / 248 | 1505 / 1438  |\n| tinyobjloader_opt | 1662 / 469 |13850 / 2272  |\n| fast_obj          |  319 / 214 | 1895 / 1237  |\n| rapidobj          |  428 / 218 | 2667 / 1265  |\n| blender-initial   |  680 / 560 | 4058 / 4051  |\n| blender           |  272 / 253 | 1621 / 1614  |\n| assimp            | 1341 / 640 | 6097 / 2788  |\n| osg               |  857 / 850 | 3945 / 3937  |\n\n","funding_links":[],"categories":[],"sub_categories":[],"project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Faras-p%2Fobj_parse_tester","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Faras-p%2Fobj_parse_tester","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Faras-p%2Fobj_parse_tester/lists"}