3D asset importer, exporter library. This library also includes common 3D utils funcs. It is written with C99 but C++ wrappers or other language bindings can be written in the future.
This library will full support COLLADA specs and glTF specs, plus other 3D formats e.g .obj, .stl maybe supported by sub-libraries e.g. assetkit-stl, assetkit-fbx.
There is also an optional renderer library called libgk for render AssetKit contents. You can see how to load AssetKit to libgk in assetkit-gl lib/repo.
I've also created a basic program (included a screenshot of render result and dae) to show full steps: simple-collada-viewer
Currently I'm working on renderer which is also important to test AssetKit. When I implement a feature in AssetKit then I'm adding extra features to Graphics Kernel / Graphics Kit to test AssetKit. The renderer is not just for testing purpose so I'm trying to do my best and this takes some time.
So working on multiple projects (cglm, libgk, libds, ...) makes the progress very slow, but in the end the results will be perfect
- Load buffers, bufferViews
- Load acessors, meshes / primitives
- Load nodes
- Load scenes
- Load cameras
- Load materials
- Images
- Samplers
- Textures
- PBR Materials
- Metallic Roughness
- Specular Glossiness Extension
- Other textures
- Occlusion map
- Emissive map
- Normal Map
- others?
- alphaMode
- alphaCutoff
- doubleSided
- Animations
- Extensions
- KHR_materials_pbrSpecularGlossiness
- Lights
- Common materials
- Hierarchical Allocator
- Extensible memory node
- Flexible Coordinate System, loader can laod any coords sys and can convert it to any coord sys even left handed
- Implement RB-tree for ID resolver
- Options
- Load Core elements
- Geometries
- Meshes
- Load Polygons
- Load Triangles
- Load Lines
- Convert multi-index mesh to single-index mesh if wanted
- Find and fix edges attribs e.g. same position can't use different normals
- Convert mesh data (positions, normals...) to current coord sys
- Compute bounding box if wanted
- Triangulate Polygons if wanted
- Material resolver
- Generate face normals if wanted
- B-rep
- Meshes
- Cameras
- Attach first found camera to scene as default camera
- Attach all camera instances to scene
- Scenes
- Nodes
- Fix camera node transform
- Transforms
- Utils for transforms
- Convert transforms to current coord sys
- Implement bind_material
- Nodes
- Load external DAE files and cache them
- Load animations
- Parse MathML formulas
- Geometries
- Load FX
- Load Physics
- Load Kinematics
- Exporting
Step 1: First you should build dependencies, do this only once:
$ sh ./build-deps.sh
Step 2: Build, Test and Install AssetKit
$ sh autogen.sh
$ ./configure
$ make
$ make check
$ [sudo] make install
Step 3: Change install name if required, after make finished make automaticall runs sh ./post-build.sh
script. It changes install names. You may want to edit build scripts and post-build.sh
script if you want to build AssetKit with existing libraries. Default behavior is that AssetKit will look up sub libraries inside .libs
folder, if you only need to change .libs
name then change it in post-build.sh
script file.
Windows related build files, project files are located in win
folder, make sure you are inside assetkit/win
folder. Code Analysis are enabled to it may take awhile to build
git
, nuget
and python
commands should be installed/accessible.
$ cd win
$ .\build.bat
$ msbuild assetkit.vcxproj /p:Configuration=Release
if msbuild
won't work correctly then try to build with devenv
:
$ devenv assetkit.sln /Build Release
Currently tests are implemented for Autotools (make check), there is separate repo for storing test models to avoid increase repo size: http://github.com/recp/sample-models . By running build-deps.sh
, git submodule update --init --recursive
command will be executed and all sample models will be fecthed for testing into assetkit/test
folder
make check
uses this repo samples to test.
# Notes
- Actual README and documents for how to use this will be written after first version
- I'm working hard to finish this lib, I'll update README when finished, for now DON'T USE THIS LIB UNTIL FINISHED
- Don't create pull requests for now, if you really want then, first contact me because I may work on the feature you want or I've planned it with an architecture to do that