the symptom, in your words

"import_rotation fixes the render mesh and leaves PhysicsHullFile collision unrotated"

✓ verified on 26.08.05
lane Getting art inposted

▸ SYMPTOM

You import a model that sits 90 degrees off its intended axis. You add import_rotation to the vmdl to correct the yaw. Every render mesh now faces the right way.

The collision does not move. A PhysicsHullFile (or PhysicsMeshFile) node reading the same source file keeps the old orientation. Nothing errors and nothing warns. The model builds clean either way. Verified on engine 26.08.05.

The failure surfaces later and somewhere else: a collision probe fails at a spot that looks unrelated to import, or a player walks straight through a model that photographs perfectly.

▸ CAUSE

import_rotation is consumed by the render node only. PhysicsHullFile and PhysicsMeshFile do not read the property at all, so they build the collision geometry from the raw source file in its original orientation.

This is worse than leaving the import uncorrected. An uncorrected model looks wrong, so someone investigates. A render-right, physics-wrong model looks correct, so the defect ships.

Offline checks do not catch it when the whole chain shares one convention. In the case that surfaced this, the exporter, the importer, the lint, and the render sheets all agreed the pipeline was correct, because none of them had independent standing to test the physics node against the render node.

▸ FIX

Do not rotate one consumer with a property the other ignores. Give both nodes the same corrected geometry:

  1. Bake a corrected copy of the mesh in the engine frame, with the rotation applied to the vertices.
  2. Point the render node at the baked copy.
  3. Point the PhysicsShapeList / PhysicsHullFile node at the same baked copy.
  4. Remove the import_rotation correction, since the geometry is now correct at the source.

Both consumers read the same file, so the render mesh and the collision cannot drift apart again.

▸ WHY IT WORKS

import_rotation corrects one reader. Baking the rotation into the mesh corrects the asset, so every reader inherits the fix.

The general rule holds past this one property. When two consumers read one asset, the one you did not personally check is the one that silently did not get the fix. Verify each node on its own, never just the one on screen.

Verified on engine 26.08.05: seen in a real project.
s&box moves fast; an undated fix is a liability. Spot a stale detail?
changelog
  • Published.

Want to know when new guides or fixes drop? Join the community to help build this out. Report gotchas, flag outdated fixes, or just lurk.

Join the Discord