Skip to content

feat(models): the lounge furniture and the desk books and mugs from blender - #186

Merged
webdevcody merged 12 commits into
AgentSystemLabs:mainfrom
Shironex:feat/blender-lounge
Sep 29, 2026
Merged

webdevcody merged 12 commits into
AgentSystemLabs:mainfrom
Shironex:feat/blender-lounge

Conversation

@Shironex

Copy link
Copy Markdown
Contributor

Merge #185 first. This branch is stacked on it, so until #185 lands this PR also shows its four kitchen and plants commits (f8fd1bd, 88fcaa4, 5894841, 6ce0171). Once #185 is squash-merged I'll rebase this onto main, and only the commits below remain.

The lounge's couch, its pillows, the two poufs and the coffee table, and the books and mugs on the desks, modelled in Blender with the kit from #177. Every piece is its own object in its model file and is placed on its own, so a future office editor could move any of them around instead of the lounge being one big asset.

The sofa with its pillows, the coffee table and the two poufs in the props lab

The lounge in the office with people sitting on the couch and the poufs

The desk mug and the three arrangements of books in the props lab

What you get

  • A real couch. A blue three-seater with seat and back cushions, rolled arms and little wooden feet, facing the TV where the old one stood. You still sit at the same three places.
  • Throw pillows (red and yellow) leaning on the back cushions. They sit between the places now, so nobody sitting down goes through one, as they did with the old boxes.
  • Two floor poufs (green and yellow) with piping and a button on top, where the squashed spheres were, with the same seats turned to the TV.
  • A round coffee table on a pedestal, the same size, its top still at 0.46 where the Halloween pumpkin stands.
  • Desk books in three arrangements that take turns on the desks with books: upright, one leaning on the others, and a stack lying flat. They're hardbacks with page edges and labelled spines.
  • A proper mug with a handle and coffee in it, in its desk's chair colour.
  • Which desk gets a mug, a plant or books hasn't changed, so the holiday gifts still go in the corner that's left free, and the laptop still has its spot.

How

  • blender/scripts/build_lounge.py writes src/client/models/lounge.glb: sofa, pillow, pouf, coffee_table. Each piece's origin is on the floor under its middle, facing +z. Its wood and frame materials use the same names as the desk furniture still to come, so they'll share a palette.
  • blender/scripts/build_desk_props.py writes src/client/models/desk_props.glb: mug, books_upright, books_leaning, books_stack.
  • world/models.ts: piece(model, part, paint) hands out a painted copy of one named object of a preload model, or an empty group if the model didn't load. The plants, the lounge and the desks all use it.
  • world/office.ts:
    • loungeCouch(), pouf(), coffeeTable(), deskMug() and deskBooks() build the pieces. The pillows hang under the couch, so a click on one still offers the couch.
    • Positions, seat ids and footprints stay as they were.
    • The couch's collider top goes from 0.55 to 0.47 and the poufs' from 0.6 to 0.42, the tops of their cushions, so you stand on them instead of floating above. Both are still above the step height, so you still jump up onto them.
  • tests/player.test.ts has its copies of those two colliders updated.
  • lab/props.ts: show=lounge, and show=desk_props (desks=1 puts them on real desks).
  • tests/lounge-model.test.ts, tests/desk-props-model.test.ts: piece and material names, sizes, seat and table heights, footprints clear of the laptop and the holiday spot, and triangle budgets.
  • Cost:
    • Lounge: sofa about 3k triangles, pillow about 0.7k, pouf about 1.5k, table about 1k.
    • Desks: about 0.3k triangles per piece. Draw calls go from about 21 to about 32 across 16 desks.

Checked

  • npm run typecheck and npm run build:client.
  • Tests on Windows: every file passes apart from the ones that fail the same way on a clean main there (workers.test.ts hangs, repos.test.ts fails two tests and then hangs, and one meetings.test.ts case expects / paths). Not run on macOS or Linux.
  • The props lab for both models.
  • The whole office built in the lab, with people sitting at all three couch places and on both poufs.

Follow-up

  • The poufs could squash down when someone sits on them, if we want that.

An espresso machine with a glowing light, a round-shouldered retro fridge with notes on it, and a counter with a wooden top and a sink, exported to src/client/models/kitchen.glb.
world/kitchen.ts puts the model where the old boxes stood, turned to face into the room, with the same colliders and the coffee machine's interactable only on the machine.
A monstera with split leaves on arching stalks, a snake plant with banded sword leaves in a glazed planter, a little ficus tree with a crown of shingled leaves, and an echeveria for the desks, exported to src/client/models/plants.glb. Each species is its pot, the old code-built pot's size, with everything growing out of it hung under the pot as its own object, so Christmas can hide the leaves and leave the pot.
office.ts clones a species out of plants.glb wherever a plant stood: the plants round the room take turns with the three floor species, the balcony and the loft skip the wide monstera, and the desks get the succulent. Their places and colliders stay as they were. holiday.ts now finds the leaves by name, so the Christmas tree is never among what it hides, and the props lab lines the four species up (show=plants).
models.ts gets piece(): a painted copy of one named object in a preload model, or an empty group if the model didn't load. plant() now uses it, and the lounge and the desk things will too, so a model holding several things placed each on their own has one way to hand them out.
A chunky diner mug with a round handle and coffee in it, and hardback books in three arrangements (three standing side by side, two standing with one leaning on them, and a short pile lying flat), exported to src/client/models/desk_props.glb. Each is a root of its own standing on the desk at its origin, spines toward the chair. The mug is the old code-built mug's size with its body round its origin, and every arrangement fits the old three boxes' footprint, so they stay clear of the laptop, the holiday present and whoever dances on the desk.
office.ts takes the desks' knick-knacks out of desk_props.glb with piece(): deskMug() paints the mug's body in the desk's chair color as before, and deskBooks() hands out an arrangement of books, the desks with books taking turns with the three. Which desk gets the mug, the succulent or the books stays as it was, so the holiday presents and pumpkins still land in the free back corner, and the mug and books stand where the old ones did. The props lab lines the pieces up (show=desk_props), and with desks=1 shows them on desks built by buildDesk, which is exported for it.
…table

A plump three-seat sofa with seat and back cushions, rolled arms and little wooden feet, a throw pillow, a round floor pouf with piping round its middle and a button in its top, and a round coffee table on a pedestal, exported to src/client/models/lounge.glb as four pieces of their own so the office can place each one freely. They keep the old code-built lounge's sizes: the sofa is 4.2 by 1.0 with its seat cushions at 0.47, under the couch's hips and collider, the pouf is 0.4 tall, and the table's top is 0.9 round at 0.46, where the holiday pumpkin stands. The pieces are built the way the desk furniture is, with its Wood, Frame, WoodDark and Cloth material names.
office.ts places each piece of lounge.glb where the old boxes stood: the sofa turned to face the TV with a pillow either side of its middle, hung under the couch so a click on one still offers the couch, the coffee table, and a pouf for each of the two floor seats, each in its old color and turned to the TV. Every collider, seat id and seat radius stays as it was. models.ts preloads the model, and the props lab shows the pieces side by side (show=lounge).
The pillows lean on the back halfway between the couch's places, at 0.6 either side of its middle, where no sitter's body reaches; tucked against the arms they'd be in the side sitters' way, with only 0.17 m between a sitter's elbow and an arm. The couch's collider top comes down to its seat cushions (0.47) and each pouf's to its top (0.42), so standing on one no longer floats over it. The player test's copies of those colliders match.
# Conflicts:
#	src/client/lab/props.ts
#	src/client/world/office.ts
@webdevcody
webdevcody merged commit 267563c into AgentSystemLabs:main Sep 29, 2026
1 check passed
webdevcody added a commit that referenced this pull request Sep 29, 2026
main now has the 2D view (#182) and the blender lounge, desk props, kitchen
and plants (#186). Keep both in main.ts (slowFrames beside shovedAt) and in
whereabouts (📱 on the 2D view before the car line), and give the props lab's
lambo and ferrari the .root that supercar() returns now.
webdevcody added a commit that referenced this pull request Sep 29, 2026
…e maps branch

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
webdevcody added a commit that referenced this pull request Sep 29, 2026
…) into the desk signs branch

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
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.

2 participants