• Stars
    star
    118
  • Rank 299,923 (Top 6 %)
  • Language
    JavaScript
  • License
    MIT License
  • Created almost 4 years ago
  • Updated almost 2 years ago

Reviews

There are no reviews yet. Be the first to send feedback to the community and the maintainers!

Repository Details

Unofficial Three.js glTF loader/exporter plugins

three-gltf-extensions

npm version

Three.js glTF loader and exporter have plugin system to provide extensibility mechanism to users. glTF extensions can be handled with the plugin system.

Some plugins for major and stable extensions are built-in in the loader and exporter. But other extensions are not supported as built-in by them (yet) because for example the specification is not great fit to Three.js API or structure, or the specification is not finalized.

If you want to use such extensions you need to write plugins by yourself but it requires the knowledge of glTF specification, extensions specification, Three.js core API, or Three.js glTF loader/exporter API. It can be difficult for some users.

This project provides you Three.js glTF loader/extension plugins even for such extensions. You no longer need to write the plugin on your own.

Goals

  • Provide reusablity and easiness to use even for the the extensions the spec of which isn't great fit to Three.js API or structure
  • Allow early trial of glTF extensions the spec of which is not finalized yet
  • Send feedback to Three.js glTF loader/exporter plugin system APIs

Online demo

Supported glTF extensions

Compatible Three.js revision

Depends on the plguins. Refer to each plugin's readme.

How to use

GLTFLoader plugins

// Import Three.js
<script type="importmap">
{
  "imports": {
    "three": "path_to_three.module.js"
  }
}
</script>
<script type="module">
import * as THREE from 'three';
import {GLTFLoader} from 'path_to_GLTFLoader.js';

// Import three-gltf-extensions loader plugins
import GLTFFooExtension from 'path_to_three-gltf-extensions/loaders/Foo_extension/Foo_extension.js';

// Register the plugin to the loader and then load glTF
const loader = new GLTFLoader();
loader.register(parser => new GLTFFooExtension(parser));
loader.load(path_to_gltf_asset, gltf => {
  ...
});
</script>

GLTFExporter plugins

// Import Three.js
<script type="importmap">
{
  "imports": {
    "three": "path_to_three.module.js"
  }
}
</script>
<script type="module">
import * as THREE from 'three';
import {GLTFExporter} from 'path_to_GLTFExporter.js';

// Import three-gltf-extensions exporter plugins
import GLTFExporterFooExtension from 'path_to_three-gltf-extensions/exporters/Foo_extension/Foo_extension_exporter.js';

// Register the plugin to the exporter and then export Three.js objects
const exporter = new GLTFExporter();
exporter.register(writer => new GLTFExporterFooExtension(writer));
exporter.parse(scene, result => {
  ...
});
</script>

Refer to each plugin's README for more detail.

Locally run examples

$ npm install
$ npm start
# Access http://localhost:8080/examples/index.html

Unit Test

Unit Test on Web browser

$ npm install
$ npm run test-install
$ npm run test-build
$ npm start
# Access http://localhost:8080/test/index.html

Unit Test on Node.js

$ npm run test-install
$ npm run test

Note that the unit tests which rely on Web don't run. I recommend to run the unit tests on Web browser.

Customize the plugins in your side

As written above, some extensions are not great fit to Three.js API or structure. So the plugins for them may have some limitations. If they don't cover your use case, please fork the repository and customize on your end.

More Repositories

1

riscv-rust

RISC-V processor emulator written in Rust+WASM
Rust
595
star
2

nes-js

JavaScript NES(Famicom) emulator
JavaScript
205
star
3

nes-rust

NES emulator written in Rust + WASM
Rust
204
star
4

toho-like-js

Touhou style danmaku shooter game which runs on your chrome.
JavaScript
176
star
5

online-wgsl-editor

A tiny WGSL online editor
JavaScript
174
star
6

webgpu-devtools

JavaScript
172
star
7

mmd-viewer-js

MMD model dances on your chrome with WebGL.
JavaScript
158
star
8

wgpu-rust-renderer

A tiny WebGPU renderer written in Rust
JavaScript
138
star
9

THREE.WebGPURenderer

Experimental Three.js WebGPU renderer
JavaScript
132
star
10

tiny-web-metaverse

A web-based 3D virtual space lightweight framework with high flexibility, extensibility, and easy hosting, built on ECS architecture
JavaScript
117
star
11

MMDLoader-app

sample applications for THREE.MMDLoader
HTML
111
star
12

WebAssembly-benchmark

HTML
89
star
13

a-mmd

A-Frame MMD component
JavaScript
83
star
14

ThreeNetwork

Network sync library for Three.js
JavaScript
72
star
15

glTF-Blender-IO-materials-variants

Blender3D addon for glTF KHR_materials_variants extension
Python
71
star
16

ecs-rust

Tiny ECS library in Rust
JavaScript
60
star
17

three.wasm-experimental

Experimental Three.js WASM (WIP)
JavaScript
55
star
18

glTF-Blender-IO-EXT-mesh-gpu-instancing

Python
52
star
19

mmd-parser

NPM MMD parser package
JavaScript
48
star
20

webgpu-trial

WebGPU trial
HTML
48
star
21

pdp11-js

PDP-11 emulator implemented with JavaScript. UNIX V6 runs on your chrome.
JavaScript
43
star
22

aframe-rain

A-Frame Rainfall effect component
JavaScript
41
star
23

aframe-outline

Two-pass Outline effect component for A-Frame
JavaScript
34
star
24

aframe-instancing

A-Frame instancing component
JavaScript
24
star
25

EXT_skeleton_humanoid

21
star
26

THREE.Math-WASM

Three.js Math library in WASM
JavaScript
20
star
27

aframe-webrtc

A-Frame WebRTC component
JavaScript
17
star
28

takahirox.github.io

JavaScript
16
star
29

glTF-Blender-IO-MSFT-lod

Python
16
star
30

glTF-Transform-lod-script

JavaScript
15
star
31

aframe-deferred-renderer

A-Frame Deferred Renderer component
JavaScript
15
star
32

THREE.ZipLoader

Zip archived model file Loading helper for Three.js
JavaScript
14
star
33

THREE.TextureUploader

Experimental Less-blocking Texture uploader for Three.js
10
star
34

EXT_texture_video

8
star
35

nes-rust-ecsy

NES emulator + ECSY + Webpack bundle
JavaScript
7
star
36

KHR_lights_shadows

glTF exntension to specify which nodes can cast or receive shadows
6
star
37

EXT_copyrights

glTF copyrights extension
5
star
38

AsyncGLTFLoader

JavaScript
5
star
39

binary-viewer

Easy online binary dump tool.
HTML
5
star
40

Basis-Texture-Viewer

JavaScript
4
star
41

Vulkan-glTF-viewer-trial

C++
4
star
42

WebWorkers-benchmark

HTML
4
star
43

Hubs-glTF-Test-Models

3
star
44

WebAssemblyThread-benchmark

JavaScript
3
star
45

vr-tours

3
star
46

WebGL-CPU-Profiler-Extension

WebExtension profiling CPU elapsed time for WebGL
JavaScript
3
star
47

web_ai_chat

AI chat with on-device and in-browser inference
TypeScript
3
star
48

EXT_mesh_lod

2
star
49

charset-encoder-js

Simple charset encoder with JavaScript
JavaScript
2
star
50

KHR_parallel_shader_compile_test

GLSL
2
star
51

YouTube-Auto-Ad-Skipper

JavaScript
2
star
52

custom-shader

2
star
53

license-info-js

JavaScript
2
star
54

js-arguments-test

HTML
2
star
55

rust-tiny-os

Rust
2
star
56

libsquish-js

JavaScript libsquish compiled with emscripten
C++
2
star
57

EXT_text

glTF text extension
2
star
58

whisper-web-extension

JavaScript
2
star
59

ios-webaudio-test

JavaScript
1
star
60

ios-video-test

Test purpose
HTML
1
star
61

MyPersonalTodos

1
star
62

texImage2D-gl-test

HTML
1
star
63

SIMDJS-benchmark

HTML
1
star
64

pannernode-test

HTML
1
star
65

MOZ_lightmap

1
star
66

system_trade

Easy algorithmic trading tool on Lubuntu for myself.
Shell
1
star