feat: AI asset pipeline track, Phase 2 (engine export presets) - #133
Merged
Conversation
glTF axis is export_yup; FBX is axis_forward/axis_up plus centimeter scale. The presets compose ai-mesh-cleanup and depsgraph-and-evaluated-data instead of restating them. Signed-off-by: TMHSDigital <154358121+TMHSDigital@users.noreply.github.com> Co-authored-by: Cursor <cursoragent@cursor.com>
export_scene.gltf does not take axis_forward/axis_up; export_scene.fbx does not take export_yup. The check is per-call so a file that correctly uses both exporters still passes. Signed-off-by: TMHSDigital <154358121+TMHSDigital@users.noreply.github.com> Co-authored-by: Cursor <cursoragent@cursor.com>
The same beacon under export_yup True vs False produces different disk POSITION and different reimported orientation. Inventory, gallery, catalog, and the engine-export-presets roadmap row ship with the example. Signed-off-by: TMHSDigital <154358121+TMHSDigital@users.noreply.github.com> Co-authored-by: Cursor <cursoragent@cursor.com>
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Summary
Phase 2 of the AI asset pipeline track: the engine export layer that Phase 3's
templates/ai-asset-pipeline-template/will call. One skill, three snippets, one rule plus harness extension, one example.engine-export-presetscomposesai-mesh-cleanupanddepsgraph-and-evaluated-data. Unity is Y-up glTF (export_yup=True). Godot in this repo is Z-up glTF (export_yup=False). Unreal is centimeter scale on both exporters, and the RNA split is the contract: glTF has noglobal_scale/axis_forward/axis_up; FBX has those and has noexport_yup.export_preset_unity.py,export_preset_godot.py,export_preset_unreal.pyapply selected-mesh transforms viatemp_override, passuse_selection, and treat Draco as opt-in (they do not duplicategltf_draco_export.py).use-correct-axis-rna-per-exporterplus a per-call extension oftests/check_import_export_rules.py(not a parallel harness). A mixed Unreal snippet that correctly calls both exporters still passes.export-preset-axisexports the same beacon under Unity and Godot, reads disk POSITION, re-imports, and asserts Unity stands while Godot lies along-Y.--same-axisexits 9.Out of scope (untouched):
templates/ai-asset-pipeline-template/, live-session agent bridge,LICENSE, issue #131, the 53 existing examples, generation-vendor integrations.VERSION/CHANGELOG.md/ CLAUDE**Version:**/ ROADMAP**Current:**/ plugin"version"are not hand-edited. Same convention as Phase 1 (#132); the release workflow owns those.ROADMAP: cleanup sub-track marked Shipped (v0.54.0); engine export presets marked Shipped; template and agent bridge left unpinned. The Blender 5.2 LTS sweep line is already
SHIPPED(PR smoke 5.2+4.5, weekly 5.1). There is no "July 2026" planned-sweep line to correct.Axis RNA (docs + live binaries)
Official current docs (inspection-only as HTML; confirmed live on the three local binaries below):
export_yup: https://docs.blender.org/api/current/bpy.ops.export_scene.html#bpy.ops.export_scene.gltfaxis_forward/axis_up/global_scale: https://docs.blender.org/api/current/bpy.ops.export_scene.html#bpy.ops.export_scene.fbxLive-run-proven RNA dump (
bpy.ops.export_scene.{gltf,fbx}.get_rna_type().properties) on all three local builds. Identical on 4.5.11, 5.1.2, and 5.2.1:export_yupaxis_forwardaxis_upglobal_scaleapply_unit_scaleexport_applyuse_mesh_modifiersuse_selectionexport_draco_mesh_compression_enableNo version branch for the axis kwargs. The example guards by requiring every passed glTF kwarg to exist on operator RNA.
Task 3 canary (verbatim)
Fixture:
.scratch/canary_axis_rna.py(gitignored, deleted after the run) with oneexport_scene.gltf(..., axis_forward="-Z", axis_up="Y")call and oneexport_scene.fbx(..., export_yup=True)call.Harness exit 1. Clean scan (
python tests/check_import_export_rules.pywith no extra paths) then printedimport/export anti-pattern checks passed.and exit 0, including the Unreal snippet that legally contains bothexport_yup(glTF) andaxis_forward(FBX).Example: live-run-proven
Probed and rendered on all three local binaries:
.scratch/blender-4.5.11-windows-x64/blender.exe4db51e9d1e1e).scratch/blender-5.1.2-windows-x64/blender.exeec6e62d40fa9).scratch/blender-5.2.1-windows-x64/blender.exe9e2066aef7ef)Check-only AABBs were byte-identical across the three:
--same-axison 5.2.1: both reimports stand, stderrERROR: orientations did not differ, exit 9.Render path framing (all three):
fill x=0.809(band 0.70..0.90), margins >= 0.088, exit 0. No cross-version visual shim needed. Gallery hero/preview encoded with Pillow from the 5.2.1 PNG (1280x720 webp quality 85 / 1200x675); hero 8272 bytes, preview 7780 bytes.Contact sheet:
docs/gallery/contact-sheets/export-preset-axis-contact-sheet.webpvs pinned set armature-bend / damped-track-aim / bmesh-gear.Verdict: stage darkness in family with damped-track-aim (the dark member of the pinned set); warm wedge on the back wall; subject fill 0.809; olive + cyan beacon reads at thumbnail size; standing vs lying is the orientation contract. Not an asset-type example; no asset sheet.
Generated gallery HTML inspected: index card alt is the full
teachesstring (no dotted-path truncation); detailwitnessescallout matchesgallery.json.Inspection-only
Test plan
python tests/check_import_export_rules.pyexits 0export-preset-axisexport-preset-axis