chore: checkpoint web Blender migration source, tools and docs
Some checks failed
M6 deployable RC / quick (push) Has been cancelled
M6 deployable RC / chromium (push) Has been cancelled
M6 deployable RC / release (push) Has been cancelled

Accumulated uncommitted work: GHOST Web backend, WebGL/GPU web layer,
web workflow engine and protocol, tooling, docs and task records.
Large generated evidence, user-testing archives, build snapshots and
imported test assets remain untracked.

Co-Authored-By: Claude Code <noreply@anthropic.com>
This commit is contained in:
mes123456
2026-11-10 11:18:01 +08:00
parent 122142c26c
commit f3e21c6b98
6887 changed files with 257154 additions and 12294 deletions

View File

@@ -284,6 +284,8 @@ def bake_action_iter(
*,
action,
bake_options,
pose_bone_names=None,
depsgraph=None,
):
"""
A coroutine that bakes action for a single object.
@@ -295,6 +297,8 @@ def bake_action_iter(
:type action: :class:`bpy.types.Action` | None
:param bake_options: Options for baking.
:type bake_options: :class:`anim_utils.BakeOptions`
:param pose_bone_names: Optional explicit pose channel subset, independent of selection.
:param depsgraph: Optional caller's evaluated dependency graph for visual sampling.
:return: an action or None
:rtype: :class:`bpy.types.Action` | None
"""
@@ -384,11 +388,15 @@ def bake_action_iter(
# itself cannot be animated.
continue
bone_names = None if pose_bone_names is None else frozenset(pose_bone_names)
def pose_frame_info(obj):
matrix = {}
bbones = {}
custom_props = {}
for name, pbone in obj.pose.bones.items():
if bone_names is not None and name not in bone_names:
continue
if bake_options.do_visual_keying:
# Get the final transform of the bone in its own local space...
matrix[name] = obj.convert_space(
@@ -461,7 +469,8 @@ def bake_action_iter(
if frame is None:
break
if bake_options.do_pose:
pose_info.append((frame, *pose_frame_info(obj)))
sample_obj = obj.evaluated_get(depsgraph) if depsgraph is not None else obj
pose_info.append((frame, *pose_frame_info(sample_obj)))
armature_info.append((frame, armature_frame_info(obj)))
if bake_options.do_object:
obj_info.append((frame, *obj_frame_info(obj)))
@@ -521,6 +530,8 @@ def bake_action_iter(
)
for name, pbone in obj.pose.bones.items():
if bone_names is not None and name not in bone_names:
continue
if bake_options.only_selected and not pbone.select:
continue