Integrate the Blender character, gear and prop library
NpcAvatar - select one of 8 library character variants by role/seed (with npc_base and the procedural rig as fallbacks), keep Rig/Head and the existing bone animation - tint only skin/cloth/pants/accessory/hair; fixed detail materials keep their colour, npc_vest keeps its hi-vis vest, firefighter/guard use dark uniform tints - attach caps, hoods, helmets, backpacks, SCBA tanks, lanyards and hand items at the documented head/back/chest/hand points (primitive fallbacks retained) WorldBuilder - prefer assets/models/blender/props/ for the six replacements and the new street dressing (street lamp/tree, palms, planters, A-frame, cone, barrier, stanchion, podium, handrail, wall lantern, double door, marquee, sedan) - fit the same colliders/navigation obstacles and keep the placement validator; collect library emissives (bulbs, marquee face, wall lanterns, door LED, sedan lights) for set_night_mode() - add a library triangle counter + 60k budget check (current ~27,986); toggle prop gallery to the library models; fix the marquee label placement Tests/smoke - character selection/gear attach/fixed-material tint tests; library prop load, emissive and triangle-budget tests; smoke_props routes a guest around a stanchion in open sidewalk (the old bench route is now crowded by trees) - headless 222/222, Python 68/68, all smokes pass, compare 11 good / 0 bad Docs: TODO Phase 3.5 moved to DONE, README/architecture/blender-assets/plan describe the integrated runtime, MEMORY records the integration rules.
This commit is contained in:
1 parent
d513e0b82c
commit
d8cfddbf89
23 files changed
+531
-165
No files matched your search
@@ -7,6 +7,7 @@ extends SceneTree
|
||||
|
||||
const OUT_DIR := "user://screenshots"
|
||||
const MODEL_DIR := "res://assets/models/generated/"
|
||||
const LIBRARY_DIR := "res://assets/models/blender/props/"
|
||||
const PROPS := ["bollard", "bench", "trash_bin", "planter_box",
|
||||
"newspaper_box", "fire_hydrant"]
|
||||
const SPACING := 1.9
|
||||
@@ -74,7 +75,10 @@ func _build_stage() -> void:
|
||||
var columns := [-1.95, 0.0, 1.95]
|
||||
for index in PROPS.size():
|
||||
var prop_name: String = PROPS[index]
|
||||
var packed := ResourceLoader.load(MODEL_DIR + prop_name + ".glb") as PackedScene
|
||||
var path := LIBRARY_DIR + prop_name + ".glb"
|
||||
if not ResourceLoader.exists(path):
|
||||
path = MODEL_DIR + prop_name + ".glb"
|
||||
var packed := ResourceLoader.load(path) as PackedScene
|
||||
if packed == null:
|
||||
continue
|
||||
var model := packed.instantiate() as Node3D
|
||||
|
||||
Reference in new issue
Block a user