Kazerin 8db64fc90b 驾驶舱修改提交 3 weken geleden
..
README.md 8db64fc90b 驾驶舱修改提交 3 weken geleden
house-2f-foundation.glb 8db64fc90b 驾驶舱修改提交 3 weken geleden
house-2f-lod1.glb 8db64fc90b 驾驶舱修改提交 3 weken geleden
house-2f.glb 8db64fc90b 驾驶舱修改提交 3 weken geleden
house-4f-foundation.glb 8db64fc90b 驾驶舱修改提交 3 weken geleden
house-4f-lod1.glb 8db64fc90b 驾驶舱修改提交 3 weken geleden
house-4f.glb 8db64fc90b 驾驶舱修改提交 3 weken geleden
house-foundation.glb 8db64fc90b 驾驶舱修改提交 3 weken geleden
house-library.blend 8db64fc90b 驾驶舱修改提交 3 weken geleden
house-lod1.glb 8db64fc90b 驾驶舱修改提交 3 weken geleden
house.glb 8db64fc90b 驾驶舱修改提交 3 weken geleden
library.json 8db64fc90b 驾驶舱修改提交 3 weken geleden
midrise-8f-foundation.glb 8db64fc90b 驾驶舱修改提交 3 weken geleden
midrise-8f-lod1.glb 8db64fc90b 驾驶舱修改提交 3 weken geleden
midrise-8f.glb 8db64fc90b 驾驶舱修改提交 3 weken geleden
midrise-foundation.glb 8db64fc90b 驾驶舱修改提交 3 weken geleden
midrise-lod1.glb 8db64fc90b 驾驶舱修改提交 3 weken geleden
midrise-wide-foundation.glb 8db64fc90b 驾驶舱修改提交 3 weken geleden
midrise-wide-lod1.glb 8db64fc90b 驾驶舱修改提交 3 weken geleden
midrise-wide.glb 8db64fc90b 驾驶舱修改提交 3 weken geleden
midrise.glb 8db64fc90b 驾驶舱修改提交 3 weken geleden
preview-house.png 8db64fc90b 驾驶舱修改提交 3 weken geleden
preview-midrise-wide.png 8db64fc90b 驾驶舱修改提交 3 weken geleden
preview-midrise.png 8db64fc90b 驾驶舱修改提交 3 weken geleden
preview-slab.png 8db64fc90b 驾驶舱修改提交 3 weken geleden
preview.png 8db64fc90b 驾驶舱修改提交 3 weken geleden
slab-4f-foundation.glb 8db64fc90b 驾驶舱修改提交 3 weken geleden
slab-4f-lod1.glb 8db64fc90b 驾驶舱修改提交 3 weken geleden
slab-4f.glb 8db64fc90b 驾驶舱修改提交 3 weken geleden
slab-foundation.glb 8db64fc90b 驾驶舱修改提交 3 weken geleden
slab-lod1.glb 8db64fc90b 驾驶舱修改提交 3 weken geleden
slab.glb 8db64fc90b 驾驶舱修改提交 3 weken geleden
verification.json 8db64fc90b 驾驶舱修改提交 3 weken geleden
verify-library.py 8db64fc90b 驾驶舱修改提交 3 weken geleden

README.md

Reusable residential house library — prototype 01

This is an asset library for the captain's district assembly. It is not a whole-city model or surveyed building data. No Cesium, terrain, georeferencing, live config, app server, or old GIS model was modified by this asset task.

Open and link

Open house-library.blend. The active scene is an actual camera preview; the Library_Sources scene contains the reusable assets. library.json is the authoritative manifest for names, dimensions, exact triangle counts, materials, coordinate conversion, source-part collections, and geometry validation.

Link exactly one joined_object (or its LOD1) for each building instance. Every joined object is one mesh at identity transform, with the nominal footprint centred in XY and the building feet at Z=0. The five SRC_* objects per HL_SOURCE_* collection are editable architecture groups: Structure, Windows, Balconies, Roof, and Details. Source collections and LOD1 collections are hidden for a clean opening scene; unhiding them is optional. Do not instance source parts together with the joined object.

Asset ID Nominal body footprint Floors Joined LOD0 object
house 12 × 9 m 3 HL_House_12x9_3F_LOD0
slab 30 × 12 m 6 HL_Slab_30x12_6F_LOD0
midrise 20 × 16 m 10 HL_Midrise_20x16_10F_LOD0
house-2f 12 × 9 m 2 HL_House_12x9_2F_LOD0
house-4f 12 × 9 m 4 HL_House_12x9_4F_LOD0
slab-4f 30 × 12 m 4 HL_Slab_30x12_4F_LOD0
midrise-8f 20 × 16 m 8 HL_Midrise_20x16_8F_LOD0
midrise-wide 28 × 24 m 10 HL_Midrise_28x24_10F_LOD0

Use the matching floor-count variant; do not squash storeys vertically. The wider midrise adds real window bays instead of stretching the smaller midrise. The nominal footprint describes the main wall body; actual bounds include eaves, canopies, and projecting balconies. The manifest records both. Split long roof strips into several suitable modules rather than stretching windows across 50–80 m.

Blender authoring is metres, Z-up, +Y front. GLB uses standard glTF Y-up, −Z front, with (x, y, z) in Blender exported as (x, z, −y). Importing GLB into Blender reverses that conversion automatically; avoid a second axis rotation.

Each optional *-foundation.glb is a separate closed footing from Z=−0.525 m to −0.025 m. It is excluded from the main and LOD1 GLBs. Ordinary instances should sit directly at the selected terrain height; there is no visible podium.

Architecture and materials

The small houses have cream plaster, a terracotta pitched roof, individual recessed windows with frame rings and separate solid panes, doors, canopy brackets, and balconies. Slabs use low grey pitched roofs, stair-window bays, and repeated apartment balconies. Midrises use stepped upper storeys, terrace rails, a membrane roof and a small rooftop plant room, preserving a varied silhouette without a large roof cap.

All materials are shared Blender data blocks with stable names, opaque PBR values, realistic roughness, and backface culling enabled. Exported doubleSided is false (the glTF default may be omitted). Glass is intentionally tinted opaque geometry. There are no textures or external downloads. The system font used for preview labels is packed in the blend.

Meshes contain intersecting, individually closed solids. Shell-level topology validation does not assert a boolean-unioned, intersection-free construction volume or habitable interior. Walls, window wells, frame rings, panes, balcony bars and custom roof prisms are all solid meshes. Foundations are separate.

LOD1 preserves complete walls, roofs, windows, doors and balconies while removing selected roof ribs/courses, alternate pickets, tiny window details, AC units, downpipes and door handles. For the wide tower, tiny window transoms/lintels are already omitted at LOD0 to keep normal-size windows within the triangle budget.

Regenerate and validate

Run from E:\City-Lifeline-Cockpit-TvT in PowerShell:

& 'D:\Steam\steamapps\common\Blender\blender.exe' --background --factory-startup --python-exit-code 1 --python 'tools/city-massing/blender-house-library.py' -- --samples 48
& 'D:\Steam\steamapps\common\Blender\blender.exe' --background 'tools/city-massing/house-library/house-library.blend' --python-exit-code 1 --python 'tools/city-massing/house-library/verify-library.py'

--skip-render is available for geometry iteration. The generator uses seed 20260918 and rejects invalid geometry before declaring completion. --python-exit-code 1 is important because Blender otherwise may exit 0 after a Python exception.

verify-library.py reopens the saved blend, verifies names/transforms/shared materials and every source/runtime shell, decodes the actual GLB buffers, and writes verification.json. It also checks that an in-memory roof with a deleted face and one with an inverted shell are both rejected; neither mutant is saved.

The validator checks manifold edges and vertices, contiguous winding, positive signed volume per connected shell, zero-area faces, degenerate triangles, finite exported positions, valid index bounds, unit normals, normals agreeing with triangle winding, one mesh per GLB, embedded data and matching triangle counts. It does not boolean-union or certify separation of intentionally intersecting solids.

preview.png is a 2520 × 1080 contact sheet of the original three archetypes, rendered through Cycles CPU cameras. preview-house.png, preview-slab.png, preview-midrise.png and preview-midrise-wide.png are the individual renders. Panel scales differ to show architectural details.

Per AGENTS.md, app build/debug verification was skipped. The explicitly requested Blender modeling, rendering and geometry/export validation are the only executable checks used for this task.