-
Notifications
You must be signed in to change notification settings - Fork 6
3D and 2D Visualization
Live visualization of every button press, stick movement, trigger pull, key press, and MIDI note, with click-to-record hit testing on every drawn input.


PadForge picks the view from the slot's controller type.
| Controller type | Condition | View | 2D/3D toggle |
|---|---|---|---|
| Xbox | Default | 3D model | Yes |
| Xbox | "Use 2D View" enabled | 2D overlay | Yes |
| PlayStation | Default | 3D model | Yes |
| PlayStation | "Use 2D View" enabled | 2D overlay | Yes |
| Extended | Always | Procedural schematic | No |
| Keyboard + Mouse | Always | Keyboard and mouse layout | No |
| MIDI | Always | Piano keyboard and CC sliders | No |
The toggle button is hidden on slots that have no toggle.
A 3D model rendered with HelixToolkit.WPF. The active mesh swaps with the assigned profile: Xbox 360, Xbox One / Elite / Adaptive, Xbox Series, DualShock 4, and DualSense each ship native artwork. Xbox Series profiles add a clickable Share button on the mesh. Non-Series Xbox profiles use the same mesh, with the Share region inert so it doesn't fire on press. Extended slots running a gamepad-shaped HIDMaestro profile show the matching model.
All models inherit from ControllerModelBase. Per-controller subclasses register hit-test regions for each button, stick, trigger, and the touchpad. Click detection runs through HelixToolkit.Wpf.Viewport3D ray-cast against those regions.
| Action | Mouse | Touch |
|---|---|---|
| Rotate | Left-click drag | Single-finger drag |
| Zoom | Scroll wheel | Two-finger pinch |
| Pan | Right-click drag | Two-finger drag |
| Reset view | Button (top-right) | Button (top-right) |
Rotation is turntable-style. Horizontal drag controls yaw. Vertical drag controls pitch, clamped to ±60 degrees. Sensitivity is 0.5 degrees per pixel.
Default camera: FOV 55 degrees, position (0, -172, 132), look direction (0, 0.793, -0.609). Reset View restores these exact values.
Tip: Zoom in before using click-to-record so you can target small buttons accurately. Right-click drag to re-center after zooming. Click Reset View to snap back to the default angle.
| Element | What changes |
|---|---|
| Buttons | Swap to accent color when pressed. Multi-mesh buttons highlight together. |
| Thumbsticks | Tilt in proportion to deflection. Ring blends toward accent color with distance from center. |
| Triggers | Rotate downward in proportion to pull depth. Material blends toward accent color (0–1). |
| D-Pad | Active direction swaps to accent color. |
Click any button, trigger, D-Pad direction, or stick ring to start recording a mapping. Press or move an input on your physical controller and PadForge assigns it.
Ray-cast hit testing inside Viewport3D returns the visual element under the cursor. The hit forwards to RecorderService.StartRecording with the matching output target.
Stick ring quadrant detection picks the axis from the click position.
| Click position | Maps to |
|---|---|
| Center | Stick button (L3 / R3) |
| Right / Left | X axis positive / negative |
| Top / Bottom | Y axis negative / positive |
This is a quicker alternative to the grid in Button and Axis Mappings.
During Map All (from Button and Axis Mappings), outputs flash orange in sequence at 400 ms intervals. Stick axes show a directional arrow and quadrant wedge on the ring. The flash holds until the mapping is recorded, then advances.
Toggle between 3D and 2D with the view-mode button in the top-right corner of the Controller tab. The 2D view uses resolution-independent PNG overlays on a flat controller diagram. It supports the same interactions as 3D: live highlighting, click-to-record, hover previews, and Map All flash.
The layout comes from ControllerOverlayLayout. Each per-controller layout positions buttons, sticks, triggers, and the touchpad over the base PNG. Hit regions are 2D rectangles tested against the cursor.
Your choice of view persists across sessions.
| Element | What changes |
|---|---|
| Sticks | Slide to follow input, no tilt. Hovering shows a quadrant wedge indicating which axis a click would map. |
| Triggers | Fill rises from the bottom as you pull. Zero is empty, full pull is solid highlight. |
| Buttons / D-Pad | Same accent-color highlighting as the 3D view. |
Tip: The 2D view uses less GPU. Pick it on low-end hardware or if you prefer a flat diagram.
PlayStation slots (DualShock 4, DualSense) show a live touchpad preview on both views.
| View | Touchpad rendering |
|---|---|
| 3D model | Live finger contact spheres positioned on the touchpad surface mesh. Sphere position and count follow the active touches reported by the source controller. |
| 2D overlay | Finger dots drawn on a flat representation of the touchpad area. Same source data as the 3D view. |
The touchpad surface is a click target for mapping. Click anywhere on the touchpad in either view to start recording a TouchpadClick mapping. During Map All on PlayStation outputs, TouchpadClick is the final item in the sequence after every other button and axis.
Sony Report 0x01 passthrough on the source device feeds the spheres and dots. They render only when a DS4 or DualSense feeds the slot.
Extended slots show a procedurally generated schematic instead of a controller model, regardless of which HIDMaestro profile is active. The layout rebuilds when the active profile or count overrides change.
| Element | Appearance | Max |
|---|---|---|
| Thumbsticks | Crosshair circle with a position dot. Each stick uses two axes (X and Y). | 4 |
| Triggers | Vertical bar filling bottom-to-top. | 8 |
| POV hats | Compass with a rotating arrow. One POV is labeled "D-Pad". Extras are numbered. | 4 |
| Buttons | Numbered circles in rows of 8. Accent-filled when pressed. | 128 |
Sticks and triggers share a pool of 8 axes.
Click-to-record, Map All flash, stick quadrant detection, and POV cardinal detection all work the same as in the 3D and 2D views.
The schematic always represents the live HID layout for the Extended slot, no matter which HIDMaestro profile is selected. Xbox or PlayStation visuals render for actual Xbox or PlayStation slots, not for Extended slots that happen to be running an Xbox- or PlayStation-style HIDMaestro profile. The v2 vJoy ExtendedPreset enum (Xbox360 / DualShock4 / Custom) was dropped in v3.
Keyboard+Mouse slots show a full ANSI QWERTY keyboard and mouse diagram. The 2D/3D toggle is hidden.
| Element | Description |
|---|---|
| Keyboard | Full layout including the numpad. Keys show labels, mapping tooltips, and accent highlighting when active. |
| LMB / RMB | Shaped around the scroll wheel gap. Accent highlight on press. |
| Scroll wheel | Center pill for middle-click. Up / down arrows highlight during scroll output. |
| Movement circle | Dot deflects to show mouse movement. Click a quadrant to map MouseX, MouseXNeg, MouseY, or MouseYNeg. |
| Side buttons | X1 and X2 on the left edge (back / forward). |
Click any key or mouse element to record a mapping. Same workflow as click-to-record on the 3D model.
Tip: Hover a key to see its current mapping target in the tooltip before clicking to remap.

MIDI slots show a piano keyboard and CC slider panel. The 2D/3D toggle is hidden.
| Element | Description |
|---|---|
| CC sliders | Vertical bars filling bottom-to-top (0–127). CC number labeled below each slider. Click to map. |
| Piano keyboard | Standard layout with note labels (such as C4, F#5). Keys highlight on active note output. Black keys appear raised. Click to map. |
The layout rebuilds when MIDI configuration changes (note count, start note, CC count, start CC). With no notes configured, only sliders appear. With no CCs configured, only the piano appears. Click-to-record and Map All flash work on every element.
Tip: Adjust the start note and note count in the MIDI config bar first. The piano keyboard resizes to match, making click-to-record targets larger and easier to hit.
Last updated for PadForge 3.2.0.