diff --git a/tools/blender/asset_report.json b/tools/blender/asset_report.json index e9fe59f..55e6812 100644 --- a/tools/blender/asset_report.json +++ b/tools/blender/asset_report.json @@ -1,6 +1,190 @@ { "blender": "5.1.2", "assets": [ + { + "name": "ref_capsule", + "dims": [ + 0.4, + 0.4, + 1.7 + ], + "tris": 220, + "nodes": [ + "head_height", + "ref_capsule", + "ref_capsule_mesh" + ], + "status": "PASS", + "problems": [] + }, + { + "name": "tree_gum_01", + "dims": [ + 4.5522, + 4.956, + 7.9702 + ], + "tris": 396, + "nodes": [ + "branch_anchor_01", + "branch_anchor_02", + "branch_anchor_03", + "canopy", + "canopy_01", + "canopy_02", + "canopy_03", + "tree_gum_01", + "trunk" + ], + "status": "PASS", + "problems": [] + }, + { + "name": "tree_gum_02", + "dims": [ + 3.8871, + 2.7787, + 5.4972 + ], + "tris": 288, + "nodes": [ + "branch_anchor_01", + "branch_anchor_02", + "canopy", + "canopy_01", + "canopy_02", + "tree_gum_02", + "trunk" + ], + "status": "PASS", + "problems": [] + }, + { + "name": "fence_post", + "dims": [ + 0.13, + 0.13, + 2.03 + ], + "tris": 24, + "nodes": [ + "fence_post", + "post" + ], + "status": "PASS", + "problems": [] + }, + { + "name": "fence_panel", + "dims": [ + 2.4, + 0.054, + 1.8194 + ], + "tris": 324, + "nodes": [ + "fence_panel", + "palings", + "rails" + ], + "status": "PASS", + "problems": [] + }, + { + "name": "gate", + "dims": [ + 1.045, + 0.0615, + 1.75 + ], + "tris": 220, + "nodes": [ + "gate", + "gate_frame", + "gate_palings", + "hinge_axis", + "hinges" + ], + "status": "PASS", + "problems": [] + }, + { + "name": "house_yardside", + "dims": [ + 9.2, + 1.0547, + 2.9 + ], + "tris": 200, + "nodes": [ + "door", + "fascia", + "fascia_anchor_01", + "fascia_anchor_02", + "fascia_anchor_03", + "gutter", + "house_yardside", + "roof", + "wall", + "window" + ], + "status": "PASS", + "problems": [] + }, + { + "name": "shed_01", + "dims": [ + 2.58, + 1.9708, + 2.2224 + ], + "tris": 96, + "nodes": [ + "door_anchor", + "doors", + "roof", + "shed_01", + "shell" + ], + "status": "PASS", + "problems": [] + }, + { + "name": "shed_table", + "dims": [ + 1.6, + 0.6, + 0.9 + ], + "tris": 72, + "nodes": [ + "pickup_anchor", + "shed_table", + "table_frame", + "table_top" + ], + "status": "PASS", + "problems": [] + }, + { + "name": "garden_bed", + "dims": [ + 3.0, + 1.2, + 0.8609 + ], + "tris": 2580, + "nodes": [ + "bed", + "garden_bed", + "plants_dead", + "plants_full", + "plants_tattered", + "soil" + ], + "status": "PASS", + "problems": [] + }, { "name": "sail_post", "dims": [ @@ -19,7 +203,178 @@ ], "status": "PASS", "problems": [] + }, + { + "name": "ladder_01", + "dims": [ + 0.455, + 0.075, + 3.0 + ], + "tris": 276, + "nodes": [ + "ladder", + "ladder_01", + "ladder_base", + "ladder_top" + ], + "status": "PASS", + "problems": [] + }, + { + "name": "shackle", + "dims": [ + 0.0569, + 0.019, + 0.0744 + ], + "tris": 560, + "nodes": [ + "bow", + "pin", + "shackle" + ], + "status": "PASS", + "problems": [] + }, + { + "name": "carabiner", + "dims": [ + 0.049, + 0.009, + 0.1027 + ], + "tris": 476, + "nodes": [ + "body", + "carabiner", + "gate" + ], + "status": "PASS", + "problems": [] + }, + { + "name": "turnbuckle", + "dims": [ + 0.0292, + 0.0341, + 0.1955 + ], + "tris": 728, + "nodes": [ + "body", + "eye_a", + "eye_b", + "turnbuckle" + ], + "status": "PASS", + "problems": [] + }, + { + "name": "tramp_01", + "dims": [ + 2.9555, + 2.9555, + 0.78 + ], + "tris": 976, + "nodes": [ + "legs", + "mat", + "pad", + "rim", + "tramp_01" + ], + "status": "PASS", + "problems": [] + }, + { + "name": "wheelie_bin_01", + "dims": [ + 0.58, + 0.6808, + 1.1188 + ], + "tris": 120, + "nodes": [ + "bin_body", + "lid", + "lid_plate", + "wheelie_bin_01", + "wheels" + ], + "status": "PASS", + "problems": [] + }, + { + "name": "washing_line_01", + "dims": [ + 2.8441, + 2.8441, + 2.2777 + ], + "tris": 336, + "nodes": [ + "arms", + "head", + "mast", + "washing_line_01" + ], + "status": "PASS", + "problems": [] + }, + { + "name": "garden_gnome_01", + "dims": [ + 0.1427, + 0.15, + 0.365 + ], + "tris": 236, + "nodes": [ + "garden_gnome_01", + "gnome" + ], + "status": "PASS", + "problems": [] } ], - "debris": [] + "debris": [ + { + "file": "BlueCrate_v2.glb", + "dims": [ + 0.36, + 0.36, + 0.29 + ], + "sane": true + }, + { + "file": "BlackTub_v2.glb", + "dims": [ + 0.36, + 0.54, + 0.2 + ], + "sane": true + }, + { + "file": "WhiteTub_v2.glb", + "dims": [ + 0.36, + 0.54, + 0.2 + ], + "sane": true + }, + { + "file": "WoodenBin_v2.glb", + "dims": [ + 0.35, + 0.36, + 0.31 + ], + "sane": true + } + ] } \ No newline at end of file diff --git a/tools/blender/build_yard_assets.py b/tools/blender/build_yard_assets.py index d6662a2..2af820e 100644 --- a/tools/blender/build_yard_assets.py +++ b/tools/blender/build_yard_assets.py @@ -1626,7 +1626,12 @@ def make_contact_sheet(thumbs): cols = 4 rows = (len(tiles) + cols - 1) // cols th, tw = tiles[0].shape[0], tiles[0].shape[1] - sheet = np.zeros((rows * th, cols * tw, 4), dtype=np.float32) + # Prefill with the render background, sampled from a tile's corner rather + # than guessed — the PNG is sRGB-encoded and the scene colour is linear, so + # reusing the world constant here would not match. Otherwise the unused + # slots in a partly-filled last row read as black holes. + sheet = np.empty((rows * th, cols * tw, 4), dtype=np.float32) + sheet[:, :] = tiles[0][0, 0] sheet[:, :, 3] = 1.0 for i, tile in enumerate(tiles): r, c = i // cols, i % cols diff --git a/tools/blender/contact_sheet.png b/tools/blender/contact_sheet.png index 127a6bf..70152e0 100644 Binary files a/tools/blender/contact_sheet.png and b/tools/blender/contact_sheet.png differ