Lift and scale head gear for the Quaternius head so the cap stops reading as a visor
Full build / Import + headless tests (push) Successful in 43s
Full build / Full desktop build + optional release (push) Skipped

This commit is contained in:
zwitschi committed 2026-11-06 15:00:43 +01:00
1 parent 529d15ee7a
commit a290fe83c8
24 files changed
+96 -44

No files matched your search

+15
View File
@@ -178,6 +178,19 @@ const BLENDER_GEAR_DIR := "res://assets/models/blender/npc_gear/"
const GEAR_OFFSETS := {
"lanyard": Vector3(0, 0, 0.04),
"firefighter_helmet": Vector3(0, 0.03, 0),
# The Quaternius head wears a 0.24 m hair shell that stands ~3.5 cm above the
# cap crown, so the cap sinks into the hair and only its brim shows. Lift the
# cap and hood onto the hair; sunglasses stay at the eye line.
"cap": Vector3(0, 0.05, 0),
"hood": Vector3(0, 0.03, 0),
}
## The hat geometry is authored around the 0.315 m procedural head and scaled to
## 0.64 in the Blender build to match the 0.20 m Quaternius skull. That fits the
## skull but not the 0.228 m hair shell on top of it, so a cap sinks into the hair
## and only its brim shows. These scale the head-gear node instead of the mesh.
const GEAR_SCALE := {
"cap": 1.22,
"hood": 1.12,
}
## Hand gear is authored around the wrist proxy. The palm sits ~4 cm in front
## of that origin, so without this offset the first phone/flashlight versions
@@ -808,6 +821,8 @@ func _attach_gear(gear_name: String) -> bool:
node.position += GEAR_OFFSETS[gear_name]
if str(GEAR_ATTACH[gear_name]) == "hand":
node.position += HAND_ITEM_FORWARD
if GEAR_SCALE.has(gear_name):
node.scale = Vector3.ONE * float(GEAR_SCALE[gear_name])
_detail_nodes.append(node)
var ao := Materials.load_ao(BLENDER_GEAR_DIR + gear_name + "_ao.png")
for child in node.find_children("*", "MeshInstance3D", true, false):