Punkt 1 - Ursprung erzwingen (keine Option mehr)
Der Export schrieb die Objekt-Transformation mit ins FBX. Dadurch trug das
25er-Set seine Szenen-Rasterpositionen (bis 20 m) im Asset und die Steine
schwebten im Spiel neben ihrem Platzierungspunkt. Jetzt wandert jedes Objekt
an den Welt-Ursprung, Origin unten-mittig der Bbox. Am REIMPORTIERTEN FBX
gemessen: Bbox-Mitte 0.000/0.000, min.Z 0.000.
Punkt 2 - flache Steine hinlegen
Kuerzeste Bbox-Achse zeigt nach oben. Gedreht wird nur, wenn es etwas bringt:
bei 2.53/1.40/1.54 wuerde Kippen die Form nur willkuerlich drehen.
Punkt 3 - UCX-Kollisionshuellen
Konvexe Huelle als UCX_<Name> im selben FBX, Budget einstellbar (Default 32
Verts). Gemessen 29-32 Verts, geschlossen, umschliesst den Stein.
Alles auf temporaeren KOPIEN - die Szene des Users bleibt unveraendert
(Test prueft Namen und Objektzahl vorher/nachher).
Offener Punkt der Spielseite beantwortet: LOD-Gruppen + Vertex-Farben gingen
NICHT. Der LOD-Zweig in make_one_rock sprang komplett am Cavity-Bake vorbei -
gemessen: kein Farbattribut auf einer der vier Stufen, dazu fehlten Origin und
Material. Jetzt wird auf LOD0 gebacken, BEVOR dupliziert wird; das Decimate
interpoliert mit, damit alle Stufen dieselbe Cavity zeigen und der LOD-Wechsel
nicht poppt. Nach Roundtrip: LOD0 40 V R 0.30..1.00, LOD1 21 V, LOD2 11 V,
LOD3 6 V - alle mit Farben.
Vier Fallen, die der Test aufgedeckt hat:
- Blender haengt an Kopien ".001" an; Unreal ordnet UCX ueber den EXAKTEN
Mesh-Namen zu -> Original bekommt fuer die Exportdauer einen Hilfsnamen.
- bmesh.from_mesh bringt die Originalflaechen mit, convex_hull legt seine
Huelle obendrauf -> 16-21 offene Kanten. Nur die PUNKTE einlesen.
- Jede Vereinfachung schneidet Ecken ab, die Huelle wird KLEINER als der Stein
(der Spieler wuerde einsinken). Jetzt exakt so weit aufgeblasen, dass wieder
alles hineinpasst - fuer Kollision ist minimal zu gross unkritisch.
- ob.matrix_world = Identity loescht die Transformation NICHT bei geparenteten
Objekten; bei einer LOD-Gruppe auf (13/-7.5/2.2) landete das Mesh bei MINUS
dieser Position. matrix_basis und matrix_parent_inverse direkt nullen.
Neu: tests/test_export_robust.py misst am reimportierten FBX statt an der
Szene - nur so faellt eine mitgeschriebene Transformation ueberhaupt auf.
15 Tests bestehen.
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>