/AssetKit

🎨 3D asset importer/exporter/util library based on COLLADA/glTF specs (In progress)

Primary LanguageCOtherNOASSERTION

🎨 AssetKit

Build Status Build status Coverage Status Codacy Badge status

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

Project Status

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

glTF

  • 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

Tasklist

  • 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
    • 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
    • Load external DAE files and cache them
    • Load animations
      • Parse MathML formulas
  • Load FX
  • Load Physics
  • Load Kinematics
  • Exporting

Build

Unix (Autotools)

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 (MSBuild)

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

Test

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