# Critique 2: the finished door robot arm (2026-10-16) Critique (Opus). Checked only against the user's words and R1-R7 in `BRIEF.md`, and the seven pictures in `reference/`. Read: BRIEF, README, STATUS, DESIGN (skimmed), CRITIQUE_1, the reports in `build/`, `DoorRobotArm_layout.json`. Looked at every picture in `previews/cycles/`, `previews/geo/`, `previews/rig/` and the two LOD sheets. My side-by-side crops (`c2_*.png`, reference left, model right, same pixels where the camera matches), my read-only headless scripts (`crit2_*.py`) and their results (`crit2_*.json`) are in `previews/critique2/`. `DoorRobotArm.blend` was only opened headless, never saved; the ship file was only read. ## Verdict The mechanism is right, and I checked it myself rather than trusting the reports: my rerun of `rig_check` gives the same numbers as `build/rig_report.json`, and my own checks agree (the end holds its door to 0.024 mm and 0.0 deg over frames 1-120, the rod eye stays on its pin, fixtures and chains cross nothing, the version switch works the way the user will use it, the exported door animations carry the tool exactly with the door). The file opens in the showroom, all 604 drivers are simple, there are no keys on the arm, textures load from relative paths, the hulls are hidden, and nothing was written to the ship. What the user would send back is the look of the arm's end. The wrist block is still a rounded box. ref1, ref2 and ref6 show one long sloped wedge there, and the user drew the same wedge in the red sketch of version B (CRITIQUE_1 must 4, still open in the silhouette). The should items are also about the look: a flat lower arm with a short dark core stuck on its front, a cable bundle routed differently from the references, chrome where the pictures show dark metal, the knee-cap pattern, and the forearm dial. Two are not about the look: version A's hooks do not touch the knob, and the README's steps for adding the arm to the ship would not work. Count: 1 must, 7 should, 5 nice. ## Must ### 1. The wrist block is a box, not the sloped wedge (R1; R4 both versions; ref1, ref2, ref6 photo and red sketch) - Now: from the side, the forearm's fork is a rounded box with a flat top and a vertical front. A small white cylinder stands on it, and the J5 cap sits low in front of it. Version B has the same box. Evidence: `c2_wrist_side_ref1_vs_geo.png`, `c2_ref1_wrist_grip.png`, `c2_wrist_ref6_vs_close6A.png`, `c2_ref6_sketch_vs_Bside.png`. - References: - ref1 x 560-780, y 510-690: one long slab rising about 20 deg from the J5 cap back to the motor cylinder, with a fin bar and three orange triangles on its face. - ref6 photo x 920-1460, y 690-1000: two such sloped cheeks under a hood. ref2 shows the same from the front-left. - The user's own red outline of version B (ref6 x 800-1450, y 1330-1770) draws the same slope over the J5 cap. - Why it is a box (STATUS): the side fingers' motors sweep the cheek area at J5 -68..-74 deg, so the cheeks were kept low. - Fix: give the outer cheeks ref1's sloped outline and its fin bar. Cut a pocket only where a finger motor passes, so the side view still reads as a wedge. If it keeps the hub off the slope, use the other wrist branch of the IK instead. Then rerun geo_sweep (J5 with J6), rig_check and the ref1 / ref6 previews. The fork is shared, so both versions get the fix. ## Should ### 2. Lower arm: flat side plate and a short dark core stuck on the front (R1; ref1, ref2, ref5) - Now: - Each side shell reads as one flat face with groove lines and a raised rim (`c2_sbs_ref5.png`). - The dark core (stage 3 item 1) is a black block standing 72 mm proud of the front (STATUS), so it reads as a clamp bolted on (`c2_sbs_ref2.png`, right). - It is about half as long as ref1's: in ref1's frame, model y 940-1100 against ref1 y 810-1140 (`c2_ref1_lowerarm.png`). - References: ref1 x 1240-1420, y 810-1140 and ref2 x 1200-1320, y 840-1120 show a long black stack set in between the white shells, from the knee up to under the elbow. ref5 shows the shells in two or three stepped, chamfered layers. - Fix: - Run the core from the knee cap to below the J3 cap, set back between the shells instead of standing proud. - Replace the groove lines with real 10-25 mm steps and chamfers (CRITIQUE_1 item 5). - Rerun geo_audit, geo_sweep (J2, J3) and rig_check. ### 3. The cable bundle loops out of the turret's back and returns (R1 "cable bundle and glands"; ref1, ref2, ref4) - Now: a C-shaped band of black cables with three white clips leaves the turret's top rear and comes back to a bracket on the same rear face. From the side it sits where ref1's bundle is. From ref2's and ref4's angles it reads as a black coil on the back. Evidence: `c2_ref1_turret.png`, `c2_ref2_turret_bundle.png`, `c2_sbs_ref4.png`. - References: ref2 x 740-860, y 1270-1440 and ref4 x 260-660, y 520-960. The band leaves a white collar (gland) on the turret's top rear. It runs forward and down the turret's left side to a white clamp by the belt pulley, then down behind the pulley. - Fix: reroute the band as the references show. It is static and part of the turret, so the rig does not change. Keep it clear of the belt and the pulley, then rerun geo_sweep (J1). ### 4. Bright steel where the references show dark metal (R6; ref1, ref2, ref4) - Now: these parts use `M_DoorArm_Steel` and read as chrome buttons: - the slotted heads in the J3 caps (U03, dia 0.158 m); - the truss knob domes (U11); - the dial hubs (F04); - the knee-cap hub nuts (L07); - the four finger motors and their pin caps (A03, A04, A06); - the carriage buckle (C03c). Evidence: `c2_ref1_J3_cap.png`, `c2_ref1_knob.png`, `c2_ref1_dial.png`, `c2_gripper_ref1_vs_close6A.png`, `c2_ref1_carriage.png`. The list of steel parts is in `crit2_steelparts.json`. - References: - ref1 J3 cap x 1485-1615, y 680-810: a dark disc with a dark slot. - ref1 knob x 1730-1800, y 870-925: dark knurled. - ref1 dial x 850-970, y 555-665: dark glass. - Finger motors: black in ref1 and ref2. - Buckle (ref1 x 900-1100, y 1670-1705; ref4): dark flat plates. - BRIEF's finish: bright steel only for screws and pins. - Fix: put `M_DoorArm_Gunmetal` / `_BlackMetal` (glass for the J3 caps' discs) on those parts. Keep steel for screws and pins under about 3 cm. Materials only, so no new bake is needed; export the FBX again. ### 5. Knee caps: long radial slots instead of short rim notches (R1; ref1, ref5; CRITIQUE_1 item 6, still open) - Now: the dark disc has long radial slots from the hub almost to the rim, with white floors showing, and a bright hub nut. It reads as fan blades (`c2_ref1_knee_cap.png`). - References: ref1 x 1290-1490, y 1095-1275, and ref5. Ten short round-ended notches at the rim only, a toothed inner ring round a deep dark hub, and a thin orange ring. - Fix: as CRITIQUE_1 asked. Notches about 0.045 m long at the rim, a toothed inner ring about 0.165 m across, and a dark hub. ### 6. Forearm: box housing, dial turned 45 deg (R1 "the black dial joint"; ref1, ref2, ref6) - Now: the housing is a box with small corner radii. The dial's cross runs diagonally (an X), with a bright hub disc (`c2_ref1_dial.png`, `c2_ref2_wrist_forearm.png`). - References: - ref1 x 850-970, y 555-665, and ref2: the white housing wraps round the dial with a large radius above a stepped belly. - ref6 x 1480-1820, y 740-1080 (`c2_dial_ref6_ref2.png`): the dial is a dark, glossy, stepped disc. Its groove runs straight up and down, with notches left and right. - Fix: turn the dial 45 deg so the groove is vertical at rest, as in ref1, with a dark hub (item 4). Round the housing round the dial (CRITIQUE_1 item 4). ### 7. Version A's hooks never touch the knob they grip (R4: "gripping a fixture on the door") - Now: with grip at 1 (closed), all four hooks stay 13.1 mm from the knob at every frame, at both doors (`crit2_rigextra.json`, `grip_and_plate_m`). Nothing carries the door. Version B's plate does sit on its pad (0.0 mm). - Fix: either close the hooks to contact, 0-1 mm on the knob's neck under its dome (count it as a mount in the rig check, like the plate on its pad), or size the knob's neck to the closed hooks. Then rerun the grip sweep and rig_check. ### 8. The README's steps for adding the arm to the ship would not work (R3 later; R5 README) - Drivers do not find the doors by name. The README says they do, but a driver stores the door object itself. - I appended the README's five collections into a file that has its own `Moonpool_Door_Aft` / `_Fore`. - Copies of the reference doors came along (`Moonpool_Door_Aft.001`, `Moonpool_Door_Fore.001`), and they are in no scene. - All 30 door variables point at those copies (`crit2_append_test.json`). - In the ship, the arms would not follow the ship's doors. - The ship's rails are already taken. The other session's flush-hinge door arms ride the same rails today, visible (`02 MECHANISM | Starboard pocket doors | door arms`): - AFT: `DoorArm AFT | trolley` at x -2.71, guide rollers x -2.81..-2.61. This carriage spans x -3.44..-2.59 at frame 1, so the two overlap. - FORE: the trolley at x 8.81. This carriage spans x 8.69..9.54 at frame 1. - Source: `crit2_ship_vs_context.json`. The README mentions only the four placeholder cubes. - Fix (in the README only; nothing in the ship): - After appending, remap each door copy to the ship's door: Outliner > Blender File > Objects > the `.001` door > Remap Users. Or run `bpy.data.objects["Moonpool_Door_Aft.001"].user_remap(bpy.data.objects["Moonpool_Door_Aft"])` and the same for Fore. - Delete the copies and rerun rig_check. - Say that the user must choose between this arm and the flush-hinge arms on the same rails. Their names (`DoorArm AFT | ...`) are also very close to these (`DoorArm_AFT_A | ...`). ## Nice ### 9. Turret and upper arm still read as rounded boxes (R1; ref2, ref4) `c2_sbs_ref4.png`, `c2_ref2_turret_bundle.png`, `c2_ref1_upperarm.png`. The references layer the turret's housings in chamfered steps, with a raised gland collar and deep recesses. The upper arm's front block is stepped in rings. The model has boxes with seams, as its own README says. Best done together with item 3. ### 10. The white powder coat reads smooth at ref1's scale (R6) `c2_ref1_upperarm.png`: ref1 shows a coarse sandy grain on every white face, while the model's white is smooth with faint smudges. A stronger, larger grain in the normal map (powder-coat orange peel, a few mm) would fix it; keep the wear low. ### 11. Collision gaps (R5) - The two rail kits are static meshes of 11,500 triangles with no UCX hulls (`fbx_report.json`: ucx 0). The README says the static parts carry hulls. Add a few boxes per kit: flanges, tray, buffers. - `UCX_SM_DoorArm_Turret_02` is not convex: one vertex is 4.3 mm outside a face (`crit2_inspect.json`). Rebuild that hull. ### 12. Draw calls (R5 "few draw-call materials") Each skeletal mesh has 9 material sections. `M_DoorArm_Cable` and `M_DoorArm_Rubber` are the same black rubber. `M_DoorArm_Lamp` and `M_DoorArm_Glass` each cover only a few small parts. Merge them in the export to get 7. ### 13. Small file points - The collection `DoorArm | solver (hidden)` shows its 44 empties. Turn its eye off, not its monitor icon: the empties must stay evaluated. - The Ship fit scene keeps no camera, so the user lands 18 m above the deck and has to fly under it to find the arms. Keep the two pocket cameras the renders used, in the studio collection. ## Checked and fine - **Rig check rerun:** `crit2_rig_check.json` matches `build/rig_report.json` exactly (0 differing keys): - pose 0.056 / 0.055 mm and 0.014 deg; - 0 crossings, joints inside their limits; - carriage AFT -8.1158..-3.0143, FORE 9.1143..14.2158; - pads 3.5 mm from the buffers, the arm at least 0.242 m from the end walls; - 604 drivers, all simple and valid. - **My own rig checks** (`crit2_rigextra.json`, `crit2_rodeye.json`): - The flange, the tool hub and the four distal fingers (A) and the plate (B) hold their pose against the door within 0.024 mm and 0.0 deg over frames 1-120. - The carriage keeps y -5.795, z -4.182 exactly. - The J3 rod's eye stays on the knob pin (0.002 mm). - Door fixtures, chain links and doors against the context, the rail kits and the chains: 0 crossings. The fixtures stay at least 0.2 m from the lining and the rim. - **R7:** - 604 drivers, all on objects, all reading single properties, simple and valid; none reads the frame. - Only the two doors have actions, so there are no keys on the arm. - No text blocks, so no auto-run warning. - **R4 switch:** - `version` is an int 0..1. It shows 50 objects of A or 34 of B. - Switched at frames 48 and 90 without a frame change, the version that appears is posed right at once (0.05 mm). - Showroom: A spans x -3.65..-0.38 and B x 0.15..3.16. Both are shown, 0.53 m apart. - **Opening the file:** - It opens on `DoorArm | Showroom` (Layout workspace, Solid view). - `DoorArm | collision` has its eye off, and all 41 hulls are hidden in renders. - Lights: 8 in `90 STUDIO | lights` in the Ship fit scene, 3 in the showroom. - The doors play their own action: AFT y -6.1 -> -4.88 at frame 12, x 0.2216 -> -5.9179 at 48, closed again at 120. - **Textures:** every asset texture loads from a relative path: the scan, the HDRI, the bakes, and the pack sets via `//../vessel-interior`. The only absolute paths are the ship context's four images, which are packed and unused. - **R5:** - 0 n-gons. 18,871 triangles out of 119,311 faces. 4,023 of them (3.4 %) are outside pole fans; the ones I sampled sit on flat end caps. - Two UV layers on all 27 asset meshes. - No boolean modifiers; only hooks, on the cable curves (the ship context keeps its own bevel and mask). - Showroom links: origin on `joint_A`, rotation 0, scale 1, no exceptions. - 41 UCX hulls and all 21 FBX files are there. - My FBX check (`crit2_fbxcheck.json`): in all four door animations the tool travels 1.22 m in, then 6.14 m along (6.2596 m), with 0.0 deg of turn. The fingers stay within 0.5 mm of it, and the carriage moves 5.1015 m. - **R6:** a real scan (Poly Haven `blue_metal_plate`), the pack's steel and rubber sets, a baked AO / edge / crevice atlas with a bevel normal, and Cycles pictures at every reference angle. - **Version B against the red sketch:** the short cone neck and the flat plate bolted to a conformal pad match it; only the wrist differs (item 1). - **CRITIQUE_1:** items 1, 2, 3, 7, 9, 10, 11 and 12 are done. Items 4 and 5 are partly done (items 1, 2 and 6 here). Item 6 is open (item 5 here). Item 8 is done for the look, with the routing still open (item 3 here). - **Standalone:** - `models/M_Ship_v2_interior_season2.blend` was last changed at 15:50:26, before this work's first file stage (`versions/v01`, 16:35), and my reading did not change it. - The ship's moon-pool context is the same as the 13:32 copy: door keys and meshes, rails, end walls, deck, lining, basin, rim, lamps. - The library folders this work reads have no file newer than 13:35: `pressure-door/build`, `hardsurface-kit`, `machine-parts-kit`, the pack textures. - `docking-arm/build` changed at 15:25-15:42, but no script here writes there; that is another session's work.