During an RMB path-follow the body yaw locks to the leg direction (rig commit_body_to_motion, from interpolated velocity — immune to SetFacing interleaving between throttled steps). The mouse instead drives a layered look-at: LookAtModifier3D pair on Head (±70°) + spine_02 (±30° torso twist for looking far lateral/behind — past their sum the character physically cannot look further without turning). Forward axis measured from the armature rest pose (+Z), not guessed. Influence fades in/out on follow start/end. Pure client presentation per D-249; SetFacing still rides the wire, so the server vision cone follows the mouse while walking — the character looks where the player points. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
21 lines
759 B
Python
21 lines
759 B
Python
"""Dump rest-pose local matrices for look-at target bones in armature.glb."""
|
|
import sys
|
|
|
|
import bpy
|
|
|
|
glb = sys.argv[sys.argv.index("--") + 1]
|
|
bpy.ops.wm.read_factory_settings(use_empty=True)
|
|
bpy.ops.import_scene.gltf(filepath=glb)
|
|
for obj in bpy.data.objects:
|
|
if obj.type == "ARMATURE":
|
|
for name in ("Head", "neck_01", "spine_02", "spine_03"):
|
|
b = obj.data.bones.get(name)
|
|
if b is None:
|
|
print(name, "MISSING")
|
|
continue
|
|
# matrix_local: bone rest transform in armature space.
|
|
m = b.matrix_local
|
|
print(name, "head:", [round(v, 3) for v in b.head_local])
|
|
for row in range(3):
|
|
print(" ", [round(m[row][c], 3) for c in range(4)])
|