# Mako: a Tender ("sub tub") after the user's reference sheet Built on 2026-10-20 after the user's four-view sheet `reference/user_reference.webp` (TOP, FRONT, SIDE, REAR: an orange shark-like sub with a glass nose bubble, an orange collar, a red-orange jaw, grey side bodies and fins, a dorsal fin and a tool cluster at the stern), with a red line over the canopy's rear and the collar. The user's words: *"can you create me a 3d tender model that can be usable as an real asset in the descent vessel. try to create similiar from that referance picture. red line indicates where the the arm holder clips place so arms can hold the sub tub."* "Mako" is a working name after the dorsal fin; the user has not named it. **v04 (the current state), the same evening**, after three rounds from the user: - v02 sent back: *"this isnt look like the referance picture do it more precisely ... fix the glass fins also the holder clips smaller thinner"* (v03); - *"work with the critique and do it accordingly to the reference picture"*: a Critique agent compared the sheet with the model view by view (`critique/round1.md`, `round2.md`); - *"maybe just use the side referance you dont have to obey the other wiev pictures"*, with the SIDE view without the red marks (`reference/user_side_clean.png`), then red lines drawn over the side render (*"check the redlines fix this"*, `reference/user_redlines_v04.png`). **SIDE rules.** The sheet's views disagree (an AI-drawn sheet); TOP, FRONT and REAR now only guide what SIDE cannot show. Earlier states: `versions/v02_first_delivery/`, `versions/v03_before_critique/` (each with its .blend, FBX, textures, scripts, renders). Built headless. ## Files | | | |---|---| | `Tender_Mako.blend` | the model, textured | | `fbx/SM_Mako_*.fbx` | one FBX per part, vertices relative to the part's pivot; the hull carries its 26 `UCX_` collision hulls | | `fbx/Mako_Assembled.fbx` | everything in place, for a quick look | | `Mako_layout.json` | pivots, motion axes and ranges, sockets, clamp interface, every check's result, textures (Unreal cm) | | `textures/` | `T_Mako_Exterior_Masks` / `_BevelNormal` (4096), `T_Mako_Cabin_Masks` / `_BevelNormal` (2048), `T_Mako_Screens` | | `previews/compare/side_pair.png` | **the user's clean SIDE view over the model rendered the same way** (studio light) | | `previews/compare/side_inkover.png` | the sheet's drawn lines (red) over the model's side render: every part boundary checked | | `previews/compare/lookalike.png` | all four views of the sheet beside the model's | | `previews/v04_studio_*.png` | studio renders; `v04_*.png` the underwater light; `topo_*.png` wireframes over the shading | | `reference/` | the sheet, the clean SIDE view, the user's red lines, the zooms the numbers were read from | | `critique/` | the Critique's two rounds, its target overlays and measuring scripts | | `build/` | the scripts (below) and `checks/` with every check's result | ## What it is, part by part (SIDE first) - **Canopy**: an elliptic glass bubble with a blunt nose, read off the sheet's dark outline line (the pale outer bubble the colour classes had missed). Two-toned as drawn: pale upper glass above a line from the nose tip up to the collar (the user's line), clear sky-cyan below, the cockpit inside (seat under the crest, dark navy, console, sticks). No wire frames on the glass. - **Brow**: a thin orange visor over the glass's crest, from a point at x 178 to the collar (SIDE's top line 705 to 677); its underside on the crest at the front and curving down into the collar's front edge behind x 250; orange all round. It carries the fore clips. - **Collar**: a smooth rounded band round the bubble's back that follows SIDE's arcs (front edge at x 266 near the top, 300 at mid height, 281 at its foot; back edge 310, 340, 288), chamfered 2.5 cm; the stations near it are warped along the hull to make the arcs (`mk_hull.py`, `warp`). - **Jaw**: red-orange, its sloped front edge from (120, 857), a dark rim to the glass, two curved grooves, the rear "C" round a dark opening (its upper arm tapering to a point at x 368), solid down to y 945 at its rear, two broad flat prongs side by side with a thin slit between them from (282, 948), a short keel tooth behind them. - **Behind the collar**: the recess, a lit grey cavity with a port and the black wedge-shaped slot along the shell's curl; under it the side bodies (SIDE's light grey cheek panel, dark on top and at their rounded rear ends); the straight faceted big fins rooted on them (SIDE's tip at x 605, the trailing edge's drop to x 525). - **Body**: the orange shell over the dark body, 10 mm proud on a real step, the dorsal fin, the plate seams; the rear capsule's rounded front and SIDE's light diagonal strip; no rear window (the user: *"no need a glass window remove that just plain metal"*; `BAY_ON = False` in `build/mk_measure.py` brings it back), the machinery on the flank near the stern; the belly box; the tail fin with its flat top; the straight ventral fin. - **Stern**: a square hub with the thruster's duct (the rotor in it), a cross arm above it, a flat plate on top (y 730-775), an orange lens in a housing angled aft on each flank, a block under it, pipes; the two tool arms side by side (SIDE draws one). - **Hatch**: a flush orange plate behind the dorsal spine, 8 mm gap, hinged along its starboard edge. ## Where the holder clips are (the red line) The red loop on the TOP view spans x 237-350 over the canopy's rear and the collar. **v04 puts the clamp axis at x 312** (v03: the loop's centre, x 292) so the fore clips stand close to the collar and the brow can stay small: the TOP view draws glass under the loop. The docking arm's head closes four claws at 45/135/225/315 degrees round the axis, wrist 1.94 m over the Tender origin, which is 9 cm behind it (the Kazah's convention). Probed in the arm's file (`build/probe_head.py`): the claws never come below z 1.213, the landing feet stay at z 1.405. - A clip is the Kazah collar's profile only where a claw closes: a curved plate 2.9 cm thick (r 0.506-0.535), 22 degrees long, the hook lip at r 0.552 (top z 1.375), its top corners chamfered, a yellow mark. - The fore pair stands on the brow, each on a long orange crest grown out of it (0.23 m from the brow's top to the plate); the aft pair on short orange fairings on the shell behind the collar (0.11 m). ## Size, scale and axes - **6.78 m long** (nose to the stowed stern tools), **2.85 m span** (fin tips), **3.69 m high** (fin tips to the dorsal fin). - Scale 1 sheet pixel = 7.5 mm; the moon pool keeps 1.149 m (the user's limit is 1 m). - As the Kazah: 1 unit = 1 m, nose to -Y, port +X, Z up; origin on the centre line 9 cm behind the clamp axis. - Unreal: FBX forward -Y, up Z, import with Force Front X Axis; `ue_cm = (-y, -x, z) * 100` (nose +X). ## How it follows the sheet Measured in pixels: colour runs per column and row (`critique/runs.py`, `build/mk_runs.py`), the sheet's dark outline line, zooms with rulers; every number is in `build/mk_measure.py` with the reading (the v04 sections at its end supersede the older tables). Checked by laying the clean SIDE view over the model's side render (`previews/compare/side_pair.png`) and the sheet's drawn lines over it (`side_inkover.png`): the outline matches within a few pixels and the part boundaries lie on the sheet's lines. ## Added for the game (not on the sheet) The holder clips and their fairings (where the user's red line is), the hatch, the cockpit and the rear bay's interior, two small dark-lensed lamps under the jaw, the stowable tool arms' rig. ## Checks (scripts in `build/`, results in `build/checks/`) | check | result | limit or comparison | |---|---|---| | moon pool at BOARD (launch arm, interior fork's deck well) | **1.149 m** from the well's edge (a stern tool's tip) | the user's 1 m | | carousel sweep, three stowed Tenders, 2 degree steps | side **0.552 m**, roof 0.632 m | no contact | | docking clamp, `DockArm_Carousel.blend`, 20 poses (lowered, claws shut and open, both headings) | 0 intersections, least 17 mm | | | docking clamp, ship file, the three Tender places | 0 intersections, least 17 mm | | | hatch 0 to 100 deg, 2.5 deg steps | 0 intersections, least 5 mm | | | stern arms 0 to 90 deg | 0 intersections, least 3.2 cm; 0.37 m between them | | | rotor through one blade pitch | 0 intersections, 7.8 mm | | | cockpit and bay inside the skin | 0 cabin vertices within 5 mm of the skin or the glass (the lining itself excepted) | | Run: `sh build/run_checks.sh` (the ship and arm files are opened read-only and never saved). ## Moving parts (own objects, origin on the axis, rotation 0, scale 1) | object | moves | driver on `Mako_Root` | |---|---|---| | `SM_Mako_Hatch` | swings up about the hinge along its starboard edge (Blender Y), 0 .. 100 deg, lifting its port edge | `hatch_open_deg` | | `SM_Mako_Rotor` | spins about the long axis (Blender Y) | `rotor_turns` | | `SM_Mako_Arm_L` / `_R` | swing out about a vertical axis at the shoulder, 0 (stowed aft) .. 90 deg | `arms_out_deg` | Drivers are simple expressions (this Blender runs no Python in files). The moon pool's 1 m holds with the arms stowed. ## Meshes and materials - `SM_Mako_Hull` (static, one mesh: skin, steps and sleeves, collar, jaw and its details, brow, side bodies, fins, spine, belly box, stern machine, lamps, the clips and their fairings, the hatch's knuckles), `SM_Mako_Cabin`, `SM_Mako_Glass` (the canopy: clear and pale), the hatch, the rotor, the two arms. Quads, no booleans, no n-gons. Triangles: hull 34,616 (56 triangles: cap points), glass 5,712 (the nose tip's fan), cabin 24,312, hatch 796, rotor 548, arms 972 each. 26 convex `UCX_SM_Mako_Hull_NN` hulls (2,002 triangles), the collection "MAKO | Collision (UCX)" hidden in the viewport. - **Topology**: the hull is one quad grid of 80 columns and 153 stations. Each station's section is a profile assembled from the parts (`mk_shape.py`) with named points the columns lock onto (the jaw's top, the sill, the pale glass's line, the bezel's foot, the shell's edge, the bay, the hatch, the C's arms); openings are regions of whole faces with a rim and a sleeve to the lining; the bezel's faces and the lower body's front face are station pairs 6 mm apart. Custom normals on the skin from the grid's own normals. Faceted parts (the big fins) are flagged crisp: all their edges sharp. Wireframes: `previews/topo_*.png`. - Two UV layers: `UVMap` (UV0, the atlas: baked occlusion/edges/crevices and bevel normals, the plate seams drawn from their measured lines) and `UV_Tile` (UV1, metres). - Surfaces: the user's Season 2 pack sets (`models/vessel-interior/textures`) under the paints, nothing downloaded: orange clear coat (shell, collar, brow, dorsal and tail fins, fairings), red-orange (jaw, prongs), dark slate (body), light blue-grey (side bodies, big and ventral fins), lit grey (recess), black gloss (grooves, the C's opening, the slot), glasses as above, steel clips, graphite fittings, the CC0 leather on the seat, FloorPanel_A on the decks. ## Build Headless, one Blender at a time: `sh build/run_all.sh v04` (build in place, checks, surfaces, export, underwater previews), then `blender -b Tender_Mako.blend --python build/mk_lookalike.py -- v04 64` and `python build/mk_lookalike_sheet.py` (studio renders and the four-view sheet), `build/run_wire.py` (wireframes). `build_mako.py` runs `mk_shape.py`, `mk_hull.py`, `mk_fittings.py`, `mk_clamp.py`, `mk_cabin.py`, `mk_tools.py`, `mk_finish.py` (with `mk_collision.py`). A geometry rebuild always needs the surfaces pass again (`python build/make_surfaces.py` writes `surfaces_mako.py` from `surfaces_head.py` and the Spearfish's pass). ## Open - The Critique's rounds 1-3 and the user's red lines are applied (round 3: SIDE about 95 % in outline, 80 % in look before its last points were fixed: brighter, more saturated paints, the brow orange, the jaw solid to the prongs' slit, the stern as drawn, clearer glass). The Critique has not re-checked this last pass. From straight side-on the seat still reads faintly through the glass (it shows in the perspective renders). - Not in Unreal; no import script or actor yet (same axes as the Kazah, so the Kazah's path can be used). - My additions (the hatch, the cockpit and bay interiors, the clips' fairings) wait for the user's word. The clamp axis moved 20 px aft within the red loop (above). - "Mako" is a working name.