Add Ground Zero terrain pipeline and playable assets

This commit is contained in:
2026-05-14 00:09:40 -07:00
parent 46d0e080b5
commit 6d25ff690d
77 changed files with 5770 additions and 84 deletions
+66
View File
@@ -0,0 +1,66 @@
import json
from pathlib import Path
import unreal
MAP_PATH = "/Game/Agrarian/Maps/L_GroundZeroTerrain_Test"
PROJECT_ROOT = Path(r"Z:\AgrarianGameBulid")
TILE_ID = "gz_us_ca_pacifica_utm10n_e544_n4160"
METADATA_PATH = PROJECT_ROOT / "Data" / "Terrain" / "Unreal" / TILE_ID / f"{TILE_ID}_unreal_heightmap_metadata.json"
LANDSCAPE_LABEL = "AGR_GroundZero_Landscape"
def nearly_equal(left, right, tolerance=0.01):
return abs(float(left) - float(right)) <= tolerance
def get_actor_label(actor):
try:
return actor.get_actor_label()
except Exception:
return actor.get_name()
def main():
if not unreal.EditorLevelLibrary.load_level(MAP_PATH):
raise RuntimeError(f"Could not load map: {MAP_PATH}")
with METADATA_PATH.open("r", encoding="utf-8") as metadata_file:
metadata = json.load(metadata_file)
expected = metadata["unreal_landscape_import"]
actors = unreal.EditorLevelLibrary.get_all_level_actors()
landscapes = [actor for actor in actors if get_actor_label(actor) == LANDSCAPE_LABEL]
if len(landscapes) != 1:
raise RuntimeError(f"Expected exactly one {LANDSCAPE_LABEL}, found {len(landscapes)}")
landscape = landscapes[0]
scale = landscape.get_actor_scale3d()
failures = []
if not nearly_equal(scale.x, expected["x_scale_cm"]):
failures.append(f"X scale expected {expected['x_scale_cm']}, got {scale.x}")
if not nearly_equal(scale.y, expected["y_scale_cm"]):
failures.append(f"Y scale expected {expected['y_scale_cm']}, got {scale.y}")
if not nearly_equal(scale.z, expected["z_scale_cm"]):
failures.append(f"Z scale expected {expected['z_scale_cm']}, got {scale.z}")
bounds_origin, bounds_extent = landscape.get_actor_bounds(False)
expected_extent = float(expected["tile_world_size_m"]) * 100.0 * 0.5
if not nearly_equal(bounds_extent.x, expected_extent, tolerance=150.0):
failures.append(f"X extent expected about {expected_extent}, got {bounds_extent.x}")
if not nearly_equal(bounds_extent.y, expected_extent, tolerance=150.0):
failures.append(f"Y extent expected about {expected_extent}, got {bounds_extent.y}")
if abs(bounds_origin.x) > 150.0 or abs(bounds_origin.y) > 150.0:
failures.append(f"Bounds origin expected near XY zero, got {bounds_origin}")
if failures:
raise RuntimeError("Ground Zero terrain verification failed: " + "; ".join(failures))
unreal.log(
"Ground Zero terrain verification complete: "
f"scale={scale}, bounds_origin={bounds_origin}, bounds_extent={bounds_extent}"
)
main()