BIG FEATURES: - Animation editor - Crash recovery - Customizable input bindings - Geometric boolean operations - Constructive model editing (multiple modes of model creation) - Height map editing - STL export - Multiple active views - Multi-document editing - Lighting upgrade (point falloff, spotlights, ambient occlusion, normal mapping, PBR, shadows) - Interactive tutorials - Blender plug-in for stem3D, and/or .blend file I/O - FBX data export - Collision detection - Scripting/macro system TODO: - Subdivision count for insert plane operation - Reexamine scale and rotate operations; consolidate options into something more readable - Finish writing help text for all relevant menu items - Check help pages for [!keybind] and [color=!control] tag consistency - Check I/O status messages for consistency (some show errno, some don't) - Snapping in texture edit mode - Pivot/anchor project operations: - Line: Project anchor position onto pivot line - Plane: Project intersection of anchor line onto pivot plane - Allow typed input for cylinder and sphere subdivision count (and a way to go beyond the maximum of 32) - Redraw rate preference (can set to 30 FPS to save CPU) - Type help page name in help window to navigate to it - Image overlay and guides/grid window should show status messages for all relevant operations - Text copy/paste for camera angles, other encodable things - Allow adjusting alpha of individual image overlays - Add an interactive mode to anchor to pivot operation, allowing movement to be interpolated - Camera inspector panel 2D - Automatically compact vertex/face identifiers at a known safe time if the next identifier gets too close to UINT32_MAX - Second pass on numericInput behavior for all operations (use translate3D as template) - Add modifier key indicators to UIMenuView to match UIKeyboardLayoutView? --- - Guides and grid: - Add guides and grid window to SceneEditorScreen - To Pivot and To Anchor buttons need to show pivot/anchor - Grid spacing should affect main grid spacing and plane guide grid spacing, and be saved as document data - Add tooltips for all buttons - Add stepper for grid size - (old) Customizable grid (unit size, axis, density, offset) - What kind of data is this? Preference? Document? Document, with a preference for defaults? - Document already has a separate grid size for snapping; these should be the same thing - Automatically extend grid based on mesh scale? - Major lines and minor lines? Depend on zoom? Customize type of divisions (base 2, base 5, ...?) - Alternate way of adding geometry: Drag rectangle on grid (or an existing face), and create new object or extrusion from that area - Use plane guides as surfaces for geometry creation - Unit snapping - Tool in tool palette - Page up/down to select which grid to target; draw targeted grid in different color, and preview at hovered location - Mirror mode for texture map: Optionally create a separate texture space for mirrored geometry, so mirror mode can be left active but different texture data on each side - Armature equivalent of slice operation (can't directly reverse Apply Mirror; mirrored bones remain) - Guides in texture map view - Guides in scene edit view - Listen to preferences event for en-US keyboard shortcuts in HelpWindow, and reparse key shortcut strings when changed - Check consistency of file status and mesh status messages; file status used for some things that should go in other status field - Possible change: Separate mesh status messages into "current state" and "what just happened" - Check threshold values used for small value tolerance, and possibly provide a way to adjust them for different model scales - Automatically adjust based on model total size? - Reorganized preferences window - Allow vertical resizing and scrolling, if kept in tall list - Implement keyboard edge geometry navigation in texture map view - Need to update definition of "edge" in texture map view; see comment in MeshEditTextureMapView:prepareEdgeSelectionRenderable() - Handle poses in scene editor - Box and circle select on scene editor screen - Item inspector for all three screens: Full list of vertices, faces, bones, pose bones, mesh instances; with ability to inspect and modify properties, select, etc. - Suggestion: Tool palette with icons for mesh operations - Suggestion: While holding right click, allow walk-style camera movement with WASD - glxshell issue: Entering mouse delta mode while the mouse is outside the window (such as beginning a translate operation with a keypress) doesn't allow mouse down events to be received by the window - SDF fonts. Idea: Shader that can automatically swap between SDF and color texture mode with a vertex attribute, and new UIDrawingInterface that sets the appropriate attribute. Alternately, use existing multitexture drawing interface, and shader distinguishes modes by texture index? - Monospace font - Bug: Select Mode Quick Menu menu item's title was corrupted after viewing help text and selecting faces; unreproducible - Brush preset palette - Image export presets - Create generic preset API as part of uielementcollection and/or document - Keyboard navigation for menu bar - Adjustable thresholds for select special operations: - Nonplanar Faces - Zero Area Faces - Concave Faces - Feedback: Too much information presented all at once in side panels on first launch - Idea: Show hotkey (T/P) on/next to panel toggled by that key - Feedback: Partition system is impenetrable; want an easy way to define a selection group, and quickly select everything in that group - Idea: While holding right click, use WASD to walk around - Suggestion: Automatic unit conversion (change display and input of numbers without modifying underlying data) - Complaint: Extrude tool working on only one object at a time (SketchUp) - Complaint: Hardcoded minimum triangle size (SketchUp) - Complaint: 32-bit floats are inadequate (SketchUp) - Slice tool enhancements: - Multiple slices at regular intervals - Solid fill after slicing - Option to lay out slices linearly or in a grid after operation - Granular way to unhide faces? Currently can only show all - HTML export for help pages; online version, local HTTP server run from Stem3D Modeler - PDF export for help pages? - Allow expression select on pose and scene editor screens (needs separate help text) - Alternative for marching ants animation to show selection highlight (some people are sensitive to moving stripes) - Allow drawing into MeshEditTextureMapView with all draw tools - Show text when switching screens (also applicable to tile editor) - Show texture file name in PropertiesTextureEditRow - Show image overlay file name in ImageOverlayRow - Compact ImageOverlayRow layout - Handle brush alpha better somehow; translucent portions become opaque much too quickly when dragging - Color palette window; easily store and recall arbitrary colors for vertex attributes and drawing (save with mesh) - Left click to set as tool color; right click to edit; alt-click to swap; shift-click to assign to vertex; control-click to remove? - Stencil pattern generator - Stamp tool - GPC cleanup: - Optimization: - Idea: In each space partition grid cell (or a separate higher-resolution data structure), store minimum unoccluded depth (rasterize screen-transformed triangles and set for all cells completely contained within). If a triangle's occupied cells all have a minimum depth greater than any of its vertices, discard triangle without further processing. - Handle clipping planes - Settings for stamp tool: - Brush/stamp mode - Brush transform (size/aspect/rotation/flip) - Tablet pressure (+ tilt?) behavior (alpha threshold, size) - Tablet support? Pressure determines alpha threshold for brush - Add reorder stepper for textures, materials, partitions, etc. - Manipulator scale handles? - Subdivision count > 1 (some UI and/or keybinds to control number after starting subdivide operation) - Allow Select Connected and Select Inverse Connected to be used with bone selection - Allow turntable animation export to start and end at a frame offset - Multithread PNG export for turntable animations - Add time elapsed and remaining time estimate to image export progress dialog - 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? - Allow image overlays to be centered somewhere other than the origin; currently impossible to view if origin is outside clipping planes - Seamless armature add/remove? Treat an armature with zero bones the same as no armature? - Image adjustments for stencil? (levels, HSV, contrast) - Adjust layout or icon size of tool palette to better fill space in properties panel - Add options to adjust normalRenderable normal scale - Merging face delete - MeshEditOperation_packTextureMap needs to ensure adequate bleed margins (options for texture resolution?) - Better approach for texture unwrap; MeshEditOperation_unwrapTextureMap is extremely messy - Option to allow some amount of distortion for more cohorent output - In MeshEditOperation_packTextureMap, operate only on one texture map at a time, using texture map identifier in partition to discriminate - For AssociationLookup's packed faceIndex/faceEdgeIndex to work, globally enforce maximum of 16777215 faces per model, and 255 edges per face - PropertiesTextureEditRow: Add anisotropic filter toggle? - Compact render options and buttons into pop-up menus? - Object pool for all properties/inspector panel items that allocate a variable number of rows - Some way to sample colors from an image when not assigned as a texture map (including vertex/texture colors in model) - Vertex format window should have its own UndoStack; currently, undoing while editing vertex format will erase all pending changes - Support working with multiple texture coordinate attributes - Interface sounds? - Granular control over which notifications/status messages are shown --- - Exporting posed/mirrored armature sets wrong bone base orientation; cannot invert pose to recover base orientation. Debug quaternion math and fix. - May have been fixed by getPoseBoneOrientation change? - After reimporting exported pose, mirrored bones don't show when applied to unmirrored model. How to reconcile? - Different modes of model construction than geometry editor: - Architectural (drag on grid to create boxes; spatially repeating elements; floor plans with measurements) - Height map - Parameterized creature generator - Sketch freeform shape in 2D, extrapolate to organic 3D shape - Basic sculpting? - More official MeshEditOperation_screenVisible - Allow insert vertices operation to be resumed - Allow vertex slide operation to be resumed (see comment in MeshEditOperation_vertexSlide_canResume()) - Clicking a vertex in face inspector panel's vertex list has a surprising result; if changing selection, clickable list should linger - MeshEditOperation_insertVertex can fail to project a vertex at a given mouse position. When this happens, use an alternate plane and warn instead of failing? - Renderable for MeshDrawTool_sample showing locations and colors being sampled - Area average mode for MeshDrawTool_sample - Adjust MeshEditTextureMap's aspect ratio to match the ratio of the selected texture image - Also has implications for texture unwrapping and packing - Armature copy/paste - Light copy/paste - Mesh instance copy/paste - Paste/mesh import preserving partitions - Paste at pivot location? - Topology tools to transition between two connected edge loops of different vertex counts - Extend swap space with an extra scratch space window, allowing an arbitrary number of floats, vertices, colors, etc. to be pasted and recopied (and translate to and from lossless uint32 representation of floats) - Bug: Program was in a state where pressing numpad 5, pressing numpad 4, releasing numpad 5, then releasing numpad 4 would continue rotating while no keys were held. After relaunch, behavior disappeared. What could cause this? UIContainer key event routing misfire? - GPU unpremultiply in ApplicationScreen renderSceneToBitmapImage() - GPU unpremultiply in glTFFileUtilities writeMeshEditDataToGLTFDocument() - GPU premultiply in MeshDrawTool_stamp setImage() - Investigate Delaunay triangulation to replace ear clipping: - https://en.wikipedia.org/wiki/Delaunay_triangulation - https://www.cs.purdue.edu/homes/cs53100/slides/delaunay.pdf - https://ianthehenry.com/posts/delaunay/ - UI operation to store the current selection in a buffer that won't get automatically overwritten, and manually iterate through it one item at a time (use case: Select Special operations with lots of hits, handling one at a time) - Select special item for intersecting faces (using current pose/deformation) - Manipulator highlight colors are not very visible; use an outline highlight instead of a lighter color (texture map view needs more attention than 3D view) - Show pop-up menu for geometry select modes when clicked in tool palette while active - For better pencil tool precision, interpolate between adjacent GeometryIndexMap texture coordinate samples when sampling line (?) - Move turntable mode into its own separate window; many problems with event flow as is - Limit undo buffer size (BitmapImageDiff with large textures could fill up available memory very quickly; maybe compress automatically?) - Quick and easy way in UIColorPickerView to select integer hue values (red, yellow, green, cyan, blue, magenta). Clickable tick marks aligned with hue slider? - Redo UI of PropertiesTextureEditRow (reduce button count; hide some options in More... button) - During obj export, handle spaces in material and texture names (material partially done in obj, but not mtl) - Current obj handling nonideal; don't squish upper case letters --- - Collapse properties/inspector subviews - Image overlays in scene editor - Stronger visual feedback for F7 key (show what was newly focused; temporary visual effect using getFocusBounds()?) - Log window for file status message history - Show manipulator rotation handles when multiple lights are selected, and allow lights to be rotated around manipulator's position --- - Geometric boolean operations - Order independent translucency - STL export - PBR rendering - Image map texture in ShaderEnvironmentParameters - https://en.wikipedia.org/wiki/Bidirectional_reflectance_distribution_function - https://www.merl.com/research/downloads/BRDF - Vulkan renderer - Metal renderer (compare with MoltenVK) - Additional texture image formats (compressed? mipmaps?) - When importing mesh geometry (mergeMeshGeometry), give options for importing textures, materials, partitions - Calculator window improvements - Add something more useful where load button used to be (other outputs, stats, file name? Maybe file name in window title?) - Warn on quit with unsaved formula - Overscroll? (Allow scroll position to go beyond normal range when adjusted, then retract when scrolling away from overscroll direction) - Show some sort of labels to identify inputs - Highlight outputs compatible with input being dragged - Drag from input to output - Different cursor for input rollover - Apply formula to any vector or quaternion - Apply formula operation for selected vertices (position, and attributes?) (also bone, pose bone, mesh instance) - Input bindings (vertex attributes) - To visualize rotations, draw lines of motion, anchored to prominent points on model being rotated - Pose animation editor - Display deformations on pose editor screen - New way of editing deformation display: Pop-up view to assign weights, activate all/deactivate all buttons, presets - Deformation sequencing with keyframes? - Height map mesh type in scene - Command-line tools for inspecting MeshDataBundle (probably in 3dmodelio) - Print vertex format, armature info, material, texture image count, etc. - Command-line tool for exporting images (including turntable animations) - Cheat sheet: User-editable/orderable list of keyboard shortcuts, mapping from function name to key combination (opposite of keyboard shortcut viewer) - Full list, favorites float to top and are reorderable, show favorites only checkbox - Check math in MeshEdit3DView_viewSelected; why does Quaternion_forwardInverseLevel() need reversed x and y inputs (and why doesn't Quaternion_forwardLevel() work)? - Mode to display bone weight colors - For one selected bone at a time, use weight of that bone for each vertex's color - Mode to display normals as colors - Responsive mouseover states for vector and quaternion controls - Multiple active views - Layouts: Single, double both orientations, triple all orientations, quadruple - Split ratios - Further file format support - glTF specularity (KHR_materials_specular) - Check other expected glTF extensions - glTF armatures - glTF deformations - glTF animations (future) - glTF scene I/O - FBX support (https://code.blender.org/2013/08/fbx-binary-file-format-specification/) - Make slice geometry operation correct for concave faces - Check for operations that require using the mouse, and provide keyboard alternatives - Gamepad support? - Idea: More general mirror mode that can apply a variety of repeating transformations to vertices. Could be as simple as a transformation matrix and a repeat count (possibly a list of those pairs?) Examples: 4x5 grid; 6-segment rotational symmetry; mirror on another axis; mirror on a non-axis-aligned plane; 2- or 3-way mirror; mirror not centered at origin - Different per partition - Crossing mirror boundaries becomes more complicated; maybe mirror clipping applicability could be evaluated, and disabled if unenforceable? --- - Use libpng and libjpeg for image export; stb_image's compression is poor - Allow specifying to export an image as JPEG, even if it wasn't imported as one - Controls for JPEG export quality - Lossless JPEG vertical flip for glTF export (see jpegtran.c in libjpeg source) - Shader selection affecting only whether normals are posed or not feels bad; see if a better solution can be found - Less Blenderlike bone appearance - Emphasize joint position more than bone - Multiple different styles in preferences: Current, actual bone, plain stretched cube, plain stretched capsule - Use IOUtilities number formatting for all number fields instead of sprintf/sscanf - floatArithmeticInterpreterCallback in UIUtilities.c - Finish implementing all primitive types for selection tools: Bone, bone endpoint, mesh instance, light - Pose bone anchor to pivot doesn't rotate correctly; either needs to be removed, or to perform some operations on the bone's base orientation to align - Interactive tutorials: - Built-in starting file, set of instructions for demonstrating a particular feature or operation - Track features used, with frequency and last used date - Track tutorials viewed - "Show me something I didn't know" and "Show me something I've forgotten" buttons using above tracked data - User profiles - Face triangulation makes opposite choices for mirror mode geometry as hard-mirrored geometry; can this be adjusted? --- TEST FEEDBACK: - Tab keypresses after pressing enter on an inspector text field should go to next field instead of changing mesh selection? - Split 3D view (multiple camera angles at once) - Movable split between views (geometry/texture map) - Extrude was unintuitive (up/down motion) - Draw arrows onscreen for all operations showing direction of mouse movement, updating when moved that direction - Some way to snap to pixel boundaries in texture editor - Snap to grid during extrude - Wanted for all operations; snap delta, not resulting position - Vertex selection order for face creation should take more thought; maybe can use surrounding geometry or camera orientation, or choose the order that's most planar (modifier key to override) - Binary operations to subtract one model from another - Toolbar for view modes and stuff - Save recovery file in case of crashes - For translate, rotate, and scale operations, add detach key that splits selected geometry during interactive operation --- - Lasso tool - Some way to visually inspect how each non-triangle face is being triangulated during rendering (show triangulation lines view setting?) - Side panel view mapping out adjacencies to current selection, from selection's perspective (clickable) - Maybe a magnifier view that appears while using GeometryNavigationOverlay - Some way to partially select vertices? Want some sort of proportional editing, somehow - Keyboard geometry navigation for texture map view - Key shortcut remapping - All menu items - Edit/selection operation shortcuts - Dynamic text in applicable help pages adjusting to user's settings - Adjustable non-positional drag ratios (DRAG_ROTATE_RATIO, etc.) - Axis invert preferences for keyboard camera control - Bone workflow issue: After extruding, usually want to move tail endpoint rather than entire bone, but entire bone is selected - In bone selection mode, flood fill failure message doesn't make sense - Swappable model pieces - Maybe don't need an explicit system for this? However, being able to show a model for reference while working on another would help - Some way to select vertices and blend their color with another color (want to darken an area of different colors without adjusting each one individually) - Second control next to color well that pops up a color blend panel similar to tile editor? Needs its own color selector since no back color exists - Edge subdivide iterates over every face in the model; should only consider set of faces touching selected edges (may be due for full rewrite anyway to allow for multiple divisions) - Hold D key to start subdivide operation, scroll wheel or arrow keys to control division count, release key to commit? - Onscreen controls reminder (mouse/camera controls, mouseover number swap) - Available select modes - Highlighted clickable icons in corner of screen somewhere - Modifier keys that change operation behavior - Flood fill shortcut - Manipulator shortcuts - Face/edge loop modifiers - Visual feedback for mirror clipping on/off, probably also elements shown/hidden - New bevel operation - Work at edge of geometry - Multiple divisions - For edge flow coherence issue, start with one selected edge and walk along it to build a directional chain (looping possible) - Mirror clipping for vertex slide operation (and inflate?) - Edge highlights would be better with some sense of depth; widen the end closer to the camera with some sort of parameters. Same with face highlight edge thickness? Maybe just do it in 3D space? - Maybe also want to represent the angle of faces touching edge (convexity/concavity) - Need quad interpolation for edge highlight with different radius at each end, or a shader that does it a different way - Texture map view edge selection is somewhat unintuitive; basing it on face edge selection causes selection/deselection to visibly affect more area than in geometry view (example: select only opposite edges of a quad, and lines in between are drawn as selected) - Adjustible vertex/edge highlight size in preferences? --- - Fog in main shader (have environment parameters but no render implementation) - Mesh instance setting in scene editor to show all hidden faces - Scene export (see TODO in SceneEditorScreen_menuItemAction) - Pose export in formats other than ArmaturePose? - Turntable mode on scene and pose screens - Turntable direction setting in image export dialog - Replace detailed PropertiesShaderLightInfoEditRow with inspector panel, which takes the place of InspectorFaceEdgeEditView or InspectorBoneEditView in light select mode - Identify which light is which in PropertiesShaderLightInfoEditRow, show whether it's selected, and select/deselect from panel - Implement select more/less on pose editor screen (and for bone selection on geometry screen, if not already done?) - Update translate operation to have region options like rotate and scale? (Does this even make sense? Axis constraints? Have move-only extrude already) - Some sort of topology guide/template for creatures? Place a prebuilt mesh with basic shapes (limbs, torso, head), move handles around to shape, then build details on top of that base geometry. Could also include armature. - Interactive in-application tutorial showing how to model a basic object --- - Multipass rendering for more precise edge index query (render face index in one pass, use as input for second pass to render edges with no depth offset by discriminating based on face index) - Swept selection for circle select - Collision detection (inflate, translate, etc.) - Pose modifications (relax shoulder until hand meets hip, etc.) - Snap objects placed in scene to floors/walls - Simple: Check for degenerate faces created during inset/outset operation - Scene animation - Timeline control for parameter changes: - Lights - Camera - Poses/pose animations - Mesh instance transforms - Do a fresh query on mouseover geometry element for flood fill instead of using MeshEditGeometryView ivars - SSAO - https://learnopengl.com/Advanced-Lighting/SSAO - http://john-chapman-graphics.blogspot.com/2013/01/ssao-tutorial.html - PBR - https://learnopengl.com/PBR/Theory - Angle visualization (along a chain of edges, see how much each vertex bends in a direction?) - Multiple environments in scene editor - Face select mode that includes adjacent face corners - Manual interpolation for anchor to pivot and fit to curve - Some way to perform instantly? Modifier key convention? (Can default also to 1.0 like spherify) - Set defaults for mesh operations (pivot/zero point, axis, etc), for convenient chaining of operations without having to change modes every time - Improve rigging: - Non-pose bone rotation should include options for local and global axis rotation, and probably default to local - Operation to commit pose transformation to armature and/or mesh (is this already implemented?) - Operation to take posed model, apply inverse of pose, preserve ability to reapply pose matching original model (this is mostly already implemented) - Use case: Transform a model that's already posed into an unposed one, retaining the ability to reapply original pose and apply other poses - Vertex bevel - Edge slide/extrude/? axis value target - Some way to aim for a specific reference point during operations other than translate; maybe a guide, maybe anchor/pivot, maybe a typed number? Need to specify which moving part and which stationary part are trying to line up, and along what axis. Probably pivot/anchor, but how to bind one of those to moving part? - Headless mode that can operate on a mesh noninteractively and save the result - Test suite for mesh operations (or maybe just unit tests) --- - Hole punch operation? - Extrude a face inward beyond the other side of geometry, and join it to the other side somehow - Maybe this is just boolean geometric operations? - Handle axis lock for curved edge straighten - Some way to even the spacing of selected vertices (maybe also along a curve?) - This is an edge operation similar to edge slide; for a set of selected edges with shared faces, adjust the distance between pairs of edges to be equal to average of all selected - Add radius to pivot/anchor? - Snap mode during extrude, translate, slide, etc., where when one vertex or edge snaps to a guide, everything else moving matches - Implement snap to grid on scene editor screen - BoxPivotCenter equivalent for 2D translate/rotate/scale operations --- - 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) - Allow numpad camera adjustment during edit operations? - Rotate camera with mouse during all edit operations? (Not currently designed for this, but could change) - Use custom number formatter everywhere %f is used (especially operation status text) - If file dialog for image export is canceled, return to export dialog instead of closing - Scene editor - 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 - Remember last used directory for file open dialog on relaunch (also applies to tile editor, audiolab) --- - 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 - 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 - Armatures - Option to highlight vertices weighted to selected/moused over bones - Circle/rectangle selection - Improve appearance of moused-over bones and bone endpoints - Handle selection of overlapping endpoints for non-connected bones - Toon shader with secondary vertex color for outlines --- - Type numbers for operations that involve subdivision count (loop cut, insert cylinder, insert sphere, eventually bevel) - Improve image overlay settings: - Want to be able to size by pixels - 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) - Visual feedback for VectorPositionControl and VectorDirectionControl - Extrude along anchor or pivot normal (is this already implemented?) - Merging vertex/edge/face delete (also listed above) - 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 (properties panel?) --- - 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 - Show snap grid - 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 - 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 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) - 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 attribute list - Copy/paste for geometry - 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) - 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 - Alternating background colors to separate attributes in inspector panel --- - Tab between InspectorVertexEditView and InspectorFaceEdgeEditView fields - List of key bindings (and preferences for changing) - 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 - 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 - Some hotkeys should be assigned by character code rather than key code (such as X/Y/Z for axis selection, Q for quit, A for select all, etc.) - Hit detect radius - Camera sensitivity - EQUAL_COMPONENT_THRESHOLD - Background color - Multiple views (use cases: different camera angles; different poses; different texture/color/lighting configurations) - Command line model export utility (MeshEditData -> MeshData; installed) - Try out workflow of importing models and animations into Unity, Unreal, Godot, Three.js Cutting room floor: - Lock partition, disallowing changes (how? Functions that filters out selected items inside a locked partition? What does this do to vertices shared by faces in another partition? Maybe better to just hide a partition's faces to prevent changes) Convex hull gift wrapping algorithm: https://en.wikipedia.org/wiki/Gift_wrapping_algorithm 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? - https://fspy.io/ - 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 - Journaling for mesh data changes circle_outline.png: circlegen -w 64 -h 64 -t 8 -k 2 -s 16 -rgba circle_outline_small.png: circlegen -w 32 -h 32 -t 8 -k 2 -s 16 -rgba circle.png: circlegen -w 32 -h 32 -k 2 -s 16 -rgba