# Door robot arm — brief (2026-10-16) ## What the user asked (their words) With seven pictures of a white industrial robot arm on a rail (`reference/`): > 3d model this in blender. Understand the picture references and rig it accordingly and mechanically. > according to the open and close animation fit it to the scene. for the moon pool doors "Moonpool_Door_Fore", > "Moonpool_Door_Aft" are the door. also consider the rail accordingly. do 2 version with and without the grab limbs > shown in the red lined picture so there will be 2 versions side by side so I can change when I want. dont miss details and a few minutes later: > this will be standalone project dont add on the ship yet So: a **standalone** Blender project in `models/door-robot-arm/`. The ship file (`models/M_Ship_v2_interior_season2.blend`) is NOT touched. The doors, rails and pocket are copied in as reference context only, so the arm can be fitted and rigged to the doors' real open/close animation and appended into the ship later (the user will say when). ## The references (`reference/`) | File | What it shows | |---|---| | `ref1_side_left.jpg` | the whole arm from its left side, standing on its black carriage on a floor rail (square tube on posts) | | `ref2_three_quarter_left.jpg` | three-quarter view from the front-left | | `ref3_three_quarter_right.jpg` | three-quarter view from the right: the other side (cables, parallel-link truss, handles) | | `ref4_base_wire_closeup.jpg` | clay + wireframe close-up of the base: carriage, turntable, turret, rear pulley and belt, cable bundle, cable glands | | `ref5_lower_arm_wire_closeup.jpg` | clay + wireframe close-up of the lower arm: big joint cap, elbow cap, truss link, rod, bent-tube handle | | `ref6_wrist_redline_no_grab_limbs.png` | the forearm and wrist; the user crossed out the gripper's fingers in red and drew what replaces them: a short neck and a plate (version B) | | `ref7_front_base_wire.jpg` | clay + wireframe, front view of the base: perforated shoulder drum, ribbed centre strip, side caps, two cables, carriage | Finish (from ref1-3): satin white powder-coat paint with a fine texture; dark gunmetal / black metal on bearings, the carriage, inner plates and the gripper; black rubber cables and a black multi-cable bundle; small orange accents (rings round some joint caps, a hexagon outline, triangles, dots, stripes); bright steel screws and pins. No brand names or readable maker text anywhere (project rule). ## The scene it has to work in (copied from the ship's open session, 2026-10-16 13:32) `source/ship_context_2026-10-16.blend` holds, under the empty `M_SHIP_ROOT` (identity transform): - `Moonpool_Door_Aft`, `Moonpool_Door_Fore` with their actions `... | OPEN_CLOSE 12m` (linear keys, 30 fps): frames 1-12 the door moves +1.22 m in y (inboard), 12-48 it slides 6.14 m in x into its pocket (AFT toward -x, FORE toward +x), holds 48-72, slides back 72-108, moves back out 108-120. Timeline markers: CLOSED 1, RETRACTED INBOARD 12, OPEN / PANELS IN POCKETS 48, CLOSE 108. Each door has `closed_location` (AFT (0.2216, -6.1, -7.503), FORE (5.8784, -6.1, -7.503)), `pocket_travel_m` 6.1395, `clearance_inboard_m` 1.22. The doors never rotate. - The doors are **curved shells**: a slice of the hull's starboard bilge, about 5.8 m long in x, 0.22 m thick, the same section along x. In door-local coordinates the section runs from (y -2.87, z +2.81) at the top/outboard edge down to (y +2.55, z -2.81) at the bottom/inboard edge; the inner (concave, upper) face faces up and inboard. AFT door local x -3.0 .. +2.83 (pocket side is local -x); FORE mirrored (pocket side local +x). See `source/sections/*.png` (y horizontal, z vertical; door blue, hull lining grey, basin channel magenta, deck black, aperture rim orange, rail green). - `Pocket AFT | upper rail`, `Pocket FORE | upper rail`: the user's rails, plain boxes (bevel modifier) under the deck: AFT x -9.103 .. -2.545, FORE x 8.645 .. 15.203; y -6.024 .. -5.566 (0.458 wide, centre -5.795); z -4.010 .. -3.675. The deck's underside is at z -3.755, so 0.255 m of rail shows under it; the rail is fixed to the deck along its whole length (nothing can pass over it). - `Pocket AFT/FORE | conformal closed end`: the pockets' end walls, inner faces at x -9.035 and x +15.135. The rails run into them. **Usable rail per pocket: 6.49 m (AFT x -9.035 .. -2.545).** The rail cannot be longer: past its inner end the deck has the moon pool's well opening (x -3.15 .. 9.25, y -6.97 .. -0.36), so there is nothing to hang it from. - `Moonpool | deck around open well` (the deck slab, z -3.755 .. -3.36), `Moonpool | hull lining` (the pocket's outboard boundary), `Moonpool | curved dry basin channel` (inboard boundary), `Moonpool | titanium aperture rim` (the hull opening's rim the doors close into), the two docking lamps and their recessed housings (under the deck at x -0.61 .. 0.79 and 5.31 .. 6.71, y about -7.68 .. -6.97, down to z -3.89), and the four placeholder `rail carriage` cubes the user had put on the rails (hidden in the ship; the new carriage replaces them). - `source/ship_context_2026-10-16.json`: the same as numbers. The door material's four image files were already missing in the ship (an old absolute path); that is not ours to fix. - The ship already has an earlier door arm of a different kind (marine flush-hinge arms, `vessel-interior/build/door_arms.py`). It is not copied here and not to be copied; this robot arm is a new, separate design. ### The rail problem to solve (do not park it) The door slides 6.14 m; the rail gives 6.49 m. A carriage riding the door's whole slide may be at most ~0.35 m long along the rail. The reference's carriage is a big square block (about as wide as the turret). Make it work mechanically: e.g. a carriage of the reference's proportions that travels less than the door, with the arm's own axes (turret yaw + reach) taking up the difference, the carriage stopping clear of the end wall and of the rail's inner end. The arm must stay rigidly attached to its door the whole time (the door does not rotate, so the end plate / gripper keeps its pose relative to the door: full position AND orientation, checked by script at every frame). ## Requirements - **R1** Model the arm from the references: every visible part and detail (carriage, turntable, turret, rear pulley/belt drive, cable bundle and glands, perforated shoulder drum with its ribbed centre strip, side motor caps with orange rings, the lower arm's plates, the big joint cap with radial slots, bent-tube handles, the parallel-link truss and its rod, the elbow and its slotted cap, the forearm's roll section, the black dial joint, the wrist with its markings, the gripper hub and fingers, all cables, screws, seams, vents and markings). "dont miss details". - **R2** Mechanical rig: each moving link its own object (or bone), pivot on its axis; joint axes where the pictures put them; parallel links that really stay parallel; nothing passes through anything at any frame (rest pose and the whole travel). - **R3** Fit to the scene: one arm per door, hanging from that pocket's upper rail on a carriage that runs on the rail, attached to its door, following the doors' existing animation (frames 1-120) with no keys of its own: driven from the door's location. Clear of the deck, rail, end walls, lining, basin, aperture rim, lamps and the doors, the whole time. - **R4** Two versions: (A) with the grab limbs (the gripper's fingers as in ref1-3, gripping a fixture on the door); (B) without them, the end as drawn in red in ref6 (neck + plate fixed to the door). Both kept in the file, "side by side", switchable whenever the user wants. - **R5** Game-ready (project rules): quad topology, no boolean modifiers, UVs on every mesh, few draw-call materials, moving parts separate with their origin on their axis (rotation 0, scale 1 at rest), `UCX_` collision hulls, FBX export next to the .blend, a README with scale, pivots and how to switch versions. - **R6** Realistic surfaces, matched to the reference: real texture data (the user's packs in `models/vessel-interior/textures`, Poly Haven CC0 sets — polyhaven.com is permitted, the pressure door's `models/pressure-door/source_polyhaven/blue_metal_plate` is already on disk), baked masks (AO / edges / crevices) on a second UV, shown in Cycles renders. Glow, if any, only as a small indicator. - **R7** Drivers must be simple expressions (the user's Blender runs no Python in files): check `driver.is_simple_expression` and `driver.is_valid` for every driver. ## Ground rules for the agents - Work only inside `D:\HADAL - The Descent\models\door-robot-arm\`. Read other folders' scripts and import / exec them as libraries (e.g. `models/pressure-door/build/pd_lib.py`, `pd_look.py`, `models/docking-arm/build/surfaces.py`, `models/hardsurface-kit`, `models/machine-parts-kit`), but never edit files outside this folder. - **Do not use the Blender MCP tools.** The MCP link is on the user's open ship file. Run Blender headless: `E:\Steam\steamapps\common\Blender\blender.exe -b --factory-startup --python