For "VRM", please refer to this page.
- Load VRM file
- Render VRM models on RealityKit (experimental)
- Face morphing (blend shape)
- Bone animation (skin / joint)
- Physics (spring bone)
- Swift 5.9+
- iOS 15.0+
- visionOS 2.0+
- watchOS 8.0+ (Experimental)
You can install this package with Swift Package Manager.
If you want to use these package managers, please use https://github.com/tattn/VRMKit/releases/tag/0.4.2
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].nameimport RealityKit
import VRMKit
import VRMRealityKit
let loader = try VRMEntityLoader(named: "model.vrm")
let vrmEntity = try loader.loadEntity()
let arView = ARView(frame: .zero, cameraMode: .nonAR, automaticallyConfigureSession: false)
let anchor = AnchorEntity(world: .zero)
anchor.addChild(vrmEntity.entity)
arView.scene.addAnchor(anchor)import RealityKit
import RealityKitContent
import VRMKit
import VRMRealityKit
import SwiftUI
struct ContentView: View {
var body: some View {
RealityView { content in
let loader = try VRMEntityLoader(named: "model.vrm")
let vrmEntity = try loader.loadEntity()
content.add(vrmEntity.entity)
}
}
}Render VRM (SceneKit) — Deprecated
Note: VRMSceneKit is deprecated. Use VRMRealityKit instead.
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 = scenevrmEntity.setBlendShape(value: 1.0, for: .preset(.joy))vrmEntity.setBlendShape(value: 1.0, for: .preset(.angry))vrmEntity.setBlendShape(value: 1.0, for: .custom("><"))vrmEntity.setBlendShape(value: 1.0, for: .preset(.fun))
let neckRotation = simd_quatf(angle: 20 * .pi / 180, axis: SIMD3<Float>(0, 0, 1))
let shoulderRotation = simd_quatf(angle: 40 * .pi / 180, axis: SIMD3<Float>(0, 0, 1))
vrmEntity.humanoid.node(for: .neck)?.transform.rotation *= neckRotation
vrmEntity.humanoid.node(for: .leftShoulder)?.transform.rotation *= shoulderRotation
vrmEntity.humanoid.node(for: .rightShoulder)?.transform.rotation *= shoulderRotationlet loader = try VRMEntityLoader(named: "model.vrm")
let image = try loader.loadThumbnail()- VRM 1.0 support
- Decoding VRM 1.0 file
- Render an avatar by RealityKit
- VRM shaders support
- Improve rendering quality
- Animation support
- VRM editing function
- GLTF renderer support
- Fork it!
- Create your feature branch:
git checkout -b my-new-feature - Commit your changes:
git commit -am 'Add some feature' - Push to the branch:
git push origin my-new-feature - Submit a pull request :D
Donating to help me continue working on this project.
VRMKit is released under the MIT license. See LICENSE for details.
Tatsuya Tanaka





