# Grouper Tender: design (Designer, 2026-10-22) The user: *"create me 3d model of this tender from this blueprint exactly"* with the sheet `reference/user_blueprint.jpg` ("DEEP SEA EXPLORER - SUBTUB CLASS, ORTHOGRAPHIC BLUEPRINT DS-ST-001"), then a concept render of the same sub, `reference/user_concept.jpg` (*"Check this picture as a referance"*). "Grouper" is a working name. **Division (the Administrator's):** the BLUEPRINT rules shape, proportions and outline, SIDE first (the user's rule: *"just use the side referance"*). The CONCEPT rules the look (materials, colours, lights, strips, the markings' style) and settles how parts look and attach where the sheet is unclear. **Every number is in `build/gr_measure.py`** (pixels of the original sheet, the conversions `Yi`, `Zi`, `Xt`, `Xf`, `Xb`, `Xs`, `Zs`, and the tables). This note says what the parts are, how they attach, what was decided and why. Check pictures: `reference/trace_side.png`, `trace_top.png`, `trace_front.png`, `trace_back.png`, `trace_section.png` (the readings drawn over the sheet by `build/gr_tracecheck.py`; white = the concept's strips, trace zones and lamps). ## 1. Scale, axes, origin, size - **S = 0.0171 m per sheet pixel** for TOP, SIDE, BOTTOM. FRONT and BACK are drawn at the same vertical scale and datum as SIDE but narrower: lateral = (x - 231.85) x 0.941 TOP px (FRONT), (1205.9 - x) x 0.935 (BACK). - Why 0.0171: the sheet's dimension labels give 10.4 to 36.5 mm/px (table in `gr_measure.py`); the pair the Administrator suggested (TOP 2800/2100 -> 19.4/20.5) disagrees with every other pair. The only hard size is the docking interface: TOP's ring is three circles, r 38.89 (its footprint), 32.19 and 29.63 px (the double line of its top face). At 0.0171 those two are 0.5505 and 0.5067 m: the Kazah collar's hook lip (0.552) and inner wall (0.506). The drawn ring *is* the Kazah docking collar. Checked independently on the concept render: its side window is about 3.2 head heights (0.74 m) -> 16.8 mm/px; the hull against the pilots' heads -> about 17.5 mm/px. - **Axes (the Kazah's):** 1 unit = 1 m, nose to -Y, port +X, Z up. **Clamp axis** = the collar's centre, SIDE x 753.40 (TOP draws the ring 6.8 px further forward: SIDE rules), at (0, -0.09). **Origin** on the centre line 9 cm behind it (SIDE x 748.14). **z**: the collar's lip top must be z 1.375 (the Kazah's); the collar is built 1.75 px (3 cm) taller than drawn so the hull under the claws' inner tips is z 1.16, 5.3 cm under their lowest point (1.213). Z0 = image y 374.66. - **Size:** 7.41 m from the duct's aft lip (Y +3.96) to the scanner drum's face (Y -3.45); the hull's nose frame at Y -2.82. Hull 2.44 m wide, 2.70 m over the pods. Keel z -1.73 to the collar lip 1.375 (3.11 m); antenna tip z 1.815. - Moon pool and carousel: not measured by the Designer (the Coder's `sweep_check`). The Spearfish (9.55 m, 3.81 m span) kept 1.107 m; this one is shorter and narrower, so it should pass at this scale. If it does not, the Coder reports it: the scale is fixed by the collar, so the fix is a pose, not a smaller scale. ## 2. The views, part by part (and how each part attaches) ### SIDE (starboard; nose right) - rules 1. **Stern duct** (x 516.5-543): a short shroud r 0.697 m, centre z -0.076, aft corners rounded r 5 px, on the hull's aft face. A 1 px slot on its flank (x 530, y 368-388). BACK: the lip, an inner wall with a rounded throat, **six** stator spokes (30/90/150/210/270/330 deg; the Administrator's reading said five), the hub. The rotor behind the stator is mine. 2. **Aft body**: the top shoulder rises from the duct's top corner (543, 339) in 7 px to the top line; the keel line runs straight from the duct's bottom corner (543, 421) to x 733. A **chine** (crease) from the duct's top corner up to the top line at x 632 (TOP: the three parallel lines (557,117)-(650,85)). 3. **Skeg** (the lower "Stabilizer Fin"): a blade under the keel x 545-614, bottom y 444.5 (z -1.19), its root a low ridge (BOTTOM's teardrop), BACK: the vertical blade under the duct. 4. **Stern fins** (SIDE's "T" in the waist band): a stubby wing each side, SIDE box x 579-606, y 370-386, rounded front; on a vertical mount plate across the band (x 571-574.5). Planform from TOP (tip lateral 64 px = 1.09 m). BACK draws them inside its "ears". 5. **Dorsal ridge** on the upper aft body (TOP's teardrop x 551-630; BACK: its aft face with a slot, the "tombstone"). 6. **Waist band**: an hourglass band along each flank from the duct to the side window (upper rim) and down to the belly in front of the pods (lower rim). The band's face is recessed 0.03 m; each rim is a **groove** 0.02 m deep between the sheet's double lines, carrying a cyan light strip (the concept). The door, the vents and the trace panel sit in it. 7. **Collar** (SIDE x 716-791, the "Main Thruster" label is wrong): the Kazah docking collar, round the clamp axis; its drawn outer wall and rim between the claws, cut back to the Kazah profile in four claw pockets (+-16 deg round 45/135/225/315 deg); its footprint on the hull is the lens SIDE draws under the top line (dips to y 317). 8. **Hatch** inside the collar: r 0.500, 6.7 mm gap to the collar's inner wall, domed as drawn (0.043 m). 9. **Antenna**: a tube 0.05 m across from a foot bracket on the centre line (foot Y +0.71, z 1.26) to the tip (Y +0.95, z 1.815), raked 23 deg aft. FRONT/BACK draw it vertical on the centre line (a fore-aft rake does not show there). 10. **Emitter housings** (the hump SIDE labels "Battery Access Hatch"): two round lamp heads on short pylons at the deck's shoulders, x 841-862 (Y -1.59 .. -1.95), lens at x 861.5 facing forward, lateral +-0.513 m. 11. **Sensor box** (TOP's square on the centre line, FRONT's box under the mast): a box 0.17 x 0.17 x 0.10 m on a stalk, top at z 1.26 (SIDE does not show it above the lamp housings). 12. **Side window** (one each flank): the glass Y -1.70 .. -2.63, z 0.52 .. -0.19 (`SIDE_WINDOW_GLASS`), in a dark frame band raised 0.025 m whose outer edge is `SIDE_WINDOW_FRAME_OUT`; forward it merges into the nose's front frame. 13. **Nose front**: the face at x 889.5-913 (`NOSE_FRONT`), carrying the **front window** (FRONT only: glass z 0.653 .. -0.074, half width 0.443 at the top, 0.539 at the bottom, arched top), mullions to the side windows, and under it the chin step (lines at y 391, 395, 398) and the nose's flat underside (y 398). 14. **Scanner drum** (SIDE "Sensor Mast", FRONT "Main Thruster"): body x 928-950, r 0.543 m, centre z -0.865, its face at Y -3.45 (FRONT: six sectors between dividers at 30/90/.../330 deg round a hexagonal hub); a rear flange x 916-928 r 25 px with four ribs. 15. **Cradle** under the nose: in each side plane (lateral +-0.577 m, just outside the drum's rim) an upper arm from the nose's underside to the flange, a bent U tube down and round and up to the flange, a lower rail from the cheek; a cross tube under the drum, a top bar behind it (FRONT's frame round the drum). Tubes 0.10 m. `CRADLE`. 16. **Cheek fins**: small slanted fins on the lower nose's cheeks (FRONT x 178-186 / 278-286), SIDE's plate x 848-866. 17. **Thruster pods**: a teardrop nacelle along each lower corner, axis lateral +-1.017 m, z -1.382, r 0.333 m at its fullest (x 800-836), tapering aft to x 733 (`POD["radius"]`); the front face (x 841) a dark ring with a lamp; the pod sinks into the hull's lower corner with a fillet strip. TOP: vents and a raised capsule on each pod's top. 18. **Side door** (both flanks): a rounded rectangle x 738.5-796.5, y 348.5-418.5 (0.99 x 1.20 m), corner r 9 px, in the waist band, with a porthole (glass r 12.2 px, frame to 15.4) and two latches on its forward side. 19. **Vents and panels** aft of the door (x 662-725, y 368-392): a fill port, three slots, three dots, a small panel. 20. **Trace panel** in front of the door (x 803-838, y 350-408): a flat plate 2 mm proud carrying circuit traces. 21. **Markings** on the upper flank (both flanks, mirrored so the text reads from outside): insignia x 684-716, lettering x 725-790 (0.31 m tall box), seal at (697, 347) r 10. ### TOP (port = upper half) Widths of everything: `HULL_HALF` (the hull's own edge; the pods' bulge 755-842 and the stern fins excluded). Also: the chine lines, the dorsal ridge, the stern fins' planform, the lamp housings, the sensor box, the antenna's foot circle and its rake line, the pods' vents, the nose deck seams round the lamps. Its ring and drum are drawn 6.8 and 9 px further forward than SIDE: SIDE rules. ### BOTTOM A near copy of TOP. Used only for: the ventral port (a flush service plate under the collar, groove rings), the skeg's root ridge, a small ventral transducer capsule (x 715-735), the belly seam at x 657, the lettering on both flanks. ### FRONT The section's fullness (with BACK), the three windows (front + two side), the mullions, the emitters' pylons, the cowl seams above the windows, the drum's face pattern, the cradle frame, the cheek fins, the pods' front faces. ### BACK The duct (lip, inner wall, throat, six spokes, hub), the dorsal ridge's aft face with its slot, the stern fins' "ears", the skeg blade under the duct, the pods' tail cones (rings r 15, 11, 8, 5 = seams where the cone narrows), the stern insignia decal the "Insignia (Flag)" leader points at. ### SECTION A-A (top right; the bottom-left one only for the curved overhead panels) The full hull section at the collar looking forward, drawn 1/1.346 of SIDE vertically and 1/1.31 of TOP laterally: wall 0.113 m, deck top z -1.198, ceiling z 1.062, two seats side by side, a console column between them up to z 0.574 with a control box, overhead screens, wall control panels. `CABIN`, `CABIN_Y`. ## 3. The section (how the hull is lofted) One quad grid from the stations x 543 .. 913. Each section = two superellipse quadrants joined at the widest line (`HULL_YW`, y 378 mid-body): upper NU 2.1, lower NL 2.3 (read off BACK and FRONT; check: the upper rim at SIDE y 340 lands at |X| 62.6 px, where TOP draws its line). The stern eases to a circle (2.0/2.0) to meet the duct; the nose's underside is flat (NL 3.2). Tables: `HULL_TOP`, `HULL_BOT`, `HULL_HALF`, `HULL_YW`, `SECTION_EXPONENTS`. Openings (door, windows) are grid rectangles; frames are swept trims (the Spearfish's `frame_sweep`). ## 4. Where the views disagree, and what was chosen | # | What | The views say | Chosen | |---|---|---|---| | 1 | Scale | labels 10.4 .. 36.5 mm/px; TOP 2800/2100 -> 19.4/20.5 | 17.1 mm/px: the ring = the Kazah collar; the concept's pilots agree | | 2 | Collar's place | SIDE x 753.4, TOP 760.2 | SIDE | | 3 | Drum face | SIDE x 950, TOP 941 | SIDE | | 4 | Drum radius | SIDE 31.75, FRONT 32.7 (TOP px) | SIDE | | 5 | Duct radius | SIDE/TOP 41, BACK 41.7 | SIDE; BACK's rings scaled | | 6 | FRONT/BACK width | 1/0.941 and 1/0.935 of TOP | scaled to TOP | | 7 | Lamp heads' lateral | TOP +-26, FRONT +-34 px | 30: SIDE's foot depth (the housing reaches 6-7 px below the centre-line top) | | 8 | Pods' lateral | FRONT 57.1, BACK 60.3, TOP 61 | 59.5 | | 9 | Stator spokes | the first reading: five | BACK draws six; the rotor (mine) 5 blades | | 10 | Stern fins | SIDE x 579-606, TOP 562-601 | SIDE for x, TOP for the planform | | 11 | Antenna | FRONT/BACK vertical, SIDE/TOP raked aft | raked (a fore-aft rake is invisible from the front) | | 12 | Labels | "Main Thruster" on the ring and on the drum; "Battery Access Hatch" on a lamp hump; "Sensor Mast" on the drum | the drawn shapes: collar + hatch, scanner drum, lamp head; thrust from the duct | | 13 | BOTTOM | a copy of TOP, lettering on both flanks | ventral flush port only; lettering on both flanks | | 14 | Two sections A-A | different seats and consoles | the top-right one; the other for the overhead arc | | 15 | Seats' lateral | section +-0.61 m | **+-0.45 m** so each eye looks straight out through the front window (half width 0.516 m at eye height); console 0.34 m instead of 0.42 | | 16 | Hull colour | sheet "titanium-ceramic"; first reading light ceramic | **concept: dark gunmetal** | | 17 | Waist rims | first reading raised lips | **concept: grooves with cyan strips** | | 18 | Lines before the door | first reading a grab rail and a pipe | **concept: circuit traces** on a flat panel | | 19 | Small deck square | first reading a battery hatch plate | **concept: a boxy sensor on a stalk** | | 20 | Pods' front faces | FRONT: rings (a nozzle) | **concept: a bright lamp** in the ring | | 21 | Drum face | FRONT: perforated sectors round a hexagon | **concept: glowing faceted lens**, the sheet's sector layout | | 22 | Lettering | sheet "SUBTUB 1" (caps) | **concept: "Subtub 1"**, italic title case, the sheet's place and size | | 23 | Flag, seal | a real national flag, an official seal (both pictures) | generic striped insignia, generic seal with a cyan circuit emblem | | 24 | Collar height | drawn 9.5 px from the hull to the top face | 3 cm taller so the claws clear the hull by 5.3 cm | ## 5. The user's concept render What it shows (a perspective view from forward-starboard-above; zooms `reference/z_concept_c_*.png`): - **Hull**: dark gunmetal satin metal; deep grooves: the upper one from the stern's upper flank forward under the lettering, over the door and **round the side window's top**; the lower one from the stern under the door and **curving down to the belly**. Cyan light strips lie in both. Thin cyan circuit traces (right angles, end dots) on the panel between the door and the window, below the window's aft corner, on the small panels aft of the door. - **Windows**: the side window and the big front window in thick dark frames with a heavy mullion between; inside, cyan screens and two pilots side by side (the cabin and screens are built, no figures). - **Deck**: the collar as a dark disc with cyan light bars on its flank; two round lamp heads on short pylons at the shoulders, bright white; a small boxy sensor on a stalk between them; the thin antenna aft of the collar. - **Stern**: the duct as a stepped cylinder, its inside glowing cyan (the blue jet is an effect). - **Lower nose**: the drum on its bracket and bent tube, its face a glowing blue faceted lens (a big central hexagon, cells round it); bright round lamps at the pods' front ends (the far one shows beside the drum). - **Markings**: "Subtub 1" italic title case, a flag (made a generic insignia), a round seal with a cyan circuit emblem. How it goes into the model (`gr_measure.py` section 12): - **Light strips** (`LIGHT_STRIPS`), SIDE paths projected onto each flank (port = mirror), in the groove floors, 0.02-0.04 m wide: - `upper`: the middle of `WAIST_UPPER_RIM` from x 550 to 840, then over the side window frame's outer edge (843,338.5) -> (870,337) -> (887,337) -> (893,339), then across the nose top along the front window frame's top edge (SIDE x 889, lateral -0.60 .. +0.60 m, 0.04 m aft of the glass) to the other flank: one run over the nose. - `lower`: the middle of `WAIST_LOWER_RIM` from x 555 down under the door, along the pod's flank, curving down to the belly at x 830. - `duct_ring`: round the hull's aft face where it meets the duct (x 543.5, r 41.5 px), 0.03 m. - `collar_ring`: the collar's rim band (r 0.547-0.573, z 1.293-1.313), broken at the four claw pockets. - TOP view: the strips show as the rim lines along the flanks (lateral 62-64 px) and the crossing at x 889 (drawn white in `trace_top.png`). - **Circuit traces** (`CIRCUIT_ZONES`): the emissive mask is the sheet's own drawn lines (`reference/lines_side.png`) inside four SIDE boxes, projected onto each flank, 1.5 px wide: `fore_of_door` (800-840 x 348-410), `aft_panels` (660-727 x 365-394), `cheek` (838-868 x 396-446), `seal` (686-708 x 336-358). The rims crossing a box are left out. - **Lamps** (`LAMPS`): the two emitter lenses (x 861.5, y 309, lateral +-0.513 m, r 0.12 m, forward), the pods' front lamps (x 841, lens r 0.145 m in a bezel r 0.209), the scanner face (r 30 px, cyan-blue), the duct's inner glow. - **Materials** (`MATERIALS`): gunmetal hull, a darker brushed band, near-black titanium frames, clear thick acrylic, cyan strips and traces, warm-white lamps, the cyan-blue scanner lens, a dark cabin with cyan screens. All emission strengths scale with `Grouper_Root["lights"]`. The pack's sets only (ScratchedMetal, StainedSteel, BrushedMetal, Glass, FloorPanel_A, leather_white); nothing downloaded. ## 6. Docking clips (the Kazah collar) The collar is the clip: no separate hardware. Its top face r 0.5067-0.5472 at z 1.375; in the four claw pockets the wall is the Kazah profile (wall r 0.535 from z 1.335 down to 1.19 under the lip r 0.552, z 1.335-1.375, then a fillet to the hull). Between the pockets the drawn wall and rim (`COLLAR_PROFILE_M`). Claws close at 45/135/225/315 deg (+-11 deg) round (0, -0.09); probe numbers in `tender-mako/build/probe_head.py` / `checks/head_parts.json` (claws never below z 1.213, landing feet z 1.405 over r 0.41-0.53). The hatch's dome rises to z 1.418 at its centre: the clamp check must show it clear of the head; if less than 1 cm, lower the dome to 0.02 m. ## 7. Cabin Seats side by side at X +-0.45 m (0.56 m wide), backs at Y -0.887, cushion top z -0.692, back top z 0.275, eyes at (+-0.45, -1.143, 0.088); the console column between them (0.34 m wide) up to z 0.574 with its control box; overhead screens; wall control panels; deck top z -1.198 (FloorPanel_A); lining 0.113 m inside the skin; the entry space under the hatch and between the doors (Y +0.165 .. -0.827). Requirement (the user's, from the Spearfish): each seat sees the sea through the front window: straight ahead = glass for both seats, at least half the rays (yaw -40..+40, pitch -25..+15, 5 deg) through glass. Run a `gr_view_check.py` after the Spearfish's `view_check.py`. ## 8. Moving parts (own objects, origin on the axis, rotation 0, scale 1; simple-expression drivers on `Grouper_Root`) | object | motion | driver | |---|---|---| | `SM_Grouper_Hatch` | lid hinged at its forward edge, axis X at z 1.39, 0 .. 100 deg | `hatch_open_deg` | | `SM_Grouper_Door_R`, `_L` | vertical hinge at the aft edge just outside the skin, 0 .. 95 deg | `door_r_deg`, `door_l_deg` | | `SM_Grouper_Rotor` | 5 blades behind the six-spoke stator, spins about Y | `rotor_turns` | | `SM_Grouper_Antenna` | folds aft about X at its foot, 0 (as drawn) .. 70 deg | `antenna_fold_deg` | Every travel checked by script in small steps (hatch vs collar and pockets; doors vs hull, band, rims; antenna vs hull and, raised, vs the arm's head; rotor vs stator and duct). The antenna folds for docking if the raised antenna meets the head (likely: it stands 0.80-1.04 m from the axis, inside the head's 0.89 m reach). ## 9. What the Coder must not get wrong - SIDE rules every x and every height; TOP gives widths only; FRONT/BACK only what SIDE cannot show, scaled by KF/KB. - The collar's place is SIDE x 753.40, not TOP's 760.2. The clamp axis is (0, -0.09). - The waist rims are grooves with strips, not lips; the band is a recess. The door, vents and trace panel sit in it. - Six stator spokes, not five. The pods end aft in tail cones (x 733), not nozzles; their fronts carry lamps. - No real flag, no official seal, no brand names. "Subtub 1" in the concept's style. - The look is the concept's (dark gunmetal + cyan), compared side by side in a bright studio light with the Standard view transform against the sheet (shape) and the concept (look). - Game-ready: one clean quad hull grid, openings as grid rectangles, frames as swept trims, no booleans, no n-gons, custom normals, UVs, UCX, FBX; moving parts separate and checked through their travel; no clipping parts. ## 10. Files - `build/gr_measure.py` - every number (imports without Blender). - `build/gr_zoom.py` (zooms with rulers), `gr_trace.py` (silhouette flood fill), `gr_views.py` (masks, line images, `outline_tables.json`), `gr_sil_tables.py` (rewrites `gr_measure.py` section 11 from the tables), `gr_tracecheck.py` (check pictures), `gr_lines.py` (line tracking), `gr_circles.py` (circle fits), `gr_regions.py` (closed regions). Rebuild: `python gr_views.py && python gr_sil_tables.py && python gr_tracecheck.py`. - `reference/mask_side|top|bottom|front|back.png` (filled silhouettes, sheet size), `lines_*.png` (the drawn lines inside each view, drafting marks erased), `trace_*.png` (the readings over the sheet), `z4_*.png` (zooms), `z_concept_c_*.png` (concept zooms).