Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Skeletal Animation #130

Closed
guidocalvano opened this issue Mar 11, 2011 · 26 comments
Closed

Skeletal Animation #130

guidocalvano opened this issue Mar 11, 2011 · 26 comments

Comments

@guidocalvano
Copy link

Dear mr. Doob,

Great library, very inspiring. Would like to build a game in it I've been thinking about for a long long time. But, I need character animation... Are you going to put skeletal animation based on some file format I could get out of maya into Three?

Thanks,

Guido

@mrdoob
Copy link
Owner

mrdoob commented Mar 11, 2011

empaempa was working on it recently, but I don't think he managed to get something solid yet.

@guidocalvano
Copy link
Author

Any ideas on when I can expect it?

@mrdoob
Copy link
Owner

mrdoob commented Mar 11, 2011

Nope...

@geoffreak
Copy link

Would you please mention this on the main page/readme, mrdoob? I have been trying to find examples of skeletal animation and wasn't aware that it wasn't available yet. Being a complete newbie to 3D animation, it would be nice to know which common 3D features are available or not.

Also, it would be really awesome if you could provide tutorials or links to tutorials for the export scripts to three.js format :)

@mrdoob
Copy link
Owner

mrdoob commented Mar 27, 2011

Would you please mention this on the main page/readme, mrdoob? I have been trying to find examples of skeletal animation and wasn't aware that it wasn't available yet.

All in good time. Rather spend 5 minutes implementing the skeletal animation than writing in the readme that is not working yet ;)

@guidocalvano
Copy link
Author

TTF based text rendering and skeletal animation are really the only still things missing in Three

@empaempa
Copy link
Contributor

Skins (SkinnedMesh.js) and bones (Bone.js) and animation of bones (Animation.js) should work, just that I haven't got any models/animation that I can share in an example right now. I'll try to put together something as soon as I get some time.

Generally speaking, in the model.js that you load, there should be (V=vertex, B=bone)...

skinIndices = [ V1B1index, V1B2index, V2B1index, V2B2index... ],
skinWeights = [ V1B1influence, V1B2influence, V2B1influence, V2B2influence... ],
bones=[ { B1Setup }, { B2Setup }... ]

The BXSetup

{

  parent: BXindex,  // -1 for root bone
  pos:[x,y,z],
  rotq[x,y,z,w], // quaternion
  scl[x,y,z]

}

The animation format is quite straight forward (used for both skinned models and objects in a hierarchy):

animation: {

name: "nameOfAnimation",
length: 1201,
fps: 0.03,  // fpms actually
hierarchy: [

{ parent: -1,
keys: [

{ time: 0,
pos: [ x, y, z ],
rot: [ x, y, z, w ],
scl: [ x, y, z ] },

{ time: 620,
rot: [ x, y, z, w ] },

{ time: 1201,
pos: [ x, y, z ],
rot: [ x, y, z, w ],
scl: [ x, y, z ] } ] },

{ parent: 0,
keys: [ ...

] }

“length” is the animation length in milliseconds. “time” is a key’s time in milliseconds. “pos”, “rot” and “scl” are local coordinates (relative its parent). “rot” is a quaternion. “parent” is the parent’s index in “hierarchy”, and the root’s parent is -1.

Note that the first and last key need to match in a looping animation. First and last keys always need “pos/rot/scl”. The last key’s “time” must be equal to “length”. Keys in the middle of the animation only need one of “pos/rot/scl” to work.

The order in “hierarchy” is either dictated by the “bones” array in a rigged model (see above) or a recursed object hierarchy…

hierarchy = [];
recurse( root, hierarchy );

recurse = function( root, hierarchy ) {

  hierarchy.push( root );
  for( var c = 0; c < root.children.length; c++ ) recurse( root.children[ c ], hierarchy );

}

At this point there's no Blender-exporter for this, so somehow you need to manage this yourself. Hope that helps!

@guidocalvano
Copy link
Author

mmmmmm

I don't use Blender... and using the editor I do use it would probably take me about a month to write the exporter. I'd have to learn the format of the editor, I'd have to learn the inner mechanics of Three... And then I'd have to build the actual exporter. I am already on a rush to finish my master project in time...

Are you planning on building some loader for some common 3D file format?

@guidocalvano
Copy link
Author

I mean, it seems like a piece of cake for someone who already knows three and say 3DS files.

@empaempa
Copy link
Contributor

Yeah, I know it's a lot of work to get this into a pipeline - sorry!

As far as I'm concerned, 3DS doesn't support skinning but I know Collada (DAE) does. I'm not sure, but there should be some kind of Collada-importer in JavaScript that you potentially could "port" to support Three.

@empaempa
Copy link
Contributor

If it's a simple model, like a tube, you can probably calculate the skinWeights and skinIndices without any problem. I'll try to put together an example of this.

@guidocalvano
Copy link
Author

I'm building an RTS. It's for the units... tubes aren't very sexy now are they... Three already reads collada files right? So the collada reader needs to be extended to read skeletal animations too. Collada is a pretty common format right? So all major editors should be able to save to collada...

Fact of the matter is, that if you guys have skeletal animation you will be the (one of the?) first open source 3D engine on webgl that can support a major 3D game.

@empaempa
Copy link
Contributor

No, tubes aren't really sexy ;)

Most editors have some sort of DAE-support, so chances are that you can export that from your tool. But unfortunately, at this point Three doesn't support DAE (see https://github.com/mrdoob/three.js/issues#issue/63 for more details).

That said, there are other WebGL-libraries out there with support for DAE and I guess a read-through and "port" of one of these implementations shouldn't be that hard. You would make a lot of people very happy if you sat down and just did it :)

@mrdoob
Copy link
Owner

mrdoob commented Mar 29, 2011

guidocalvano: Building a Collada Reader is a fairly hard task even for someone that knows his way around all this. It may happen that someone kindly gets on it and implements it from night to day, but it may also take a few months until it gets done. I wouldn't really depend on features that do not exist yet.

@et-nowis
Copy link

et-nowis commented May 1, 2011

@empaempa If I read it correctly, you commented that the skinIndices and skinWeights accounts for two bones influence.
Is it possible to extend to unlimited number of influences?
Or may be at max 4 bones because some models look smoother.

@empaempa
Copy link
Contributor

empaempa commented May 1, 2011

It's not that complicated to add more influences but you rarely see any difference above three influences - atleast that's my experience. I kept it to two as it's a good trade-off between speed, memory and looks. I don't have time right now to add more influences, but if you like to do it, SkinnedMesh.js, WebGLRenderer.js and WebGLShaders.js is the place to look and add another array of data.

Good luck! :)

@jicksta
Copy link

jicksta commented Mar 27, 2012

I see this thread is almost a year old now. Has there been any progress toward supporting skeletal animations exported from a standard tool?

@alteredq
Copy link
Contributor

Not really :S.

One thing though that should somehow work is skeletal animations in Collada (these are baked into morph animations upon loading).

But still no full pipeline for GPU accelerated skinning. I should really look into this.

Any suggestions for some good models and animations? I will need something to work with (it doesn't make sense to have pipeline that works for a single model, we have been there, unfortunately most of WebGL skinning examples are like this).

For example MD2s have been real boon for our morph animation pipeline - there is plenty of models available, they all have the same structure, they are small and they are usually released with some permissive license.

Anything like that for skinned models? I remember somebody mentioning MD5s are not very good for GPU skinning. Maybe something from other game engines (Source, Unreal, Crysis, Gamebryo)? It should be something with active modding community.

@Digitoxin
Copy link
Contributor

This seems to be the oldest unresolved issue at the moment at 3 years...

So, to update on the situation: Empaempa's skeletal animation system works quite well though it hasn't seen much love for a while, and there is a Blender exporter now that exports skeletal animations. The other model exporters probably support skeletal animation as well by now. All that's missing is blending between animations and GPU skinning.

@empaempa
Copy link
Contributor

Hey!
Sure is the oldest issue ATM :)

If I where you I'd look into rewriting these parts from scratch. There's a lot in there which isn't up to par with the rest of the engine and giving it love isn't going to cut it, I think.

A good start would be changing the animation format into a proper property-curve-format (so you can animate any property you like, including transforms and materials and whatever you like). Then whip up an animation player that handles the new format, plus blending. From there I'd look into the shaders, as well, as I don't think they're optimal (don't remember the exact reason for going down the current path).

Unfortunately I've got very little time to pitch in right now but is hoping to get my soon-to-be-released Unity exporter to support any new format you come up with :)

@Digitoxin
Copy link
Contributor

Unity exporter!? Excuse me while I hyperventilate for a moment. Sounds awesome!

Now, I don't think I can get a new animation system done, let alone better than what you've done already. I might try to figure out how to implement a short-term ugly hackish workaround to get something working quickly, though.

My idea would be to have Animation objects contain the current position/rotation of the skeleton in that animation, and then get the mesh's skeleton's position/rotation by somehow interpolating them. I've still got only vague notions of implementation and theory, but it seems doable.

@insominx
Copy link
Contributor

I have blending working with the current system which you can a demo of here: http://www.realitymeltdown.com/WebGL/BlendExample/SkeletalAnim.html . I'll submit it as soon as I get a couple of basic animations for the character to allow for moving between idle, walk, and maybe run animations.

@mrdoob
Copy link
Owner

mrdoob commented Oct 18, 2013

@insominx yay! :)

@insominx
Copy link
Contributor

and here's a better example going between an idle and a walk cycle: http://webcabin.org/temp/Character%20Blending/character-blend-demo.html . I'll be gone for a week but plan on cleaning things up a bit and submitting.

@kumavis
Copy link
Contributor

kumavis commented Apr 15, 2014

since #4658 has been merged, I think this can be closed

@mrdoob mrdoob closed this as completed Apr 15, 2014
greggman pushed a commit to greggman/three.js that referenced this issue Nov 5, 2021
greggman pushed a commit to greggman/three.js that referenced this issue Nov 9, 2021
greggman pushed a commit to greggman/three.js that referenced this issue Nov 9, 2021
greggman added a commit to greggman/three.js that referenced this issue Nov 24, 2021
* add translation kr/threejs-billboards.md

* add translation kr/threejs-cleanup.md

* add translation kr/threejs-voxel-geometry.md

* add translation kr/threejs-game.md

* r115 to r119

* Create threejs-optimize-lots-of-objects-animated.md

* add ja translation with orginal script

* delete orginal english scripts

* brush up  translation

* commit to merge master

* Create threejs-primitives.md

* fix version references

* fix script link

* update translations r115 to r119

* Create threejs-offscreencanvas.md

* use lesson-builder v1.7.0

* Update threejs-offscreencanvas.md

* lint

* prefer object spread

* add translation kr/threejs-material-table.md

* add translation kr/threejs-debugging-javascript.md

* add translation kr/threejs-debugging-glsl

* add translation kr/threejs-tips.md

* fix paths

* Update langinfo.hanson

* reword

* fix example threejs-prerequisites.md

* fix prereq example

* doc: translate wip

* doc: translate wip

* doc: translated the responsive page

* fix: toc and correct sentense

* fix: chapter title

* fix: toc of prerequisites

* doc: translated setup patge

* debug

* remove superfluous slashes

* add lang link refs

* fix voxel diagram

* update morphtargets-w-colors for r119

* typos

* adjust to match article

* fix typo

* fix out-of-date issue

* doc: new ja file

* doc: translate ja of rendering on demand

* doc: translate complete of rendering on demand

* translate ja of scenegraph

* Japanese translation of debugging javascript (mrdoob#125)

* doc: translate debugging javascript

* Translatioin ja materials (mrdoob#126)

* translate ja of materials

* Japanese translation of debugging GLSL (mrdoob#127)

* doc: translate ja of debugging glsl

* fix lut-loader

* add csp support to lut-reader

* test files

* fix blank png in firefox issue

* Feature/materials ja 002 (mrdoob#130)

* fix technical term.

* doc: translate ja of threejs tips (mrdoob#131)

* Typo (mrdoob#132)

* doc: fix translate toc of tips

* doc: translate ja of optimize lots of objects

* translate ja of texture

* Japanese translation of optimize lots of objects animated (mrdoob#135)

* doc: translate ja of optimize lots of objects animated

* fix moonOrbit diagram/code

* flip v

* Japanese translation of offscreencanvas (mrdoob#136)

* doc: translate ja of offscreencanvas

* doc: translate ja of offscreencanvas completed

* Fix typo in threejs-scenegraph (mrdoob#137)

* use width, height 100%

* fix for safari

* typo

* typo

* Japanese translation of load obj (mrdoob#139)

* doc: translate ja of load obj completed

* add the “threejs_center”div and related image

test the *

* update the chinese threejsfundamentals article

* doc: translate ja of load gltf

* update threejs-prerequisites.md: "onload" not "onbody"

minor typo

* bump to r122

* doc: translate ja of backgrounds

* doc: translate ja of transparency

* minor typo fixes: "it's" to "its"

* minor typo fix: "whether are not"

* use github actions

* pre-build

* run

* Japanese translation of picking (mrdoob#148)

* doc: translate ja of picking

* Japanese translation of multiple scenes (mrdoob#149)

* doc: translate ja of multiple scenes

* doc: translate ja of post processing

* Japanese translation of post processing 3dlut (mrdoob#151)

* doc: translate ja of post processing 3dlut

* Update zh_cn translation (mrdoob#152)

* Fix link error in ja/threejs-post-processing.md

* update zh_cn translation

Co-authored-by: Evan <liuzhenqiang@ecityos.com>

* throw up

* Translate primitives to zh_cn (mrdoob#153)

* Fix link error in ja/threejs-post-processing.md

* translate primitives to zh_cn

Co-authored-by: Evan <liuzhenqiang@ecityos.com>

* fix:  シリーズ -> 連載

* doc: translate ja of lights(wip)

* doc: translate ja of lights

* contributors

* fix NODE_ENV

* doc: translate ja of cameras(wip)

* doc: translate ja of cameras

* fix:  コーン -> 円錐体

* add chinese font family

Change-Id: I0820dbe78552ddf50dde776ea19b207ef3a7ecaf

* threejs-fundamentals translation optimize

Change-Id: I5598f8cb2e4db305dc3448d748373d32fb5f9465

* run on pull-request but don't deploy

* typo

* Revert "threejs-fundamentals translation optimize"

This reverts commit e75392bdb5e9aa4bac808c9ee969541b126e3440.

* improve threejs-responsive translation

Change-Id: Id0c68fc92137cdccfae87f30b79741a9dfc9ebfb

* fix links at build time instead of run time

* Revert "Revert "threejs-fundamentals translation optimize""

This reverts commit 3b1c480b971c6c43dcc4354b1e73de61f6cf0375.

It might work after the fix?

* cleanup

* debug

* fix zh_cn links

* fix zh_cn links

* Japanese translation of shadows (mrdoob#161)

* doc: translate ja of shadows

* Fix typo (mrdoob#162)

Co-authored-by: Torsten Knauf <Torsten.Knauf@maibornwolff.de>

* Improve diff of code snippet example (mrdoob#163)

Co-authored-by: Torsten Knauf <Torsten.Knauf@maibornwolff.de>

* typo

* typo

* typo

* Japanese translation of fog (mrdoob#164)

* doc: translate ja of fog

* translate scenegraph to zh_cn

* fix:typo in three-scenegraph on zh_cn

* add: translate threejs-materials to zh_cn

* translate threejs-textures to zh-cn

* bump deps

* test

* fix: Japanese translation of shadertoy

* Japanese translation of render targets

* Japanese translation of custom geometry

* fix vertexColors setting since r114 😅

* fix: Japanese translation of align html elements to 3d

* Japanese translation on Custom Buffer Geometry (mrdoob#177)

* translation on custom buffer geometry

* fix three-load-obj.md to use OBJLoader because three.js is removing OBJLoader2

* add warnings for translations that need update

* minor edits

* before translation

* head lines

* intro

* fix

* done translation on custom buffer geometry

* start billboard

* fix

* Docs: Change 'req' to 'res' for fetch handler

* fix: Japanese translation of canvas textures

* fix: Japanese translation of indexed textures

* translate threejs lights to zh-cn

* remove XXXBufferGeometry

* remove references to XXXBufferGeometry

* Change all XXXBufferGeometry to XXXGeometry

* remove custom-geometry from toc

* add note about r125 to geometry

* changed references to custom-geometry to custom-buffergeometry

* fix invert reference r122->r123

* bump to three r125.2

* more Geometry/BufferGeometry cleanup

* use pointer events for indexed-textures

* use pointer events for game

* voxel to pointer events

* remove references to geometry

* add warning for custom-buffergeometry translations

* add translation warnings with links

* add referecnes for translations

* add referecnes for translations

* add referecnes for translations

* translate 4 chapters: cameras; 2optimize; rendering on demand

* r122 -> r125

* fix links

* edit

* fix: update latest

* cleanup

* remove stackoverflow q? links

* feat:post-processing -> cn

* has been deprecated

* debugging-glsl -> cn

* fix: keep `world matrix`

* update kr/langinfo.hanson

* Create threejs-shadows.md

threejs-shadows tranlated by zh-cn

* remove call to helper.update

* words

* fix as OrbitControls switched to using pointer events

* add index.md

* add langinfo

* add toc

* fix translation

* add fundamentals translation

* add more translation in fundamentals

* fix missing

* warning

* remove double reference

* fix typo on text geometry primitive

* Update threejs-fundamentals.md

Typo

* Update threejs-textures.md

Typo

* Update threejs-lights.md

Typo

* add Chinese version of the chapter Fog

* Delete contributors.md

* Create contributors.md

* add Chinese version of chapter rendertargets

* add Chinese version of the chapter custom-buffergeometry

* add link to discussions

* [threejs-backgrounds.md]: fix 'scene.background = rt.texture'

* Fix: threejs-background-equirectangularmap.html 'scene.background = rt.texture'

* bump three to r127

* stat.js

* stats

* typo

* Fix a repeating bug in lession threejs-optimize-lots-of-objects-animated

* Fix typo in lesson ( code >> cone ).

* Fix typo if -> it

* fix grammatical errors

* fix grammatical errors

* fix grammatical errors

* add French translation

* add French translation

* add French translation

* add French translation

* add French translation

* add French Translation

* add French translation

* add French translation

* add French translation

* translate the TOC in french

* fix some errors in translation

* fix some translation errors

* some changes to improve the translation

* Improve translation : change three by Three & canevas by canvas

* Translate TOC in french

* Improve translation: change installation to configuration

* translate TOC in french

* translate the description in French

* fix grammatical errors

* fix grammatical errors

* add French translation

* add French translation

* add French translation

* add French translation

* add French translation

* add French Translation

* init

* update

* add French translation

* turn off antialiasing on texture diagrams

* bumpthree

* updates for r132

* bump to r132

* add  translation for  threejs-picking in zh_cn

* remove physically based lights from fake shadows example

* fix for r132

* fix offscreen orbitcontrols

* README

* README

* fix closingTag error in three-primitives on zh_cn

* move and delete in prep for merge with three.js

* Integrate the threejsfundamentals articles into three's repo

Notes:

* organization

  ```
  manual
   +-en
   | +-article1.html
   | +-article2.html
   | +-...etc...
   +-ja
   | +-article1.html
   | +-article2.html
   | +-...etc...
   +-...
   +-3rdparty
   | +-monaco-editor
   +-resources (images etc for the articles)
   +-examples (the html files for each working example)
     +-example1.html
     +-example2.html
     +-resources (the image etc for examples)
  ```

* the articles use a special version of `prettify.js` in `manual/resources/prettify.js`

  This version of prettify checks the first character of each line where '+' = line added,
  '-' line deleted, '*' line changed. I bring this up just if you want to use some other
  colorizer for code it will need to handle that.

* manual/3rdparty/monaco-editor is the text editor used for live editing
  It's large and maybe you'd like to serve it from CDN?

* the live editor export and three versions

  The live editor has an export button to jsfiddle/codepen/codesandbox/stackoverflow.
  On threejsfundamenals.org all samples were pegs to a specific version and
  [all versions stayed available](https://github.com/gfxfundamentals/threejsfundamentals/tree/master/threejs/resources/threejs).
.
  This way if a user exports an example it keeps working because it
  links to the version that worked at the time of export.

  In this version the examples all reference `build/three.module.js` and when exported
  those links are converted to skypack.dev links at the current version. The current version
  is determined by fetching `https://raw.githubusercontent.com/mrdoob/three.js/master/package.json`.
  If there is a better way to get the version you can update `/manual/examples/resources/editor-settings.js`.
  Like, if you want exports to link to `https://threejs.org/build/three.modules.js` then just edit
  `/manual/examples/resources/editor-settings.js` and make `fixJSForCodeSite` just return its input.
  (eg: `function fixJSForCodeSite(url) { return url; }`).
  When exported they reference `https://threejs.org/build/three.module.js` whichs means
  when three updates their exported stuff will break.

* Path hacks

  The examples contain valid non qualified links. For example `import * as THREE from '../../build/three.module.js'`.
  In order to actually run the samples in the editor without a server side component the samples are loaded via fetch
  and the inserted into a blob. No URLs are relative to blobs so the URLs need to converted to fully qualified.
  In other words,  `import * as THREE from '../../build/three.module.js'` needs to become
  `import * as THREE from 'https://threejs.org/build/three.module.js'`.

  The process to do this is a bunch of hacky regular expressions in `/manual/examples/resources/editor-settings.js`
  in `fixSourceLinks`. The "proper" way would require a full HTML parser and JavaScript parser which is way too much
  code but, using regular experssions is brittle.

  If you look at the expressions you can see it's searching for things like `<script src="??">`, `<img src="???">`,
  `import bla '???'` and for three.js it's also searching for `loader.load` in various forms.

  The point is, if you add a new sample you need to write it in a way that these expression will find your non qualified links
  and fix them for you or add new expression. For things like `loader.load('some/unqualified/path')` it works but if
  it's `loader.load(someVariable)` then it won't work.

  The solution I chose you can put `/* threejs.org: url */` at the end of a line. This expression looks for the last quoted string
  on the line and assumes it's a link. Example

  ```
  const images = [
    { name: 'dog', path: 'some/unqualified/path/husky.jpg', }  /* threejs.org: url */
    { name: 'cat', path: 'some/unqualified/path/siamese.jpg', }  /* threejs.org: url */
    { name: 'bat', path: 'some/unqualified/path/vampire.jpg', }  /* threejs.org: url */
  ];
  for (const {name, path} of images) {
    loader.load(path);
    ...
  ```

  Now the script will convert these paths when loading them into the editor. The comment will be stripped so the user's
  does not see it in the editor.

* Known Article Issues

  * optimize-lots-of-objects-animated was broken by r134.

    The point of the article was to show how to use morph targets to animate a 1000 cubes like the webgl-globe
    and fix a long standing bug in the webgl-globe that it doesn't animate the colors of the cubes.
    It just uses colors of the first set of cubes values which means it shows the wrong represtation of everything
    but the first set.

    With the new way morph targets work it looks like it's very non trivial to add vertex color morph targets.
    If there is still an easy way to do it I'm happy to update the aritcle
    but as it is, you should probably just delete it.

  * align-html-elements-to-3d was written before I knew about `CSS2DRender`

    I've never had time to re-write it and I thought explaining the math might be useful. It's up to you
    whether or not you want to keep it.

  * all the samples use rAF directly

    I'm guessing you'd prefer `setAnimationLoop` at this point

  * all of the samples follow the advice of the `responsive.html` article

    This means they all assume the user used CSS to set the size of the canvas.
    They always pass `false` as the 3rd parameter to `Renderer.setSize`

Co-authored-by: SeemsPyo <eunsatio@gmail.com>
Co-authored-by: vanzo16 <vanzo16@ya.ru>
Co-authored-by: tasotasoso <nayuta.suzuki@gmail.com>
Co-authored-by: naotaro0123 <n.ikewada@gmail.com>
Co-authored-by: Theo Avoyne <tavoyne@gmail.com>
Co-authored-by: mell0kat <katherine.mello@wework.com>
Co-authored-by: xiaodong <18945084806@163.com>
Co-authored-by: nbogie <neillbogie@googlemail.com>
Co-authored-by: Evan <awesomeyggd@gmail.com>
Co-authored-by: Evan <liuzhenqiang@ecityos.com>
Co-authored-by: wangtianqi <wangtianqi.timi@bytedance.com>
Co-authored-by: shaman-apprentice <Torsten.Knauf@gmx.de>
Co-authored-by: Torsten Knauf <Torsten.Knauf@maibornwolff.de>
Co-authored-by: ehhong <ehhong21@gmail.com>
Co-authored-by: yui <yuikita21@gmail.com>
Co-authored-by: Yui Kita <arcoyk@users.noreply.github.com>
Co-authored-by: puxiao <yangpuxiao@gmail.com>
Co-authored-by: DBingo <dbqwjxh529@163.com>
Co-authored-by: Roy Kid <lijichen365@126.com>
Co-authored-by: magic-zhu <18817313320@163.com>
Co-authored-by: Allvirus <gbvaq@foxmail.com>
Co-authored-by: cengizcmataraci <cengizcmataraci@gmail.com>
Co-authored-by: giorgioporgio <georgekets@hotmail.com>
Co-authored-by: Vee Jay <46869937+Veejayspb@users.noreply.github.com>
Co-authored-by: HuangYu <1090165925@qq.com>
Co-authored-by: Tony <tony@maapps.dev>
Co-authored-by: Halu89 <63454314+Halu89@users.noreply.github.com>
Co-authored-by: Labnan <55809005+Labnann@users.noreply.github.com>
Co-authored-by: mickceb <cebulski.mi@gmail.com>
Co-authored-by: YangLei <xcchcaptain@126.com>
Co-authored-by: Zachary_M <yuihjk015328@gmail.com>
3jsLive pushed a commit to 3jsLive/three.js that referenced this issue Feb 21, 2023
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Projects
None yet
Development

No branches or pull requests

10 participants