# 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 round lock escutcheon on the seam with a light ring (red locked → amber → green unlocked) and a handle disc that turns a quarter while the ring changes, 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) 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; there its paint, steel and dark materials wear the hinged door's scanned dark grey metallic treatment (`models/pressure-door/build/pd_look.py`, `look(prefix="M_PDS_", masks_name="T_PDS_Masks")`; this file keeps its own surfaces); also there, on the user's word of 2026-10-16 (*"delete that screen"*), the keypad on the left leaf is taken off (the ship reads a copy of `T_PDS_Masks` with its baked shadow cleared, `vessel-interior/textures/T_PDS_Masks_ship.png`). This file still has the keypad. **Not in the Unreal project.** **Second version** (2026-10-15, after the user's two marked-up pictures: *"delete those cables on top, and fix the door this is not the same door, handle should rotate examine the video all the pictures carefully"*): the cables are gone; the opening is squatter, as the reference; the leaves carry the reference's relief (a raised field with chamfers, a wide chevron band on the left with a vertical jog narrowing into the escutcheon, a wedge opening out to the right, the keypad in the chevron, both small hatches on the left leaf); the seam runs straight down the centre through the escutcheon (video frames 43–46: the ring light parts with the leaves, the handle bar stays with the left leaf); the handle is a separate part that turns a quarter clockwise while the ring changes colour and stays turned: bar across the band when shut, along the band when open (the user's two marked pictures "CLOSED" / "OPEN"; the video's brief wobble was read first and dropped). The first version is kept in `versions/v01_2026-10-15_first_build/` (and the 1.50 m wide state in `v03_2026-10-15_quarter_turn_1.50_wide/`). **Since the evening of 2026-10-15 this version is the one in the ship** (*"update the ship"*): the gate script's "sliding" entry carries its numbers (opening 1.40 × 2.10, R 0.32, centre 1.21, plate ±1.645, the handle as a fifth mover with its slider), `boarding_gate.check()` passes, pictures `Vessel_76`–`81` in `models/vessel-interior/previews`. The opening went from 1.50 to 1.40 m wide for that: the gate is 3.30 m between the kit's wall pieces, and with the handle disc overhanging the seam the pockets fit that only at 1.40 (height 2.10 stays). 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`: `05_lock_shut` bar across the band, `06_handle_turning` half way, `06b_lock_green` turned and green, `06c_left_leaf`); `wip_*` are EEVEE working shots. - `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`, `rig`, `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.10 m, corners R 0.32, its bottom 0.16 m above the floor (the bezel's lower band and light strip sit below it); centre 1.21 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.18 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; relief in front of that: field +6 mm, band +8 mm, escutcheon, handle bar to y −0.049 | | pockets | an 11 cm slot through the plate (y −0.060..0.05, x ±1.615, z 0.11..2.31); each leaf slides **0.845 m** (the left one's handle disc overhangs the seam by 12.5 cm and must clear the jamb too) and ends 3 cm from the slot's end; the proudest thing on a leaf (the handle bar) stays 1.1 cm from the slot's front wall | | lock | escutcheon Ø 0.48, light channel at R 0.157–0.173 between two rims, well Ø 0.28 through both leaves, handle disc Ø 0.25 with a 3.6 cm bar across it | | door plate | 3.29 m wide (x ±1.645: 5 mm inside the ship's gate opening), 3.0 m high, 0.375 m deep (y −0.075..0.30): it is this wide for the pockets | | whole module | 4.85 m wide (x ±2.425, the two columns), 3.40 m high (a dark recess on top), the console 0.42 m proud | | triangles | frame 6.5k, wall 8.6k, leaf L 3.6k, leaf R 3.2k, handle 0.4k, console 4.9k, camera 0.3k: about 27k | ## 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 dark recess above, 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. Leave it out where the ship's wall already is | | `SM_PDSliding_LeafL` | (−0.395, 0.005, 1.21) | **slides −0.845 m along X** (Unreal −84.5 cm); carries the keypad, the chevron band, both hatches and its half of the escutcheon | | `SM_PDSliding_LeafR` | (0.395, 0.005, 1.21) | **slides +0.845 m along X**; the wedge band, the lettering, its half of the escutcheon | | `SM_PDSliding_Handle` | the door axis (0, −0.028, 1.21), child of the left leaf | the handle disc with its bar: **turns a quarter about Y** (the door axis), clockwise seen from the front, during the lock phase and stays; built shut with the bar from lower left to upper right (Unreal −90° about Y, the y flip); `handle_turn` adds ±90° | | `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 escutcheon is split: half of the plate, the rims, the light channel and the well on each leaf; the halves stop 1 mm short of the seam, so nothing touches across it. The well is a notch through the leaf's field and front layer (the leaf is stacked layers; the well's floor is the back layer's face) — no booleans. The handle disc sits in that well 1 mm above its floor and 1.5 cm inside its wall, mounted on the left leaf and overhanging the right leaf's half; because the well is round and the disc is smaller, the right leaf slides away from it without touching (checked). 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) Four sliders on `PressureDoorSliding_Root`: - `open` (0 shut, 1 open): 0–0.30 the ring light red → amber → green while the handle turns a quarter clockwise (eased) and stays; 0.36–1.00 the leaves slide (eased). Closing runs it backwards: leaves first, then the handle turns back and the ring goes red. The timeline plays it at the video's pace: shut at frame 1, open at 60, held, shut again at 180, 30 fps; action `PressureDoorSliding | OPEN_CLOSE`. - `handle_turn` (−1..1): an extra ±90° on the handle for the game, 0 by default. `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, `handle_turn`, `arm_swing` and `cam_yaw` through 41, and tests every moving part against the frame and the wall in world space (triangle overlap), the leaves against each other and the handle against both leaves; `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), handle bar to the slot's front wall 1.1 cm (open), leaf to leaf 3.4 mm (the seam), handle disc to the well's floor 1.2 mm (it rides there), 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.585, inside the slot (±1.615) and the plate (±1.645); the handle disc then stands at x −0.97..−0.72, behind the jamb. Clashes found on the way and fixed: the camera body's back dome began inside its ball (first version), and the handle disc's back sat 1 mm inside the well's floor (the front is −Y, and I had counted the other way). ## Collision `UCX__NN` convex boxes, 27 in all: 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, recess, console bracket, junction box, conduits, hatch, vent panel), 1 per leaf (in the leaf's frame, so it slides with it), 1 for the handle disc, 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). 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, the keypad's lit strip | 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 far-left embossed panel and the barrel are not modelled (ship wall and props, not the door). The cables along the top were built in the first version and removed on the user's word. - The hatches' decals (a warning triangle, a diagonal) and the keypad's lettering are not drawn; the screens carry no text.