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 by Tools/export_block_frontage.py,
imported to /Game/Hollywood/Frontage/ and staged by the demo builder with the
look material set (stone for the theatres, stucco for the retail run).

Adding neighbours exposed a pre-existing placement bug that was invisible while
the hero facade stood alone in an empty field:

- UE south is +Y here (south sidewalk Y +718..+1447), but the hero sat at
  Y -1450 on the NORTH side of the street.
- It was also at X -12024..-9420, 26 m east of the 6840 footprint; the frontage
  gap between 6902 and 6838 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; the frontage
and north-building exporters no longer apply 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 silhouetting.

Result: the demo is a street - continuous south frontage with the hero in it,
both sidewalks, the road with the designated crossing, and the north-side
buildings across the road.

Screenshots re-rendered and approved by the owner.

Squash of branch frontage-block-0.1.0 (PR #6).
This commit is contained in:
zwitschi committed 2026-11-08 09:20:11 +01:00
1 parent 62a41bf904
commit fee26ade10
41 files changed
+330 -83

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}")