test(M00): add camera pose sweep
This commit is contained in:
@@ -24,6 +24,9 @@ func _capture_async() -> void:
|
||||
var revision := _arg(args, "--revision", "worktree")
|
||||
var cache_state := _arg(args, "--cache-state", "existing")
|
||||
var camera_fov_override := float(_arg(args, "--camera-fov", str(manifest.get("camera_fov", 62.0))))
|
||||
var camera_yaw_offset_degrees := float(_arg(args, "--camera-yaw-offset", "0.0"))
|
||||
var camera_pitch_offset_degrees := float(_arg(args, "--camera-pitch-offset", "0.0"))
|
||||
var single_pass := args.has("--single-pass")
|
||||
var headless := DisplayServer.get_name().to_lower() == "headless"
|
||||
var dry_run := args.has("--dry-run") or headless
|
||||
var viewport: Array = manifest.get("viewport", [1280, 900])
|
||||
@@ -86,6 +89,8 @@ func _capture_async() -> void:
|
||||
"dry_run": dry_run,
|
||||
"cache_state": cache_state,
|
||||
"camera_fov": camera_fov_override,
|
||||
"camera_yaw_offset_degrees": camera_yaw_offset_degrees,
|
||||
"camera_pitch_offset_degrees": camera_pitch_offset_degrees,
|
||||
"environment": _environment_metadata(),
|
||||
"comparison_budgets": manifest.get("comparison_budgets", {}),
|
||||
"cache_contract": manifest.get("cache_contract", {}),
|
||||
@@ -94,6 +99,8 @@ func _capture_async() -> void:
|
||||
}
|
||||
var captured := 0
|
||||
var passes := ["cold_process", "warm_revisit"]
|
||||
if single_pass:
|
||||
passes = ["cold_process"]
|
||||
if dry_run:
|
||||
passes = ["dry_run"]
|
||||
|
||||
@@ -114,6 +121,7 @@ func _capture_async() -> void:
|
||||
|
||||
camera.global_position = _vector3(checkpoint.get("camera", [0.0, 0.0, 0.0]))
|
||||
_orient_camera_without_roll(camera, _vector3(checkpoint.get("target", [0.0, 0.0, 0.0])))
|
||||
_apply_camera_pose_offsets(camera, camera_yaw_offset_degrees, camera_pitch_offset_degrees)
|
||||
camera.make_current()
|
||||
if player != null:
|
||||
player.global_position = _vector3(checkpoint.get("player", checkpoint.get("target", [0.0, 0.0, 0.0])))
|
||||
@@ -122,11 +130,13 @@ func _capture_async() -> void:
|
||||
world.call("_refresh_streaming_targets_at", camera.global_position, true)
|
||||
|
||||
if dry_run:
|
||||
print("RENDER_CHECKPOINT dry_run name=%s coverage=%s camera=%s target=%s time=%.2f" % [
|
||||
print("RENDER_CHECKPOINT dry_run name=%s coverage=%s camera=%s target=%s yaw_offset=%.2f pitch_offset=%.2f time=%.2f" % [
|
||||
checkpoint_name,
|
||||
str(checkpoint.get("coverage", [])),
|
||||
camera.global_position,
|
||||
_vector3(checkpoint.get("target", [0.0, 0.0, 0.0])),
|
||||
camera_yaw_offset_degrees,
|
||||
camera_pitch_offset_degrees,
|
||||
float(checkpoint.get("time_hours", 13.0)),
|
||||
])
|
||||
(report["results"] as Array).append(_result_record(checkpoint, pass_name, 0.0, {}, ""))
|
||||
@@ -215,6 +225,11 @@ func _orient_camera_without_roll(camera: Camera3D, target_position: Vector3) ->
|
||||
camera.global_basis = Basis(right, corrected_up, -forward)
|
||||
|
||||
|
||||
func _apply_camera_pose_offsets(camera: Camera3D, yaw_offset_degrees: float, pitch_offset_degrees: float) -> void:
|
||||
camera.global_rotate(Vector3.UP, deg_to_rad(yaw_offset_degrees))
|
||||
camera.rotate_object_local(Vector3.RIGHT, deg_to_rad(pitch_offset_degrees))
|
||||
|
||||
|
||||
func _result_record(checkpoint: Dictionary, pass_name: String, load_time_ms: float, metrics: Dictionary, sha256: String) -> Dictionary:
|
||||
return {
|
||||
"name": checkpoint.get("name", "checkpoint"),
|
||||
|
||||
Reference in New Issue
Block a user