All Projects → warrenm → GLTFKit2

warrenm / GLTFKit2

Licence: MIT license
A glTF 2.0 asset loader and exporter for Objective-C and Swift.

Programming Languages

c
50402 projects - #5 most used programming language
objective c
16641 projects - #2 most used programming language
swift
15916 projects

Projects that are alternatives of or similar to GLTFKit2

gltf-bounding-box
Computes the global bounding box of a gltf model
Stars: ✭ 18 (-40%)
Mutual labels:  gltf, gltf2
VRMKit
VRM loader and VRM renderer (3D model / gltf)
Stars: ✭ 85 (+183.33%)
Mutual labels:  scenekit, gltf
webgl-gltf
GLTF Viewer For WebGL
Stars: ✭ 26 (-13.33%)
Mutual labels:  gltf, gltf2
Gltfscenekit
glTF loader for SceneKit
Stars: ✭ 124 (+313.33%)
Mutual labels:  scenekit, gltf
maya-glTF
glTF 2.0 exporter for Autodesk Maya
Stars: ✭ 121 (+303.33%)
Mutual labels:  gltf, gltf2
gdx-gltf
GLTF 2.0 3D format support and PBR shader implementation for LibGDX
Stars: ✭ 156 (+420%)
Mutual labels:  gltf, gltf2
orkid
Orkid Media Engine (C++/Lua/Python3/Linux/MacOs/OpenVR/Qt5)
Stars: ✭ 20 (-33.33%)
Mutual labels:  gltf, gltf2
Gltfkit
An Objective-C glTF 2.0 loader and Metal-based renderer
Stars: ✭ 138 (+360%)
Mutual labels:  scenekit, gltf
verge3d-blender-addon
WebGL exporter add-on ripped from Verge3D for Blender toolkit
Stars: ✭ 91 (+203.33%)
Mutual labels:  gltf, gltf2
libgltf
glTF 2.0 parser/loader for C++11, supports many extensions likes `KHR_draco_mesh_compression`, `KHR_lights_punctual`, `KHR_materials_clearcoat`, and more.
Stars: ✭ 55 (+83.33%)
Mutual labels:  gltf, gltf2
docker-gltf-to-udsz
Docker container for converting gltf files into apple usdz quicklook files
Stars: ✭ 42 (+40%)
Mutual labels:  gltf, gltf2
binary-gltf-utils
Bundles glTF models, images, shaders and other assets into a Binary glTF (.glb) file.
Stars: ✭ 31 (+3.33%)
Mutual labels:  gltf
arkit-graffiti
A demo that shows painting on walls with ARKit+SceneKit
Stars: ✭ 49 (+63.33%)
Mutual labels:  scenekit
gltf-avatar-threejs
A glTF-based 3d avatar system
Stars: ✭ 195 (+550%)
Mutual labels:  gltf
redcube
JS renderer based on GLTF to WebGPU or WebGL backends.
Stars: ✭ 86 (+186.67%)
Mutual labels:  gltf
lol2gltf
Tool for converting between the glTF format and League of Legends models and animations
Stars: ✭ 74 (+146.67%)
Mutual labels:  gltf
importer-exporter
3D City Database client for high-performance import and export of 3D city model data
Stars: ✭ 104 (+246.67%)
Mutual labels:  gltf
glTF-Blender-IO-materials-variants
Blender3D addon for glTF KHR_materials_variants extension
Stars: ✭ 56 (+86.67%)
Mutual labels:  gltf
WWDC17
WWDC 2017 Scholarship Submission by Phil Zet (Philipp Zakharchenko)
Stars: ✭ 14 (-53.33%)
Mutual labels:  scenekit
glTF-Shell-Extensions
Microsoft Windows shell extensions that pack .gltf to .glb and unpack .glb to .gltf
Stars: ✭ 82 (+173.33%)
Mutual labels:  gltf

GLTFKit2

GLTFKit2 is an efficient glTF loader and exporter for Objective-C and Swift.

This project is a spiritual successor of the GLTFKit project, with many of the same aims, but some notable differences. GLTFKit2:

  • includes import and export, while GLTFKit was read-only.
  • strives to be as interoperable as possible, with extensions for Model I/O, SceneKit, and QuickLook.
  • tries to retain all of the information from the asset file, meaning extensions and extras are available to client code even if they are unrecognized by the loader.
  • uses cgltf and JSMN internally to load the JSON portion of glTF files, which is more efficient than parsing with NSJSONSerialization.

Usage

Using the Framework

The GLTFKit2 Xcode project is completely self-contained and can be used to build a Cocoa framework for macOS. If you want to use GLTFKit2 as a framework, link to it and embed it in your target. You can also opt to include the source directly in your app target.

Loading Assets

To load a glTF 2.0 model, import <GLTFKit2/GLTFKit2.h> and use the GLTFAsset class. Since assets can take a while to load, prefer to use the async loading methods.

Objective-C:

[GLTFAsset loadAssetWithURL:url
                    options:@{}
                    handler:^(float progress, 
                              GLTFAssetStatus status, 
                              GLTFAsset *asset, 
                              NSError *error, 
                              BOOL *stop)
{
    // Check for completion and/or error, use asset if complete, etc.
}

Swift:

GLTFAsset.load(with: url, options: [:]) { (progress, status, maybeAsset, maybeError, _) in
    // Check for completion and/or error, use asset if complete, etc.
}

The URL must be a local file URL. Loading of remote assets and resources is not supported.

Interoperating with SceneKit

The framework can be used to easily transform glTF assets into SCNScenes to interoperate with SceneKit.

First, load the asset as shown above. Then, to get the default scene of a glTF asset, use the SCNScene class extension method +[SCNScene sceneWithGLTFAsset:].

Status and Conformance

Below is a checklist of glTF features and their current level of support.

Status

  • Import
  • Export

Encodings

  • JSON
  • Binary (.glb)

Buffer Storage

  • External references (buffer.uri)
  • Base-64 encoded buffers

Well-Known Vertex Accessor Semantics

  • POSITION
  • NORMAL
  • TANGENT
  • TEXCOORD_0
  • TEXCOORD_1
  • COLOR_0
  • JOINTS_0
  • WEIGHTS_0

Primitive Types

  • Points
  • Lines
  • Line Loop
  • Line Strip
  • Triangles
  • Triangle Strip
  • Triangle Fan

Images

  • External image references (image.uri)
  • Base-64 encoded images
  • PNG
  • JPEG
  • TIFF

Materials

  • Base color factor
  • Metallic factor
  • Roughness factor
  • Emissive factor
  • Base color map
  • Metallic-roughness map
  • Occlusion map
  • Emissive map
  • Normal texture scale
  • Alpha mode
    • Opaque alpha mode
    • Mask alpha mode
    • Blend alpha mode
  • Double-sided materials

Samplers

  • Wrap mode
  • Minification/magnification filters
  • Mipmaps

Cameras

  • Perspective cameras
  • Orthographic cameras

Morph Targets

  • Morph targets

Animation

  • Translation animations
  • Rotation animations
  • Scale animations
  • Morph target weight animations
  • Linear interpolation
  • Discrete animations
  • Cubic spline interpolation

Skinning

  • Joint matrix calculation

Sparse Accessors

  • Sparse accessors

Extensions

  • KHR_draco_mesh_compression
  • KHR_lights_punctual
  • KHR_materials_clearcoat
  • KHR_materials_ior
  • KHR_materials_sheen
  • KHR_materials_specular
  • KHR_materials_transmission
  • KHR_materials_unlit
  • KHR_materials_variants
  • KHR_materials_volume
  • KHR_mesh_quantization
  • KHR_texture_basisu
  • KHR_texture_transform
  • KHR_xmp_json_ld

Extension support indicates that an extension's features are available as first-class objects through the GLTFAsset API. Not all features are available after an asset is bridged to another framework (e.g. SceneKit) that does not have support for such features.

Conformance

This implementation is known to be non-conforming to the glTF 2.0 specification and is under active development.

Contributing

Pull requests are welcome, but will be audited strictly in order to maintain code style. If you have any concerns about contributing, please raise an issue on Github so we can talk about it.

License

Copyright (c) 2021—2022 Warren Moore

Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated
documentation files (the "Software"), to deal in the Software without restriction, including without limitation the
rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to
permit persons to whom the Software is furnished to do so, subject to the following conditions:

The above copyright notice and this permission notice shall be included in all copies or substantial portions of the
Software.

THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE
WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR
COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR
OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. 
Note that the project description data, including the texts, logos, images, and/or trademarks, for each open source project belongs to its rightful owner. If you wish to add or remove any projects, please contact us at [email protected].