An open API service indexing awesome lists of open source software.

https://github.com/tattn/vrmkit

VRM loader and VRM renderer (3D model / gltf)
https://github.com/tattn/vrmkit

3d gltf ios scenekit swift vrm

Last synced: 19 days ago
JSON representation

VRM loader and VRM renderer (3D model / gltf)

Awesome Lists containing this project

README

        

VRMKit

VRM loader and VRM renderer






license:MIT



demo
demo

For "VRM", please refer to [this page](https://dwango.github.io/en/vrm/).

## Features

- [x] Load VRM file
- [x] Render VRM models on SceneKit (experimental)
- [x] Face morphing (blend shape)
- [x] Bone animation (skin / joint)
- [x] Physics (spring bone)

# Requirements

- Swift 5.7+
- iOS 15.0+
- watchOS 8.0+ (Experimental)

# Installation

## Swift Package Manager

You can install this package with Swift Package Manager.

## Carthage & CocoaPods (Deprecated)

If you want to use these package managers, please use https://github.com/tattn/VRMKit/releases/tag/0.4.2

# Usage

## Load VRM

```swift
import VRMKit

let vrm = try VRMLoader().load(named: "model.vrm")
// let vrm = try VRMLoader().load(withUrl: URL(string: "/path/to/model.vrm")!)
// let vrm = try VRMLoader().load(withData: data)

// VRM meta data
vrm.meta.title
vrm.meta.author

// model data
vrm.gltf.jsonData.nodes[0].name
```

## Render VRM

```swift
import VRMKit
import VRMSceneKit

@IBOutlet weak var sceneView: SCNView!

let loader = try VRMSceneLoader(named: "model.vrm")
let scene: VRMScene = try loader.loadScene()
let node: VRMNode = scene.vrmNode

sceneView.scene = scene
```

### Blend shapes

joy

```swift
node.setBlendShape(value: 1.0, for: .preset(.joy))
```

angry

```swift
node.setBlendShape(value: 1.0, for: .preset(.angry))
```

><

```swift
node.setBlendShape(value: 1.0, for: .custom("><"))
```

### Bone animation

Humanoid

```swift
node.setBlendShape(value: 1.0, for: .preset(.fun))
node.humanoid.node(for: .neck)?.eulerAngles = SCNVector3(0, 0, 20 * CGFloat.pi / 180)
node.humanoid.node(for: .leftShoulder)?.eulerAngles = SCNVector3(0, 0, 40 * CGFloat.pi / 180)
node.humanoid.node(for: .rightShoulder)?.eulerAngles = SCNVector3(0, 0, 40 * CGFloat.pi / 180)
```

### Read the thumbnail image

```swift
let loader = try VRMSceneLoader(named: "model.vrm")
let image = try loader.loadThumbnail()
```

# ToDo
- [ ] VRM 1.0 support
- [x] Decoding VRM 1.0 file
- [ ] Render an avatar by SceneKit
- [ ] VRM shaders support
- [ ] Improve rendering quality
- [ ] Animation support
- [ ] VRM editing function
- [ ] GLTF renderer support

# Contributing

1. Fork it!
2. Create your feature branch: `git checkout -b my-new-feature`
3. Commit your changes: `git commit -am 'Add some feature'`
4. Push to the branch: `git push origin my-new-feature`
5. Submit a pull request :D

## Support this project

Donating to help me continue working on this project.

[![Donate](https://img.shields.io/badge/Donate-PayPal-green.svg)](https://paypal.me/tattn/)

# License

VRMKit is released under the MIT license. See LICENSE for details.

# Author
Tatsuya Tanaka

Twitter
GitHub