Sleeves can move similarly when a hanger shakes, yet the hem may open differently after it stops. We measured this difference by hanging the same unisex shirt in Newton VBD and Style3D. Next, we inserted a hanger one shoulder at a time into a women’s short-sleeved T-shirt with actual cutting-pattern data. Finally, we used the same hanger with a women’s long-sleeved sweatshirt and observed its motion without holding the cloth.
Hanging a T-shirt one shoulder at a time
Female_T_Shirt.usd. Left: exterior view; right: translucent view at the same instant. Orange and green dots mark the first and second grasps. The rounded hook outside the neckline and both tips rotating inside the shirt are visible together.Five position actuators in MuJoCo Warp drive the hanger’s three translation and two rotation axes. Newton Style3D receives its actual joint positions to simulate the cloth. The first frame with both hands released is at 8.97 seconds. From there, shoulder contact alone supports the garment, and the sleeves and hem follow the hanger’s side-to-side motion. In this configuration, cloth reaction forces on the hanger are not fed back to MuJoCo.
How the hem and folds differ between VBD and Style3D
Both solvers received the same unisex shirt’s initial 3,033 vertices and 5,938 triangles. We let the already-hung shirt settle for 3 seconds, shook the hanger laterally for 2 seconds, then stopped for 1 second. The drive was a 1 Hz sine wave with a maximum amplitude coefficient of 5 cm, multiplied by a smooth start-and-stop envelope. Neither simulation used grasp constraints during this 6-second experiment.
| Measurement on the same shirt | VBD | Style3D |
|---|---|---|
| Front-to-back gap at hem center, at 3 s | 5.76 cm | 13.21 cm |
| Vertical / horizontal fine-fold RMS on torso, at 3 s | 0.093 / 0.560 mm | 0.116 / 0.553 mm |
| Peak broad horizontal-fold RMS on torso during shaking | 13.20 mm | 7.09 mm |
| Maximum lateral cuff-center displacement during shaking | 4.57 cm | 4.45 cm |
| Lateral range of hem center in final 0.5 s after stopping | 2.62 mm | 1.03 mm |
Sleeve displacement differed by 0.12 cm during shaking, but the stationary hem gap differed by 7.45 cm. With these VBD settings, the hem was flatter and broad torso folds were deeper during shaking. To measure fine folds, we tracked the same material points on the front and back panels, measured midpoint depth over a 4 cm span, and subtracted the gentle-curvature component over 12 cm. Broad folds were measured directly over 12 cm. These values were not fitted to footage of real garments, so this experiment alone cannot determine which is closer to reality.
Shared conditions and solver-specific inputs
The comparison used Newton 1.7.0 and Warp 1.18.0. Both used Z-up coordinates, gravity 9.81 m/s², areal density 0.10 kg/m², particle radius 8 mm, and timestep 1/600 s. Hanger poses updated at 120 Hz, with rigid contact computed every substep. Rigid-shape friction input was 0.02; cloth–rigid contact inputs (ke, kd, mu) were (10000, 0.01, 0.3), with an 8 mm search gap. Both used the same per-vertex quadratic velocity drag coefficient of 0.0005.
| Implementation | Newton VBD | Newton Style3D |
|---|---|---|
| Deformation solve | Vertices within a color group update in parallel; groups update sequentially. 8 iterations per substep. | Projective Dynamics updates material-constraint targets and solves whole-cloth displacement using PCG. 4 outer iterations; inner linear iteration setting: 10. |
| Membrane and bending | Neo-Hookean membrane inputs tri_ke=tri_ka=500; adjacent-triangle bending edge_ke=0.0625. Rest dihedral angle: zero. Triangle and edge damping inputs: 0.001 each. | Weft, warp, and shear stiffness (100,100,10); directional bending (2e-5,1e-5,5e-6). With no real cutting coordinates for the unisex shirt, material axes came from projecting the vertical axis onto triangle tangent planes. |
| Contact and application | Self-contact enabled; search margin 6 mm, gap 3 mm. Can handle rigid and deformable bodies together; the hanger was externally driven in this comparison. | Style3D internal cloth self-contact and Newton’s rigid collision pipeline. Chosen for the official-garment insertion experiments because it preserves pattern-piece grain directions and areas. |
The table compares the two configurations we ran. VBD’s dihedral reference and Style3D’s material coordinates differ, and their stiffness coefficients enter different energy expressions. The full hem-gap difference therefore cannot be attributed to the iteration algorithm alone. Newton VBD documentation · Official Newton 1.7.0 Style3D example
The VBD comparison settings are listed above. See the official Newton VBD documentation for public API usage.
Cutting patterns and fabric settings of the official garments
The official USD files contain both sewn 3D triangles and flat 2D cutting triangles. A single 3D vertex joined at a seam can correspond to separate corners on multiple pattern pieces. UV indices for all three corners of each triangle must therefore be read separately. In the official files, 3D lengths are in meters and primvars:st pattern coordinates are in millimeters. Multiply only pattern coordinates by 0.001. Style3D USD format
The following is pseudocode illustrating how to read cutting coordinates through Newton’s public API. garment_prim is the garment prim selected from an official garment USD opened with OpenUSD. Opening the file and selecting the prim are omitted input-preparation steps. The API and unit conversion follow the official Newton 1.7.0 Style3D example.
import newton.usd
mesh, pattern_indices = newton.usd.get_mesh(
garment_prim,
load_uvs=True,
preserve_facevarying_uvs=True,
return_uv_indices=True,
)
pattern_vertices_m = mesh.uvs * 0.001
The short-sleeved shirt has 45,167 vertices and 89,912 triangles; the sweatshirt has 24,510 vertices and 48,824 triangles. Both use the original resolution. The function received areal density 0.30 kg/m² and particle radius 5 mm. The T-shirt’s pattern area is 0.6154 m², giving about 185 g at that density. Particle radius is a collision length scale, treated separately from actual fabric thickness. Both women’s garments used the same official T-shirt example’s fabric values, so observed differences in the sweatshirt include sleeve length and cutting geometry. Official Newton 1.7.0 fabric settings
The loaded 3D vertices and faces, pattern vertices in meters, and pattern indices are passed to the public newton.solvers.style3d.add_cloth_mesh API. The versioned example above shows the order for registering Style3D attributes on the builder and the complete call signature.
Letting the neckline move when the grasp changes

- Lift the first shoulder 16 cm. Grasp a small shoulder region connected to the neckline. Only vertices held by the virtual hand are moved to prescribed positions each step; the rest respond to gravity and contact.
- Insert a hanger tip through the neckline. Tilt the hanger 0.62 rad and push the first pad toward the held-side sleeve. Directly prescribing the hanger center makes its tip follow an arc during rotation. Subtracting the rotated offset from the target pad position keeps the inserted tip where intended during rotation.
- Grasp the opposite sleeve at its current position. At about 3.23 seconds, we confirmed that only the first tip was inside. When the second hand closes, save the deformed vertex positions as a new reference, then pull the sleeve sideways. The first hand retains only a few outer points so the neckline can slide along the other tip.
- Level the hanger and release both hands. Keep the hook above the neckline, pass the opposite tip through, and center the hanger. After releasing both grasps, alternate lateral hanger targets up to ±3 cm, then stop.
As a standard rigid coordinate transformation, this is expressed below. This explanatory pseudocode uses only NumPy. rotation is a 3×3 local-to-world rotation matrix, local_tip is the pad position in local coordinates, and target_tip is its desired world position. NumPy matrix multiplication
import numpy as np
center = np.asarray(target_tip) - np.asarray(rotation) @ np.asarray(local_tip)
| Garment-specific setting | Unisex T-shirt | Official women’s T-shirt |
|---|---|---|
| First-shoulder grasp vertices → retained outer vertices | 67 → 16 | 55 → 17, initially spaced at least 14 mm apart |
| Opposite-sleeve grasp center / vertex count | (−.145, .060, 1.055) / 16 | (−.147, .058, 1.079) / 14, spaced at least 12 mm apart |
| First tip’s neckline entry target | (.042, .032, 1.056) | (.037, .033, 1.056) |
| Deep target inside the held shoulder | (.142, .039, .915) | (.135, .046, .934) |
| Opposite-sleeve pull target | (−.249, .034, 1.100) | (−.230, .037, 1.104) |
Coordinates are (lateral X, depth Y, height Z) after garment orientation and position alignment, in meters. Initial placement translation and the 16 cm lift displacement are added to insertion and pulling targets to obtain world coordinates. The official T-shirt was first rotated 180° about Z to align its orientation. Other garments require locating the neckline boundary and both shoulders to redefine these coordinates. Fixing every vertex in the same region would capture hundreds of points on a high-resolution shirt, leaving no room for the neckline to bend.
Shoulder-pad penetration and hook checks
The hanger collider combines a wire mesh and nine spherical pads on each side. Pad radius is 24 mm; the outermost pad center on each arm is 20.5 cm from the center. The women’s-garment experiments retained fabric values and used cloth–rigid contact inputs ke=500, kd=1e-5, mu=0.2. Shape margins were 6 mm for the wire and 2 mm for pads. Each 1/600-second step follows drive, contact update, then cloth simulation.

Each substep updates state in this order:
- Compute rigid actuation and obtain the actual hanger pose.
- Feed that pose into cloth contact computation and apply active grasp targets.
- Find collision candidates at the current state, then compute the next cloth state.
- Swap current and next state roles for the following computation.
It matters that the cloth receives the actual pose computed by the rigid solver, rather than the target command. Virtual grasps prescribe active-group vertex positions. Evaluating finger friction, required grip force, or robot joint torque requires modeling a real gripper and transferring reaction forces.
What measurements establish that the garment is hanging?
We separately checked wire–cloth triangle intersections, the shortest pad-center–cloth-triangle distance minus pad radius, and inside/outside classification with temporary caps over the neckline, both sleeves, and hem. These caps are only measurement tools. We tested whether the rounded hook’s 526 triangles crossed the caps and recorded the winding number at a hook reference point. Outside, the winding number should be near zero. End pads should be inside the garment and the hook outside.
| Women’s T-shirt insertion assessment | Recorded result |
|---|---|
| Both hanger tips, 0 s → 3.23 s | Both outside → only the first inserted tip inside |
| Wire–cloth / rounded-hook–opening intersections over 7,320 substeps | 0 / 0; maximum |hook winding number| below 1.08×10⁻⁶ |
| Minimum pad-surface–cloth-midsurface gap | +6.55 mm |
| All four representative left/right pad centers inside after release | 98 / 98 frames; final garment lowest point 10.73 cm above table |
The minimum gap is a geometric measurement that includes collision clearance. It cannot determine each pad’s normal load. Intersection checks were performed at substep endpoints, so they do not prove continuous collision freedom between those instants.
Shaking the official women’s sweatshirt
Women_Sweatshirt.usd: gravity settling at 0–3 s, lateral drive at 3–5 s, and decay after stopping at 5–6 s. The long free-hanging sleeves and folds above the ribbed hem are visible. Official sweatshirt assetThis experiment began with both shoulders already on the hanger. The support was the same hanger as for the T-shirt, with no grasp vertices throughout. We kept the sweatshirt’s original length, mapped USD coordinates to world axes as (x, −z, y), and translated it by (0, 0.043, −0.373) m. An initial placement had 7.47 mm pad penetration into the cloth and was adjusted. The selected placement had an initial minimum gap of +6.29 mm.
With a 3 cm amplitude coefficient at 1 Hz, the hanger actually moved about 2.60 cm to each side. Relative to the post-settling pose, the center of the +X cuff vertex group moved up to 3.31 cm; its lateral range over the final 0.5 seconds was 1.45 mm. Across the initial state and 3,600 substeps, the minimum pad gap was +6.28 mm, with zero wire–cloth and rounded-hook–opening intersections. All four representative pad centers were inside in every one of 181 saved frames. For the long-sleeved garment, the validated interval covers settling and shaking after placement.
Starting from public examples
The experiments used Python 3.12 on a CUDA device, Newton 1.7.0, Warp 1.18.0, and MuJoCo and MuJoCo Warp 3.15.0. Public-library configuration and original garments are documented here:
- Official Newton 1.7.0 Style3D example: reading garment 3D meshes and cutting coordinates, and configuring cloth models and contact.
- Official garments and USD format: women’s T-shirt and sweatshirt assets and cutting-data documentation.
- Newton VBD documentation: solver scope and public APIs.
First inspect garment loading and fabric settings in the official example, then separately construct the hanger geometry, actuation, grasp targets, and validation procedure using the conditions above. This article describes saved experimental results and settings; it does not provide the videos’ complete execution code or local modules.