Skip to content

Releases: fernandotonon/QtMeshEditor

2.20.0

04 Apr 23:45

Choose a tag to compare

What's New

LOD (Level of Detail) System

  • LOD generation: Generate up to 4 reduced LOD levels from the Inspector panel with configurable per-level reduction ratios.
  • Auto LOD: One-click automatic LOD generation using Ogre's built-in heuristics.
  • LOD preview: Force any LOD level in the viewport to inspect the reduced mesh.
  • LOD export: Export each LOD level as a separate file (glTF, OBJ, FBX, etc.) to a user-chosen directory.
  • LOD info: The Inspector shows triangle counts for the base mesh and every LOD level.
  • Remove LODs: Strip all generated LOD levels from the current mesh.

Mesh Validation & Repair

  • Mesh validator: New Validator panel checks selected meshes for degenerate triangles (zero-area faces), non-finite UV coordinates (NaN/Inf), and extreme UV values.
  • Fix All: Automatically exports the mesh through Assimp's cleanup pipeline (FindDegenerates, FindInvalidData, SortByPType) and reimports the cleaned version.

Bug Fixes

  • MeshValidator::fixAll() now exports to a temp OBJ file before reimporting, so Assimp cleanup flags are actually applied (previously exported to .mesh which bypasses Assimp).
  • Fixed UV buffer reading in the validator: UV data was incorrectly read from the position buffer stream when UVs reside in a different vertex stream.

Test Coverage

  • Comprehensive unit tests for MeshLodController (~100% coverage): singleton lifecycle, no-selection guards, LOD generation/removal/preview/export, signal propagation.

2.19.0

02 Apr 20:38
ca8c679

Choose a tag to compare

What's New

Unreal Engine FBX Support

  • Animation-only FBX import: UE retarget FBX files (mesh-less exports) are now auto-detected. When a compatible skeletal mesh is already loaded, an instant merge dialog appears — no extra steps needed.
  • Z-up coordinate baking: Mesh vertex data and root skeleton bone rest poses are now baked to Y-up at import time. Exported meshes from UE are upright by default without any scene-node rotation hack.
  • Clean animation names: "Unreal Take" (UE's generic take name) is stripped automatically — animations are named after the source file instead (e.g. mm_attack_03).
  • Preserve intentional numeric suffixes: mm_attack_03 stays mm_attack_03 after merge, not mm_attack. Deduplication only strips _N suffixes on actual name collisions.
  • Inspector auto-refresh: The inspector panel updates immediately after an animation merge — no need to re-select the entity.

Bug Fixes

  • Fixed animation processing ordering: animation deltas are now computed against the original (pre-bake) T-pose, avoiding axis-swapped root motion for Z-up FBX files with embedded animations.
  • Model name is always derived from the file path rather than scene->mName, which UE sets to generic values like "unreal_take".
  • mergeAnimations() return value is now checked as the authoritative success signal.

Documentation

  • docs/index.html updated with Unreal Engine FBX workflow alongside the Mixamo workflow.

2.18.1

01 Apr 18:40
27bb2ad

Choose a tag to compare

What's Changed

  • Support animation-only FBX imports (e.g. Unreal Engine retargets) by @fernandotonon in #238
  • Fix Windows APPCRASH on machines without OpenGL (WinGet validation)
  • Auto-detect FBX Z-up (Unreal Engine) vs Y-up (Mixamo) and apply visual correction
  • Offer immediate merge when animation-only file is imported with a mesh selected
  • Add bone list and coordinate system info to qtmesh info output

Full Changelog: 2.18.0...2.18.1

image

2.18.0

29 Mar 17:50
ec1cca3

Choose a tag to compare

What's Changed

image

Full Changelog: 2.17.1...2.18.0

2.17.1

28 Mar 05:23
18b6664

Choose a tag to compare

What's Changed

Bug Fixes

  • Fix Windows CLI output: qtmesheditor.exe is built as a WIN32 GUI subsystem executable, so it had no console attached when launched from PowerShell or cmd. All CLI output (--version, --help, subcommands) was silently dropped. Fixed by calling AttachConsole(ATTACH_PARENT_PROCESS) + freopen("CONOUT$") when CLI mode is detected on Windows. This resolves the WinGet manual validation failure.

CI Improvements

  • Added Windows CLI smoke tests: one that runs on every push/PR (from bin/ directory) and one that runs on releases (from the extracted zip), to catch missing DLLs and startup failures before artifacts are uploaded.

2.17.0

25 Mar 19:00
5e95d40

Choose a tag to compare

New Features

  • Animation Merge: Improved animation naming during merge
    • Clean Mixamo noise from animation names (mixamo.com removed)
    • Smart deduplication: repeated merges produce jump, jump_2, jump_3 (not jump_2_2_2)
    • Only prefix generic animation names (e.g. mixamo.com → node name); meaningful names like jump, idle kept as-is
    • Stale animation states properly cleaned after rename

Bug Fixes

  • Animation Merge: Fix duplicate animation count (9 instead of 5) caused by stale AnimationState entries after rename
  • Animation Merge: Fix name collision error on repeated merges (two-pass rename avoids old↔new name conflicts)
  • Animation Merge: Fix re-prefixing on subsequent merges (test_test_jump no longer happens)

2.16.2

25 Mar 03:32
66bbdbc

Choose a tag to compare

Bug Fixes

  • Windows: Fix blank Inspector panel and Material Editor List — bundle QtQuick.Controls and QtQuick.Layouts QML modules in the Windows release
  • Windows: Fix QML import path separator (; on Windows, : on Unix)
  • CI: Fix 9 test suites that were silently crashing under Mesa/Xvfb
  • CI: Proper crash detection — removed sudo from test execution, fixed signal handler to distinguish test crashes from teardown crashes

2.16.1

24 Mar 18:15
c2ced18

Choose a tag to compare

Patch Release

  • Windows: Replace qtmesh.cmd with proper qtmesh.exe launcher for WinGet compatibility
  • WinGet: Both qtmesheditor and qtmesh commands are now registered as portable aliases
  • Packaging: WinGet manifests updated to schema v1.12.0

2.16.0

23 Mar 05:53

Choose a tag to compare

What's New in 2.16.0

Major UI modernization with a unified QML Inspector panel, new transform tools, and undo/redo support.

Transform Tools

  • Scale Gizmo — new R key shortcut, cube handles at axis endpoints
  • Local/World Transform Space — X key toggle, gizmo orients to node and drag follows local axes
  • Unity Keyboard Shortcuts — Q=Select, W=Translate, E=Rotate, R=Scale, F=Frame selection
  • Frame Selection — F key zooms camera to fit selected objects

Undo/Redo

  • Ctrl+Z / Ctrl+Shift+Z for translate, rotate, and scale operations
  • Edit menu with Undo/Redo actions
  • Undo stack auto-clears on object deletion to prevent stale pointer crashes

QML Inspector Panel

Replaces the old 4-tab sidebar (Transform/Material/Edit/Animation) with a single scrollable inspector:

  • Scene Tree — hierarchical view (Node → Mesh → Submesh) with expand/collapse, Ctrl+click multi-select
  • Material Typeahead — click [MaterialName] on any submesh to search and apply materials
  • Transform Spinboxes — position/rotation/scale with up/down arrow keys and buttons
  • Primitive Parameters — context-sensitive fields per primitive type (size, radius, segments, UV)
  • Animations — per-entity groups with enable/loop checkboxes, double-click rename, skeleton/weights toggles, play/pause

Layout Improvements

  • View Toolbar — Grid, Normals, Mesh Info, View Cube toggles moved from buried Options menu
  • Animation Control auto-docks below viewports for animated entities (Options → View → Animation Control to toggle)
  • Inspector fills full right-side height, no more tab widget wrapper
  • Wider default window (1110px)
  • Status bar shows transform space + selection type/count
  • Tooltip keyboard shortcut hints on all toolbar buttons

Under the Hood

  • ThemeManager singleton for consistent QML theming synced from QPalette
  • SceneTreeModel (QAbstractItemModel) with debounced rebuild for scene changes
  • BatchExporter and MaterialPresetLibrary stubs for future features
  • Clean shutdown — LLM worker model explicitly unloaded, _exit(0) on macOS to avoid ggml-metal assert
  • New unit tests: ScaleGizmo, UndoManager, SceneTreeModel, ThemeManager, TransformSpace
  • Keyboard shortcuts documented on the docs page

Bug Fixes

  • Fixed black Inspector/ViewCube on Linux (software rendering set before QQuickWidget creation)
  • Fixed crash when importing mesh with non-primitive nodes (isPrimitive guard)
  • Fixed crash when renaming animations (skeleton debug cleanup before rename)
  • Fixed re-entrant crash toggling skeleton/weights from Inspector
  • Fixed QML warnings about undefined primitive field config
  • Local transform space now actually works for drag operations (not just cosmetic)
  • Frame selection uses focused viewport instead of always first

Preview

image

Full Changelog: 2.15.1...2.16.0

2.15.1

20 Mar 13:22
06c9438

Choose a tag to compare

Fixes & Improvements

SD Stability

  • Fix crash on second texture generation — sd.cpp context is now recreated before each call (Metal backend corrupts internal state after first generation)
  • Remove img2img (image editing) — crashes on macOS Metal regardless of workarounds
  • Pin stable-diffusion.cpp to commit 545fac4 for reproducible builds

Material Generation Pipeline

  • Material with AI-generated texture is only applied after the texture finishes generating (no more broken intermediate state)
  • Unified progress bar: shows "LLM: X%" during material generation, then "Texture: X%" during image generation
  • Previously generated textures now load correctly on app restart (resource directory registered at startup)
  • LLM system prompt now encourages textures for realistic materials, but only when SD is available

UI / Dark Theme

  • Fixed black labels in dark theme across PassProperties and TextureProperties panels (GroupBox titles, CheckBox labels)
  • Fixed placeholder text color in AI prompt field
  • PBR template replaced with Normal Map template
  • Updated AI prompt placeholder text
  • Texture preview cache-busting for regenerated textures with same filename

Platform Fixes

  • ViewCube no longer stays on top of other windows on Linux and Windows (Qt::SubWindow instead of Qt::Tool)
  • Enable SD in CI deploy builds for Linux and macOS (Windows excluded — MinGW ggml incompatibility)
  • Viewport background: RGB(30, 30, 30)
  • Snap: documented qtmesheditor.qtmesh CLI usage and alias command
  • qtmesheditor --help and --version now route to CLI mode