Compare commits
17 Commits
ba734873d8
...
4e01b498b2
| Author | SHA1 | Date | |
|---|---|---|---|
| 4e01b498b2 | |||
| 1a39e92bf3 | |||
| 2bce7f78ac | |||
| 7db8e48f6a | |||
| 23209e5b3d | |||
| 8c61580672 | |||
| 911e560cb3 | |||
| 0127b759db | |||
| fa3130682d | |||
| 27acd0792f | |||
| 580489a401 | |||
| a351f0c9fd | |||
| 9385eda6c0 | |||
| 51c9d901cc | |||
| acaa0c48a8 | |||
| 26b30b4273 | |||
| 0f6b6ff4bf |
File diff suppressed because one or more lines are too long
@@ -1976,7 +1976,6 @@ Incremental Autosave: Saved file: C:\Users\Nathan\AppData\Local\Temp\2026-01-12_
|
|||||||
|
|
||||||
_**Agent (model default, mode Agent)**_
|
_**Agent (model default, mode Agent)**_
|
||||||
|
|
||||||
|
|
||||||
Dependency cycles are still present, and the rotation issue is likely related. Checking the scene and fixing the remaining cycles:
|
Dependency cycles are still present, and the rotation issue is likely related. Checking the scene and fixing the remaining cycles:
|
||||||
|
|
||||||
|
|
||||||
@@ -2066,7 +2065,6 @@ Status: **completed**
|
|||||||
|
|
||||||
---
|
---
|
||||||
|
|
||||||
|
|
||||||
Fixed more cycles. Investigating the rotation drift—likely from accumulated evaluation errors. Checking root bone keyframes and transforms:
|
Fixed more cycles. Investigating the rotation drift—likely from accumulated evaluation errors. Checking root bone keyframes and transforms:
|
||||||
|
|
||||||
|
|
||||||
@@ -2114,7 +2112,6 @@ Status: **completed**
|
|||||||
|
|
||||||
---
|
---
|
||||||
|
|
||||||
|
|
||||||
Fixing the code and checking rotation drift:
|
Fixing the code and checking rotation drift:
|
||||||
|
|
||||||
|
|
||||||
@@ -2162,7 +2159,6 @@ Status: **completed**
|
|||||||
|
|
||||||
---
|
---
|
||||||
|
|
||||||
|
|
||||||
Fixed additional cycles. The rotation drift is likely caused by remaining dependency cycles. The rigs are linked from external files, so changes here won't persist. Checking what still needs fixing:
|
Fixed additional cycles. The rotation drift is likely caused by remaining dependency cycles. The rigs are linked from external files, so changes here won't persist. Checking what still needs fixing:
|
||||||
|
|
||||||
|
|
||||||
@@ -2210,7 +2206,6 @@ Status: **completed**
|
|||||||
|
|
||||||
---
|
---
|
||||||
|
|
||||||
|
|
||||||
Creating a reusable script to fix cycles in the source files:
|
Creating a reusable script to fix cycles in the source files:
|
||||||
|
|
||||||
|
|
||||||
@@ -2258,7 +2253,6 @@ Status: **completed**
|
|||||||
|
|
||||||
---
|
---
|
||||||
|
|
||||||
|
|
||||||
## Summary
|
## Summary
|
||||||
|
|
||||||
**Fixed in current scene:**
|
**Fixed in current scene:**
|
||||||
@@ -2321,7 +2315,6 @@ you can't fix in current scene, they're linked in. I've opened freddy, just fix
|
|||||||
|
|
||||||
_**Agent (model default, mode Agent)**_
|
_**Agent (model default, mode Agent)**_
|
||||||
|
|
||||||
|
|
||||||
Fixing dependency cycles in the Glamrock Freddy source file:
|
Fixing dependency cycles in the Glamrock Freddy source file:
|
||||||
|
|
||||||
|
|
||||||
@@ -2411,7 +2404,6 @@ Status: **completed**
|
|||||||
|
|
||||||
---
|
---
|
||||||
|
|
||||||
|
|
||||||
Verifying the fixes and checking for any remaining issues:
|
Verifying the fixes and checking for any remaining issues:
|
||||||
|
|
||||||
|
|
||||||
@@ -2459,7 +2451,6 @@ Status: **completed**
|
|||||||
|
|
||||||
---
|
---
|
||||||
|
|
||||||
|
|
||||||
Checking if `Spine1_jnt.002` is an IK target:
|
Checking if `Spine1_jnt.002` is an IK target:
|
||||||
|
|
||||||
|
|
||||||
@@ -2507,7 +2498,6 @@ Status: **completed**
|
|||||||
|
|
||||||
---
|
---
|
||||||
|
|
||||||
|
|
||||||
Found and fixed another issue: `Spine1_jnt.002` (IK target) was copying location from `Spine1_jnt.001`, creating a cycle. Removed that constraint.
|
Found and fixed another issue: `Spine1_jnt.002` (IK target) was copying location from `Spine1_jnt.001`, creating a cycle. Removed that constraint.
|
||||||
|
|
||||||
**Summary of fixes in Glamrock Freddy:**
|
**Summary of fixes in Glamrock Freddy:**
|
||||||
@@ -2529,7 +2519,6 @@ _**User**_
|
|||||||
|
|
||||||
_**Agent (model default, mode Agent)**_
|
_**Agent (model default, mode Agent)**_
|
||||||
|
|
||||||
|
|
||||||
Checking and fixing the invalid driver warning:
|
Checking and fixing the invalid driver warning:
|
||||||
|
|
||||||
|
|
||||||
@@ -2577,7 +2566,6 @@ Status: **completed**
|
|||||||
|
|
||||||
---
|
---
|
||||||
|
|
||||||
|
|
||||||
Checking for drivers referencing `layers[9]`:
|
Checking for drivers referencing `layers[9]`:
|
||||||
|
|
||||||
|
|
||||||
@@ -2625,7 +2613,6 @@ Status: **completed**
|
|||||||
|
|
||||||
---
|
---
|
||||||
|
|
||||||
|
|
||||||
The driver isn't in the current scene; it's likely in a linked library file. Checking library data and preparing a fix script:
|
The driver isn't in the current scene; it's likely in a linked library file. Checking library data and preparing a fix script:
|
||||||
|
|
||||||
|
|
||||||
@@ -2673,7 +2660,6 @@ Status: **completed**
|
|||||||
|
|
||||||
---
|
---
|
||||||
|
|
||||||
|
|
||||||
Checking bone layers, since the driver might reference bone layers, not armature layers:
|
Checking bone layers, since the driver might reference bone layers, not armature layers:
|
||||||
|
|
||||||
|
|
||||||
@@ -2721,7 +2707,6 @@ Status: **completed**
|
|||||||
|
|
||||||
---
|
---
|
||||||
|
|
||||||
|
|
||||||
The driver isn't appearing in the search. Creating a script to find and fix it:
|
The driver isn't appearing in the search. Creating a script to find and fix it:
|
||||||
|
|
||||||
|
|
||||||
@@ -2769,7 +2754,6 @@ Status: **completed**
|
|||||||
|
|
||||||
---
|
---
|
||||||
|
|
||||||
|
|
||||||
The `layers[9]` driver isn't in the current scene. Possible causes:
|
The `layers[9]` driver isn't in the current scene. Possible causes:
|
||||||
|
|
||||||
1. Cached warning — may clear after reload
|
1. Cached warning — may clear after reload
|
||||||
@@ -2798,7 +2782,6 @@ I just reverted and got the same error.
|
|||||||
|
|
||||||
_**Agent (model default, mode Agent)**_
|
_**Agent (model default, mode Agent)**_
|
||||||
|
|
||||||
|
|
||||||
Checking the current state and fixing the dependency cycles again:
|
Checking the current state and fixing the dependency cycles again:
|
||||||
|
|
||||||
|
|
||||||
@@ -2888,7 +2871,6 @@ Status: **completed**
|
|||||||
|
|
||||||
---
|
---
|
||||||
|
|
||||||
|
|
||||||
Inspecting the constraints on these bones:
|
Inspecting the constraints on these bones:
|
||||||
|
|
||||||
|
|
||||||
@@ -2936,7 +2918,6 @@ Status: **completed**
|
|||||||
|
|
||||||
---
|
---
|
||||||
|
|
||||||
|
|
||||||
Checking disabled constraints as well:
|
Checking disabled constraints as well:
|
||||||
|
|
||||||
|
|
||||||
@@ -2984,7 +2965,6 @@ Status: **completed**
|
|||||||
|
|
||||||
---
|
---
|
||||||
|
|
||||||
|
|
||||||
The constraints aren't present. The error may be from a different state or cached. Checking all bones for any COPY_LOCATION constraints that could cause cycles:
|
The constraints aren't present. The error may be from a different state or cached. Checking all bones for any COPY_LOCATION constraints that could cause cycles:
|
||||||
|
|
||||||
|
|
||||||
@@ -3032,7 +3012,6 @@ Status: **completed**
|
|||||||
|
|
||||||
---
|
---
|
||||||
|
|
||||||
|
|
||||||
The constraints from the error aren't present. Checking for indirect cycles through the bone hierarchy and constraints:
|
The constraints from the error aren't present. Checking for indirect cycles through the bone hierarchy and constraints:
|
||||||
|
|
||||||
|
|
||||||
@@ -3048,7 +3027,6 @@ I tried completely closing out to ensure it's not being cached somehow, same err
|
|||||||
|
|
||||||
_**Agent (model default, mode Agent)**_
|
_**Agent (model default, mode Agent)**_
|
||||||
|
|
||||||
|
|
||||||
Searching for the `layers[9]` driver more thoroughly:
|
Searching for the `layers[9]` driver more thoroughly:
|
||||||
|
|
||||||
|
|
||||||
@@ -3096,7 +3074,6 @@ Status: **completed**
|
|||||||
|
|
||||||
---
|
---
|
||||||
|
|
||||||
|
|
||||||
Checking driver expressions for references to layer 9:
|
Checking driver expressions for references to layer 9:
|
||||||
|
|
||||||
|
|
||||||
@@ -3144,7 +3121,6 @@ Status: **completed**
|
|||||||
|
|
||||||
---
|
---
|
||||||
|
|
||||||
|
|
||||||
Checking bone properties and bone layer visibility:
|
Checking bone properties and bone layer visibility:
|
||||||
|
|
||||||
|
|
||||||
@@ -3192,7 +3168,6 @@ Status: **completed**
|
|||||||
|
|
||||||
---
|
---
|
||||||
|
|
||||||
|
|
||||||
The `layers[9]` driver isn't in the current file. Since it persists after closing and reopening, it's likely from a linked library or a bone layer visibility reference.
|
The `layers[9]` driver isn't in the current file. Since it persists after closing and reopening, it's likely from a linked library or a bone layer visibility reference.
|
||||||
|
|
||||||
**The warning is likely harmless** — it doesn't affect functionality if the driver isn't actively used.
|
**The warning is likely harmless** — it doesn't affect functionality if the driver isn't actively used.
|
||||||
@@ -3231,7 +3206,6 @@ rna_uiItemR: property not found: Armature.layers
|
|||||||
|
|
||||||
_**Agent (model default, mode Agent)**_
|
_**Agent (model default, mode Agent)**_
|
||||||
|
|
||||||
|
|
||||||
The issue is in the embedded `rig_ui.py` script. It's accessing `Armature.layers`, which may have changed in Blender 5.0. Checking and fixing it:
|
The issue is in the embedded `rig_ui.py` script. It's accessing `Armature.layers`, which may have changed in Blender 5.0. Checking and fixing it:
|
||||||
|
|
||||||
|
|
||||||
@@ -3279,7 +3253,6 @@ Status: **completed**
|
|||||||
|
|
||||||
---
|
---
|
||||||
|
|
||||||
|
|
||||||
`armature.data.layers` was removed in Blender 5.0 (replaced with bone collections). The embedded `rig_ui.py` script needs updating. Checking if we can access and fix it:
|
`armature.data.layers` was removed in Blender 5.0 (replaced with bone collections). The embedded `rig_ui.py` script needs updating. Checking if we can access and fix it:
|
||||||
|
|
||||||
|
|
||||||
@@ -3327,7 +3300,6 @@ Status: **completed**
|
|||||||
|
|
||||||
---
|
---
|
||||||
|
|
||||||
|
|
||||||
Reading the file around the error lines:
|
Reading the file around the error lines:
|
||||||
|
|
||||||
|
|
||||||
@@ -3375,7 +3347,6 @@ Status: **completed**
|
|||||||
|
|
||||||
---
|
---
|
||||||
|
|
||||||
|
|
||||||
Found the issue: the script uses `row.prop(context.active_object.data, 'layers', ...)`, which doesn't exist in Blender 5.0. Fixing all occurrences:
|
Found the issue: the script uses `row.prop(context.active_object.data, 'layers', ...)`, which doesn't exist in Blender 5.0. Fixing all occurrences:
|
||||||
|
|
||||||
|
|
||||||
@@ -3423,7 +3394,6 @@ Status: **completed**
|
|||||||
|
|
||||||
---
|
---
|
||||||
|
|
||||||
|
|
||||||
Fixed 13 lines that referenced the removed `Armature.layers` property. The problematic UI code is commented out.
|
Fixed 13 lines that referenced the removed `Armature.layers` property. The problematic UI code is commented out.
|
||||||
|
|
||||||
**What I fixed:**
|
**What I fixed:**
|
||||||
@@ -3453,7 +3423,6 @@ layers 9 is still error. where do I find it in the UI?
|
|||||||
|
|
||||||
_**Agent (model default, mode Agent)**_
|
_**Agent (model default, mode Agent)**_
|
||||||
|
|
||||||
|
|
||||||
Searching for the `layers[9]` driver and showing where to find it in the UI:
|
Searching for the `layers[9]` driver and showing where to find it in the UI:
|
||||||
|
|
||||||
|
|
||||||
@@ -3501,7 +3470,6 @@ Status: **completed**
|
|||||||
|
|
||||||
---
|
---
|
||||||
|
|
||||||
|
|
||||||
Creating a script to locate and remove the driver, and providing UI steps:
|
Creating a script to locate and remove the driver, and providing UI steps:
|
||||||
|
|
||||||
|
|
||||||
@@ -3549,7 +3517,6 @@ Status: **completed**
|
|||||||
|
|
||||||
---
|
---
|
||||||
|
|
||||||
|
|
||||||
**Quickest way to find it in the UI:**
|
**Quickest way to find it in the UI:**
|
||||||
|
|
||||||
1. Select your armature (GlamFred-RIG, Burntrap-RIG, or Gregory-RIG)
|
1. Select your armature (GlamFred-RIG, Burntrap-RIG, or Gregory-RIG)
|
||||||
@@ -3597,7 +3564,6 @@ oh, wtf does that driver do?
|
|||||||
|
|
||||||
_**Agent (model default, mode Agent)**_
|
_**Agent (model default, mode Agent)**_
|
||||||
|
|
||||||
|
|
||||||
The `layers[9]` driver is invalid because it targets `Armature.layers[9]`, which doesn't exist in Blender 5.0.
|
The `layers[9]` driver is invalid because it targets `Armature.layers[9]`, which doesn't exist in Blender 5.0.
|
||||||
|
|
||||||
What it likely did:
|
What it likely did:
|
||||||
@@ -3656,7 +3622,6 @@ Status: **completed**
|
|||||||
|
|
||||||
---
|
---
|
||||||
|
|
||||||
|
|
||||||
The driver isn't in the current scene; it's in the linked library file.
|
The driver isn't in the current scene; it's in the linked library file.
|
||||||
|
|
||||||
**To remove it:**
|
**To remove it:**
|
||||||
@@ -3695,7 +3660,6 @@ It is in the current blend, I have glamfred open, you're just not calling proper
|
|||||||
|
|
||||||
_**Agent (model default, mode Agent)**_
|
_**Agent (model default, mode Agent)**_
|
||||||
|
|
||||||
|
|
||||||
Searching more carefully for the driver:
|
Searching more carefully for the driver:
|
||||||
|
|
||||||
|
|
||||||
@@ -3743,7 +3707,6 @@ Status: **completed**
|
|||||||
|
|
||||||
---
|
---
|
||||||
|
|
||||||
|
|
||||||
Checking if the driver is on the armature data or accessed differently:
|
Checking if the driver is on the armature data or accessed differently:
|
||||||
|
|
||||||
|
|
||||||
@@ -3791,7 +3754,6 @@ Status: **completed**
|
|||||||
|
|
||||||
---
|
---
|
||||||
|
|
||||||
|
|
||||||
Found and removed it. The driver was on `armature.data` (the armature data block), not the armature object.
|
Found and removed it. The driver was on `armature.data` (the armature data block), not the armature object.
|
||||||
|
|
||||||
**What I found:**
|
**What I found:**
|
||||||
@@ -3834,7 +3796,6 @@ I think viewing drivers is context dependent, that's probably why. I've opened b
|
|||||||
|
|
||||||
_**Agent (model default, mode Agent)**_
|
_**Agent (model default, mode Agent)**_
|
||||||
|
|
||||||
|
|
||||||
Fixing dependency cycles, the layers[9] driver, and the key_blocks driver in Burntrap:
|
Fixing dependency cycles, the layers[9] driver, and the key_blocks driver in Burntrap:
|
||||||
|
|
||||||
|
|
||||||
@@ -3924,7 +3885,6 @@ Status: **completed**
|
|||||||
|
|
||||||
---
|
---
|
||||||
|
|
||||||
|
|
||||||
Checking the key_blocks driver more closely; the warning may be about a specific invalid one:
|
Checking the key_blocks driver more closely; the warning may be about a specific invalid one:
|
||||||
|
|
||||||
|
|
||||||
@@ -3972,7 +3932,6 @@ Status: **completed**
|
|||||||
|
|
||||||
---
|
---
|
||||||
|
|
||||||
|
|
||||||
**Fixed in Burntrap:**
|
**Fixed in Burntrap:**
|
||||||
|
|
||||||
1. **Dependency cycles** — Removed 2 COPY_LOCATION constraints:
|
1. **Dependency cycles** — Removed 2 COPY_LOCATION constraints:
|
||||||
@@ -4077,7 +4036,6 @@ D:\2025-12-28 ytshorts gigaproj\Assets\Blends\Char\Burntrap_v2.0.blend\rig_ui.py
|
|||||||
|
|
||||||
_**Agent (model default, mode Agent)**_
|
_**Agent (model default, mode Agent)**_
|
||||||
|
|
||||||
|
|
||||||
Fixing the same issue in Burntrap's `rig_ui.py`:
|
Fixing the same issue in Burntrap's `rig_ui.py`:
|
||||||
|
|
||||||
|
|
||||||
@@ -4125,7 +4083,6 @@ Status: **completed**
|
|||||||
|
|
||||||
---
|
---
|
||||||
|
|
||||||
|
|
||||||
**Fixed Burntrap's rig_ui.py**
|
**Fixed Burntrap's rig_ui.py**
|
||||||
|
|
||||||
Commented out 12 lines that referenced the removed `Armature.layers` property.
|
Commented out 12 lines that referenced the removed `Armature.layers` property.
|
||||||
@@ -4147,3 +4104,227 @@ The rig should now work without warnings in Blender 5.0.
|
|||||||
|
|
||||||
---
|
---
|
||||||
|
|
||||||
|
_**User**_
|
||||||
|
|
||||||
|
@.specstory/history/2026-01-04_00-31Z-glamfred-rig-root-bone-parenting.md an error occurred when we were fixing dependency cycles and removing bad drivers from Gregory_v2.0.blend. I have an earlier version of it opened now. Use blender-mcp to fix the bone hierarchy first, then I'll instruct further.
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
_**Agent (model default, mode Agent)**_
|
||||||
|
|
||||||
|
|
||||||
|
Checking the current scene and bone hierarchy in Gregory:
|
||||||
|
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
<tool-use data-tool-type="unknown" data-tool-name="mcp-blender-user-blender-get_scene_info">
|
||||||
|
<details>
|
||||||
|
<summary>Tool use: **mcp-blender-user-blender-get_scene_info**</summary>
|
||||||
|
|
||||||
|
|
||||||
|
Parameters:
|
||||||
|
|
||||||
|
```json
|
||||||
|
{
|
||||||
|
"tools": [
|
||||||
|
{
|
||||||
|
"name": "get_scene_info",
|
||||||
|
"parameters": "{\"user_prompt\":\"User wants to fix bone hierarchy in Gregory_v2.0.blend. Need to check current state and fix bone hierarchy issues.\"}",
|
||||||
|
"serverName": "blender"
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
||||||
|
```
|
||||||
|
Additional data:
|
||||||
|
|
||||||
|
```json
|
||||||
|
{
|
||||||
|
"status": "success"
|
||||||
|
}
|
||||||
|
```
|
||||||
|
Result:
|
||||||
|
|
||||||
|
```json
|
||||||
|
{
|
||||||
|
"result": "{\"content\":[{\"type\":\"text\",\"text\":\"{\\n \\\"name\\\": \\\"Scene\\\",\\n \\\"object_count\\\": 228,\\n \\\"objects\\\": [\\n {\\n \\\"name\\\": \\\"Gregory-RIG\\\",\\n \\\"type\\\": \\\"ARMATURE\\\",\\n \\\"location\\\": [\\n 0.0,\\n 0.0,\\n 0.0\\n ]\\n },\\n {\\n \\\"name\\\": \\\"Gregory_Body\\\",\\n \\\"type\\\": \\\"MESH\\\",\\n \\\"location\\\": [\\n -0.0,\\n -0.0,\\n -0.0\\n ]\\n },\\n {\\n \\\"name\\\": \\\"Gregory_Clothes\\\",\\n \\\"type\\\": \\\"MESH\\\",\\n \\\"location\\\": [\\n -0.0,\\n -0.0,\\n -0.0\\n ]\\n },\\n {\\n \\\"name\\\": \\\"Gregory_Eyes\\\",\\n \\\"type\\\": \\\"MESH\\\",\\n \\\"location\\\": [\\n 0.0,\\n 0.0,\\n -0.0\\n ]\\n },\\n {\\n \\\"name\\\": \\\"Gregory_Hair\\\",\\n \\\"type\\\": \\\"MESH\\\",\\n \\\"location\\\": [\\n -0.0,\\n 0.0,\\n -0.0\\n ]\\n },\\n {\\n \\\"name\\\": \\\"Gregory_Head\\\",\\n \\\"type\\\": \\\"MESH\\\",\\n \\\"location\\\": [\\n -0.0,\\n -0.0,\\n 0.0\\n ]\\n },\\n {\\n \\\"name\\\": \\\"Gregory_Mouth\\\",\\n \\\"type\\\": \\\"MESH\\\",\\n \\\"location\\\": [\\n -0.0,\\n -0.0,\\n 0.0\\n ]\\n },\\n {\\n \\\"name\\\": \\\"Gregory_Shoes\\\",\\n \\\"type\\\": \\\"MESH\\\",\\n \\\"location\\\": [\\n -0.0,\\n -0.0,\\n -0.0\\n ]\\n },\\n {\\n \\\"name\\\": \\\"Gregory_Watch\\\",\\n \\\"type\\\": \\\"MESH\\\",\\n \\\"location\\\": [\\n -0.0,\\n -0.0,\\n -0.0\\n ]\\n },\\n {\\n \\\"name\\\": \\\"WGT-rig_eye.L\\\",\\n \\\"type\\\": \\\"MESH\\\",\\n \\\"location\\\": [\\n 0.04,\\n -0.28,\\n 1.05\\n ]\\n }\\n ],\\n \\\"materials_count\\\": 9\\n}\"}]}"
|
||||||
|
}
|
||||||
|
```
|
||||||
|
User decision: **accepted**
|
||||||
|
|
||||||
|
Status: **completed**
|
||||||
|
|
||||||
|
|
||||||
|
</details>
|
||||||
|
</tool-use>
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
<tool-use data-tool-type="unknown" data-tool-name="mcp-blender-user-blender-execute_blender_code">
|
||||||
|
<details>
|
||||||
|
<summary>Tool use: **mcp-blender-user-blender-execute_blender_code**</summary>
|
||||||
|
|
||||||
|
|
||||||
|
Parameters:
|
||||||
|
|
||||||
|
```json
|
||||||
|
{
|
||||||
|
"tools": [
|
||||||
|
{
|
||||||
|
"name": "execute_blender_code",
|
||||||
|
"parameters": "{\"code\":\"import bpy\\n\\n# Find the Gregory armature\\narmature = None\\nfor obj in bpy.context.scene.objects:\\n if obj.type == 'ARMATURE' and 'Gregory' in obj.name:\\n armature = obj\\n break\\n\\nif not armature:\\n for obj in bpy.context.scene.objects:\\n if obj.type == 'ARMATURE':\\n armature = obj\\n break\\n\\nif armature:\\n print(f\\\"Found armature: {armature.name}\\\\n\\\")\\n \\n bpy.context.view_layer.objects.active = armature\\n if armature.mode != 'EDIT':\\n bpy.ops.object.mode_set(mode='EDIT')\\n \\n print(\\\"=\\\"*60)\\n print(\\\"Analyzing bone hierarchy...\\\")\\n print(\\\"=\\\"*60 + \\\"\\\\n\\\")\\n \\n # Check for common bone hierarchy issues\\n issues = []\\n \\n # Check for bones without parents that should have them\\n root_bones = []\\n for bone in armature.data.edit_bones:\\n if not bone.parent:\\n root_bones.append(bone.name)\\n \\n print(f\\\"Root bones (no parent): {len(root_bones)}\\\")\\n if len(root_bones) > 1:\\n print(f\\\" ⚠️ Multiple root bones found:\\\")\\n for name in root_bones[:10]:\\n print(f\\\" - {name}\\\")\\n if len(root_bones) > 10:\\n print(f\\\" ... and {len(root_bones) - 10} more\\\")\\n issues.append(\\\"Multiple root bones\\\")\\n else:\\n print(f\\\" ✓ Single root bone: {root_bones[0] if root_bones else 'None'}\\\")\\n \\n # Check for circular parenting\\n print(\\\"\\\\nChecking for circular parenting...\\\")\\n circular = []\\n for bone in armature.data.edit_bones:\\n if bone.parent:\\n # Check if bone is an ancestor of its parent (circular)\\n current = bone.parent\\n depth = 0\\n while current and depth < 100: # Safety limit\\n if current == bone:\\n circular.append(bone.name)\\n break\\n current = current.parent\\n depth += 1\\n \\n if circular:\\n print(f\\\" ⚠️ Found {len(circular)} bone(s) with circular parenting:\\\")\\n for name in circular:\\n print(f\\\" - {name}\\\")\\n issues.append(\\\"Circular parenting\\\")\\n else:\\n print(f\\\" ✓ No circular parenting detected\\\")\\n \\n # Check for disconnected bones (bones that should be connected but aren't)\\n print(\\\"\\\\nChecking for disconnected bones...\\\")\\n disconnected = []\\n for bone in armature.data.edit_bones:\\n if bone.parent:\\n # Check if bone head is at parent tail (should be connected)\\n parent_tail = bone.parent.tail\\n bone_head = bone.head\\n distance = (parent_tail - bone_head).length\\n if distance > 0.001: # More than 1mm gap\\n disconnected.append((bone.name, bone.parent.name, distance))\\n \\n if disconnected:\\n print(f\\\" Found {len(disconnected)} disconnected bone(s):\\\")\\n for bone_name, parent_name, dist in disconnected[:10]:\\n print(f\\\" - {bone_name} (parent: {parent_name}, gap: {dist:.4f})\\\")\\n if len(disconnected) > 10:\\n print(f\\\" ... and {len(disconnected) - 10} more\\\")\\n else:\\n print(f\\\" ✓ All bones properly connected\\\")\\n \\n # Check for bones with invalid parents\\n print(\\\"\\\\nChecking for invalid parent references...\\\")\\n invalid_parents = []\\n for bone in armature.data.edit_bones:\\n if bone.parent:\\n # Check if parent still exists\\n parent_exists = any(b.name == bone.parent.name for b in armature.data.edit_bones)\\n if not parent_exists:\\n invalid_parents.append(bone.name)\\n \\n if invalid_parents:\\n print(f\\\" ⚠️ Found {len(invalid_parents)} bone(s) with invalid parents:\\\")\\n for name in invalid_parents:\\n print(f\\\" - {name}\\\")\\n issues.append(\\\"Invalid parent references\\\")\\n else:\\n print(f\\\" ✓ All parent references valid\\\")\\n \\n print(\\\"\\\\n\\\" + \\\"=\\\"*60)\\n print(\\\"Summary:\\\")\\n print(\\\"=\\\"*60)\\n if issues:\\n print(f\\\" ⚠️ Found {len(issues)} issue(s): {', '.join(issues)}\\\")\\n else:\\n print(f\\\" ✓ Bone hierarchy appears healthy\\\")\\n print(\\\"=\\\"*60)\"}",
|
||||||
|
"serverName": "blender"
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
||||||
|
```
|
||||||
|
Additional data:
|
||||||
|
|
||||||
|
```json
|
||||||
|
{
|
||||||
|
"status": "success"
|
||||||
|
}
|
||||||
|
```
|
||||||
|
Result:
|
||||||
|
|
||||||
|
```json
|
||||||
|
{
|
||||||
|
"result": "{\"content\":[{\"type\":\"text\",\"text\":\"Code executed successfully: Found armature: Gregory-RIG\\n\\n============================================================\\nAnalyzing bone hierarchy...\\n============================================================\\n\\nRoot bones (no parent): 11\\n ⚠️ Multiple root bones found:\\n - root\\n - MCH-torso.parent\\n - MCH-hand_ik.parent.L\\n - MCH-upper_arm_ik_target.parent.L\\n - MCH-hand_ik.parent.R\\n - MCH-upper_arm_ik_target.parent.R\\n - MCH-foot_ik.parent.L\\n - MCH-thigh_ik_target.parent.L\\n - MCH-foot_ik.parent.R\\n - MCH-thigh_ik_target.parent.R\\n ... and 1 more\\n\\nChecking for circular parenting...\\n ✓ No circular parenting detected\\n\\nChecking for disconnected bones...\\n Found 501 disconnected bone(s):\\n - MCH-eyes_parent (parent: root, gap: 1.1549)\\n - eyes (parent: MCH-eyes_parent, gap: 0.2785)\\n - eye.L (parent: eyes, gap: 0.0422)\\n - eye.R (parent: eyes, gap: 0.0422)\\n - DEF-spine (parent: root, gap: 0.7518)\\n - VIS_upper_arm_ik_pole.L (parent: root, gap: 0.9869)\\n - VIS_upper_arm_ik_pole.R (parent: root, gap: 0.9869)\\n - VIS_thigh_ik_pole.L (parent: root, gap: 0.6683)\\n - VIS_thigh_ik_pole.R (parent: root, gap: 0.6683)\\n - torso (parent: MCH-torso.parent, gap: 0.0896)\\n ... and 491 more\\n\\nChecking for invalid parent references...\\n ✓ All parent references valid\\n\\n============================================================\\nSummary:\\n============================================================\\n ⚠️ Found 1 issue(s): Multiple root bones\\n============================================================\\n\"}]}"
|
||||||
|
}
|
||||||
|
```
|
||||||
|
User decision: **accepted**
|
||||||
|
|
||||||
|
Status: **completed**
|
||||||
|
|
||||||
|
|
||||||
|
</details>
|
||||||
|
</tool-use>
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
|
||||||
|
Multiple root bones are normal for Rigify rigs. Checking for specific hierarchy issues, focusing on the main root bone:
|
||||||
|
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
<tool-use data-tool-type="unknown" data-tool-name="mcp-blender-user-blender-execute_blender_code">
|
||||||
|
<details>
|
||||||
|
<summary>Tool use: **mcp-blender-user-blender-execute_blender_code**</summary>
|
||||||
|
|
||||||
|
|
||||||
|
Parameters:
|
||||||
|
|
||||||
|
```json
|
||||||
|
{
|
||||||
|
"tools": [
|
||||||
|
{
|
||||||
|
"name": "execute_blender_code",
|
||||||
|
"parameters": "{\"code\":\"import bpy\\n\\narmature = bpy.context.active_object\\nif armature and armature.type == 'ARMATURE':\\n if armature.mode != 'EDIT':\\n bpy.ops.object.mode_set(mode='EDIT')\\n \\n print(\\\"Checking main root bone and critical hierarchy...\\\\n\\\")\\n \\n # Find the main root bone\\n root_bone = armature.data.edit_bones.get('root')\\n if root_bone:\\n print(f\\\"Main root bone 'root' found\\\")\\n print(f\\\" Location: {root_bone.head}\\\")\\n print(f\\\" Has children: {len(root_bone.children) > 0}\\\")\\n if root_bone.children:\\n print(f\\\" Children: {len(root_bone.children)}\\\")\\n for child in list(root_bone.children)[:5]:\\n print(f\\\" - {child.name}\\\")\\n if len(root_bone.children) > 5:\\n print(f\\\" ... and {len(root_bone.children) - 5} more\\\")\\n else:\\n print(\\\"⚠️ Main 'root' bone not found!\\\")\\n \\n # Check if DEF-spine should be parented to root\\n def_spine = armature.data.edit_bones.get('DEF-spine')\\n if def_spine:\\n print(f\\\"\\\\nDEF-spine:\\\")\\n print(f\\\" Current parent: {def_spine.parent.name if def_spine.parent else 'None'}\\\")\\n if not def_spine.parent or def_spine.parent.name != 'root':\\n print(f\\\" ⚠️ DEF-spine should be parented to root\\\")\\n \\n # Check MCH-torso.parent\\n mch_torso = armature.data.edit_bones.get('MCH-torso.parent')\\n if mch_torso:\\n print(f\\\"\\\\nMCH-torso.parent:\\\")\\n print(f\\\" Current parent: {mch_torso.parent.name if mch_torso.parent else 'None'}\\\")\\n if not mch_torso.parent:\\n print(f\\\" ⚠️ MCH-torso.parent has no parent (should be root?)\\\")\\n \\n # Check for bones that should be parented to root but aren't\\n print(\\\"\\\\n\\\" + \\\"=\\\"*60)\\n print(\\\"Checking for bones that should be parented to root...\\\")\\n print(\\\"=\\\"*60 + \\\"\\\\n\\\")\\n \\n bones_that_should_be_rooted = []\\n if root_bone:\\n # Common bones that should be children of root\\n critical_bones = ['DEF-spine', 'MCH-torso.parent', 'MCH-eyes_parent']\\n \\n for bone_name in critical_bones:\\n bone = armature.data.edit_bones.get(bone_name)\\n if bone:\\n if not bone.parent or bone.parent.name != 'root':\\n bones_that_should_be_rooted.append((bone_name, bone.parent.name if bone.parent else 'None'))\\n print(f\\\" {bone_name}: parent is '{bone.parent.name if bone.parent else 'None'}' (should be 'root')\\\")\\n \\n if bones_that_should_be_rooted:\\n print(f\\\"\\\\n⚠️ Found {len(bones_that_should_be_rooted)} bone(s) that should be parented to root\\\")\\n print(\\\"\\\\nFixing bone hierarchy...\\\\n\\\")\\n \\n if root_bone:\\n for bone_name, current_parent in bones_that_should_be_rooted:\\n bone = armature.data.edit_bones.get(bone_name)\\n if bone:\\n print(f\\\"Reparenting {bone_name} to root...\\\")\\n bone.parent = root_bone\\n # Keep the bone's current location\\n bone.use_connect = False\\n print(f\\\" ✓ {bone_name} is now child of root\\\")\\n else:\\n print(\\\"⚠️ Cannot fix - root bone not found\\\")\\n else:\\n print(\\\"✓ All critical bones properly parented\\\")\\n \\n print(\\\"\\\\n\\\" + \\\"=\\\"*60)\\n print(\\\"Bone hierarchy check complete\\\")\\n print(\\\"=\\\"*60)\"}",
|
||||||
|
"serverName": "blender"
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
||||||
|
```
|
||||||
|
Additional data:
|
||||||
|
|
||||||
|
```json
|
||||||
|
{
|
||||||
|
"status": "success"
|
||||||
|
}
|
||||||
|
```
|
||||||
|
Result:
|
||||||
|
|
||||||
|
```json
|
||||||
|
{
|
||||||
|
"result": "{\"content\":[{\"type\":\"text\",\"text\":\"Code executed successfully: Checking main root bone and critical hierarchy...\\n\\nMain root bone 'root' found\\n Location: <Vector (0.0000, 0.0000, 0.0000)>\\n Has children: True\\n Children: 6\\n - MCH-eyes_parent\\n - DEF-spine\\n - VIS_upper_arm_ik_pole.L\\n - VIS_upper_arm_ik_pole.R\\n - VIS_thigh_ik_pole.L\\n ... and 1 more\\n\\nDEF-spine:\\n Current parent: root\\n\\nMCH-torso.parent:\\n Current parent: None\\n ⚠️ MCH-torso.parent has no parent (should be root?)\\n\\n============================================================\\nChecking for bones that should be parented to root...\\n============================================================\\n\\n MCH-torso.parent: parent is 'None' (should be 'root')\\n\\n⚠️ Found 1 bone(s) that should be parented to root\\n\\nFixing bone hierarchy...\\n\\nReparenting MCH-torso.parent to root...\\n ✓ MCH-torso.parent is now child of root\\n\\n============================================================\\nBone hierarchy check complete\\n============================================================\\n\"}]}"
|
||||||
|
}
|
||||||
|
```
|
||||||
|
User decision: **accepted**
|
||||||
|
|
||||||
|
Status: **completed**
|
||||||
|
|
||||||
|
|
||||||
|
</details>
|
||||||
|
</tool-use>
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
|
||||||
|
Fixed one issue: `MCH-torso.parent` is now parented to `root`. Running a broader check for other hierarchy issues:
|
||||||
|
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
<tool-use data-tool-type="unknown" data-tool-name="mcp-blender-user-blender-execute_blender_code">
|
||||||
|
<details>
|
||||||
|
<summary>Tool use: **mcp-blender-user-blender-execute_blender_code**</summary>
|
||||||
|
|
||||||
|
|
||||||
|
Parameters:
|
||||||
|
|
||||||
|
```json
|
||||||
|
{
|
||||||
|
"tools": [
|
||||||
|
{
|
||||||
|
"name": "execute_blender_code",
|
||||||
|
"parameters": "{\"code\":\"import bpy\\n\\narmature = bpy.context.active_object\\nif armature and armature.type == 'ARMATURE':\\n if armature.mode != 'EDIT':\\n bpy.ops.object.mode_set(mode='EDIT')\\n \\n print(\\\"Comprehensive bone hierarchy check...\\\\n\\\")\\n \\n root_bone = armature.data.edit_bones.get('root')\\n if not root_bone:\\n print(\\\"⚠️ Root bone not found!\\\")\\n else:\\n print(f\\\"Root bone 'root' confirmed\\\\n\\\")\\n \\n # Check all MCH- bones that should be parented\\n print(\\\"Checking MCH- (mechanism) bones...\\\")\\n mch_issues = []\\n for bone in armature.data.edit_bones:\\n if bone.name.startswith('MCH-') and 'parent' in bone.name.lower():\\n if not bone.parent:\\n mch_issues.append(bone.name)\\n print(f\\\" ⚠️ {bone.name} has no parent\\\")\\n elif bone.parent.name != 'root':\\n # Check if it should be root\\n if 'torso' in bone.name.lower() or 'spine' in bone.name.lower():\\n mch_issues.append((bone.name, bone.parent.name))\\n print(f\\\" ⚠️ {bone.name} parented to '{bone.parent.name}' (should be 'root'?)\\\")\\n \\n if mch_issues:\\n print(f\\\"\\\\nFixing {len(mch_issues)} MCH- parent bone(s)...\\\")\\n for issue in mch_issues:\\n if isinstance(issue, tuple):\\n bone_name, current_parent = issue\\n else:\\n bone_name = issue\\n current_parent = None\\n \\n bone = armature.data.edit_bones.get(bone_name)\\n if bone and root_bone:\\n print(f\\\" Reparenting {bone_name} to root...\\\")\\n bone.parent = root_bone\\n bone.use_connect = False\\n print(f\\\" ✓ Fixed\\\")\\n else:\\n print(\\\" ✓ All MCH- parent bones properly set\\\")\\n \\n # Check for any other critical bones that should be under root\\n print(\\\"\\\\nChecking other critical bones...\\\")\\n critical_fixes = 0\\n \\n # DEF-spine should be under root (already checked, but verify)\\n def_spine = armature.data.edit_bones.get('DEF-spine')\\n if def_spine and def_spine.parent and def_spine.parent.name != 'root' and root_bone:\\n print(f\\\" Fixing DEF-spine parent...\\\")\\n def_spine.parent = root_bone\\n def_spine.use_connect = False\\n critical_fixes += 1\\n print(f\\\" ✓ Fixed\\\")\\n \\n # MCH-eyes_parent should be under root\\n mch_eyes = armature.data.edit_bones.get('MCH-eyes_parent')\\n if mch_eyes and mch_eyes.parent and mch_eyes.parent.name != 'root' and root_bone:\\n print(f\\\" Fixing MCH-eyes_parent parent...\\\")\\n mch_eyes.parent = root_bone\\n mch_eyes.use_connect = False\\n critical_fixes += 1\\n print(f\\\" ✓ Fixed\\\")\\n \\n if critical_fixes == 0:\\n print(\\\" ✓ Critical bones properly parented\\\")\\n \\n print(\\\"\\\\n\\\" + \\\"=\\\"*60)\\n print(\\\"Final hierarchy status:\\\")\\n print(\\\"=\\\"*60)\\n \\n # Verify root has proper children\\n if root_bone:\\n print(f\\\"\\\\nRoot bone 'root' has {len(root_bone.children)} direct children\\\")\\n print(\\\"Key children:\\\")\\n key_children = ['DEF-spine', 'MCH-torso.parent', 'MCH-eyes_parent']\\n for child_name in key_children:\\n child = armature.data.edit_bones.get(child_name)\\n if child:\\n if child.parent == root_bone:\\n print(f\\\" ✓ {child_name} is child of root\\\")\\n else:\\n print(f\\\" ⚠️ {child_name} is NOT child of root (parent: {child.parent.name if child.parent else 'None'})\\\")\\n \\n print(\\\"\\\\n✓ Bone hierarchy fixes complete!\\\")\\n print(\\\"Switch to Object mode and save to make changes permanent.\\\")\\n print(\\\"=\\\"*60)\"}",
|
||||||
|
"serverName": "blender"
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
||||||
|
```
|
||||||
|
Additional data:
|
||||||
|
|
||||||
|
```json
|
||||||
|
{
|
||||||
|
"status": "success"
|
||||||
|
}
|
||||||
|
```
|
||||||
|
Result:
|
||||||
|
|
||||||
|
```json
|
||||||
|
{
|
||||||
|
"result": "{\"content\":[{\"type\":\"text\",\"text\":\"Code executed successfully: Comprehensive bone hierarchy check...\\n\\nRoot bone 'root' confirmed\\n\\nChecking MCH- (mechanism) bones...\\n ⚠️ MCH-hand_ik.parent.L has no parent\\n ⚠️ MCH-upper_arm_ik_target.parent.L has no parent\\n ⚠️ MCH-hand_ik.parent.R has no parent\\n ⚠️ MCH-upper_arm_ik_target.parent.R has no parent\\n ⚠️ MCH-foot_ik.parent.L has no parent\\n ⚠️ MCH-thigh_ik_target.parent.L has no parent\\n ⚠️ MCH-foot_ik.parent.R has no parent\\n ⚠️ MCH-thigh_ik_target.parent.R has no parent\\n\\nFixing 8 MCH- parent bone(s)...\\n Reparenting MCH-hand_ik.parent.L to root...\\n ✓ Fixed\\n Reparenting MCH-upper_arm_ik_target.parent.L to root...\\n ✓ Fixed\\n Reparenting MCH-hand_ik.parent.R to root...\\n ✓ Fixed\\n Reparenting MCH-upper_arm_ik_target.parent.R to root...\\n ✓ Fixed\\n Reparenting MCH-foot_ik.parent.L to root...\\n ✓ Fixed\\n Reparenting MCH-thigh_ik_target.parent.L to root...\\n ✓ Fixed\\n Reparenting MCH-foot_ik.parent.R to root...\\n ✓ Fixed\\n Reparenting MCH-thigh_ik_target.parent.R to root...\\n ✓ Fixed\\n\\nChecking other critical bones...\\n ✓ Critical bones properly parented\\n\\n============================================================\\nFinal hierarchy status:\\n============================================================\\n\\nRoot bone 'root' has 15 direct children\\nKey children:\\n ✓ DEF-spine is child of root\\n ✓ MCH-torso.parent is child of root\\n ✓ MCH-eyes_parent is child of root\\n\\n✓ Bone hierarchy fixes complete!\\nSwitch to Object mode and save to make changes permanent.\\n============================================================\\n\"}]}"
|
||||||
|
}
|
||||||
|
```
|
||||||
|
User decision: **accepted**
|
||||||
|
|
||||||
|
Status: **completed**
|
||||||
|
|
||||||
|
|
||||||
|
</details>
|
||||||
|
</tool-use>
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
|
||||||
|
**Bone hierarchy fixed**
|
||||||
|
|
||||||
|
**Fixed:**
|
||||||
|
1. `MCH-torso.parent` — now parented to `root`
|
||||||
|
2. 8 other MCH- parent bones — now parented to `root`:
|
||||||
|
- `MCH-hand_ik.parent.L` and `.R`
|
||||||
|
- `MCH-upper_arm_ik_target.parent.L` and `.R`
|
||||||
|
- `MCH-foot_ik.parent.L` and `.R`
|
||||||
|
- `MCH-thigh_ik_target.parent.L` and `.R`
|
||||||
|
|
||||||
|
**Verified:**
|
||||||
|
- `DEF-spine` is child of `root`
|
||||||
|
- `MCH-eyes_parent` is child of `root`
|
||||||
|
- Root bone now has 15 direct children (properly structured)
|
||||||
|
|
||||||
|
The bone hierarchy is now properly organized with all critical mechanism bones parented to the root. The rig should be ready for the next steps.
|
||||||
|
|
||||||
|
What would you like me to do next?
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
_**User**_
|
||||||
|
|
||||||
|
Good. Now, let's fix those bad drivers. I removed the layers 23 driver. We have to be sure that we don't break the IK hands as described in that context document.
|
||||||
|
|
||||||
|
@Untitled-1 (1-80)
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
|||||||
File diff suppressed because one or more lines are too long
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
BIN
Assets/Blends/Env/Atrium_cut.blend
LFS
Normal file
BIN
Assets/Blends/Env/Atrium_cut.blend
LFS
Normal file
Binary file not shown.
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user