frontage: south block frontage, plus the placement bug it exposed

Adds the five remaining verified south-side buildings to the demo block
(6922, 6902, 6838 El Capitan Theatre, 6822 Budget, 6806-6820, 6800 Lee Drug)
exported in place from the OSM blockout and staged by the demo builder.

Adding neighbours exposed a pre-existing placement bug that could not be seen
while the hero stood alone:

- UE south is +Y (south sidewalk Y +718..+1447), but the hero facade sat at
  Y -1450 on the NORTH side and at X -12024..-9420, which is 26 m east of the
  6840 footprint (the frontage gap is X -14591..-12082).
- The two north-side buildings were on the SOUTH side, because their exporter
  mirrored Y.

Fixes: hero moved to X -13336 / Y +1307, inside its frontage gap; frontage and
north buildings export without a Y mirror (the FBX preset already lands
Blender -Y south on UE +Y south); player start and demo cameras moved to the
north sidewalk looking south; sun raised to pitch -62 so both frontages read
instead of the north side going to silhouette.

Screenshots re-rendered; the four demo views are marked needs-review because
the whole block changed.
This commit is contained in:
zwitschi committed 2026-11-08 09:13:57 +01:00
1 parent 01ccc61842
commit 8ca403fd08
41 files changed
+330 -82

No files matched your search

+6 -21
View File
@@ -40,27 +40,11 @@ def main():
mat.use_nodes = False
mesh.materials.append(mat)
# The blockout sits with the hero (6840, south side) at negative Y. The two
# in-scope north buildings must land ACROSS Hollywood Blvd at positive Y in
# Unreal. Mirror the exported geometry across the road centreline (Y=0) and
# reverse winding; the FBX exporter does not do this for us.
new_mesh = mesh.copy()
new_obj = obj.copy()
new_obj.data = new_mesh
new_obj.matrix_world = obj.matrix_world.copy()
bpy.context.collection.objects.link(new_obj)
import mathutils as mu
world = new_obj.matrix_world
inv = world.inverted()
for v in new_mesh.vertices:
wp = world @ v.co
wp.y = -wp.y
v.co = inv @ wp
for poly in new_mesh.polygons:
verts = list(poly.vertices)
verts.reverse()
poly.vertices = verts
new_mesh.update()
# No copy and no Y mirror: the FBX preset already lands Blender +Y
# (north) on Unreal -Y, and UE north is -Y here (north sidewalk
# Y -1912..-1053). The old mirror put both buildings on the south side.
new_obj = obj
new_mesh = mesh
bpy.ops.object.select_all(action="DESELECT")
new_obj.select_set(True)
bpy.context.view_layer.objects.active = new_obj
@@ -80,6 +64,7 @@ def main():
path_mode="AUTO",
bake_space_transform=False,
)
world = new_obj.matrix_world
zs = [(world @ v.co).z for v in new_mesh.vertices]
print(f"[north] {name:22} verts {len(new_mesh.vertices):5} z {min(zs):+.2f}..{max(zs):+.2f} m "
f"-> {path}")