402 行
9.3 KiB
JSON
402 行
9.3 KiB
JSON
{
|
|
"schema": 1,
|
|
"date": "2026-10-21",
|
|
"request": "最大瘦脸差异与人物转脸时的变形机制",
|
|
"reference": {
|
|
"plugin_sha256": "6c5d74bc844a5c5f745718b48ea10ec6635d08aa08a5b6dc6e62653980849f8a",
|
|
"arm64_sha256": "f01e8c0b7e2676b2961950b0e48efdd2589af218e4b36de7d39f5d1c76852bfb",
|
|
"metallib_sha256": "4e8c77db8be94ae169337a2e646407f69520b63afb248faa653e0e068237aaae"
|
|
},
|
|
"air_observation": {
|
|
"authority": "static Apple metal-objdump AIR disassembly; not observed shader execution",
|
|
"command": "xcrun metal-objdump --metallib --disassemble-symbols=faceThinFragmentShader <reference default.metallib>",
|
|
"full_output_sha256": "f97705b88f5491057df2117aef457ffca84e11020574cd57742b0670db4484d8",
|
|
"full_output_bytes": 274496,
|
|
"local_output": "build/pose-analysis/face-thin.air.txt",
|
|
"module": "faceThinFragmentShader",
|
|
"module_metallib_offset": "0x5d5e",
|
|
"function": "mssFaceShapePinCoordinate",
|
|
"active_branch": "faceShapeParamsActive selects Shape helper; inactive branch alone selects legacy Thin helper",
|
|
"local_pin_triplets": [
|
|
[
|
|
75,
|
|
74,
|
|
6
|
|
],
|
|
[
|
|
59,
|
|
60,
|
|
13
|
|
],
|
|
[
|
|
74,
|
|
73,
|
|
47
|
|
],
|
|
[
|
|
60,
|
|
61,
|
|
47
|
|
],
|
|
[
|
|
73,
|
|
72,
|
|
47
|
|
],
|
|
[
|
|
61,
|
|
62,
|
|
47
|
|
],
|
|
[
|
|
72,
|
|
71,
|
|
48
|
|
],
|
|
[
|
|
62,
|
|
63,
|
|
48
|
|
],
|
|
[
|
|
71,
|
|
70,
|
|
48
|
|
],
|
|
[
|
|
63,
|
|
64,
|
|
48
|
|
],
|
|
[
|
|
70,
|
|
69,
|
|
49
|
|
],
|
|
[
|
|
64,
|
|
65,
|
|
49
|
|
],
|
|
[
|
|
69,
|
|
68,
|
|
49
|
|
],
|
|
[
|
|
65,
|
|
66,
|
|
49
|
|
],
|
|
[
|
|
68,
|
|
67,
|
|
52
|
|
],
|
|
[
|
|
66,
|
|
67,
|
|
52
|
|
],
|
|
[
|
|
67,
|
|
65,
|
|
47
|
|
]
|
|
],
|
|
"triplet_usage": "first=origin, third=anchor; second unused in thin loop",
|
|
"thin_cpu_scale": 0.025,
|
|
"size_gain": "clamp(280/max(length((P75-P59)*imageSize),2*length((P67-(P74+P60)/2)*imageSize),1),1,2.25)",
|
|
"effective_pin_gain": "clamp(UI thin,0,1) * strengthMultiplier * 0.025 * size_gain",
|
|
"radius": "length(origin-anchor) in normalized image UV",
|
|
"falloff": "clamp(1-length(currentSampleCoordinate-origin)/radius,0,1)",
|
|
"inverse_sample_step": "q = clamp(q-(anchor-origin)*effective_pin_gain*falloff,0,1)",
|
|
"iteration": "17 sequential updates; not 17 independent offsets evaluated at one original coordinate",
|
|
"bounded_negative_findings": [
|
|
"No yaw/roll/pitch input to the checked GPU helpers",
|
|
"No explicit side-view angle gate in the checked thin branch",
|
|
"No explicit eye/nose restore mask in the checked thin branch; each single pin has zero weight at its own anchor"
|
|
],
|
|
"limits": [
|
|
"This is a 2D local landmark deformation, not proof of 3D head pose estimation",
|
|
"Static paths are not a capture of the exact runtime branch used in the supplied screenshots",
|
|
"Other contour controls include fixed horizontal offsets; not all controls share rotation-equivariant behavior"
|
|
]
|
|
},
|
|
"vision_probe": {
|
|
"authority": "Independent public Apple Vision / AVFoundation invocation; no reference app or plug-in executed",
|
|
"script": "scripts/inspect-face-geometry.m",
|
|
"revision": 3,
|
|
"constellation": 76,
|
|
"maximum_dimension": 1280,
|
|
"coordinate_system": "full-image normalized, y up",
|
|
"region_indices": {
|
|
"contour": [
|
|
59,
|
|
60,
|
|
61,
|
|
62,
|
|
63,
|
|
64,
|
|
65,
|
|
66,
|
|
67,
|
|
68,
|
|
69,
|
|
70,
|
|
71,
|
|
72,
|
|
73,
|
|
74,
|
|
75
|
|
],
|
|
"innerLips": [
|
|
42,
|
|
40,
|
|
43,
|
|
45,
|
|
41,
|
|
44
|
|
],
|
|
"leftEye": [
|
|
0,
|
|
4,
|
|
5,
|
|
1,
|
|
3,
|
|
2
|
|
],
|
|
"leftPupil": [
|
|
6
|
|
],
|
|
"nose": [
|
|
47,
|
|
56,
|
|
54,
|
|
53,
|
|
52,
|
|
51,
|
|
50,
|
|
55
|
|
],
|
|
"noseCrest": [
|
|
46,
|
|
47,
|
|
48,
|
|
49,
|
|
58,
|
|
57
|
|
],
|
|
"outerLips": [
|
|
27,
|
|
28,
|
|
29,
|
|
30,
|
|
31,
|
|
32,
|
|
33,
|
|
34,
|
|
35,
|
|
36,
|
|
37,
|
|
38,
|
|
39,
|
|
26
|
|
],
|
|
"rightEye": [
|
|
7,
|
|
11,
|
|
12,
|
|
8,
|
|
10,
|
|
9
|
|
],
|
|
"rightPupil": [
|
|
13
|
|
]
|
|
},
|
|
"frames": [
|
|
{
|
|
"time": 0,
|
|
"face_count": 1,
|
|
"all_point_counts": [
|
|
76
|
|
],
|
|
"yaw_radians": [
|
|
0
|
|
],
|
|
"pitch_radians": [
|
|
null
|
|
]
|
|
},
|
|
{
|
|
"time": 2,
|
|
"face_count": 1,
|
|
"all_point_counts": [
|
|
76
|
|
],
|
|
"yaw_radians": [
|
|
0.7853981852531433
|
|
],
|
|
"pitch_radians": [
|
|
null
|
|
]
|
|
},
|
|
{
|
|
"time": 4,
|
|
"face_count": 1,
|
|
"all_point_counts": [
|
|
76
|
|
],
|
|
"yaw_radians": [
|
|
1.5707963705062866
|
|
],
|
|
"pitch_radians": [
|
|
null
|
|
]
|
|
},
|
|
{
|
|
"time": 6,
|
|
"face_count": 1,
|
|
"all_point_counts": [
|
|
76
|
|
],
|
|
"yaw_radians": [
|
|
0
|
|
],
|
|
"pitch_radians": [
|
|
null
|
|
]
|
|
},
|
|
{
|
|
"time": 8,
|
|
"face_count": 1,
|
|
"all_point_counts": [
|
|
76
|
|
],
|
|
"yaw_radians": [
|
|
0
|
|
],
|
|
"pitch_radians": [
|
|
null
|
|
]
|
|
},
|
|
{
|
|
"time": 10,
|
|
"face_count": 1,
|
|
"all_point_counts": [
|
|
76
|
|
],
|
|
"yaw_radians": [
|
|
0
|
|
],
|
|
"pitch_radians": [
|
|
null
|
|
]
|
|
},
|
|
{
|
|
"time": 12,
|
|
"face_count": 1,
|
|
"all_point_counts": [
|
|
76
|
|
],
|
|
"yaw_radians": [
|
|
0
|
|
],
|
|
"pitch_radians": [
|
|
null
|
|
]
|
|
},
|
|
{
|
|
"time": 14,
|
|
"face_count": 1,
|
|
"all_point_counts": [
|
|
76
|
|
],
|
|
"yaw_radians": [
|
|
0
|
|
],
|
|
"pitch_radians": [
|
|
null
|
|
]
|
|
},
|
|
{
|
|
"time": 16,
|
|
"face_count": 1,
|
|
"all_point_counts": [
|
|
76
|
|
],
|
|
"yaw_radians": [
|
|
0
|
|
],
|
|
"pitch_radians": [
|
|
null
|
|
]
|
|
},
|
|
{
|
|
"time": 18,
|
|
"face_count": 1,
|
|
"all_point_counts": [
|
|
76
|
|
],
|
|
"yaw_radians": [
|
|
1.5707963705062866
|
|
],
|
|
"pitch_radians": [
|
|
null
|
|
]
|
|
},
|
|
{
|
|
"time": 20,
|
|
"face_count": 1,
|
|
"all_point_counts": [
|
|
76
|
|
],
|
|
"yaw_radians": [
|
|
0.7853981852531433
|
|
],
|
|
"pitch_radians": [
|
|
null
|
|
]
|
|
}
|
|
],
|
|
"result": "All 11 sampled frames returned one face and 76 points; 4s/18s reported yaw approx pi/2; pitch unavailable",
|
|
"privacy": "Source frames, complete landmarks and source path remain ignored under build/pose-analysis/vision and are not included in Git"
|
|
},
|
|
"reconstruction_baseline": {
|
|
"commit": "e03e460a9b3e5ad489aad24095485ba10ceb987d",
|
|
"installed_version": "1.0.4 (6)",
|
|
"root_causes": [
|
|
"thin deformation uses bounding box x/y/size rather than saved contour/nose points",
|
|
"horizontal symmetric inverse warp is applied at full strength for any valid box",
|
|
"no contour/landmark completeness guard or pose metadata preservation",
|
|
"fixed coefficients do not match reference local-pin scaling"
|
|
],
|
|
"direction_check": "Positive thin samples outward and moves image features inward; the sign is not reversed",
|
|
"test_gap": "Existing geometry tests establish pixel changes, extent and persistence, not reference likeness or profile shape preservation"
|
|
},
|
|
"checklist": {
|
|
"why_maximum_slim_differs": "answered: different geometric model, locality and effective strength",
|
|
"how_profile_is_handled": "answered within checked active thin path: projected 2D landmarks, local directions/radii; no established explicit yaw gate",
|
|
"full_native_visual_equivalence": "unverified; screenshots are not a synchronized isolated-parameter capture",
|
|
"product_fix": "not changed by this analysis; installed 1.0.4 retains the reported issue"
|
|
},
|
|
"host_boundary": "User controls Motion/FCP; no UI interaction, host shutdown, app install or plug-in replacement in this analysis.",
|
|
"followup_implementation": {
|
|
"version": "1.0.5 (7)",
|
|
"signed_source_commit": "abe97ed0cbd5a2b5ffda6ebdb486d3bff9170964",
|
|
"status": "signed_notarized_installed_user_visual_qa_pending",
|
|
"landmarks": "explicit revision3 / 76 constellation, points76 persisted and stabilized",
|
|
"warp": "17 sequential UV pins, .025 * pixel-size gain, original thin bbox term removed",
|
|
"offline_checks": 604,
|
|
"extra_real_video_asan_checks": 264,
|
|
"real_video_frames": 11,
|
|
"max_uv_oracle_error": 1.09828022e-05,
|
|
"limitations": [
|
|
"Other eight controls retain prior approximations",
|
|
"Fast multi-face overlapping resampling order is not equivalent to the original single fragment",
|
|
"Full native Motion/FCP visual comparison reserved for user"
|
|
]
|
|
}
|
|
}
|