# Sliding pressure door for the vessel's main entrance, game-ready A double-leaf sliding door in a rounded-rectangle bezel, after the user's two reference renders and the video `Assets/0080.mp4` (2026-10-15): two leaves that slide sideways into pockets in the wall, a split lock ring on the seam whose light goes red → amber → green before the leaves part (the bar across it does not turn in the video), white light strips at the top and bottom of the bezel, a grab rail at each side, a sign over the door, a camera, a console on a swing arm at the left, a service column at the right (hatch, four lamps, vent and warning panel, floor grille), cables draped along the top and a floor cable. **It is a pressure door, not an airlock** (the user's word): no "airlock" lettering anywhere. It is one of two candidates for the vessel's main entrance (the boarding gate); the other is the hinged door in `models/pressure-door`. **Since 2026-10-15 (about 11:00) it is in the ship** (`models/M_Ship_v2_interior_season2.blend`, in place of the kit's lattice gate, with the opening cut through the hull: `models/vessel-interior/build/boarding_gate.py`, `apply(door="sliding")`; the hinged door's version of the file is `models/M_Ship_v2_interior_season2_hinged-door_2026-10-15.blend`), so the user can compare the two. **Not in the Unreal project.** Built headless in a Blender instance of its own (`blender.exe -b --factory-startup --python build/sd_run.py -- `), not through the MCP. Nothing here is a boolean; every surface is quads except the caps (triangle fans) and the flat caps and lettering (triangulated). ## Files - `PressureDoorSliding.blend` (Blender 5.2): the door, rigged. Collections: `PressureDoorSliding` → `PDS | static`, `PDS | moving`, `PDS | collision` (UCX hulls, excluded from the view layer); `Studio` (camera, lights, a floor plane; not exported). - `fbx/SM_PDSliding_.fbx`: one file per mesh at its own pivot, with its `UCX_` hulls. `fbx/PressureDoorSliding_Assembled.fbx`: everything shut, for a quick look. `fbx/verify_report.json`: what a re-import gives. - `PressureDoorSliding_layout.json`: pivots, motion, timing, materials, the check's numbers, in Unreal units. - `textures/T_PDS_Masks.png` (4096, baked: R occlusion, G edges, B crevices), `T_PDS_Screens.png` (emissive: the monitor's display, the leaf keypad, the sign's dark ground; no lettering). The tiling sets are the Season 2 pack's own files, read in place from `../vessel-interior/textures/ModSci_Engineer/Textures` (**relative paths: keep the .blend here**). - `previews/`: Cycles pictures (`PressureDoorSliding_01..10`); `wip_*` are EEVEE working shots of the first build. - `build/`: `sd_lib.py` (geometry helpers: the hinged door's, plus loops, clipping and lofts), `sd_build.py` (the parts), `sd_rig.py`, `sd_check.py` (travel check), `sd_surfaces.py` (UVs, bake, materials), `sd_export.py` (UCX, FBX, layout), `sd_studio.py`, `sd_verify_fbx.py`, `sd_run.py` (the headless driver: stages `build`, `surfaces`, `check`, `export`, `render`, `verify`, `materials`, `redo:`), `check_report.json`. ## Scale, axes, size 1 unit = 1 m, Z up, floor at z = 0. The plain wall's front face is y = 0; the front is −Y (the side the references show). Seen from the front, +X is right. In Unreal: **ue_cm = (x, −y, z) × 100** (the project's FBX pair, as for the docking arm and the hinged door; the data is turned −90° about Z on export). | | | |---|---| | clear opening | 1.40 × 2.20 m, corners R 0.30, its bottom 0.16 m above the floor (the bezel's lower band and light strip sit below it); centre 1.26 m up | | reveal | 45.5 cm deep: bezel front at y −0.125, the ship-side back bezel at y 0.33 | | leaves | each 0.74 × 2.28 m (0.04 m larger than the opening all round: the rebate behind the dark lip), 7 cm thick (y −0.03..0.04), faces 9.5 cm behind the bezel front | | pockets | a 10.5 cm slot through the plate (y −0.055..0.05, x ±1.49, z 0.11..2.41); each leaf slides **0.72 m** and ends 3 cm from the slot's end; the proudest thing on a leaf (the ring) stays 1 cm from the slot's walls | | door plate | 3.04 m wide (x ±1.52), 3.0 m high, 0.375 m deep (y −0.075..0.30): it is this wide for the pockets | | whole module | 4.60 m wide (x ±2.30, the two columns), 3.40 m high (the cable trough on top), the console 0.42 m proud | | triangles | frame 6.5k, wall 17.0k, leaf L 1.9k, leaf R 3.0k, console 4.9k, camera 0.3k: about 34k | ## Parts and pivots | Mesh | Pivot | Motion | |---|---|---| | `SM_PDSliding_Frame` | world origin | static: door plate (front body with bezel, dark lip and surround panel; spacer round the slot; back body), light strips, two grab rails on brackets, sign with lettering, screws, camera bracket and ball | | `SM_PDSliding_Wall` | world origin | static: the two columns (0.78 m each, 3 cm back from the plate), the cable trough and its rail, the right column's hatch, lamps, vent/warning panel and floor grille, the left column's five conduits with straps, the console's wall bracket, stub and clamp ring, the junction box with four LEDs and a socket, the floor cable, the cable clips and seven cables. Leave it out where the ship's wall already is | | `SM_PDSliding_LeafL` | (−0.37, 0.005, 1.26) | **slides −0.72 m along X** (Unreal −72 cm) | | `SM_PDSliding_LeafR` | (0.37, 0.005, 1.26) | **slides +0.72 m along X** | | `SM_PDSliding_Monitor` | the post's axis (−1.90, −0.18, 1.26) | console (post, neck, monitor, tray arm, tray, keys): **yaw ±25° about Z** (Unreal ∓25°) | | `SM_PDSliding_Camera` | the ball (0.80, −0.16, 2.80) | camera body (pitched 20° down in the mesh): **yaw ±30° about Z** | | `M_PDS_Lock` (material) | | the ring light: ColorRamp Fac 0 red (locked), 0.5 amber, 1 green (unlocked) | The lock ring is split: half of the dark ring, the light channel, the dark recess floor and the bar on each leaf; the halves stop 1 mm short of the seam, so nothing touches across it. The leaf's lock recess is a notch in its front layer (the leaf is two stacked layers; the recess floor is the back layer's face) — no booleans. The console's post turns inside a clamp ring on the wall (2.5 mm clear); the camera's body starts 1 cm clear of its ball. ## Rig (Blender) Three sliders on `PressureDoorSliding_Root`: - `open` (0 shut, 1 open): 0–0.30 the ring light red → amber → green; 0.36–1.00 the leaves slide (eased). The timeline plays it as the video does: shut at frame 1, open at 60, held, shut again at 180, 30 fps; action `PressureDoorSliding | OPEN_CLOSE`. - `arm_swing` (−1..1): the console ±25°. `cam_yaw` (−1..1): the camera ±30°. Drivers are simple expressions (they run with Python auto-run off); the ring light is a driver on the material's ramp. Each moving part keeps `["closed_location"]` / `["closed_rotation"]`. **To render a state, set the frame**: the timeline keys drive the slider during a render. ## Checked `sd_check.py` runs `open` through 101 steps, `arm_swing` and `cam_yaw` through 41, and tests every moving part against the frame and the wall in world space (triangle overlap) and the leaves against each other; `check_report.json` has the numbers, the layout JSON carries them too. **No clash anywhere in the travel.** Smallest gaps: leaf to the slot's walls 1.0 cm (open), leaf to leaf 4 mm (the seam, shut), console to the wall 4.5 cm at full swing, camera to its bracket and ball 0.8 cm. The leaves' lowest point is 12 cm above the floor; open, their outer ends stand at x ±1.46, inside the slot (±1.49) and the plate (±1.52). One clash found on the way and fixed: the camera body's back dome began inside its ball. ## Collision `UCX__NN` convex boxes: 12 for the frame (above and below the opening, the two jambs, the bezel's four bands, the two rails, the sign, the camera bracket), 8 for the wall (columns, trough, console bracket, junction box, conduits, hatch, vent panel), 1 per leaf (in the leaf's frame, so it slides with it), 3 for the console (monitor, tray, post), 1 for the camera. The opening's rounded corners are not boxed (a capsule does not reach them). Cables and lamps have none. ## Surfaces Two UV layers on every mesh: `UVMap` (UV0, a unique unwrap into the shared mask atlas; screens into the screen atlas) and `UV_Tile` (UV1, metres, box-projected, for the tiling sets). | Material | What it is | Set | Tile | |---|---|---|---| | `M_PDS_Paint` | the ship's clean grey-white satin paint | ScratchedMetal under the tint; a few chips on exposed edges | 0.90 m | | `M_PDS_Dark` | graphite: lip, reveal, slot, ring, rails, grilles, monitor | StainedSteel colour, ScratchedMetal roughness | 0.70 m | | `M_PDS_Steel` | bright steel: brackets, post, screws, clamp straps | StainedSteel + scratch normal | 0.50 m | | `M_PDS_Orange` | the lettering, chevrons, the warning strip | ScratchedMetal under orange | 0.60 m | | `M_PDS_Rubber`, `M_PDS_CableRed` | cables, conduit insulation | ScratchedMetal roughness | 0.40 m | | `M_PDS_Light` | the two light strips | emissive white | | | `M_PDS_Lock` | the ring light | emissive, ramp red/amber/green (driven) | | | `M_PDS_LampRed`, `M_PDS_LampGreen` | the four lamps, the junction box LEDs, the camera's LED | emissive | | | `M_PDS_Screen` | monitor display, leaf keypad, sign ground | `T_PDS_Screens` emissive | | | `M_PDS_SignText` | the sign's lettering | emissive cyan | | | `M_PDS_Glass` | the camera's lens | clear glass | | Every opaque material reads the mask atlas: a little shade in crevices and occlusion, wear only on exposed edges (the ship is clean: no rust). The paint colour is one value; in Unreal make it a material-instance parameter. Pictures are Cycles. ## Not done / open - In the ship since 2026-10-15 (`boarding_gate.py`): the frame, leaves, console and camera as they are; the wall mesh cut at the wall face and to the gate opening's width (the ship's wall pieces are solid behind it); the frame's 2 cm under the floor cut off. Not in Unreal. The other candidate, the hinged door, was fitted first (its file state is kept as a copy). - The game has no door code: `PressureDoorSliding_layout.json` describes the motion for whoever writes it. - The video's room lighting (dark red → white) is the scene, not the door; the door's own lights stay lit. - The reference's cable ladder, far-left embossed panel and the barrel are not modelled (ship wall and props, not the door).