matrix-org / matrix-org/thirdroom
Manifold Editor
Nobody has claimed this yet.
- Dominant language
- C
- Stars
- 647
- Forks
- 70
- PR merge metrics
- No merged PRs in 30d
Description
The Manifold Editor is our game engine environment / asset editor built around the glTF standard. Both the interchange and authoring format will utilize glTF and should be capable of producing content for Third Room as well as exporting glTF content for use elsewhere.
The todo list below represents the tasks needed for a feature-complete 1.0 release. We plan on tackling this list in chunks, focusing on iteratively improving our demo environments.
- [ ] Scene Hierarchy Panel
- [ ] UI
- [x] Hierarchy Panel
- [x] Tree View
- [ ] Context Menu
- [ ] Rename Entity
- [ ] Delete Selection
- [ ] Duplicate selection
- [ ] Copy Selection
- [ ] Paste Selection
- [ ] Group selection
- [ ] Create Entity Button / Dropdown / Combobox
- [ ] Pick from list of prefabs
- [ ] State (Game Thread -> Main Thread)
- [x] Scene hierarchy
- [x] Selected / active entities
- [x] Entity names
- [ ] Prefabs
- [ ] Commands (Main Thread -> Game Thread)
- [x] Set Selection
- [x] Add Selection
- [x] Toggle Selection
- [ ] Focus Entity
- [ ] Rename Entity
- [ ] Reparent Entities
- [ ] Remove Entities
- [ ] Add Entity
- [ ] Duplicate entities
- [ ] Misc
- [ ] Figure out cross-thread Tree View `canDrop` implementation
- [ ] Properties Panel
- [ ] UI
- [ ] Properties Panel
- [ ] Input Field / Row
- [ ] Input Section / Group / Component
- [ ] String Input (string)
- [ ] Checkbox Input (boolean)
- [ ] Select Input (enum)
- [ ] Number Input (number)
- [ ] Vector2 Input (vec2
- [ ] Vector3 Input (vec3)
- [ ] Euler Input (euler/quat)
- [ ] Slider Input (number)
- [ ] Color Picker Input (color)
- [ ] File Input w/ DnD support (file)
- [ ] Property Panel Button (command)
- [ ] Add Component Button / Dropdown / Combobox
- [ ] Remove Component
- [ ] State (Game Thread -> Main Thread)
- [ ] Selected / active entities
- [ ] Active entity components and initial values
- [ ] Component schemas
- [ ] Commands (Main Thread -> Game Thread)
- [ ] Add Component
- [ ] Remove Component
- [ ] Set component property
- [ ] Set Transform properties (relative to active entity)
- [ ] Components
- [ ] Transform
- [ ] Renderable? (More likely components for each renderable type which update renderable when edited)
- [ ] Lights
- [ ] Cameras
- [ ] Meshes
- [ ] Rigid Body
- [ ] Audio Emitter
- [ ] Spawn Point
- [ ] Assets Panel
- [ ] UI
- [ ] Prefabs
- [ ] Entity
- [ ] Cameras
- [ ] Perspective Camera
- [ ] Orthographic Camera
- [ ] Lights
- [ ] Directional Light
- [ ] Point Light
- [ ] Spot Light
- [ ] Audio
- [ ] Audio Emitter
- [ ] Meshes
- [ ] Box
- [ ] Cylinder
- [ ] Cone
- [ ] Capsule
- [ ] Plane
- [ ] Circle
- [ ] Dodecahedron
- [ ] Icosahedron
- [ ] Octahedron
- [ ] Ring
- [ ] Sphere
- [ ] Tetrahedron
- [ ] Torus
- [ ] TorusKnot
- [ ] Misc
- [ ] Spawn Point
- [ ] Assets
- [ ] Add to room state on upload?
- [ ] gltf
- [ ] images
- [ ] audio
- [ ] Viewport
- [ ] Fly controls
- [ ] Mouse selection
- [ ] Transform controls
- [ ] Grab controls
- [ ] Helpers
- [ ] Command Keybindings
- [ ] Copy / Paste
- [ ] Delete
- [ ] Grab
- [ ] Translate, rotate, scale
- [ ] Transform space
- [ ] Transform origin
- [ ] Duplicate selection
- [ ] Focus selection
- [ ] Add/remove from selection
- [ ] Toolbar
- [ ] Transform controls mode
- [ ] Transform space
- [ ] Transform origin
- [ ] Snap settings
- [ ] Grid settings
- [ ] Save
- [ ] Publish
- [ ] Export
- [ ] Scene Editor (Compose a scene using referenced glTFs, save root gltf with references to assets)
- [ ] Set opened glTF as scene
- [ ] Render glTF hierarchy but disable transform / reparenting of referenced glTFs
- [ ] Use glTF MX_ref/id extension for adding components to nodes
- [ ] Save root gltf
- [ ] Export entire scene as glb
- [ ] Asset Editor (Edit glTFs and export modified glTF)
- [ ] Set opened glTF as active scene
- [ ] Render entire glTF hierarchy
- [ ] Allow for glTF modifications
- [ ] Use glTF MX_ref/id extension for adding components to nodes
- [ ] Use glTF MX_ref/id extension to reference individual nodes when reparenting / deleting etc.
- [ ] Save root gltf with modifications / references
- [ ] Export entire scene as glb
- [ ] Serialization
- [ ] ECS -> glTF
- [ ] Reference external glTF files
- [ ] Deserialization
- [ ] glTF -> ECS
- [ ] Load referenced glTF files
- [ ] Import
- [ ] Load gltf
- [ ] Generate thumbnail
- [ ] Save to room state
- [ ] Export
- [ ] Export entire scene as single glb
Contributor guide
First steps
- Read the whole issue, then the project's contributing guide.
- Comment on the issue to say you are picking it up — it saves two people doing the same work.
- Fork the repository and make your change on a branch.
- Open a pull request that references the issue number.
Research direction
The issue names no files, tests, or entry points. Start by selecting one narrowly scoped unchecked item from the checklist, such as a scene hierarchy command or viewport control, and locate the relevant Manifold Editor code. Done should be defined as completing that item and validating it in the editor or a demo environment, rather than addressing the full 1.0 roadmap.
Written by the indexing model from the issue text.
Assessment
- Tech stack
- javascript, three.js, typescript
- Domain
- computer-graphics, devtools, game-dev
- Issue type
- Feature
- Difficulty
- 5/5
- Estimated time
- Over a week
- Activity status
- Stale
- Clarity
- Needs clarification
- Newbie friendliness
- 10/100