{"id":13455587,"url":"https://github.com/sketchpunklabs/ossos","last_synced_at":"2025-05-15T13:08:45.947Z","repository":{"id":42233385,"uuid":"434946252","full_name":"sketchpunklabs/ossos","owner":"sketchpunklabs","description":"Webbased Character Animation System","archived":false,"fork":false,"pushed_at":"2025-04-14T05:12:22.000Z","size":1188,"stargazers_count":443,"open_issues_count":13,"forks_count":44,"subscribers_count":23,"default_branch":"main","last_synced_at":"2025-04-15T05:32:44.954Z","etag":null,"topics":["animation","animator","armature","ikrig","inverse-kinematics","metaverse","skeleton","typescipt","webgl","webgpu","webxr"],"latest_commit_sha":null,"homepage":"","language":"TypeScript","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/sketchpunklabs.png","metadata":{"files":{"readme":"README.md","changelog":"changeLog.txt","contributing":null,"funding":".github/FUNDING.yml","license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null},"funding":{"github":["sketchpunklabs","sketchpunk"],"patreon":"sketchpunk"}},"created_at":"2021-12-04T16:03:45.000Z","updated_at":"2025-04-14T21:29:51.000Z","dependencies_parsed_at":"2024-04-19T06:27:47.640Z","dependency_job_id":"366efd5e-7735-4974-8a28-9f7665bd6dd3","html_url":"https://github.com/sketchpunklabs/ossos","commit_stats":{"total_commits":41,"total_committers":2,"mean_commits":20.5,"dds":0.07317073170731703,"last_synced_commit":"d1325d878f4875d0eafe42f8861a853263d57081"},"previous_names":[],"tags_count":3,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/sketchpunklabs%2Fossos","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/sketchpunklabs%2Fossos/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/sketchpunklabs%2Fossos/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/sketchpunklabs%2Fossos/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/sketchpunklabs","download_url":"https://codeload.github.com/sketchpunklabs/ossos/tar.gz/refs/heads/main","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":254346624,"owners_count":22055808,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["animation","animator","armature","ikrig","inverse-kinematics","metaverse","skeleton","typescipt","webgl","webgpu","webxr"],"created_at":"2024-07-31T08:01:07.702Z","updated_at":"2025-05-15T13:08:40.939Z","avatar_url":"https://github.com/sketchpunklabs.png","language":"TypeScript","funding_links":["https://github.com/sponsors/sketchpunklabs","https://github.com/sponsors/sketchpunk","https://patreon.com/sketchpunk","https://ko-fi.com/sketchpunk","https://www.patreon.com/sketchpunk"],"categories":["Animation","TypeScript","Characters","Libraries","Tools, Pipeline \u0026 Utilities"],"sub_categories":["Skeleton Animation","Svelte","JavaScript","Rigging \u0026 Animation Tools"],"readme":"# ossos\n\n[![npm](https://img.shields.io/badge/Npm-install-blue?style=flat-square\u0026logo=npm)](https://www.npmjs.com/package/ossos)\n[![twitter](https://img.shields.io/badge/Twitter-profile-blue?style=flat-square\u0026logo=twitter)](https://twitter.com/SketchpunkLabs)\n[![youtube](https://img.shields.io/badge/Youtube-subscribe-red?style=flat-square\u0026logo=youtube)](https://youtube.com/c/sketchpunklabs)\n[![Ko-Fi](https://img.shields.io/badge/Ko_Fi-donate-orange?style=flat-square\u0026logo=youtube)](https://ko-fi.com/sketchpunk)\n[![Patreon](https://img.shields.io/badge/Patreon-donate-red?style=flat-square\u0026logo=youtube)](https://www.patreon.com/sketchpunk)\n\n\n\n## Character Animation Library ###\n\u003cimg align=\"right\" width=\"160\" src=\"/_images/Epic_MegaGrants_Recipient_logo.png?raw=true\"\u003e\nThis project is working toward a complete character skinning \u0026 animation library for the web. First most, this library is focused on being independent from any rendering engine with examples of how to use it in webgl based engines like threejs. The one big focus is recreating the IK Rig \u0026 IK Animations type system that was demoed several years ago from Ubisoft's GDC talk on IK Rigs. With many game engines like Unity and Unreal developing their own IK Rig like systems, this project helps fill the void for web based engines like threejs, babylon, etc. Hopefully with enough help we can create something just as good as the big boys, maybe even better since its free \u0026 open source.\n\n\u003cbr\u003e\u003cimg align='center' src=\"https://media-exp1.licdn.com/dms/image/C4D22AQEAyhN1Srt_2g/feedshare-shrink_2048_1536/0/1646282533489?e=2147483647\u0026v=beta\u0026t=6ajBcu44vaRavbj3df4kI4towfkjHJUqnKywxqP8WiE\" /\u003e\n\n### Setup ###\n\n```\nnpm install\nnpm run dev\n```\n\n**[ NOTE ]** To be able to run the example, you'll need to go into /examples/_res/ and follow the instructions to clone the resource repo. The files are quite large, so they are kept in a seperate repo to keep this project as light weight as possible.\n\n## Usage ###\n\nThis example is the basic boiler plate example of how to pull mesh \u0026 skeletal data from a GLTF2 file then using a custom THREE.JS Material to render mesh that can be posed or animated.\n\n```javascript\nconst gltf = await Gltf2.fetch( '../_res/models/nabba/nabba.gltf' );\n\n//--------------------------------\n// Setup Armature\nconst arm  = new Armature();\nfor( let j of gltf.getSkin().joints ){\n    arm.addBone( j.name, j.parentIndex, j.rotation, j.position, j.scale );\n}\n\n//--------------------------------\n// Setup Skinning : Matrix\narm.bind( SkinMTX, 0.07 ); \nconst mat = SkinMTXMaterial( 'cyan', arm.getSkinOffsets()[0] ); \n\n//--------------------------------\n// Load Mesh\nconst mesh  = Gltf2Util.loadMesh( gltf, null, mat );\nApp.add( mesh );\n```\n---\n## Current Features ##\n* Armature System built around 'Bones' instead of 'Joints'\n* Several Skinning Plugins\n  * `Matrices` : Typical Skinning, easiest to use in GLSL\n  * `Dual Quaternions` : For better bending of vertices, typically used in places like Disney. It can only handle Rotation \u0026 Translation, scaling individual bones don't work.\n  * `DQ Transform` : Experimental \u0026 unique to this library. It uses Transform instead of matrices or dualquats to handle the transformation hierarchy \u0026 bind pose. When the data is prepared for shader use the worldspace transform gets converted to Dual Quaternions to handle rotation \u0026 translation along with an extra buffer that contains scale. The hopes of this hybrid approach is to get the quality of DQ while still being able to scaled individual bones like when using matrix skinning.\n* Bone Springs ( Rotation \u0026 Translation )\n* Basic Animator based on Tracks\n* Basic Animation Retargeting for similar skeletal meshes\n* IK Rigs\n  * Biped ( Human )\n  * Quadruped *( Prototype Phase )*\n* IK Animation Retargeting using IK Rigs\n* IK Solvers\n  * Aim / SwingTwist\n  * SwingTwist - Ends\n  * SwingTwist - Chain\n  * Limb\n  * Arc\n  * ArcSin\n  * Fabrik\n  * Natural CCD\n  * Piston\n  * Spring \n  * Trapezoid\n  * ZSolver\n  * Catenary / Rope\n* GLTF2 Asset Parsing for cherry picking what you need to load.\n* A few examples using BabylonJS for rendering\n* Several examples using ThreeJS for rendering\n  * Some extra fun examples like converting animations to Data Textures\n  * Running Full Skinned animation on the GPU with GLSL Example\n  * Using Instancing \u0026 Data Texture to animate a collection of randomly placed \u0026 rotated meshes\n* Ready Player Me Example : Parsing, TPose Generation \u0026 Auto IK Rigging\n* Bone Slots : A way to programmically attach assets to bones\n* IK Animation Additives\n\n\n---\n## Future Plans ##\n- [x] Rewrite IK Rigs\n- [x] Port over starting IK Solvers ( Aim / SwingTwist, Limb, SwingTwistEnds )\n- [x] Rewrite IK Animation Retargeting\n- [x] Port over extra single pass IK Solvers ( Z, Piston, Arc, ArcSin, Trapezoid, Spring )\n- [x] Create an implementation of FABIK\n- [x] Create solver based on Catenary Curve\n- [ ] Port over Trianglution Solver ( Alternative to CCD )\n- [x] Port over Natural CCD ( Extended version of CCD )\n- [x] Complete FullBody IK Prototype\n- [ ] Revisit FullBody IK, Make it mores stable \u0026 user friendly\n- [ ] Figure out how to implement VRIK\n- [x] Bone Slots / Attachments\n- [ ] Actions or State Machine based Animator\n- [x] Build Examples in other Rendering Engines like BabylonJS\n- [ ] Remake Auto Skinning ( Need WebGPU compute shaders for this )\n- [ ] Bone Constraints\n- [ ] Procedural Animation ProtoTyping\n- [ ] Far Future - Create \u0026 Share animations with a Web Editor Tool\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fsketchpunklabs%2Fossos","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fsketchpunklabs%2Fossos","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fsketchpunklabs%2Fossos/lists"}