The Custom Targets Update
1.4.0
5 July 2026
🎁 Added
  • Any humanoid-LIKE model now works as a conversion target: pick any compiled model (.vmdl) or FBX - including rigs with paws, a single finger, or a missing hand. Whatever roles the skeleton doesn't have are simply skipped
  • Unrecognized target skeletons no longer dead-end with "not recognized as humanoid": the manual bone mapper opens instead, and the confirmed mapping is saved as a preset so that model is recognized instantly forever after
  • Custom FBX targets produce a complete playable model: the FBX is copied into your project - together with its sidecar textures folder - and embedded into the generated vmdl as its mesh + skeleton (previously the vmdl compiled into an empty model with nothing to play). Z-up FBX exports (Unreal, 3ds Max) are detected and handled - no more animations lying on their back. Skeleton-only FBX exports get a clear warning up front. Output vmdls created before this update heal themselves: the next conversion into them adds the missing mesh
  • An FBX with its own animation keeps it: retargeting new clips onto an animated FBX preserves the embedded takes as sequences on the output model, next to the converted ones - converted losslessly through the pipeline so they play at the correct scale whatever units the FBX was authored in
  • Models exported mid-pose repair themselves: FBX files saved with the skeleton left in an animation pose (common on Auto-Rig Pro and store assets - IK'd hands or a foot half a meter from the bind stance) are detected when picked as a target and their true bind pose is restored from the file's own bind data. Previously such rigs looked fine standing still but played with mangled arms, fingers and legs - the "posed" limbs
  • Auto-generated materials handle masked card geometry (eyelashes, hair strands get alpha testing instead of rendering as solid white sheets) and fall back to a matching detail map when a material ships no diffuse texture (a vest with only a specular map shows its strap detail instead of flat white)
  • Custom FBX targets get a real skinned preview: picking the FBX compiles a small preview model in the background, so the preview dialog shows your actual character instead of a placeholder
  • Custom FBX target skeletons are taken from the engine's own import of the file, so the animations and the compiled model can never disagree - per-exporter quirks (3ds Max Biped, Auto-Rig Pro bone scales, odd pivots) previously produced stretched or misplaced fingers and twisted wrists on some rigs
  • Plain-named texture sets now resolve (a material "homer" shipping "homer.png" without any _d suffix used to render untextured)
  • Materials are auto-generated for custom FBX targets: a .vmat is written for every FBX material that has none (textures matched from the sidecar folder by name - diffuse and normal maps) and the model's material references are remapped to them, so the model compiles textured instead of showing "Missing vmat" placeholders. The generated files are yours to adjust and are never overwritten
  • Wireframe skeleton view in the preview: a "Skeleton" button switches between the skinned model and a stick-figure view of the retargeted animation (and back). Targets without a compiled preview model automatically show the skeleton view instead of an empty viewport
  • 2 new rig presets: s&box citizen/human naming (models re-rigged on the citizen skeleton are now auto-recognized) and AdvancedSkeleton (the Maya auto-rigger behind many game rips - Root_M/Scapula/Wrist/Ankle naming; one real model previously auto-mapped its arms and legs onto its head quills and played garbage) (19 presets total)
  • Texture matching covers every common suffix convention (diff/albedo/basecolor/col/clr and friends for diffuse; nrm/nm/norm/bump for normals) and now also wires roughness, metalness and ambient-occlusion maps into the generated materials when the set ships them
  • Single-set texture packs resolve: when everything is named "<character>_*" ("sonic_mat" + "sonic_diff.png"), the base name alone now decides an unambiguous match - previously the body rendered untextured while only distinctively-named parts (eyes) got their maps. Ambiguous base-name ties are still rejected, so multi-part sets can never grab each other's textures
  • Composite-shader texture layers pick the right stand-in by looking at the pixels: materials that ship several same-named layers for a custom shader (an eye as gray ball + white sclera mask + catchlight dot) get the layer with the brightest center as their color map - the pupil-hole layer used to render eyes solid black
  • An FBX with no materials at all (bare Blender export) compiles clean: the engine derives a material slot from the geometry name and used to fail with Missing vmat "cube.vmat" - a stub material is now generated for every geometry slot
🪛 Fixed
  • Custom model (.vmdl) targets were effectively unusable: even citizen-skeleton models were rejected as "not recognized as humanoid (5%)", and animations converted while a pick had silently failed targeted the wrong bones - playing them did nothing. Custom model targets are now recognized, preview skinned, and their compiled sequences actually animate (verified end to end)
  • Animations on custom FBX targets played rotated 90 degrees in ModelDoc (characters walking sideways or "backwards", body pitched over) while the preview looked correct - the compiled animation and the compiled mesh disagreed about the root bones' orientation on embedded-mesh models; they play straight now
  • Animations converted onto a custom FBX target played ZERO motion on the compiled model: the engine sanitizes bone names at mesh import (3ds Max Biped's "Bip01 R Hand" becomes "Bip01_R_Hand") while the animation channels used the raw names and never bound - targets are now built on the sanitized names (verified end to end on a real 3ds-Max-Biped character with mocap and Mixamo clips actually playing on the compiled model)
  • Custom model (.vmdl) targets no longer stretch: bind transforms read from compiled models were misinterpreted, compounding the upper body until heads sat metres away from the torso and the skin pulled into webs ("stretched wrists") - skeletons from compiled models are correct now (a real throw clip went from a bogus 4.3 m "arm swing" to the actual 71 cm one)
  • The preview's overlay skeletons (the "Show source" ghost and the "Skeleton" view) finally draw as full stick figures: the line renderer holds a single polyline, so only the last bone segment ever reached the screen, and stick-bind mocap rigs (NVIDIA SOMA) additionally smeared the ghost into streaks - the skeleton now renders one polyline per chain and the ghost aligns from the clip's first frame (verified in rendered images)
  • The preview no longer runs at ~2 fps with purple/black flicker on custom FBX targets: copied textures were unknown to the asset system, so the renderer retried resolving them every frame - they are registered now and the model renders textured at full speed
  • Rigs whose head bone rests away from the skull (seen on a Sketchfab rig that parks its head joint at chest height, with the skin bind compensating) no longer play every animation with the head pitched back and smearing further as the clip plays - such a bone is not a drivable skull joint, so it and the neck of that broken skull region rest while the spine carries the upper body (map them manually to override; driving the neck sheared a hump onto the character's back because it carried the skull's skin weights)
  • Auto-Rig Pro finger chains articulate at the right joints: the "index1_base" metacarpal was mistaken for the first knuckle, so curls bent the finger from inside the palm while the real knuckle never moved
  • Extra bones outside the body skeleton (skirt/cloth physics chains parented to the scene root - one model ships 48 of them) now ride the character instead of freezing at their spawn position while the body animates away; Prop bones resting at an extremity anchor there instead - a sword in the hand follows the hand, a skirt at the waist follows the hips
  • Limb twist bones on custom targets animate: auto-rigged exports (forearm_twist, ElbowPart1, ForeTwist) spread wrist/knee roll across helper bones the original game constrains at runtime - frozen at rest they candy-wrapped the skin into spike fans at the wrists; they now follow their joint's roll by their position along the limb. The roll extraction is numerically conditioned: near-180-degree limb swings used to inject huge fake rolls (one leg of a throwing character flipped upward while the other stayed correct)
  • The preview keeps each bone's bind scale when posing (models with scaled bind bones collapsed around them in the preview only)
  • Embedded FBX animations keep their authored bone translations: a 3ds Max Biped take animates spine/thigh positions (up to ~19cm of body sway on a death fall) that used to pin to the rest pose, subtly stiffening the preserved animation
🚯 Removed
  • The "Detect locomotion sets" checkbox is hidden from the options panel