Ship the Quaternius npc_casual pilot base: rig-agnostic pose sync, five tint slots, unwrapped UVs and wrist-strap camera
This commit is contained in:
1 parent
68f49253fe
commit
cd285b3a39
12 files changed
+242
-74
No files matched your search
@@ -106,7 +106,9 @@ class TexelDensityTests(unittest.TestCase):
|
||||
def test_character_slots_report_density_and_area(self):
|
||||
report = ba.texel_density("npc_casual")
|
||||
self.assertEqual(report["resolution"], 256)
|
||||
self.assertEqual(set(report["slots"]), set(ba.SLOTS) | {"eye_white", "rubber"})
|
||||
# The five tint slots are the contract; rebuilds may add fixed-colour
|
||||
# detail materials (the Quaternius base keeps `Eye` and `Eyebrows`).
|
||||
self.assertLessEqual(set(ba.SLOTS), set(report["slots"]))
|
||||
for slot in ba.SLOTS:
|
||||
row = report["slots"][slot]
|
||||
self.assertGreater(row["triangles"], 0, slot)
|
||||
|
||||
@@ -10,9 +10,19 @@ class NpcProportionTests(unittest.TestCase):
|
||||
self.assertEqual(len({row["character"] for row in rows}), 12)
|
||||
for row in rows:
|
||||
self.assertGreater(row["measurements"]["height"], 1.6)
|
||||
self.assertIn(row["rig"], ("core", "quaternius"))
|
||||
# Both rigs must resolve every measurement; a missing joint would
|
||||
# collapse a ratio to zero.
|
||||
for key, value in row["measurements"].items():
|
||||
self.assertGreater(value, 0.0, f"{row['character']} {key}")
|
||||
|
||||
def test_current_library_stays_inside_the_stylized_guide(self):
|
||||
for row in npc_proportions.report():
|
||||
# ADR-0018: the Quaternius base is accepted at its upstream
|
||||
# (semi-realistic) proportions, so the stylized band does not apply.
|
||||
# The measurement stays in the report for the face/silhouette gate.
|
||||
if row["rig"] != "core":
|
||||
continue
|
||||
for key, check in row["checks"].items():
|
||||
self.assertEqual(check["status"], "ok",
|
||||
f"{row['character']} {key}={check['value']}")
|
||||
|
||||
Reference in new issue
Block a user