61 lines
2.3 KiB
Python
61 lines
2.3 KiB
Python
"""Copy HomeCamp v2 prop design images into Doc, audit white corners and add them to the scene manifest."""
|
|
import hashlib
|
|
import json
|
|
from pathlib import Path
|
|
|
|
from PIL import Image
|
|
|
|
ROOT = Path(__file__).resolve().parents[1]
|
|
SRC = Path.home() / ".cursor/projects/d-UD-AI-AIGame/assets"
|
|
DESIGN = ROOT / "Doc/Design/Scene/HomeCamp"
|
|
MANIFEST = DESIGN / "homecamp_scene_manifest.json"
|
|
|
|
# id: (tier, targetTriangles, real size in meters [width, height, depth])
|
|
PROPS = {
|
|
"fence": ("B", 1000, [3.0, 0.9, 0.25]),
|
|
"stall": ("B", 2500, [2.2, 2.4, 1.3]),
|
|
"flowerpots": ("C", 800, [1.2, 0.9, 0.9]),
|
|
"rocks": ("C", 600, [1.6, 0.9, 1.2]),
|
|
"steps": ("B", 1200, [2.5, 1.0, 2.0]),
|
|
"cypress": ("B", 1500, [1.3, 5.0, 1.3]),
|
|
"bush": ("C", 800, [1.2, 0.9, 1.2]),
|
|
}
|
|
|
|
|
|
def sha(path):
|
|
return hashlib.sha256(path.read_bytes()).hexdigest()
|
|
|
|
|
|
def main():
|
|
manifest = json.loads(MANIFEST.read_text(encoding="utf-8"))
|
|
components = {c["id"]: c for c in manifest["components"]}
|
|
audits = {a["id"]: a for a in manifest["designImageAudit"]}
|
|
for pid, (tier, target, size) in PROPS.items():
|
|
out = DESIGN / f"{pid}.png"
|
|
img = Image.open(SRC / f"{pid}.jpg").convert("RGB")
|
|
img.save(out)
|
|
w, h = img.size
|
|
corners = [list(img.getpixel(p)) for p in [(2, 2), (w - 3, 2), (2, h - 3), (w - 3, h - 3)]]
|
|
audits[pid] = {
|
|
"id": pid, "path": out.relative_to(ROOT).as_posix(), "width": w, "height": h,
|
|
"sha256": sha(out), "corners": corners, "imageDecodes": True,
|
|
"whiteCornersPass": all(min(c) >= 245 for c in corners),
|
|
}
|
|
comp = components.get(pid, {"id": pid})
|
|
comp.update({
|
|
"designImage": out.relative_to(ROOT).as_posix(), "tier": tier, "targetTriangles": target,
|
|
"realSizeMeters": size, "highpoly": f"Tools/output/homecamp_3d/{pid}/{pid}.glb",
|
|
"modelStatus": comp.get("modelStatus", "design_ready"),
|
|
})
|
|
components[pid] = comp
|
|
manifest["components"] = list(components.values())
|
|
manifest["designImageAudit"] = list(audits.values())
|
|
MANIFEST.write_text(json.dumps(manifest, ensure_ascii=False, indent=2), encoding="utf-8")
|
|
for pid in PROPS:
|
|
a = audits[pid]
|
|
print(pid, a["width"], a["height"], a["whiteCornersPass"])
|
|
|
|
|
|
if __name__ == "__main__":
|
|
main()
|