dcc-mcp-speedtree 0.1.1__tar.gz
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- dcc_mcp_speedtree-0.1.1/MANIFEST.in +3 -0
- dcc_mcp_speedtree-0.1.1/PKG-INFO +119 -0
- dcc_mcp_speedtree-0.1.1/README.md +105 -0
- dcc_mcp_speedtree-0.1.1/docs/asset-bundle.md +49 -0
- dcc_mcp_speedtree-0.1.1/docs/capability-audit.md +114 -0
- dcc_mcp_speedtree-0.1.1/docs/compatibility.md +79 -0
- dcc_mcp_speedtree-0.1.1/docs/images/native-node-workflow.gif +0 -0
- dcc_mcp_speedtree-0.1.1/docs/images/node-stages/stage-01.png +0 -0
- dcc_mcp_speedtree-0.1.1/docs/images/node-stages/stage-02.png +0 -0
- dcc_mcp_speedtree-0.1.1/docs/images/node-stages/stage-03.png +0 -0
- dcc_mcp_speedtree-0.1.1/docs/images/node-stages/stage-04.png +0 -0
- dcc_mcp_speedtree-0.1.1/docs/images/node-stages/stage-05.png +0 -0
- dcc_mcp_speedtree-0.1.1/docs/images/node-stages/stage-06.png +0 -0
- dcc_mcp_speedtree-0.1.1/docs/images/node-stages/stage-07.png +0 -0
- dcc_mcp_speedtree-0.1.1/docs/images/speedtree-to-unreal.png +0 -0
- dcc_mcp_speedtree-0.1.1/docs/native-capability-matrix.md +58 -0
- dcc_mcp_speedtree-0.1.1/docs/node-authoring.md +139 -0
- dcc_mcp_speedtree-0.1.1/docs/node-showcase-acceptance.json +87 -0
- dcc_mcp_speedtree-0.1.1/docs/node-showcase-provenance.json +895 -0
- dcc_mcp_speedtree-0.1.1/docs/showcase-provenance.json +15 -0
- dcc_mcp_speedtree-0.1.1/docs/showcase.md +29 -0
- dcc_mcp_speedtree-0.1.1/pyproject.toml +40 -0
- dcc_mcp_speedtree-0.1.1/scripts/build_node_showcases.py +282 -0
- dcc_mcp_speedtree-0.1.1/scripts/check_wheel.py +94 -0
- dcc_mcp_speedtree-0.1.1/scripts/package_node_showcase.py +153 -0
- dcc_mcp_speedtree-0.1.1/scripts/render_node_showcases.py +143 -0
- dcc_mcp_speedtree-0.1.1/scripts/verify_node_showcases.py +158 -0
- dcc_mcp_speedtree-0.1.1/setup.cfg +4 -0
- dcc_mcp_speedtree-0.1.1/skills/speedtree-official/SKILL.md +28 -0
- dcc_mcp_speedtree-0.1.1/skills/speedtree-official/metadata/depends.md +2 -0
- dcc_mcp_speedtree-0.1.1/src/dcc_mcp_speedtree/__init__.py +25 -0
- dcc_mcp_speedtree-0.1.1/src/dcc_mcp_speedtree/__version__.py +1 -0
- dcc_mcp_speedtree-0.1.1/src/dcc_mcp_speedtree/bundle.py +67 -0
- dcc_mcp_speedtree-0.1.1/src/dcc_mcp_speedtree/capabilities.py +260 -0
- dcc_mcp_speedtree-0.1.1/src/dcc_mcp_speedtree/content.py +20 -0
- dcc_mcp_speedtree-0.1.1/src/dcc_mcp_speedtree/export.py +255 -0
- dcc_mcp_speedtree-0.1.1/src/dcc_mcp_speedtree/graph.py +411 -0
- dcc_mcp_speedtree-0.1.1/src/dcc_mcp_speedtree/handoff.py +50 -0
- dcc_mcp_speedtree-0.1.1/src/dcc_mcp_speedtree/node_tools.py +90 -0
- dcc_mcp_speedtree-0.1.1/src/dcc_mcp_speedtree/process.py +30 -0
- dcc_mcp_speedtree-0.1.1/src/dcc_mcp_speedtree/runtime.py +131 -0
- dcc_mcp_speedtree-0.1.1/src/dcc_mcp_speedtree/server.py +156 -0
- dcc_mcp_speedtree-0.1.1/src/dcc_mcp_speedtree/skills/speedtree-discovery/SKILL.md +29 -0
- dcc_mcp_speedtree-0.1.1/src/dcc_mcp_speedtree/skills/speedtree-discovery/scripts/discover_content.py +15 -0
- dcc_mcp_speedtree-0.1.1/src/dcc_mcp_speedtree/skills/speedtree-discovery/scripts/inspect_asset.py +15 -0
- dcc_mcp_speedtree-0.1.1/src/dcc_mcp_speedtree/skills/speedtree-discovery/scripts/inspect_capabilities.py +16 -0
- dcc_mcp_speedtree-0.1.1/src/dcc_mcp_speedtree/skills/speedtree-discovery/scripts/inspect_preset.py +15 -0
- dcc_mcp_speedtree-0.1.1/src/dcc_mcp_speedtree/skills/speedtree-discovery/scripts/inspect_runtime.py +31 -0
- dcc_mcp_speedtree-0.1.1/src/dcc_mcp_speedtree/skills/speedtree-discovery/scripts/inspect_unreal_project.py +15 -0
- dcc_mcp_speedtree-0.1.1/src/dcc_mcp_speedtree/skills/speedtree-discovery/scripts/plan_export.py +23 -0
- dcc_mcp_speedtree-0.1.1/src/dcc_mcp_speedtree/skills/speedtree-discovery/tools.yaml +144 -0
- dcc_mcp_speedtree-0.1.1/src/dcc_mcp_speedtree/skills/speedtree-export/SKILL.md +29 -0
- dcc_mcp_speedtree-0.1.1/src/dcc_mcp_speedtree/skills/speedtree-export/scripts/export_batch.py +27 -0
- dcc_mcp_speedtree-0.1.1/src/dcc_mcp_speedtree/skills/speedtree-export/scripts/export_status.py +14 -0
- dcc_mcp_speedtree-0.1.1/src/dcc_mcp_speedtree/skills/speedtree-export/scripts/plan_import.py +17 -0
- dcc_mcp_speedtree-0.1.1/src/dcc_mcp_speedtree/skills/speedtree-export/scripts/verify_export.py +22 -0
- dcc_mcp_speedtree-0.1.1/src/dcc_mcp_speedtree/skills/speedtree-export/tools.yaml +117 -0
- dcc_mcp_speedtree-0.1.1/src/dcc_mcp_speedtree/skills/speedtree-nodes/SKILL.md +36 -0
- dcc_mcp_speedtree-0.1.1/src/dcc_mcp_speedtree/skills/speedtree-nodes/scripts/discover_templates.py +17 -0
- dcc_mcp_speedtree-0.1.1/src/dcc_mcp_speedtree/skills/speedtree-nodes/scripts/edit_graph.py +17 -0
- dcc_mcp_speedtree-0.1.1/src/dcc_mcp_speedtree/skills/speedtree-nodes/scripts/inspect_authoring_catalog.py +17 -0
- dcc_mcp_speedtree-0.1.1/src/dcc_mcp_speedtree/skills/speedtree-nodes/scripts/inspect_graph.py +17 -0
- dcc_mcp_speedtree-0.1.1/src/dcc_mcp_speedtree/skills/speedtree-nodes/scripts/inspect_properties.py +17 -0
- dcc_mcp_speedtree-0.1.1/src/dcc_mcp_speedtree/skills/speedtree-nodes/tools.yaml +256 -0
- dcc_mcp_speedtree-0.1.1/src/dcc_mcp_speedtree/skills/speedtree-official/SKILL.md +28 -0
- dcc_mcp_speedtree-0.1.1/src/dcc_mcp_speedtree/skills/speedtree-official/metadata/depends.md +2 -0
- dcc_mcp_speedtree-0.1.1/src/dcc_mcp_speedtree/unreal.py +26 -0
- dcc_mcp_speedtree-0.1.1/src/dcc_mcp_speedtree.egg-info/PKG-INFO +119 -0
- dcc_mcp_speedtree-0.1.1/src/dcc_mcp_speedtree.egg-info/SOURCES.txt +81 -0
- dcc_mcp_speedtree-0.1.1/src/dcc_mcp_speedtree.egg-info/dependency_links.txt +1 -0
- dcc_mcp_speedtree-0.1.1/src/dcc_mcp_speedtree.egg-info/entry_points.txt +6 -0
- dcc_mcp_speedtree-0.1.1/src/dcc_mcp_speedtree.egg-info/requires.txt +6 -0
- dcc_mcp_speedtree-0.1.1/src/dcc_mcp_speedtree.egg-info/top_level.txt +1 -0
- dcc_mcp_speedtree-0.1.1/tests/test_bundle.py +26 -0
- dcc_mcp_speedtree-0.1.1/tests/test_capabilities.py +120 -0
- dcc_mcp_speedtree-0.1.1/tests/test_content.py +12 -0
- dcc_mcp_speedtree-0.1.1/tests/test_export.py +150 -0
- dcc_mcp_speedtree-0.1.1/tests/test_graph.py +207 -0
- dcc_mcp_speedtree-0.1.1/tests/test_process.py +65 -0
- dcc_mcp_speedtree-0.1.1/tests/test_runtime.py +27 -0
- dcc_mcp_speedtree-0.1.1/tests/test_server.py +24 -0
- dcc_mcp_speedtree-0.1.1/tests/test_skill_catalog.py +36 -0
- dcc_mcp_speedtree-0.1.1/tests/test_unreal.py +11 -0
|
@@ -0,0 +1,119 @@
|
|
|
1
|
+
Metadata-Version: 2.4
|
|
2
|
+
Name: dcc-mcp-speedtree
|
|
3
|
+
Version: 0.1.1
|
|
4
|
+
Summary: Local-first DCC-MCP adapter for SpeedTree official capabilities
|
|
5
|
+
Author-email: loonghao <hal.long@outlook.com>
|
|
6
|
+
License-Expression: MIT
|
|
7
|
+
Requires-Python: >=3.9
|
|
8
|
+
Description-Content-Type: text/markdown
|
|
9
|
+
Requires-Dist: dcc-mcp-core<1.0.0,>=0.20.22
|
|
10
|
+
Provides-Extra: test
|
|
11
|
+
Requires-Dist: pytest>=8; extra == "test"
|
|
12
|
+
Requires-Dist: ruff>=0.11; extra == "test"
|
|
13
|
+
Requires-Dist: build>=1; extra == "test"
|
|
14
|
+
|
|
15
|
+
# dcc-mcp-speedtree
|
|
16
|
+
|
|
17
|
+
Create and edit native SpeedTree generator graphs, regenerate them with the
|
|
18
|
+
licensed Modeler command-line exporter, and hand verified assets to another
|
|
19
|
+
DCC-MCP adapter. Graph authoring uses the observed SPM/STT file format and is
|
|
20
|
+
experimental; full live Modeler control is not yet available.
|
|
21
|
+
|
|
22
|
+
## Native node showcase
|
|
23
|
+
|
|
24
|
+

|
|
25
|
+
|
|
26
|
+
The willow grows from trunk to primary branches, drooping branches, and leaf
|
|
27
|
+
cards. The grass adds stalk and frond generators, then edits the width curve
|
|
28
|
+
to taper the blades. Each step is a new SPM, regenerated by **SpeedTree Modeler
|
|
29
|
+
10.1.0**. The diagram comes from the saved generator IDs and links.
|
|
30
|
+
|
|
31
|
+
| Native output | Generators | Vertices | Faces |
|
|
32
|
+
| --- | ---: | ---: | ---: |
|
|
33
|
+
| Willow | 5 | 7,092 | 6,166 |
|
|
34
|
+
| Grass | 3 | 27,540 | 59,400 |
|
|
35
|
+
|
|
36
|
+
These are procedural geometry studies. The images use unchanged exported OBJ
|
|
37
|
+
geometry with display materials in headless Blender; they are not Modeler
|
|
38
|
+
screenshots or native material acceptance. No UI automation builds either
|
|
39
|
+
asset. [Reproduce the workflow](docs/node-authoring.md) ·
|
|
40
|
+
[Operation and geometry evidence](docs/node-showcase-provenance.json) ·
|
|
41
|
+
[Native capability matrix](docs/native-capability-matrix.md).
|
|
42
|
+
|
|
43
|
+
## Start
|
|
44
|
+
|
|
45
|
+
This is a source preview. Install the checkout with `python -m pip install -e .`,
|
|
46
|
+
then configure the installed Modeler executable:
|
|
47
|
+
|
|
48
|
+
```powershell
|
|
49
|
+
$env:DCC_MCP_SPEEDTREE_EXECUTABLE = "C:/Applications/SpeedTree/SpeedTree_Modeler.exe"
|
|
50
|
+
dcc-mcp-speedtree
|
|
51
|
+
```
|
|
52
|
+
|
|
53
|
+
The standalone service has its own lifetime and OS-assigned port. Discover it
|
|
54
|
+
with `dcc-mcp-cli --gateway local list`, then search and describe its tools.
|
|
55
|
+
Optional GUI binding uses `--pid <PID> --window-handle <HWND>` and validates
|
|
56
|
+
that the window belongs to the named executable. GUI actions must use the
|
|
57
|
+
project-owned `dcc-cua` / `ui-control` route with a fresh exact binding.
|
|
58
|
+
|
|
59
|
+
## Agent workflow
|
|
60
|
+
|
|
61
|
+
Read the [capability audit](docs/capability-audit.md) for the complete tool chain
|
|
62
|
+
and the limits of modeling, materials, LOD, wind, collision, and cancellation.
|
|
63
|
+
Use `inspect_capabilities` for a machine-readable scope report without a GUI.
|
|
64
|
+
|
|
65
|
+
1. `discover_templates` and `inspect_authoring_catalog` enumerate installed
|
|
66
|
+
generator templates and their stored properties. `inspect_graph` and
|
|
67
|
+
`inspect_properties` read the selected source. `edit_graph` adds, duplicates,
|
|
68
|
+
removes, connects, disconnects, renames, hides, or changes properties and
|
|
69
|
+
existing curve components, writing a **new** SPM/STT.
|
|
70
|
+
2. `discover_content` locates installed SPM samples and Games/VFX presets;
|
|
71
|
+
`inspect_preset` reports the selected settings.
|
|
72
|
+
3. `plan_export` checks an SPM, preset, format, and **new** output directory.
|
|
73
|
+
4. `export_batch` exports 1–16 SPMs through `-export_game` or `-export`, with
|
|
74
|
+
`-export_options`. Supported extensions are `st9`, `st`, `fbx`, `obj`,
|
|
75
|
+
`abc`, and `usd`; availability still depends on product version/license.
|
|
76
|
+
5. `export_status` reads progress while Core runs the job; Core cancellation
|
|
77
|
+
stops the owned export process (`DELETE /v1/jobs/{id}` on the owning service). `verify_export` checks the recorded file hashes before handoff. Each tree
|
|
78
|
+
lives in its own directory with its textures and material sidecar.
|
|
79
|
+
6. `plan_import` prepares a verified handoff. Discover the destination adapter's importer, import into a new destination,
|
|
80
|
+
and read back geometry, materials, dependencies, transforms, and animation.
|
|
81
|
+
|
|
82
|
+
The [asset bundle contract](docs/asset-bundle.md) separates export evidence from
|
|
83
|
+
target import evidence. [Format and target coverage](docs/compatibility.md)
|
|
84
|
+
records the tested combinations and feature limits. The service never runs a
|
|
85
|
+
caller-supplied executable or shell command. Existing output directories are
|
|
86
|
+
rejected; timeout, failed exit, changed input, missing mesh, or missing explicit
|
|
87
|
+
material dependency stops the batch and preserves a partial manifest.
|
|
88
|
+
|
|
89
|
+
## Unreal
|
|
90
|
+
|
|
91
|
+

|
|
92
|
+
|
|
93
|
+
The same Palm asset in Modeler 10.1 and UE 5.5, using native SpeedTree
|
|
94
|
+
materials after explicit unit, UV, and texture repairs on a duplicate.
|
|
95
|
+
The final mesh height is 12.34384 m; collision scale and dynamic wind remain unverified.
|
|
96
|
+
[Capture provenance and repair notes](docs/showcase.md).
|
|
97
|
+
|
|
98
|
+
Use the installed Unreal ST9 Games preset for a modern Unreal workflow.
|
|
99
|
+
`.spm` is the authoring source, not a Content Browser import format.
|
|
100
|
+
`inspect_unreal_project` reports descriptor entries only: a missing entry is
|
|
101
|
+
`null` because engine plugin defaults may enable it. Check installation and
|
|
102
|
+
loaded modules through `dcc-mcp-unreal`; configure missing plugins only after
|
|
103
|
+
the user authorizes the concrete plan. Configuration and restarts belong to
|
|
104
|
+
the target adapter. This service does not silently install or enable plugins.
|
|
105
|
+
|
|
106
|
+
After importing each ST9 via `unreal-assets.import_asset`, read back the mesh
|
|
107
|
+
and dependencies. Successful export or enabled plugins alone do not prove a
|
|
108
|
+
usable imported asset, correct wind, collision, or rendered appearance.
|
|
109
|
+
|
|
110
|
+
## Official references
|
|
111
|
+
|
|
112
|
+
- [Command-line export](https://docs.unity3d.com/speedtree-modeler/manual/export-from-the-command-line.html)
|
|
113
|
+
- [Games export options](https://docs.unity3d.com/speedtree-modeler/manual/games-export-options.html)
|
|
114
|
+
- [VFX formats and options](https://docs.unity3d.com/speedtree-modeler/manual/vfx-export-options.html)
|
|
115
|
+
- [Unreal integration](https://docs.unity3d.com/speedtree-modeler/manual/import-to-unreal.html)
|
|
116
|
+
|
|
117
|
+
The repository contains no vendor binaries, licensed sample assets, SDK files,
|
|
118
|
+
or licensing material. Generated vendor sidecars can contain source-machine
|
|
119
|
+
paths; keep raw exports and diagnostics local unless reviewed for sharing.
|
|
@@ -0,0 +1,105 @@
|
|
|
1
|
+
# dcc-mcp-speedtree
|
|
2
|
+
|
|
3
|
+
Create and edit native SpeedTree generator graphs, regenerate them with the
|
|
4
|
+
licensed Modeler command-line exporter, and hand verified assets to another
|
|
5
|
+
DCC-MCP adapter. Graph authoring uses the observed SPM/STT file format and is
|
|
6
|
+
experimental; full live Modeler control is not yet available.
|
|
7
|
+
|
|
8
|
+
## Native node showcase
|
|
9
|
+
|
|
10
|
+

|
|
11
|
+
|
|
12
|
+
The willow grows from trunk to primary branches, drooping branches, and leaf
|
|
13
|
+
cards. The grass adds stalk and frond generators, then edits the width curve
|
|
14
|
+
to taper the blades. Each step is a new SPM, regenerated by **SpeedTree Modeler
|
|
15
|
+
10.1.0**. The diagram comes from the saved generator IDs and links.
|
|
16
|
+
|
|
17
|
+
| Native output | Generators | Vertices | Faces |
|
|
18
|
+
| --- | ---: | ---: | ---: |
|
|
19
|
+
| Willow | 5 | 7,092 | 6,166 |
|
|
20
|
+
| Grass | 3 | 27,540 | 59,400 |
|
|
21
|
+
|
|
22
|
+
These are procedural geometry studies. The images use unchanged exported OBJ
|
|
23
|
+
geometry with display materials in headless Blender; they are not Modeler
|
|
24
|
+
screenshots or native material acceptance. No UI automation builds either
|
|
25
|
+
asset. [Reproduce the workflow](docs/node-authoring.md) ·
|
|
26
|
+
[Operation and geometry evidence](docs/node-showcase-provenance.json) ·
|
|
27
|
+
[Native capability matrix](docs/native-capability-matrix.md).
|
|
28
|
+
|
|
29
|
+
## Start
|
|
30
|
+
|
|
31
|
+
This is a source preview. Install the checkout with `python -m pip install -e .`,
|
|
32
|
+
then configure the installed Modeler executable:
|
|
33
|
+
|
|
34
|
+
```powershell
|
|
35
|
+
$env:DCC_MCP_SPEEDTREE_EXECUTABLE = "C:/Applications/SpeedTree/SpeedTree_Modeler.exe"
|
|
36
|
+
dcc-mcp-speedtree
|
|
37
|
+
```
|
|
38
|
+
|
|
39
|
+
The standalone service has its own lifetime and OS-assigned port. Discover it
|
|
40
|
+
with `dcc-mcp-cli --gateway local list`, then search and describe its tools.
|
|
41
|
+
Optional GUI binding uses `--pid <PID> --window-handle <HWND>` and validates
|
|
42
|
+
that the window belongs to the named executable. GUI actions must use the
|
|
43
|
+
project-owned `dcc-cua` / `ui-control` route with a fresh exact binding.
|
|
44
|
+
|
|
45
|
+
## Agent workflow
|
|
46
|
+
|
|
47
|
+
Read the [capability audit](docs/capability-audit.md) for the complete tool chain
|
|
48
|
+
and the limits of modeling, materials, LOD, wind, collision, and cancellation.
|
|
49
|
+
Use `inspect_capabilities` for a machine-readable scope report without a GUI.
|
|
50
|
+
|
|
51
|
+
1. `discover_templates` and `inspect_authoring_catalog` enumerate installed
|
|
52
|
+
generator templates and their stored properties. `inspect_graph` and
|
|
53
|
+
`inspect_properties` read the selected source. `edit_graph` adds, duplicates,
|
|
54
|
+
removes, connects, disconnects, renames, hides, or changes properties and
|
|
55
|
+
existing curve components, writing a **new** SPM/STT.
|
|
56
|
+
2. `discover_content` locates installed SPM samples and Games/VFX presets;
|
|
57
|
+
`inspect_preset` reports the selected settings.
|
|
58
|
+
3. `plan_export` checks an SPM, preset, format, and **new** output directory.
|
|
59
|
+
4. `export_batch` exports 1–16 SPMs through `-export_game` or `-export`, with
|
|
60
|
+
`-export_options`. Supported extensions are `st9`, `st`, `fbx`, `obj`,
|
|
61
|
+
`abc`, and `usd`; availability still depends on product version/license.
|
|
62
|
+
5. `export_status` reads progress while Core runs the job; Core cancellation
|
|
63
|
+
stops the owned export process (`DELETE /v1/jobs/{id}` on the owning service). `verify_export` checks the recorded file hashes before handoff. Each tree
|
|
64
|
+
lives in its own directory with its textures and material sidecar.
|
|
65
|
+
6. `plan_import` prepares a verified handoff. Discover the destination adapter's importer, import into a new destination,
|
|
66
|
+
and read back geometry, materials, dependencies, transforms, and animation.
|
|
67
|
+
|
|
68
|
+
The [asset bundle contract](docs/asset-bundle.md) separates export evidence from
|
|
69
|
+
target import evidence. [Format and target coverage](docs/compatibility.md)
|
|
70
|
+
records the tested combinations and feature limits. The service never runs a
|
|
71
|
+
caller-supplied executable or shell command. Existing output directories are
|
|
72
|
+
rejected; timeout, failed exit, changed input, missing mesh, or missing explicit
|
|
73
|
+
material dependency stops the batch and preserves a partial manifest.
|
|
74
|
+
|
|
75
|
+
## Unreal
|
|
76
|
+
|
|
77
|
+

|
|
78
|
+
|
|
79
|
+
The same Palm asset in Modeler 10.1 and UE 5.5, using native SpeedTree
|
|
80
|
+
materials after explicit unit, UV, and texture repairs on a duplicate.
|
|
81
|
+
The final mesh height is 12.34384 m; collision scale and dynamic wind remain unverified.
|
|
82
|
+
[Capture provenance and repair notes](docs/showcase.md).
|
|
83
|
+
|
|
84
|
+
Use the installed Unreal ST9 Games preset for a modern Unreal workflow.
|
|
85
|
+
`.spm` is the authoring source, not a Content Browser import format.
|
|
86
|
+
`inspect_unreal_project` reports descriptor entries only: a missing entry is
|
|
87
|
+
`null` because engine plugin defaults may enable it. Check installation and
|
|
88
|
+
loaded modules through `dcc-mcp-unreal`; configure missing plugins only after
|
|
89
|
+
the user authorizes the concrete plan. Configuration and restarts belong to
|
|
90
|
+
the target adapter. This service does not silently install or enable plugins.
|
|
91
|
+
|
|
92
|
+
After importing each ST9 via `unreal-assets.import_asset`, read back the mesh
|
|
93
|
+
and dependencies. Successful export or enabled plugins alone do not prove a
|
|
94
|
+
usable imported asset, correct wind, collision, or rendered appearance.
|
|
95
|
+
|
|
96
|
+
## Official references
|
|
97
|
+
|
|
98
|
+
- [Command-line export](https://docs.unity3d.com/speedtree-modeler/manual/export-from-the-command-line.html)
|
|
99
|
+
- [Games export options](https://docs.unity3d.com/speedtree-modeler/manual/games-export-options.html)
|
|
100
|
+
- [VFX formats and options](https://docs.unity3d.com/speedtree-modeler/manual/vfx-export-options.html)
|
|
101
|
+
- [Unreal integration](https://docs.unity3d.com/speedtree-modeler/manual/import-to-unreal.html)
|
|
102
|
+
|
|
103
|
+
The repository contains no vendor binaries, licensed sample assets, SDK files,
|
|
104
|
+
or licensing material. Generated vendor sidecars can contain source-machine
|
|
105
|
+
paths; keep raw exports and diagnostics local unless reviewed for sharing.
|
|
@@ -0,0 +1,49 @@
|
|
|
1
|
+
# Asset bundle contract v1
|
|
2
|
+
|
|
3
|
+
`export-manifest.json` uses `schema: speedtree.export-batch.v1`. File paths in
|
|
4
|
+
`items[].mesh`, `items[].files[].path`, and material maps are relative to the
|
|
5
|
+
manifest directory. Move the whole bundle; resolve paths under that directory
|
|
6
|
+
and reject traversal. The tool response includes a local absolute manifest path.
|
|
7
|
+
|
|
8
|
+
The producer records exporter/source/preset SHA256 and byte counts, requested
|
|
9
|
+
format and preset mode, requested_units and requested_transform settings, requested tree count,
|
|
10
|
+
per-item status/exit code, and an inventory of emitted files. These hashes
|
|
11
|
+
identify inputs and detect changes; they do not certify licensing or trust.
|
|
12
|
+
Each successful item has a recognizable mesh header and nonempty output.
|
|
13
|
+
STMAT material records preserve map semantics and two-sided flags without
|
|
14
|
+
copying vendor `Source` paths into the manifest. Binary references still need
|
|
15
|
+
the target importer. Raw vendor sidecars are kept unchanged locally.
|
|
16
|
+
|
|
17
|
+
`status: exported` and `verify_export.verified: true` mean file-level checks
|
|
18
|
+
passed. `target_validation.status: not_run` is deliberately independent.
|
|
19
|
+
`dependencies.status` is `sidecar_verified` when explicit STMAT File references
|
|
20
|
+
exist, otherwise `requires_target_importer`. It never asserts full binary
|
|
21
|
+
texture dependency coverage. Preset unit/axis settings are requests; a target
|
|
22
|
+
must read its effective world bounds, units, and transforms back.
|
|
23
|
+
|
|
24
|
+
## Consumer contract
|
|
25
|
+
|
|
26
|
+
A destination adapter should consume the resolved mesh and adjacent files,
|
|
27
|
+
import into a new destination by default, and produce a separate receipt keyed
|
|
28
|
+
by manifest hash and mesh hash. Include target application/version, importer
|
|
29
|
+
and plugin state, imported object identifiers, geometry/LOD counts, material
|
|
30
|
+
slots, missing references, effective transform, warnings, and per-feature
|
|
31
|
+
`verified`, `converted`, `unsupported`, or `not_checked` results. Do not rewrite
|
|
32
|
+
the producer manifest to turn file validation into target validation.
|
|
33
|
+
|
|
34
|
+
Use the target adapter's typed capability discovery rather than embedding
|
|
35
|
+
application commands in this package. Example routes: Unreal asset import for
|
|
36
|
+
ST9/ST, Blender interchange import for FBX/OBJ/Alembic/USD, and the discovered
|
|
37
|
+
Maya or 3ds Max importer for a compatible format. Missing plugins yield a
|
|
38
|
+
reviewable configuration plan; apply only within the target's user consent
|
|
39
|
+
contract. Importing a mesh never restores the editable SpeedTree generator.
|
|
40
|
+
|
|
41
|
+
## Jobs and cancellation
|
|
42
|
+
|
|
43
|
+
The export tool runs as an asynchronous core job in process. Poll its returned
|
|
44
|
+
core job id using the advertised core polling contract; never resubmit a timed
|
|
45
|
+
out launch to poll it. `export_status` reads the atomic manifest for completed
|
|
46
|
+
count and per-tree states during execution. Cancel through the owning service's documented `DELETE /v1/jobs/{id}` endpoint or the gateway cancellation contract. Core cancellation is checked
|
|
47
|
+
before launch, between trees, and at most every 250 ms while waiting on the
|
|
48
|
+
owned exporter. Cancellation or timeout kills and reaps only that child,
|
|
49
|
+
leaves the partial output/manifest for diagnosis, and prevents the next tree.
|
|
@@ -0,0 +1,114 @@
|
|
|
1
|
+
# Capability audit
|
|
2
|
+
|
|
3
|
+
Audited against Modeler 10.1.0 on Windows; native graph coverage updated
|
|
4
|
+
2026-09-10. This adapter covers experimental native file graph authoring,
|
|
5
|
+
official file export and destination handoff, **not the whole Modeler**.
|
|
6
|
+
`inspect_capabilities` reports implementation scope without requiring a GUI;
|
|
7
|
+
it is not a live document or license probe.
|
|
8
|
+
|
|
9
|
+
## Exposure and packaging
|
|
10
|
+
|
|
11
|
+
Four packaged Skills contain sixteen adapter tools. Core job/skill lifecycle
|
|
12
|
+
and UI tools are shared infrastructure and are not counted as Modeler features.
|
|
13
|
+
Every listed tool has a committed input/output object schema and script in the
|
|
14
|
+
wheel. `scripts/check_wheel.py` installs the built wheel outside the checkout,
|
|
15
|
+
checks the imported module origin, discovers and loads all four Skills, and
|
|
16
|
+
calls the capability entry point. CI runs this gate after building the sdist
|
|
17
|
+
and wheel. The repository remains a source preview; building a wheel does not
|
|
18
|
+
mean it has been published to a package index.
|
|
19
|
+
|
|
20
|
+
The audit also replaced ineffective top-level safety fields with standard MCP
|
|
21
|
+
`annotations` hints. Read operations are now identified as read-only, while
|
|
22
|
+
batch export remains destructive and asynchronous. A registry-level regression
|
|
23
|
+
test and the installed-wheel gate check these annotations and all tool scripts.
|
|
24
|
+
|
|
25
|
+
| Implementation | Typed tool (Skill prefix omitted) | Skill | Runtime evidence / boundary |
|
|
26
|
+
| --- | --- | --- | --- |
|
|
27
|
+
| Capability status | `inspect_capabilities` | discovery | Available without a GUI; previously only reachable through GUI runtime inspection |
|
|
28
|
+
| Installed samples and presets | `discover_content` | discovery | Games and VFX presets; VFX counts now included |
|
|
29
|
+
| Asset fingerprint | `inspect_asset` | discovery | File size/hash; no SPM generator parsing |
|
|
30
|
+
| Preset properties | `inspect_preset` | discovery | Read-only INI sections, including requested animation options |
|
|
31
|
+
| Export preflight | `plan_export` | discovery | Existing SPM/preset and new output; does not prove license or preset effectiveness |
|
|
32
|
+
| Exact GUI binding | `inspect_runtime` | discovery | PID/HWND identity only; no live model inspection; separate GUI binding required |
|
|
33
|
+
| Unreal descriptor | `inspect_unreal_project` | discovery | Explicit entries only; absent plugin entry is unknown, not disabled |
|
|
34
|
+
| Official export | `export_batch` | export | Six formats exported; bounded batch, hashes, atomic manifest and partial failure evidence |
|
|
35
|
+
| Batch progress | `export_status` | export | Per-tree status; no vendor-internal percentage or restart recovery |
|
|
36
|
+
| File verification | `verify_export` | export | Hashes, headers, explicit STMAT references; not full binary dependency or animation acceptance |
|
|
37
|
+
| Destination handoff | `plan_import` | export | Verified files and required target readback; no destination mutation |
|
|
38
|
+
| Native generator graph | `inspect_graph` | nodes | Actual SPM/STT generators and links; no live document state |
|
|
39
|
+
| Generator properties | `inspect_properties` | nodes | Stored scalar fields and indexed spline components |
|
|
40
|
+
| Installed templates | `discover_templates` | nodes | Generator STT and project SPM files, discovered from installation |
|
|
41
|
+
| Generator catalog | `inspect_authoring_catalog` | nodes | 51 installed generator templates, 16 types; parse failures explicit |
|
|
42
|
+
| File graph authoring | `edit_graph` | nodes | Atomic operation batches to new files; seven native-exported showcase stages |
|
|
43
|
+
|
|
44
|
+
The routing-only `speedtree-official` Skill has no tools. It now declares the
|
|
45
|
+
SpeedTree family and its discovery/export dependencies. Its repository mirror
|
|
46
|
+
is retained for direct Skill consumers; the runtime reads the packaged copy.
|
|
47
|
+
Core's Python API loads this routing guide, but CLI 0.20.22 with Core 0.20.21 reported a 502 for
|
|
48
|
+
the zero-tool load even while the guide became loaded. This shared lifecycle
|
|
49
|
+
issue is distinct from executable Skill loading and remains a shared runtime
|
|
50
|
+
limitation; it is not masked by adding an artificial tool.
|
|
51
|
+
`select_samples`, runtime lifecycle functions, hashing, and sidecar readers
|
|
52
|
+
are library helpers, not missing independent editing features.
|
|
53
|
+
|
|
54
|
+
## Feature limits
|
|
55
|
+
|
|
56
|
+
| Feature | Official boundary reviewed | Adapter coverage | Acceptance |
|
|
57
|
+
| --- | --- | --- | --- |
|
|
58
|
+
| Modeling / generator graph | Observed SPM/STT XML; no supported live Modeler authoring SDK identified locally | Experimental generator, link, scalar and curve-component file edits | Willow and grass stages regenerated by licensed Modeler CLI; no live document edits |
|
|
59
|
+
| Materials | CLI exports textures and STMAT; target scripts may reconstruct shaders | Sidecar inspection and file transport only | UE Palm required explicit material/UV repairs; no Modeler material editor |
|
|
60
|
+
| LOD | Games presets can request existing source LODs | Preset inspection and export | Three UE Palm LODs read back; no LOD authoring or transition playback test |
|
|
61
|
+
| Wind | VFX Wind preset requests point-cache animation; native games data is target-specific | Preset requests recorded; existing generator fields accessible | Dynamic output not established in the tests below; no Fan authoring |
|
|
62
|
+
| Collision | Authoring and target runtime are separate from file verification | No collision editing tool | Post-unit-conversion collision not accepted |
|
|
63
|
+
| Batch cancellation | Adapter owns the launched CLI child; Core owns the job | Core DELETE job route, no duplicate job manager | Active child termination verified; source GUI preserved in the prior live test |
|
|
64
|
+
| Import / plugin setup | Destination adapter and user authorization own configuration | Handoff only | No silent plugin install; target availability must be discovered |
|
|
65
|
+
|
|
66
|
+
Unsupported-by-this-adapter does not mean the vendor product lacks the feature.
|
|
67
|
+
Shader include files and an SDK export preset are not a Modeler authoring API.
|
|
68
|
+
No undocumented process injection or guessed function signatures are used.
|
|
69
|
+
The [native capability matrix](native-capability-matrix.md) records application
|
|
70
|
+
features beyond the generator graph and the verified entry needed for each gap.
|
|
71
|
+
|
|
72
|
+
## Wind investigation
|
|
73
|
+
|
|
74
|
+
The installed `Wind.ini` requests wind, 30 FPS, five seconds, looping, no gusts,
|
|
75
|
+
and the current source wind strength. The existing `inspect_preset` tool reads
|
|
76
|
+
these settings, and `export_batch` records them as `requested_animation` while
|
|
77
|
+
leaving `animation_validation=requires_target_time_samples`.
|
|
78
|
+
|
|
79
|
+
Using that preset, both Games Palm and VFX Palm exported valid Alembic meshes.
|
|
80
|
+
Blender's official importer evaluated frames 1, 16, 31, 61, 91, and 151. All
|
|
81
|
+
position hashes were identical within each asset, with maximum displacement
|
|
82
|
+
zero; no mesh-sequence modifier was created. Games Palm FBX export produced
|
|
83
|
+
no MCX point-cache file. Moving the official options before the export command
|
|
84
|
+
also produced no cache. These results establish failure to obtain dynamic
|
|
85
|
+
output for these requests, not the root cause or universal lack of vendor wind
|
|
86
|
+
support. Source wind configuration, preset application, and target runtime wind
|
|
87
|
+
must be investigated separately. A static screenshot is not wind acceptance.
|
|
88
|
+
|
|
89
|
+
A separate UE 5.5 diagnostic used the unchanged native ST9 mesh data and
|
|
90
|
+
isolated material copies. The imported wind switches and packed wind UVs were
|
|
91
|
+
present, but sampled default driving scalars were zero. Explicit nonzero
|
|
92
|
+
material parameters produced changes in 45,699 and 45,305 pixels across two
|
|
93
|
+
fixed-camera frame pairs, confined to the tree with no background changes.
|
|
94
|
+
The stable zero-wind control changed zero pixels. This proves diagnostic GPU
|
|
95
|
+
wind activity after target-side overrides, not correct source wind export,
|
|
96
|
+
source fidelity, or approved artistic motion. The new twelve mesh/material/
|
|
97
|
+
texture packages were saved and reloaded with valid references.
|
|
98
|
+
|
|
99
|
+
The earlier static showcase was captured in a live editor session. On reopening
|
|
100
|
+
the original baseline, some material packages were missing; that capture must
|
|
101
|
+
not be used as proof of persistent material dependencies. The new diagnostic
|
|
102
|
+
uses separately saved dependencies and leaves the original baseline unchanged.
|
|
103
|
+
|
|
104
|
+
Official references: [Modeler CLI](https://docs.unity3d.com/speedtree-modeler/manual/export-from-the-command-line.html),
|
|
105
|
+
[VFX export and animation](https://docs.unity3d.com/speedtree-modeler/manual/vfx-export-options.html).
|
|
106
|
+
See [target compatibility](compatibility.md) for measured units and materials.
|
|
107
|
+
|
|
108
|
+
## Cleanup scope
|
|
109
|
+
|
|
110
|
+
Only identified test/lint/bytecode caches and empty benchmark directories are
|
|
111
|
+
eligible for local cleanup after containment and ownership checks. Dirty source
|
|
112
|
+
files, source assets, exported bundles, acceptance records, distributable
|
|
113
|
+
archives, existing environments, and routing Skill mirrors are retained.
|
|
114
|
+
Local cleanup receipts are not included in the public package.
|
|
@@ -0,0 +1,79 @@
|
|
|
1
|
+
# Format and target coverage
|
|
2
|
+
|
|
3
|
+
Observed with SpeedTree Modeler 10.1.0 on Windows, 2026-09-07. A successful
|
|
4
|
+
run describes this licensed installation; it is not a guarantee for every
|
|
5
|
+
edition, subscription, or source asset. Each permitted export format below
|
|
6
|
+
was generated by the official CLI and checked for a recognizable file header,
|
|
7
|
+
nonempty mesh, file inventory hashes, and explicit material sidecar references
|
|
8
|
+
where present. Vendor assets and raw local logs are not distributed here.
|
|
9
|
+
|
|
10
|
+
| Format | Export evidence | Unreal 5.5 | Blender 5.2 | Maya 2026 |
|
|
11
|
+
| --- | --- | --- | --- | --- |
|
|
12
|
+
| ST9 | Palm, Oak, Conifer + textures | 3 StaticMeshes and material dependencies read back | Requires conversion | Requires conversion |
|
|
13
|
+
| ST | Palm + textures, through SpeedTree MCP | Not imported in this run | Requires conversion | Requires conversion |
|
|
14
|
+
| FBX | Palm; 6 materials, 37 map references | Not checked | Mesh read back: 6,081 vertices, 8,498 faces, 6 material slots | Same mesh counts; saved and reopened |
|
|
15
|
+
| OBJ | Palm; 6 materials, 37 map references | Not checked | Mesh read back: 6,081 vertices, 8,498 faces | Same mesh counts; saved and reopened |
|
|
16
|
+
| Alembic | Palm; 6 materials, 37 map references | Not checked | Mesh read back: 6,081 vertices, 8,498 faces | Same mesh counts; saved and reopened |
|
|
17
|
+
| USD | Palm; 6 materials, 37 map references | Not checked | Mesh read back: 6,081 vertices, 8,498 faces | Same mesh counts; saved and reopened |
|
|
18
|
+
|
|
19
|
+
3ds Max/Houdini/Unity handoffs use the same bundle contract; destination validation is
|
|
20
|
+
owned by their adapters and is not claimed by this baseline. USD, Alembic, and
|
|
21
|
+
other importer availability must be discovered in the particular target.
|
|
22
|
+
GLTF/GLB, legacy SRT, STE, and XML are not export tool options in this release;
|
|
23
|
+
file discovery support does not imply verified export support.
|
|
24
|
+
|
|
25
|
+
## Feature preservation
|
|
26
|
+
|
|
27
|
+
| Feature | Native ST9/ST route | FBX/OBJ route | Alembic/USD route |
|
|
28
|
+
| --- | --- | --- | --- |
|
|
29
|
+
| Geometry | Three ST9 meshes read back in UE | FBX and OBJ geometry read back in Blender | Alembic and USD geometry read back in Blender |
|
|
30
|
+
| Materials/textures | Engine importer generates materials | STMAT semantic maps retained; target shader conversion required | STMAT maps retained; shader conversion required |
|
|
31
|
+
| Transparent leaves | Palm appearance checked after explicit UV/material repairs on a duplicate | Opacity maps and two-sided metadata present; rendered result not checked | Same; cache import alone does not build leaf shaders |
|
|
32
|
+
| LOD | Palm has 3 UE mesh LODs: 8,498 / 5,396 / 2,346 triangles | Preset-dependent; no preservation claim for this VFX sample | No LOD preservation claim for this VFX sample |
|
|
33
|
+
| Wind/animation | Runtime-specific; dynamic playback not checked | Static sample; no wind transfer claim. OBJ is static geometry | Static sample; animated cache export requires a separate preset/test |
|
|
34
|
+
| Instances | No preservation claim | No preservation claim | No preservation claim |
|
|
35
|
+
| Units/axes | Explicit vertex conversion gives 12.34384 m on the repaired Palm duplicate | FBX encodes feet and gives 12.34384 m Blender height; OBJ needs explicit consumer normalization | USD encodes feet and gives the same Blender world dimensions; Alembic needs consumer normalization |
|
|
36
|
+
| Editable generators | Remain in original SPM | Not transferred | Not transferred |
|
|
37
|
+
|
|
38
|
+
Official references: [CLI](https://docs.unity3d.com/speedtree-modeler/manual/export-from-the-command-line.html),
|
|
39
|
+
[VFX options](https://docs.unity3d.com/speedtree-modeler/manual/vfx-export-options.html),
|
|
40
|
+
[Games options](https://docs.unity3d.com/speedtree-modeler/manual/games-export-options.html),
|
|
41
|
+
[Unreal integration](https://docs.unity3d.com/speedtree-modeler/manual/import-to-unreal.html).
|
|
42
|
+
The feature table distinguishes configured intent and measured results; it
|
|
43
|
+
must not be interpreted as an animation, visual, or game-runtime acceptance.
|
|
44
|
+
|
|
45
|
+
## Acceptance findings that remain open
|
|
46
|
+
|
|
47
|
+
All four interchange formats reconstruct the same Palm vertex geometry after
|
|
48
|
+
explicit mathematical unit/axis normalization. FBX and USD encode feet and
|
|
49
|
+
produce a 12.34384 m world height in Blender. OBJ and Alembic need consumer
|
|
50
|
+
unit/axis configuration. This run's preset requests for centimeter/Z-up were
|
|
51
|
+
not reflected in the output metadata; changing CLI argument order or setting
|
|
52
|
+
TransformScale=30.48 did not change the ST9 bounds.
|
|
53
|
+
|
|
54
|
+
UE 5.5 ST9 imports measured only 40.49815 cm tall. Its native ST9 factory path
|
|
55
|
+
does not use the legacy TreeScale option. Source-unit conversion therefore
|
|
56
|
+
requires a separately verified normalization step, not an assumed importer
|
|
57
|
+
flag. The baseline native materials resolved textures but rendered fallback
|
|
58
|
+
surfaces. A separate Palm duplicate now renders correct foliage after material
|
|
59
|
+
instance refresh, a corrected Subsurface map, and UV0 V inversion on all three
|
|
60
|
+
LODs. Build-scale settings alone did not survive the UV rebuild consistently;
|
|
61
|
+
explicit conversion of all three LODs' source vertices by 30.48 produced final
|
|
62
|
+
bounds of 1,234.383705 cm with build and actor scales both 1. Collision scale and
|
|
63
|
+
dynamic wind were not tested. See the [real capture and repair notes](showcase.md).
|
|
64
|
+
|
|
65
|
+
Blender detailed checks also found six empty Alembic material node graphs and
|
|
66
|
+
invalid OBJ normal image references with a trailing MTL bump option. Existing
|
|
67
|
+
sidecar references are complete, but this is not equivalent to correct target
|
|
68
|
+
shader reconstruction. Vendor-provided DCC importer scripts may help, but
|
|
69
|
+
must be discovered in the local installation and checked for target-version
|
|
70
|
+
compatibility; they are not redistributed by this adapter.
|
|
71
|
+
|
|
72
|
+
Maya 2026 independently measured the same 12.34384 m height for FBX and USD.
|
|
73
|
+
In its centimeter scenes, OBJ and Alembic were approximately 0.40498 m tall
|
|
74
|
+
along Z and require consumer unit/axis conversion. OBJ produced six invalid
|
|
75
|
+
texture paths equal to `1`, consistent with the trailing bump option; Alembic
|
|
76
|
+
used a default shader. USD's 23 image paths existed. FBX had 17 existing
|
|
77
|
+
relative image references and one empty file node, with runtime texture
|
|
78
|
+
resolution unverified. Saving and reopening preserved all four mesh counts;
|
|
79
|
+
Maya rendering, wind, and LOD behavior were not accepted by this test.
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
@@ -0,0 +1,58 @@
|
|
|
1
|
+
# Native capability coverage
|
|
2
|
+
|
|
3
|
+
Target: SpeedTree Modeler 10.1 on Windows. This inventory separates native
|
|
4
|
+
file access, official commands, and live Modeler commands. It does **not**
|
|
5
|
+
claim that every feature of the application has a callable authoring API.
|
|
6
|
+
No UI automation is used to fill native gaps.
|
|
7
|
+
|
|
8
|
+
## Entry points and evidence
|
|
9
|
+
|
|
10
|
+
| Product capability | Native entry | Exposed implementation | Evidence / remaining boundary |
|
|
11
|
+
| --- | --- | --- | --- |
|
|
12
|
+
| Generator inventory | SPM/STT `Generators` | `inspect_graph`, `inspect_authoring_catalog` | 51 installed templates parsed; 16 generator types |
|
|
13
|
+
| Generator create/copy/delete/name/visibility | Generator XML and GUIDs | `edit_graph` | Validated file operations; Modeler export required |
|
|
14
|
+
| Generator connections | `Links` with source/target GUIDs | Connect/disconnect, cycle and reference checks | Reloaded output graph; staged exports |
|
|
15
|
+
| Branches, fronds, leaves | Generator properties | All stored property/component names accessible | Willow and grass native export cases |
|
|
16
|
+
| Base, reference, mesh branch, conversion, stitches | Installed generator templates | Template instantiation and stored properties | Structure exposed; separate geometry recipes not yet validated |
|
|
17
|
+
| Caps, fins, knots, zones, decals, mesh detail, targets | Installed generator templates | Template instantiation and stored properties | Structure exposed; separate geometry recipes not yet validated |
|
|
18
|
+
| Batched leaves | Installed generator template | Template instantiation and stored properties | Structure exposed; separate geometry recipe not yet validated |
|
|
19
|
+
| Distribution and random seeds | `Generation:*`, `Random Seeds:*` properties | Existing scalar/component editing | Vendor enums/ranges are not published in the XML |
|
|
20
|
+
| Profile and parent curves | Stored spline control points | Existing scalar control-point editing | No arbitrary curve point insertion/deletion yet |
|
|
21
|
+
| Wind, seasons, growth, LOD, UVs, normals, vertex colors | Stored generator property groups | Existing generator fields accessible | Field readback does not prove dynamic evaluation or final quality |
|
|
22
|
+
| Fan, global lighting, document controls | Separate SPM objects | Preserved, not exposed for mutation | Needs a typed object contract and host evaluation tests |
|
|
23
|
+
| Materials, textures, meshes, displacements, asset sets | `Assets` and external files | Existing exports/sidecar inspection | No complete asset-authoring or material-assignment transaction |
|
|
24
|
+
| Forces, hand drawing, individual generated-node edits | Separate authoring state / node overrides | Existing state preserved where unaffected | No callable live authoring integration verified |
|
|
25
|
+
| Collision generation | Modeler operation / saved collision objects | No native command exposed | Requires a verified command bridge or documented SDK |
|
|
26
|
+
| Ambient occlusion computation | Modeler operation | No native command exposed | Same boundary; export is not an AO command |
|
|
27
|
+
| Save and reopen authoring files | SPM/STT files | Exclusive new-file writes and parse readback | Does not update an already open document |
|
|
28
|
+
| VFX and games export | Official `-export`, `-export_game`, `-export_options` | Export, status, cancellation, verification | Six supported output extensions; product/license dependent |
|
|
29
|
+
| Batch control | Owned Modeler child + Core jobs | Progress, timeout, active-job cancellation | No vendor-internal progress or session reconstruction |
|
|
30
|
+
| Interactive viewport, selection, undo/redo, timeline playback | Live Modeler UI state | No native bridge verified | CUA canceled; not replaced by input automation |
|
|
31
|
+
| Modeler screenshot/viewport rendering | No reviewed CLI command | Not exposed | Showcase visualization must label exported-geometry renders honestly |
|
|
32
|
+
| Engine integration | Exported ST/ST9 and destination importer | Verified handoff/preflight | Destination owns import and acceptance |
|
|
33
|
+
| Licensing, preferences, application updates | Vendor-owned lifecycle | Not exposed as authoring mutations | Not evidence of a missing generator API |
|
|
34
|
+
|
|
35
|
+
`inspect_authoring_catalog` generates the installed generator inventory rather
|
|
36
|
+
than hard-coding a list of node types. New or unreadable formats are reported
|
|
37
|
+
as failures. Property enumeration reports stored fields, including components
|
|
38
|
+
of curves; it does not infer undocumented property meanings or legal ranges.
|
|
39
|
+
|
|
40
|
+
## C++ / C# bridge boundary
|
|
41
|
+
|
|
42
|
+
The installed Modeler includes Qt libraries and external-DCC import scripts.
|
|
43
|
+
The reviewed installation contains no Modeler authoring headers, plugin SDK,
|
|
44
|
+
or documented command interface for live node mutations. Qt libraries are not
|
|
45
|
+
proof of an authoring API. The [Runtime SDK](https://docs.unity3d.com/speedtree-runtime-sdk)
|
|
46
|
+
is a separate runtime integration; an engine importer also cannot establish a
|
|
47
|
+
Modeler authoring interface.
|
|
48
|
+
|
|
49
|
+
A complete live bridge needs verified host commands and signatures, a version
|
|
50
|
+
handshake, main-thread dispatch, document/revision identity, typed arguments,
|
|
51
|
+
undo transactions, and authoritative post-operation state. Until that boundary
|
|
52
|
+
is available and tested, full native application coverage remains incomplete.
|
|
53
|
+
Adding a stub hook, guessed addresses, or synthetic success responses would
|
|
54
|
+
not close these gaps.
|
|
55
|
+
|
|
56
|
+
References: [Modeler manual](https://docs.unity3d.com/speedtree-modeler/manual/index.html),
|
|
57
|
+
[official command-line export](https://docs.unity3d.com/speedtree-modeler/manual/export-from-the-command-line.html),
|
|
58
|
+
[generator template commands](https://docs.unity3d.com/speedtree-modeler/manual/generation-editor-toolbar-reference.html).
|