Skip to content

feat(spot)!: assemble spots and rooms from the exported objects - #73

Merged
nichinichisou0609 merged 1 commit into
redesign/depotfrom
redesign/spot-products
Oct 15, 2026
Merged

nichinichisou0609 merged 1 commit into
redesign/depotfrom
redesign/spot-products

Conversation

@nichinichisou0609

Copy link
Copy Markdown
Collaborator

Spots and rooms become products assembled from the exported objects, as Live2D models are.

Products

  • room.gltf: a background key (Spot/<place>/Background/<place>) → room.glb and room.json, manifest rooms/<place>.json. The meshes the background prefab draws are baked into the prefab's space from each Mesh's local glTF; materials are translated from the Material document and its Shader's parsed form; textures come from the Texture2D images and settings. room.json lists what draws nothing (nullMaterialSubmeshes, nullMeshFilters, emptyMeshes).
  • spot.files: a situation key (Spot/<place>/<situation>/<situation>) → spot.json and spine/*, manifest spots/<situation>.json. Its master input is the spot's record of the three master tables, made at planning.

Neither keeps objects; their files are all they hold.

Pipeline and commands

  • ProductStage.MASTER names the master tables a product stage reads; the planning fact master is set when such a stage is in the pipeline, and export assets --layout product gives it no subjects without master data.
  • export spot SPOT_ID -o OUT and export room KEY -o OUT run the depot pipeline for their products and write the products' files, with the options of export live2d.
  • content.prefabs reads a prefab document as a hierarchy (parents, world matrices, activity, in-prefab references); the Live2D, room and spot assemblers use it.
  • The story host's bundle reader of a spot is content.hostspot.
  • The spine.skeleton stage is removed.

Breaking changes

  • export room writes OUT/room.glb and OUT/room.json and draws only the meshes of the background prefab's hierarchy.
  • export spot writes no shaders/, and spot.json has no resources.
  • room.json lists empty meshes as emptyMeshes.

Tests

  • Synthetic object tables for a background and a situation (tests/helpers/spotobjects.py) cover:
    • room(): baking, winding, uv, inactive nodes, shared materials and textures, texture transforms, and what draws nothing;
    • spot(): matrices, null references, skeleton files, a shared atlas, and the master record;
    • both stages: kinds, manifests, the master input, and planning without UnityPy.
  • The bundle-reader tests moved to tests/content/test_hostspot.py.

Two product stages make a spot from the unity.export results of the objects
its prefabs reach, never from a bundle:

- room.gltf (subject a background key Spot/<place>/Background/<place>,
  manifest rooms/<place>.json) writes room.glb and room.json: every mesh the
  background prefab draws, baked into the prefab's space from the Mesh
  objects' local glTF, with materials translated from each Material's
  document and its Shader's parsed form, and textures from the Texture2D
  images and settings. What draws nothing is listed in room.json:
  nullMaterialSubmeshes, nullMeshFilters and emptyMeshes (a mesh without
  vertices or triangles).
- spot.files (subject a situation key Spot/<place>/<situation>/<situation>,
  manifest spots/<situation>.json) writes spot.json and the Spine files under
  spine/. Its input `master` is the spot's record of MasterHomeSpot,
  MasterText and MasterStoryHomeSpotTapTalkEpisode, made at planning.

A product stage that reads master tables names them in MASTER; the planning
fact "master" is set when one is in the pipeline, and `export assets
--layout product` gives such a stage no subjects without master data.

content.prefabs reads a prefab document as a hierarchy (parents, world
matrices, activity, in-prefab references) for the Live2D, room and spot
assemblers. The story host keeps its bundle reader of a spot in
content.hostspot.

`export spot SPOT_ID -o OUT` and `export room KEY -o OUT` run the pipeline
for the spot's two products, or the one room, and write their files; they
take the options of `export live2d`.

BREAKING CHANGE: `export room` writes OUT/room.glb and OUT/room.json and
draws only the meshes of the background prefab's hierarchy; `export spot`
writes no shaders/ and spot.json has no `resources`; room.json lists
empty meshes as emptyMeshes; the spine.skeleton stage is removed.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
@nichinichisou0609
nichinichisou0609 merged commit 071cfa4 into redesign/depot Oct 15, 2026
8 checks passed
@nichinichisou0609
nichinichisou0609 deleted the redesign/spot-products branch October 15, 2026 06:19
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant