Plugin for Autodesk 3ds Max

Snap UV islands to the perfect trim, automatically.

HotspotUV matches every UV island to the best-fitting trim zone by shape, size and orientation — in one click, fully undoable. Lock a consistent texel density across the whole asset and stop fighting your trim sheets.

Regional pricing applied automatically at checkout

  • 3ds Max 2024+
  • One click · one undo
  • No extra installs
1 clickmaps a full selection of islands
1 undoreverts the whole operation
100%deterministic — same input, same result
0 installsruns on Max's bundled Python

Why HotspotUV

UV mapping is the most repetitive job in 3D production. It doesn't have to be.

Trim-sheet and hotspot texturing is fast — when the islands actually line up with the trims. Manually selecting, moving, rotating and scaling UV islands one by one, hundreds of times per asset, turns a simple adjustment into hours of work. HotspotUV does the lining up for you: select your islands, pick target zones on the visual map, and hit one button. The tool picks the right trim for every island, rotates and fits it, and keeps everything as a single undo step.

New in v2.2

Quick UV + Hotspot — unmapped model to trimmed UVs in one click

No unwrapping first: a uniform box projection at a consistent texel scale, auto-calibrated to your trim sheet, then an immediate hotspot pass — one button, any number of objects.

HotspotUV after a Quick UV + Hotspot run — the trim sheet with matched islands in Edit UVWs and fully textured HVAC props in the 3ds Max viewport
Raw boxes in, textured props out — every face lands on its trim at one consistent texel density.

Key features

Everything you need for clean, consistent trim UVs

Aspect-aware matching

Every island snaps to the best-fitting trim zone by shape, size and orientation. Deterministic by default — same input, same result, every time.

Visual zone picker

Click, Ctrl-click or drag-select target zones directly on the trim map, with a live target count and background-image texture preview.

Texel density mode

Scale every island to one consistent texel density computed from its real 3D area. No more mixed resolutions across a panel.

Straighten on the fly

Auto-orient skewed islands to the UV axis before matching, using minimum-area rectangle fitting — even sub-degree corrections.

Smart fit control

Keep proportions perfectly uniform, or allow a controlled amount of stretch (0–100%) to fill the zone exactly as much as you want.

Variation, seeded

Optional random 180° rotation, mirror and pick among equal matches — seeded for repeatable results — to break up visible tiling.

World-size & per-zone options

Match zones by real-world size, tag zones into categories, and fine-tune per-zone inset and global padding.

One click, one undo

The whole hotspot operation — every island — reverts with a single Ctrl+Z. Experiment freely.

Flexible zone workflows

Load .json trim layouts, generate zones from your existing UV islands or from a grid, with a searchable zone list.

The control panel

Full control over every match

Great defaults out of the box — but every part is yours to tune. The panel opens in a clean Basic view; one click on Advanced reveals the full toolbox. Here's the whole workflow — panel, toolbars and menus — in plain English.

Basic — the handful of decisions that matter, nothing else.
Advanced — every option, one switch away. Your choice is remembered.

Basic & Advanced

Progressive disclosure — complexity only when you ask for it.

Basic
Mode, Orient, Measure, Priority, Trim size and the Scale toggles — enough for 90% of runs.
Advanced
Reveals the long-tail options plus the Padding and Variation sections. Your choice is remembered between sessions.
Target counter
Always shows what the button will hit — All enabled trims (N) or N target trims selected.

Mapping

How each island lands in its trim.

Mode
Fit the island inside the trim (Hotspot), let it tile past the trim (Seamless U/V), or use each trim's own setting (From trim settings) to mix normal trims and seamless strips in one pass.
Orient
As Is, Auto (longest side horizontal), Straighten skew to the UV axis, or Orient to World — the surface's world-up (Z) points up in UV, so walls stay vertical and upside-down islands are fixed.
Flat tolerance
Only with Orient to World: how much tilt a surface needs before it counts as sloped. Below it, a face is treated as flat and the next world axis decides, so chamfers and near-level faces stop picking arbitrary angles. Default 10°. (Advanced)
Random offset in trim
Seeded random placement instead of centering, so repeated islands don't line up. (Advanced)

Matching

Which trim an island wins.

Measure
Current UVs matches on the island’s UV bounding box as it is now; Model geometry (3D) matches on its real size on the model, so re-running with different settings decides from scratch instead of snapping back to the trim it already sits in.
Priority
Balanced (closest to the island's actual size — uniform density), by shape first, by size first, or by real-world area (texel density).
Trim size
Aim at trims the island’s own size (Island size), or bias the search toward larger or smaller trims — or set the multiplier yourself.

Advanced matching

Nudge and filter the match. (Advanced view)

Manual scale
Zone-area multiplier when Trim size = Manual — above 1 picks bigger zones, below 1 smaller.
Aspect bias
Nudge matches toward wider (+) or narrower () zones.
Allow 90° rotation
Let an island turn 90° to fit a zone's orientation.
Detect radial
Round islands (caps, flanges) go only to trims tagged Radial; everything else avoids them.
Tag filter
Map only to trims carrying a chosen tag — e.g. send rivets to rivet strips.

Scale

How big the island gets in the trim.

Keep proportion
Lock proportions, or allow a controlled amount of stretch to fill the zone.
Max stretch %
How far an island may stretch to fill its zone (0 = none, 100 = full).
Texel density mode + Sample
Scale every island to one consistent texel density from its real 3D area. Sample reads the density off a selected island.
Density margin %
Snap to an exact trim fill when it costs only a little extra density — no sliver gaps.

Padding

Keep trims from bleeding into each other. (Advanced view)

Inset mode
Global padding, per-zone inset, or both combined.
Padding
Global margin in pixels around every island.
Padding scale
One multiplier on all effective padding — raise it for mip-safe UVs without editing a single zone; 0 disables padding entirely.

Variation

Break up visible tiling — repeatably. (Advanced view)

Randomize among equal matches
Pick randomly between zones that fit equally well.
Random 180° / mirror
Optional 180° rotation and U/V mirroring for variety.
Seed
Every random choice is seeded, so the same seed always gives the same result.

Map modes & Fit

One switch decides what a click on the map does.

Place
Click a trim and the selected UVs drop straight into it — using the Fit mode next to the switch (Fill, Cover, Fit width, Fit height).
Select
Click or drag-select the hotspot target trims; the live counter sits right on the map.
Edit
Move and scale the trims themselves — see the next card.
Rotate 90°
Rotate the selected UV islands in place, straight from the map toolbar.
Background & view
Zoom Extents plus a texture underlay — from a file or straight off the selected object's material.
Display
Trim opacity, border strength / thickness / color and label size & color — fade the trims to inspect the texture underneath.

Edit & snap

Reshape the sheet right on the map.

Move & scale
Drag trims to move them (multi-selection moves together); the group gizmo scales everything about a common pivot.
Snap S
Edges and corners snap to neighbouring trims and the sheet border — zoom-independent, toggled with one key.
Undo
Every gesture is one undo step — Ctrl+Z works right in the tool.

Per-trim settings

Every zone can behave differently.

Edit Trim
Double-click a trim in the list or on the map to open it.
Fit axis
Give any trim its own behaviour — fit, fill-to-cover or seamless U/V — used by the From trim settings mode.
Tags
Comma-separated categories for the matching filters.
World W/H & Inset
Real-world size for texel density, plus per-zone padding.

Trimsheet & files

Load, save and reshape trim layouts.

New / Open / Save
Start fresh, load a .json layout, or save your sheet.
New from Texture
Point it at a color-ID layout texture and every flat color block becomes a trim — tolerance and minimum size included.
Import Trimsheet
Merge zones from another file into the current sheet.
Edit Trimsheet
Resize the sheet — the zones scale with it.

Trims toolbar

Frequent actions labeled, the rest one click away.

New / Duplicate / Delete
Manage zones in the list — with labels, no icon guessing.
From UVs
Build zones straight from your selected UV islands — the main way to create a sheet.
Grid
Build a regular grid of zones.
⋯ menu
Split Selected Trims (equal columns or rows), Set / Remove Tags, Set Fit Axis and Map UVs to Trims — bulk actions on the selection, also in the right-click menu.

Want the full picture — window anatomy, a trim-sheet building recipe and a live matching simulator?

Open the interactive tutorial →

Workflow

Four steps. Seconds, not hours.

  1. 01

    Load a trim layout

    Open a .json trim sheet, generate zones from your UV islands, or build them from a grid — with your texture as a background preview.

  2. 02

    Select your islands

    Add an Unwrap_UVW modifier, switch to Polygon mode and select the faces of the islands you want to map.

  3. 03

    Pick target zones

    Click or drag-select zones on the visual map — or leave the selection empty to target all enabled zones.

  4. 04

    Hit “Hotspot selected UVs”

    Every island snaps to its best-fitting trim, rotated and scaled. Don't like it? One Ctrl+Z and try different settings.

See it in action

Watch HotspotUV work

A 6-part course: from a blank plane, through baking and an auto-built trim sheet, to props that UV themselves in one click.

Free tool · no sign-up, no install

TileCheck — see your textures tile before they ship

A small in-browser companion to your trim-sheet workflow. Drop an albedo, normal and comp (ORM) map and TileCheck repeats them across an infinite plane under real-time PBR lighting — then measures the edges for you, so seams, value jumps and banding show up here, not in the engine.

  • Seams measured, not eyeballed — every tile edge is scored against the map’s own detail, per map and per axis, and the edges in the view glow where the mismatch actually is. Tile borders and a half-offset mode bring the seam to the middle of your screen when you want a closer look.
  • Catches the drift you can’t see — a flat brightness offset between two edges disappears into grain up close, then bands across a whole wall. TileCheck flags it before the engine does.
  • Reloads when you save — keep it open beside Substance or Photoshop and re-export; the preview updates itself. Hold B to flip back to the version it replaced.
  • Light that follows your cursor — rake the light across the surface to expose normal-map seams and direction flips, isolate albedo, normal, AO, roughness or metalness, and switch DirectX ↔ OpenGL in one click.
  • 100% private — everything runs locally in your browser via WebGL. Your textures are never uploaded.
TileCheck — brick_wall_ALBD.png · 3×3

Drag & drop your maps — get an answer in seconds.

Built for production

Made during real environment production

Game & real-time artists

Texture large sets of modular assets with trim sheets and keep every UV layout clean, consistent and repeatable.

Environment & level artists

Built for large-scale real-time architectural environments, where hundreds of modular assets need fast, consistent UV mapping every day.

Big scenes & asset libraries

Reuse one texture set across a whole environment without manual UV fiddling. Less time spent fixing UVs, more time creating.

★★★★★
“Well done plugin, speeds up development process a lot. I recommend it.”
Mateusz S. · Verified Gumroad purchase
★★★★★
“Very smooth for Substance Designer and Painter workflows alike, you need only an ID map and the plugin will turn each ID into a single click trim mapping! The developer is very responsive as well and fixed a reported bug in hours after I reported it.”
Alex G. · Verified Gumroad purchase
★★★★★
“A good approach to trim/hotspotting. Supports both a quick one click approach but if you want to spend the time creating your own UV islands then you can use those to map with a single click to the island you want. … probably one of the better approaches with one of the better UI’s.”
Edward B. · Verified Gumroad purchase

Pricing

One-time purchase. Three license sizes.

Lifetime license · 1 year of updates included · prices exclude VAT/local taxes, added at checkout · billed in your local currency

Team

$99

For one team. Activate on up to 5 machines.

Get Team

Studio

$249

For a whole studio. Unlimited activations.

Get Studio

Regional pricing available — the discount for your country is applied automatically at checkout

Every license includes: the plugin with a one-click .mzp installer · sample trim layouts · quick-start guide · 1 year of free updates · direct support from the developer

Buying for a company? VAT invoices are provided automatically at checkout. Questions about team licensing: [email protected]

Requirements & install

Requirements

  • Autodesk 3ds Max 2022–2027 (developed and tested on 2024 and 2026)
  • Windows 64-bit
  • Uses the built-in Unwrap_UVW modifier
  • Runs on Max's bundled Python 3 — no extra installs

Install

Recommended — the .mzp installer (in your download):

  1. In 3ds Max: Scripting → Run Script… and pick the HotspotUV_*.mzp from your download
  2. Confirm the dialog — HotspotUV installs and runs right away, no restart

Prefer not to click inside Max? Run the included install.bat, or copy the HotspotUV folder into %PROGRAMDATA%\Autodesk\ApplicationPlugins\ (all users) or %LOCALAPPDATA%\Autodesk\ApplicationPlugins\ (one user, no admin), then restart Max.

FAQ

Frequently asked questions

Which versions of 3ds Max are supported?

HotspotUV supports 3ds Max 2022–2027 on Windows 64-bit (developed and tested on 2024 and 2026). It uses Max's bundled Python 3 and PySide, so there is nothing extra to install.

Does it modify my geometry?

No. HotspotUV works exclusively through the built-in Unwrap_UVW modifier — only your UV coordinates change, never the mesh itself.

Can I undo a hotspot operation?

Yes — the entire operation, across all mapped islands, is a single undo step. One Ctrl+Z brings everything back.

What trim layout formats does it use?

Layouts are saved as .json (with background image, per-zone inset and world-size data). You can also generate zones straight from your UV islands or from a grid.

Is the matching random?

By default it's fully deterministic — the same input always gives the same result, and islands round-trip back to their own trims. Randomized variation (rotation, mirroring, pick among equal matches) is opt-in and seeded, so even randomness is repeatable.

How does licensing work?

It's a lifetime license — the plugin is yours to keep forever — and the price includes one year of updates. After that year the plugin keeps working; you'd only renew if you want newer versions. Three sizes: Individual (1 artist, up to 2 machines), Team (up to 5 machines) and Studio (unlimited activations). Need to move a seat to a new machine? Reach out and I'll free it up.

Release notes

What’s new in HotspotUV

Actively developed — every purchase includes a year of updates like these.

v2.4.0 18 Aug 2026 Latest
New
  • Flat toleranceOrient to World reads which world axis runs uphill across a face, and a face lying level to that axis has no uphill at all, so the next axis decides. That call used to hang on a raw threshold, which let a chamfer half a degree off level — or plain rounding noise on a flat face — set the rotation for a whole island. It is now the surface’s tilt in degrees: below the tolerance a face counts as flat. Default 10°. Reported by Edward B.
  • Measure: Current UVs or Model geometry (3D) — matching reads an island’s current UV bounding box, which makes a second pass sticky: once an island sits in a trim it carries that trim’s proportions and matches straight back to it, so new settings look ignored until you clear the UVs. Measuring on the model instead makes every pass decide from scratch. Needs a scale to compare against: one trim with a real-world size, or texel density. Reported by Edward B.
Changed
  • “Area” is now “Trim size”, and its entries say what they do: Island size (closest), Prefer large trims, Prefer small trims, Manual. They bias the size search rather than rank trims — on a sheet whose trims dwarf the island, “prefer large” can land in between, which the old “largest zone” label promised it would not. Existing presets keep working. Reported by Edward B.
  • Drag the arrows on any number field to sweep the value, the way Max spinners work — Ctrl for fine steps, Shift for coarse. A plain click still steps once.
  • Options that do not apply now grey out together with their captions.
Fixed
  • Texel density was used as a sheet scale even with its mode switched off, reading a value from a greyed-out field — so Model geometry always believed it had a scale and the warning about a sheet without one could never appear.
v2.3.1 12 Aug 2026
Fixed
  • Padding now holds on both axes. It was measured against the whole sheet instead of the trim an island lands in, so the gap shrank with the trim’s proportions — on a 2048×2048 sheet, a 640×128 trim asked for 8 px got 2.5 px at the sides and half a pixel top and bottom, which reads as padding working horizontally only. Padding is now literally that many pixels on every side of the trim, whatever its shape, and the same goes for per-trim insets and the Padding scale multiplier.
v2.3.0 8 Aug 2026
New
  • Quick UV: Break every edge — one option detaches every polygon into its own island, exactly like a manual break-all, so each face gets its own trim pick. The right mode for hard-surface blockouts: one box face, one panel. Runs natively, stays fast on thousands of faces.
  • Quick UV: Break islands at folds / corners — fresh box islands are cut along fold edges and 90° strip turns, each run straightened to the UV axes, so ribbons and frame borders match trims per run instead of as one connected shape.
  • Auto-detect trim sheet — opening the window (or changing the selection) finds the .json next to the selected object’s textures, loads it and picks the albedo as the map background.
  • Drag & drop — drop a .json on the window to load a sheet, drop an image to set the map background.
  • Smarter seamless bands — Seamless U/V picks the band by island thickness, and Keep proportion scales all islands on a shared band with one common factor.
  • Trim label controls — label size and color in the Display popup.
Fixed
  • Quick UV Flatten mode failed on 3ds Max 2024; the Flatten Mapping call now runs reliably.
v2.2.0 28 Jul 2026
New
  • Quick UV + Hotspot — one click takes an unmapped model to trimmed UVs: uniform box-projection at a consistent texel scale (auto-calibrated to your trim sheet), then an immediate hotspot pass. Works on any number of objects at once, with a shared Unwrap for easy inspection.
  • New Trimsheet from Texture — build a trim sheet automatically from a flat-color layout texture (color-ID map): every uniform color block becomes a trim, with adjustable tolerance and minimum size.
  • Split Selected Trims — divide trims into equal columns or rows; the parts tile the original exactly.
  • Rotate 90° — rotate the selected UV islands in place from the map toolbar.
  • Display options — trim opacity, border strength, thickness and color in one popup: fade the trims to inspect the texture underneath.
  • License tiers — Individual (2 activations), Team (5) and Studio (unlimited). Licenses purchased before this release keep working without any limit.
Fixed
  • Background image failed to load when the trim sheet referenced it by a relative path.
  • Routine license re-checks no longer count as activations.
v2.1.0 16 Jul 2026
New
  • Redesigned interface — a cleaner, calmer skin and a Basic / Advanced switch: the panel opens with just the essentials, one click reveals the full toolbox, and your choice is remembered.
  • Place / Select / Edit mode switch — one segmented control on the map toolbar replaces the old separate toggles; the place-on-click Fit mode now sits right next to it.
  • Edge & corner snapping — in Edit mode, trims snap to neighbouring trims and the sheet border while you move or scale them. Toggle with the button or the S key.
  • Padding scale — one multiplier over all padding (global and per-zone insets) for mip-safe UVs without editing zones.
Improved
  • Ctrl+Z works inside the tool — trim-sheet undo no longer gets swallowed by Max's own undo stack while the window is focused.
  • Scroll without side effects — the mouse wheel scrolls the options panel instead of nudging whatever dropdown or spinner the cursor passes over.
  • Always-visible UV checker — the 0..1 backdrop can no longer vanish mid-edit; selection count lives on the map itself; empty states explain the next step.
v2.0.0 10 Jul 2026
New
  • 3ds Max 2025 & 2026 support — HotspotUV now runs on the PySide6 / Qt6 releases of 3ds Max (2025, 2026) alongside 2024, from a single codebase.
  • “Balanced (uniform density)” matching — now the default — picks the trim closest to each island’s actual size, so islands barely rescale and texel density stays consistent across the whole model.
  • Reset to Defaults — one click restores every hotspot option to its default value.
Improved
  • Settings persist between sessions — your panel options are remembered across restarts.
  • More robust install & loading — packaging and startup improvements across 3ds Max versions.
v1.2.0 5 Jul 2026
New
  • Per-trim “Fill (stretch to cover)” axis — in “From trim settings” mode, islands are stretched edge-to-edge to cover the trim exactly (padding respected), overriding Max stretch and texel density. Great for trims that must be covered precisely.
  • Set Fit Axis… — set the Fit axis of all selected trims at once (toolbar + right-click menu). Combine with per-trim Fill / Seamless strips and map a whole sheet in a single “From trim settings” pass.
  • Remove Tags… — bulk-remove tags from all selected trims (toolbar + right-click menu, case-insensitive).
  • Double-click to edit on the map — double-click a trim on the map to open Edit Trim… (Select and Edit modes), same as double-clicking it in the list.
  • Background “From Selected Object…” — pick the trim-sheet background straight from the textures the selected object’s materials reference, including engine and simulator materials that store texture paths as plain text, which Max itself doesn’t list.
  • Auto-filled texture list — the Edit UVWs texture list is filled from the selected object’s materials when HotspotUV opens, and the albedo is shown as the editor background — no more manual Pick Texture for Multi/Sub-Object or third-party material trees Max leaves empty.
Improved
  • Texel density + Max stretch % — with “Keep proportion” off, islands whose full-trim fit is within the Max stretch budget on both axes now snap to a full fit; others keep the exact density (centered, no distortion). Previously Max stretch was ignored in texel-density mode.
  • Smarter long-island matching — in “From trim settings” mode an island longer than a strip along its free axis is now a legal match (it tiles past the trim anyway), and the tightest strip that accepts it wins. Fixes long islands being rejected by every strip and landing in small trims at the wrong density.
v1.1.0 3 Jul 2026
New
  • Seamless mapping (U/V) — islands fit the trim’s constrained axis only, keep proportions and can tile past the zone; optional randomized offset along the free axis.
  • Per-trim Fit Axis + “From trim settings” mode — mix regular trims and seamless strips in a single pass.
  • Detect Radial — round islands are mapped only to trims tagged “Radial”.
  • Orient to World — orient islands by their 3D world direction (also fixes upside-down islands).
  • Random offset in classic Hotspot mode — seeded and repeatable.
  • Density margin % — snap to a full trim fit when the texel-density target is within the margin.
  • Multi-object hotspot — run on any number of selected objects at once, still a single Undo.
  • Trim numbering in reading order — top-to-bottom, left-to-right, plus a “Renumber Trims” action; zero-padded names sort correctly.
  • Remembers your last trim sheet — the last opened sheet is reloaded on startup.
  • Per-run summary — islands, matched/skipped and time in the MAXScript Listener.
Performance
  • Rewritten core pipeline — bulk UV read, in-memory affine transforms and batched writes: up to ~8× faster (e.g. ~1900 islands: 27.5 s → 3.3 s). Undo and your face selection are untouched.
Fixed
  • Texel density + Seamless now picks the strip by density and always fills the strip’s constrained axis.
  • Multi-object runs previously applied only to the first object.
  • Skipped islands (no matching trim) are no longer rotated by Auto-orient.
v1.0.0 30 Jun 2026
Release
  • Initial release.

Spend less time fixing UVs.
Spend more time creating.

Regional pricing applied automatically at checkout