TODO: - Bug: Worked on one mesh (leaf shadow), opened another mesh (leaf), and when first mesh was reopened, texture was gone and didn't seem easily restorable; showed up in properties panel but didn't render even after fiddling with settings. Showed up after relaunch. - Bug (related to above?): While duplicating flowers in Leaf's Odyssey scene, one instance inexplicably gained a fully opaque shadow - Export individual scene elements - Cropped matrix covering entire screen space of shown element; show user the offset from center of scene exported at that size - Shader environment and material editing - If changing MeshEditData format to save, also include nearest neighbor boolean on image overlays - Add some sort of sound effect and visual confirmation for setting swap space, saving camera angle, any other currently invisible interactions - Onscreen hotkey reference for all interactive mesh operations - Manipulator orientation modes: Pivot, selected face/edge normal - Clicking "Sync ratio" checkbox in image export window after editing width or height feels bad because it causes ratio sync to already happen; somehow interrupt sync if unchecking checkbox? - Tab key no longer switches between inspector panel edit fields; overridden by MeshEditView tab key action - Deleting faces is weirdly slow when a lot of them are selected - Remember last used directory for file open dialog on relaunch (also applies to tile editor, audiolab) - Some equivalent of proportional edit tool --- - Scene editor - Manage meshes in scene - Mouseover and selection rendering - Expand camera angle data structure: Camera angle, environment parameters (lighting), set of hidden meshes, export settings (width/height/multisample), exported file name - Camera splines, with animated export - Poses - Pose bone selection - Implement for pose bone select mode - Select armature bone, treat as though pose bone already exists, create automatically when modified - Draw mesh with pose applied - Instead of doing this with a shader, maybe it would make more sense to apply the transform to a MeshEditData copy. Easier for hit detection, simpler for different shaders rendering same data (selection/wireframe), can reverse transform to apply changes. - Improve rigging: - Specify base bone orientation, so X-axis-only rotation can go in a sensible direction - Commit pose transformation to armature and/or mesh - Edit mesh with pose applied? - No vertex position or normal editing, but want bone/weight editing, vertex color, texture paint - Take posed model, apply inverse of pose, preserve ability to reapply pose matching original model - Animations - Animation editor screen - Create pose from animation frame - Layered poses and animations? (Display multiple at the same time) - Could implement in pose properties panel on MeshEditorScreen - Bug: Scene meshes aren't getting released when scene is unloaded - Bug: Flying snake model exported as MeshData and reimported adds several stray vertices, and causes uninitialized memory access when comparing vertex identifiers - Insert sphere operation - Options for spherify operation: Keep radius, make cylindrical on any axis instead of spherical - Edge extrude normal calculation is wonky; planar vertices don't go at a right angle - Operation to automatically create shadow mesh by flattening model (optionally at an angle) and simplifying contour - Companion tool to extrude and soften edge - Shader panel - Set shader properties - Write shader properties with MeshData - Two broad categories: Scene presentation (light positions and intensity; global for all objects), and materials (light response, per object/face/vertex) - MeshEditorScreen should have scene parameters settable, maybe included as defaults in MeshEditData, but not exported with MeshData for downstream use. Same category of data as camera angle. - SceneEditorScreen includes scene parameters (possibly multiple sets) as a core part of its data, at a hierarchical level above its collection of meshes - Material data should be stored per object. Is a MeshEditData a single object, or should it potentially contain multiple? - Names: Environment, material - Armatures - Option to highlight vertices weighted to selected/moused over bones - Circle/rectangle selection - Mirror? (MeshEditOperation_boneTranslate_applyOperation()) - Improve appearance of moused-over bones and bone endpoints - Handle selection of overlapping endpoints for non-connected bones - Thicker outlines for selected edges - Screen space line drawing API with callback - Toon shader with secondary vertex color for outlines --- - Select face loop segments like edge loop segments - Show mirrored selection - Reverse order of open dialog and save before closing prompt (also applies to tile editor) - Improve image overlay settings: - Want to be able to size by pixels - Want to be able to edit numbers in text (switch to UIFloatControl) - Want to be able to drag around in MeshEditView rather than only move with sliders; sliders generally feel bad to use - Nearest neighbor filtering option (implemented, but save to MeshData; requires format change that's best rolled in with other stuff like material and environment parameters) - Improve appearance of UIContinuousSlider - Keyboard viewer showing hotkeys and shortcuts when keys are rolled over - Collapse inspector/property panel views - Select menu items: Nonplanar faces, non-texture-mapped face edges (all texture coordinates = 0), faces with winding opposite their neighbors, by vertex color - Visual feedback for VectorPositionControl and VectorDirectionControl - Show status message when exporting mesh - Extrude option to treat all faces individually - Extrude along anchor or pivot normal - Merging vertex/edge/face delete - Parse connectivity for edge slide, and slide all connected edges in same direction relative to each other - Flat list of all vertices and faces somewhere - Multiple objects - One MeshEditData per object; separate container with its own transformation. Edit only one at a time. - Split and merge objects - Object mode - Apply transformation - Insert shape - Sphere - Circle - Plane - Shader selection - MeshData export feels dangerous; writing files to same directory as mesh without confirming replacement - Texture paint - Use overlay image as stencil - Solid color brushes - Patterns (voronoi and other) (or maybe can be external? Create image with another tool and use as stencil) --- - UV unwrapping - Implementation would be compatible with seam marking; how? Maybe as an extra edge attribute? Separate list of edges stored somewhere? Want more permanent than operation state - Selective unwrap (only affect selected faces) - Display option in texture map view to visualize distortion - Other aspect ratios than 1:1 (later) - TextureManager may dispose texture when changing, and immediately recreate when undo node is created; check and reorder if true - Texture leak found while investigating: Load texture 1, load texture 2, undo, load texture 3; texture 2 is never disposed because undo doesn't change its reference count beyond UndoStateDelta's own retain - Better interactive vertex placement tool; choose edge to add to and create faces automatically, with snapping preview - Subwindow positions should adjust for main window size (move up and right in fullscreen and they're off the edge in windowed mode; temporary fix to clamp to max drag bounds on show) --- - Camera angle thumbnails in properties panel - Windows mouse delta issues (press g while moving mouse and a large delta occurs) - Windows window icon missing - Show snap grid - Guides in texture map view - Edge, face, and face edge select for MeshEditSelectionTool_rectangle - RenderTarget with depth attachment and uint32 readback for face selection with selection tools - Zoom to mouse position in texture map editor view - Press numpad period to focus on selection in texture map editor view - Edge hit detection/selection for texture map editor view (pair of face edge pairs) - Multiple texture maps - Vertex format editor window - Bug: Tab keypress when editing attribute name goes through to geometry view behind window - Specify mapping between MeshEditData format and display format (translation object? ex. might have multiple color fields, or want to display bone weight as color) - Bevel vertex - Bug: Bevel edge copies the wrong set of edge attributes for added faces in some situations (try coloring 3 cube faces differently and beveling 2 of those edges) --- - Smooth operation - Smoothing subdivide? - Something to reference when implementing scenes: https://docs.godotengine.org/en/stable/contributing/development/file_formats/tscn.html --- - Slice model on X axis operation - Duplicate geometry - Export obj mirrored - Triangulate operation - User-defined color palette --- - Improve overlay image UI - Number label (index in array) (also applicable to guides and grid window) - Collapse ImageOverlayRows? Only edit parameters of one at a time? (also applicable to guides and grid window) - Show file path - Allow embedding - Export button - Optional interpolation animations for edit operations (texture packing might be especially fun) - Status message display in split mode is confusing; should have just one status message? Updating one view reset the other? Also text doesn't fit well; may want word wrapping - Text outline for visibility on white backgrounds - Highlight entire moused over edge loop while holding alt instead of just edge - Highlight entire moused over texture map region while holding alt instead of just face - Interpolate camera movement from changing view angle - Test and handle self-intersecting loop cuts - Handle trying to solidify an already-solid face - Allow toggling guide/grid snapping during translate operation (key event to use menu item currently doesn't go through due to MeshEditOperation getting all keyDown events) - Subdivision count > 1 (some UI and/or keybinds to control number after starting subdivide operation) - Loop cut divisions > 1 - Edge slide needs different behavior; move edges in same direction relative to each other in connected regions (how? Follow edge loop and note handedness, choosing matching target handedness when possible?) - Change parameters of single step edit operation after application - Edit alpha for color attributes in face edge inspector using color picker pop-up (facility for premultiplied alpha?) --- - Copy/paste for attribute numbers, entire face edge - Alternate menu item display while holding modifier key (merge vertices with shift or alt held; requires UIMenuBar support) - UIMenuBar menu scrolling (and submenu vertical position adjustment) - Normal display mode that shows only face normals originating from their midpoint - More visible vertex selection (quad with outline? Two points with different sizes?) - Point sprite? - Improve visual for selected face edges (make less sensitive to nonplanarity) - Pick apart selection in inspector (list all face edges, highlight as rolled over, select single) - Some way to control pivot point for scale and rotate operations - Alternate means of rendering lines than GL_LINES (glLineWidth doesn't work everywhere) - Lighting options (directional?) - Show camera pivot point, and move manually - Inspect/copy/paste camera transform - Save camera positions and orientations for later restore - Align camera to plane of selected face - Alternating background colors to separate attributes in inspector panel --- - Tab between InspectorVertexEditView and InspectorFaceEdgeEditView fields - List of key bindings (and preferences for changing) - Adjust normalRenderable normal scale - Scroll wheel zooms in more than it zooms out, due to relativity with current camera zoom level - Pivot/anchor points: - Anchor to pivot for texture map - Pivot constraint for textureTranslate (doesn't currently have feature parity with translate) --- - Check texture reference system for leaks - Adjustible split between texture map and geometry edit views - Shell_setDrawThrottleRate() seems to sometimes be getting stuck at 30 FPS; why? Change to refresh rate * 2? Preference? (temporarily doubled) - Preferences: - Default attribute assignment behavior (median/overwrite) - Key bindings - Check all default key bindings on all platforms to check for system shortcut conflicts - Hit detect radius - Camera sensitivity - EQUAL_COMPONENT_THRESHOLD - Background color - FOV (or in camera parameters) (default?) - Multiple views (use cases: different camera angles; different poses; different texture/color/lighting configurations) - Android-compatible model viewer application target - Command line model export utility (MeshEditData -> MeshData; installed) - Try out workflow of importing models and animations into Unity, Unreal, Godot Ideas: - Componentize portions of model. Example: Mark a wrist boundary, and model hand with connections to those vertices as a completely separate object, potentially in a different orientation. Interchangeable alternate versions of components. - Using an image overlay, assign a perspective and a 3D shape, and then unwrap the image or rewrap another flat image to fit in perspective - Might be able to recover perspective from image with some number of lines labeled with an axis; as few as any two parallel and any two perpendicular? - Selection queries: Search for and select all geometry with a specified property (examples: color = red; texture coordinate within specified range; face edge with specified normal type) - Nonplanar faces - Unconnected vertices - Faces with zero area - Vertices with same position - Face edges with same position - Mark a line between two vertices, choose another line or fixed axis, and transform selection to align marked edge - Could tie to guide system; insert guide at location, then align selection to guide - UV remapping: Using one set of texture coordinates and a texture, render to a new texture with a new mapping to approximately keep texels the same circle_outline.png: circlegen -w 64 -h 64 -t 8 -k 2 -s 16 -rgba circle_outline_small.png: circlegen -w 16 -h 16 -t 4 -k 2 -s 16 -rgba