# Captain's quarters (CANTICLE) A whole cabin built from the user's reference picture (2026-10-13): black satin panels, a bunk alcove with a quilted padded back wall and a light strip, rumpled dark bedding, a large bright window on the left, an angular chair on a bolted steel base, a wall unit with a grille and white lettering to the right of the bunk. The picture shows one corner; the rest of the room is completed in the same language. ![reference view](previews/CQ_ref.png) ## Files | File | What | |---|---| | `CaptainsQuarters.blend` | the model, scene `Captains Quarters`; opens with a camera on the reference view, Cycles, lights | | `fbx/SM_CQ_*.fbx` | 18 part files, each at identity in its own space with its `UCX_` hulls | | `fbx/CaptainsQuarters_Assembled.fbx` | every part where it stands, under one root (no hulls) | | `quarters_layout.json` | where each part stands in the room (metres), its parent and how it moves | | `textures/` | 8 generated textures + `atlas.json` (UV cells of the decal and screen sheets) | | `previews/` | 8 renders: `ref`, `bunk`, `room_a`, `room_b`, `desk`, `door`, `chair`, `top` | | `build/` | the scripts that make all of the above, and their reports | ## Size and frame - Metres. **+X** runs along the bunk wall (to the right when you face the bunk), **+Y** points into the bunk wall, **Z** up. The origin is the centre of the floor footprint. - Footprint 7.2 x 4.4 m, ceiling 2.6 m. Clear floor 7.2 x 3.3 m; the remaining 1.1 m on the +Y side is the thick wall that holds the bunk alcove (2.2 x 1.44 m opening, 1.0 m deep) and the desk nook (2.16 x 1.22 m, 0.5 m deep). - The footprint is that of "Quarters A" in `models/M_Ship_v2_interior_season2.blend` (x 26.66..33.86, y 3.0..7.4): door on the passage side in the aft bay, bunk on the outer wall where the marker "Quarters A bed 1" stands. **It is not placed in the ship.** That room's floor is 0.9 m below the passage, with a stair inside the door, and it is 4.78 m high; this cabin needs a raised floor (or the stair kept in front of its door) when it goes in. ## Parts (44,664 triangles, 26 collision hulls) Static, origin at the room origin: | Mesh | Triangles | What | |---|---|---| | `SM_CQ_Wall_Bunk` | 4,356 | bunk wall: pillar with handle slot, collar and surround of the alcove, header with two vent cartridges, wall unit and rail, desk nook with screen, shelf and slab, corner column | | `SM_CQ_Bunk_Interior` | 8,882 | padded back wall (9 x 9 tufts), light cove, hatch lining on the left, control panel and reading light on the right | | `SM_CQ_Wall_Window` | 1,326 | window surround, inner frame, glass, light well behind it | | `SM_CQ_Wall_Door` | 5,016 | door frame and control pad, chart display, bench with two cushions and a padded back | | `SM_CQ_Wall_Locker` | 570 | locker carcass, vents, emergency kit box | | `SM_CQ_Floor` | 1,128 | floor plates, sill in front of the bunk, three tie-down fittings | | `SM_CQ_Ceiling` | 1,370 | ceiling plates, four light fixtures, vent | | `SM_CQ_Mattress` | 178 | | | `SM_CQ_Blanket` | 14,454 | cloth-simulated over the mattress and the alcove's sill; **one skin, needs a two-sided material** | | `SM_CQ_Pillow` | 3,952 | | | `SM_CQ_Props` | 244 | slate and mug on the desk | | `SM_CQ_Decals` | 28 | flat quads 1.2 mm off the surfaces, alpha from the decal sheet | Moving parts, each its own mesh with the origin on its axis, rotation 0 and scale 1 in its own file: | Mesh | Origin | Movement | Checked | |---|---|---|---| | `SM_CQ_Door_Leaf` | bottom centre of the leaf | slides 1.05 m along world **-X** inside the wall | every 5 cm | | `SM_CQ_Locker_Door_1..3` | front edge on the bunk-wall side, bottom | hinge on local Z, open = **-90 degrees** | every 5 degrees, and all three open | | `SM_CQ_Chair_Base` | swivel axis at floor level | fixed (the scene places it turned -28 degrees) | | | `SM_CQ_Chair_Seat` | top of the pedestal, child of the base at (0.03, 0, 0.37) | swivels freely about local Z | every 10 degrees | ## Materials and textures Principled values plus tileable generated textures; nothing is baked. UVs are a box projection in metres (1 UV unit = 1 m), except the quilt, the screens and the decals, which have their own. | Material | Look | Textures | |---|---|---| | `M_CQ_Satin`, `M_CQ_Matte`, `M_CQ_Floor` | black coated panels: satin, soft-touch, floor | `T_CQ_Panel_R` (roughness variation) | | `M_CQ_Gunmetal`, `M_CQ_Steel` | wall unit, vents, chair pedestal; base plate and bolts | `T_CQ_Panel_R` | | `M_CQ_Backing` | the dark surface seen in the gaps between plates | | | `M_CQ_Quilt` | padding | `T_CQ_Quilt_N` (3 x 3 tufts per tile) | | `M_CQ_Sheet`, `M_CQ_Mattress` | blanket and pillow; mattress and cushions | `T_CQ_Camo_BC` (multiplies the colour), `T_CQ_Fabric_N` | | `M_CQ_Grille` | perforated speaker grille | `T_CQ_Perf_BC`, `T_CQ_Perf_N` | | `M_CQ_Screen` | the three displays (emissive) | `T_CQ_Screens` | | `M_CQ_Decals` | lettering and symbols | `T_CQ_Decals` (alpha) | | `M_CQ_LightWarm/Cool/Red/Green`, `M_CQ_Window` | emissive strips, indicators, the window's light panel | | | `M_CQ_Glass`, `M_CQ_LightWell` | window pane; the white box behind it | | Lettering is generic (`CQ-01`, `COMMAND QUARTERS`, `EXIT`, `AID KIT`). The screens use the game's own names (CANTICLE, Tethys, the Throat, Anchorage) and the lore's cabin temperature of 26 °C. No brand names. ## Checks (`build/check_report.json`, `build/fbx_report.json`) - No n-gons, no zero-area faces, one UV layer on every mesh. - No two objects cross each other. The eight pairs that touch (mattress on the deck, chair on the floor, fittings against the alcove's walls, ...) stop touching when moved 1 mm off the contact. - Inside each merged mesh no two pieces cross (309 pieces tested against each other). - Door leaf, the three locker doors (singly and all open) and the chair seat clear everything through their travel. - Every part FBX was read back: triangle count, size, materials and hull count match the .blend. ## How it is built No booleans: every opening is a ring bridged between two outlines with equal vertex counts, every recess a ring with a floor. Chamfers and rounds are real geometry; shading is face-weighted normals with sharp edges above 50 degrees. Flat caps with more than four corners are triangulated. ``` python build/make_textures.py (system Python: numpy + PIL) blender -b --factory-startup --python build/build_quarters.py (needs the textures; writes the .blend) blender -b --factory-startup --python build/sim_bedding.py (needs the .blend; writes build/cache/*.json) blender -b --factory-startup --python build/build_quarters.py (again, now with blanket and pillow) blender -b CaptainsQuarters.blend --python build/check_quarters.py blender -b CaptainsQuarters.blend --python build/export_fbx.py blender -b CaptainsQuarters.blend --python build/render_previews.py -- ref bunk --samples 160 --res 1300 ``` ## Unreal Not imported. The FBX files follow the convention of `models/docking-arm` (data turned -90 degrees about Z, forward -Y, up Z, for the project's import settings "convert scene" + "force front X axis"). Emissive materials do not light an Unreal scene by themselves: the window, the two light strips and the four ceiling fixtures each need a light. The blanket, the decals and the glass need two-sided, masked/translucent and translucent materials. ## Limits - Materials are flat values with generated tileable textures. No baked texture sets, no LODs, no lightmap UVs. - The hulls are boxes; the chair and the doors have one box each. - The window is a placeholder: a white box with a glowing back wall behind the glass. On a deep-sea carrier it would be a screen or the sea. - The chair follows the picture only loosely (angular shell with side wings on a bent steel pedestal). - The far end of the room (desk, lockers) is dim in the renders: it is lit only by the window and the fixtures.