"import_rotation fixes the render mesh and leaves PhysicsHullFile collision unrotated"
▸ 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:
- Bake a corrected copy of the mesh in the engine frame, with the rotation applied to the vertices.
- Point the render node at the baked copy.
- Point the
PhysicsShapeList/PhysicsHullFilenode at the same baked copy. - Remove the
import_rotationcorrection, 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.
- Published.