← Back to Gallery

Loading 3D viewer…

DSV Deep-Sea Submersible on the Abyssal Shelf (indexed)

by Jorge Barbero

Dimensions
48×40×64
Blocks
25,506
Compute Time
0.6s
Generation Time
2m 26s
Model
claude-opus-5
Created
September 23, 2026
submersiblevehicledeep-seaindexedautoeval
Prompt

User Prompt

a bright-yellow deep-sea research submersible (crewed DSV) resting on an abyssal seabed shelf: a fat cigar-shaped buoyancy hull in yellow and white, a spherical steel-and-acrylic observation pod at the bow with a big round viewport, twin ducted thrusters at the stern, two articulated orange manipulator arms and a sample basket, sled skids underneath, an external floodlight array, sitting on pale sandy seabed with scattered rocks and glass sponges

Enhanced Prompt

condition=indexed; retrieval via search_docs({action:"related"}) -> routed to vehicles-machines/Balloon-Envelope Shapes (ellipsoid formula), fantasy-scifi/Engine Section + Cockpit Design, interior-design/Chandelier + Hidden Floor Light, build-notes/Empty Interiors. Built as an ELLIPSOID SHELL (hollow by construction) rather than a carved solid; glass nose cap so the viewport reads from outside.

Photos

Bow quarter
Bow quarterexterior
Profile
Profileexterior
Pressure cabin
Pressure cabininterior
Pilot station
Pilot stationinterior
CraftScript Source
// === BUILD PLAN ===
// Subject: crewed DSV on an abyssal shelf. Bow (glass pod) faces +Z toward the camera.
// Retrieval: search_docs related -> "Balloon/Envelope Shapes" gives the ELLIPSOID SHELL formula
//   dx^2/rx^2 + dy^2/ry^2 + dz^2/rz^2 <= 1 with an inner test -> hull is HOLLOW BY CONSTRUCTION
//   (no carving), so the pressure cabin exists for free. Proportions rule: rz ~= 2-3x rx.
// Also routed: fantasy-scifi Engine Section (concentric thruster rings + glow core),
//   Cockpit Design (iron-framed glass, stone_button dash, lever throttle, stair seats, end rods),
//   interior-design Chandelier + Hidden Floor Light, build-notes Empty Interiors (furnish it).
//
// Envelope: rx=5, ry=5, rz=13 centred (24,18,30)  -> 27 long, 11 wide, 11 tall
// Pod: sphere shell r=5 at (24,18,47); the z>=49 cap is BUILT IN GLASS so the viewport reads outside.
// Y levels: seabed Y6 | skids Y8 | hull belly Y13 | axis Y18 | deck Y16, walk Y17 | tower top Y27 | mast Y30
//
// SIDE ELEVATION:
//        mast|
//        (tower)                                  ___
//   [O]==<<<<<##########################>>>>>===( GG )  GG = acrylic nose cap
//   [O]==<<<<<##########################>>>>>===(_GG_)
//        \skid========strut========skid/    \arms->[basket]
//   ~~~~~~ pale sand + rocks + glass sponges + deployed lander ~~~~~~
//
// MATERIALS PLAN:
//   hull    : yellow_concrete(58)+yellow_terracotta(24)+honeycomb_block(18) above the boot-top
//   boot-top: black_concrete ring at the widest belt   WHY: a hard value line makes the ellipsoid read as a HULL
//   belly   : white_concrete(58)+light_gray_concrete(28)+iron_block(14)
//   chevrons: orange_concrete / white_concrete alternating bands on the stern quarter (safety livery)
//   pod     : light_gray_concrete/iron_block shell, light_blue_stained_glass nose cap, iron_block frame ring
//   engines : Engine Section palette - iron_block/gray_concrete rings, sea_lantern + shroomlight core
//   arms    : orange_concrete/orange_terracotta, iron_bars rams, polished_deepslate wrists
//   seabed  : sand/gravel/clay/white_terracotta patches, deepslate+basalt boulders, bone_block sponges
// Cabin: deck Y16, pilot station at the pod (stair seats + button dash + lever), science bay,
//        sea-lantern-under-carpet floor glow, chandelier-style hanging lantern, crates. Ladder up the tower.
// PROCESS: DIRECT, shell-first (ellipsoid + sphere shells), then deck, then fittings.
// === END PLAN ===

var cx = 24, cy = 18, SEA = 6;
var RX = 5, RY = 5, RZ = 13, HCZ = 30;
var PODZ = 47, PODR = 5;

function mat(p, x, y, z) { return (typeof p === 'function') ? p(x, y, z) : p; }
function seg(x1, y1, z1, x2, y2, z2, pat) {
    var n = Math.max(Math.abs(x2 - x1), Math.abs(y2 - y1), Math.abs(z2 - z1)), i, t, x, y, z;
    for (i = 0; i <= n; i++) {
        t = (n === 0) ? 0 : i / n;
        x = Math.round(x1 + (x2 - x1) * t); y = Math.round(y1 + (y2 - y1) * t); z = Math.round(z1 + (z2 - z1) * t);
        pb(x, y, z, mat(pat, x, y, z));
    }
}
function ringZ(ax, ay, z, r, thick, pat) {
    var dx, dy, ri = Math.ceil(r), d;
    for (dx = -ri; dx <= ri; dx++) for (dy = -ri; dy <= ri; dy++) {
        d = Math.sqrt(dx * dx + dy * dy);
        if (d <= r && d >= r - thick) pb(ax + dx, ay + dy, z, mat(pat, ax + dx, ay + dy, z));
    }
}
function discZ(ax, ay, z, r, pat) {
    var dx, dy, rr = r * r, ri = Math.ceil(r);
    for (dx = -ri; dx <= ri; dx++) for (dy = -ri; dy <= ri; dy++) if (dx * dx + dy * dy <= rr) pb(ax + dx, ay + dy, z, mat(pat, ax + dx, ay + dy, z));
}
// ellipsoid SHELL (from the routed Balloon/Envelope Shapes recipe) - hollow by construction
function envelope(ex, ey, ez, rx, ry, rz, pat) {
    var dx, dy, dz, dist, inner;
    for (dy = -ry; dy <= ry; dy++) for (dx = -rx; dx <= rx; dx++) for (dz = -rz; dz <= rz; dz++) {
        dist = (dx * dx) / (rx * rx) + (dy * dy) / (ry * ry) + (dz * dz) / (rz * rz);
        inner = (dx * dx) / ((rx - 1) * (rx - 1)) + (dy * dy) / ((ry - 1) * (ry - 1)) + (dz * dz) / ((rz - 1) * (rz - 1));
        if (dist <= 1.0 && inner > 1.0) pb(ex + dx, ey + dy, ez + dz, mat(pat, ex + dx, ey + dy, ez + dz));
    }
}
function sphereShell(ex, ey, ez, r, pat) { envelope(ex, ey, ez, r, r, r, pat); }
function sphereSolid(ex, ey, ez, r, pat) {
    var dx, dy, dz, rr = r * r, ri = Math.ceil(r);
    for (dx = -ri; dx <= ri; dx++) for (dy = -ri; dy <= ri; dy++) for (dz = -ri; dz <= ri; dz++)
        if (dx * dx + dy * dy + dz * dz <= rr) pb(ex + dx, ey + dy, ez + dz, mat(pat, ex + dx, ey + dy, ez + dz));
}

// ---- palettes ----
var yellowPal = noisePalette([{ block: 'yellow_concrete', weight: 58 }, { block: 'yellow_terracotta', weight: 24 }, { block: 'honeycomb_block', weight: 18 }], { freq: 0.17 });
var whitePal = noisePalette([{ block: 'white_concrete', weight: 58 }, { block: 'light_gray_concrete', weight: 28 }, { block: 'iron_block', weight: 14 }], { freq: 0.17 });
var podPal = noisePalette([{ block: 'light_gray_concrete', weight: 50 }, { block: 'iron_block', weight: 32 }, { block: 'polished_deepslate', weight: 18 }], { freq: 0.2 });
var engPal = noisePalette([{ block: 'iron_block', weight: 40 }, { block: 'gray_concrete', weight: 30 }, { block: 'light_gray_concrete', weight: 30 }], { freq: 0.22 });
var glowPal = noisePalette([{ block: 'sea_lantern', weight: 55 }, { block: 'shroomlight', weight: 25 }, { block: 'light_blue_concrete', weight: 20 }], { freq: 0.3 });
var armPal = noisePalette([{ block: 'orange_concrete', weight: 64 }, { block: 'orange_terracotta', weight: 36 }], { freq: 0.25 });
var rockPal = noisePalette([{ block: 'deepslate', weight: 36 }, { block: 'cobbled_deepslate', weight: 26 }, { block: 'basalt', weight: 24 }, { block: 'tuff', weight: 14 }], { freq: 0.2 });

// hull livery: boot-top black belt on the axis, yellow above, white below, orange chevrons aft
function hullMat(x, y, z) {
    if (z >= 19 && z <= 25 && ((z - 19) % 4 < 2) && y > cy) return (((z - 19) % 4) === 0) ? 'orange_concrete' : 'white_concrete';
    if (y === cy - 3) return 'black_concrete';
    if (y > cy - 3) return yellowPal(x, y, z);
    return whitePal(x, y, z);
}
function podMat(x, y, z) { return (z >= PODZ + 2) ? 'light_blue_stained_glass' : podPal(x, y, z); }

// ---- 1. SEABED ----
var sea = zoneRect(0, 0, 47, 63);
var hb = hills({ base: SEA, amp: 2, scale: 0.06, seed: 77 });
var pad = flatten(hb, { x0: 12, z0: 8, x1: 36, z1: 58 }, SEA, 9);
var smat = patches([{ block: 'sand', w: 56 }, { block: 'gravel', w: 22 }, { block: 'clay', w: 13 }, { block: 'white_terracotta', w: 9 }], 0.07, 13);
fill(0, 0, 0, 47, SEA - 3, 63, 'stone');
surface(sea, pad, smat, { sub: 'sand', deep: 'stone', depth: 5 });

// ---- 2. HULL ENVELOPE (ellipsoid shell) ----
envelope(cx, cy, HCZ, RX, RY, RZ, hullMat);
// structural frames every 5 blocks (relief so it is not a smooth sausage)
var z, i, x, y;
for (z = HCZ - 10; z <= HCZ + 10; z += 5) ringZ(cx, cy, z, Math.sqrt(Math.max(0, 1 - ((z - HCZ) * (z - HCZ)) / (RZ * RZ))) * RX + 0.2, 1.0, 'light_gray_concrete');
// ballast blisters on both flanks
for (i = -1; i <= 1; i += 2) {
    envelope(cx + i * 6, cy - 1, HCZ + 2, 2, 2, 7, engPal);
    ringZ(cx + i * 6, cy - 1, HCZ + 9, 2.2, 1.0, 'black_concrete');
}

// ---- 3. OBSERVATION POD (sphere shell, glass nose cap) ----
sphereShell(cx, cy, PODZ, PODR, podMat);
ringZ(cx, cy, PODZ + 1, PODR - 0.2, 1.2, 'iron_block');   // frame ring around the acrylic
ringZ(cx, cy, PODZ - 4, 4.0, 1.2, engPal);                // collar to the hull
// neck between hull and pod
for (z = 42; z <= 44; z++) ringZ(cx, cy, z, 3.6, 1.1, engPal);
// side portholes
ps(cx - 5, cy, PODZ, 'light_blue_stained_glass'); ps(cx + 5, cy, PODZ, 'light_blue_stained_glass');
ps(cx, cy + 5, PODZ, 'light_blue_stained_glass');

// ---- 4. ENGINE SECTION - twin ducted thrusters (concentric rings + glow core) ----
function thruster(dx) {
    var zz;
    for (zz = 15; zz <= 19; zz++) ringZ(cx + dx, cy, zz, 3.3, 1.2, engPal);
    ringZ(cx + dx, cy, 14, 3.6, 1.5, 'polished_deepslate');
    ringZ(cx + dx, cy, 20, 3.0, 1.0, 'gray_concrete');
    // glow core + blades
    discZ(cx + dx, cy, 16, 1.6, glowPal);
    for (zz = 17; zz <= 18; zz++) {
        seg(cx + dx - 2, cy, zz, cx + dx + 2, cy, zz, 'iron_bars');
        seg(cx + dx, cy - 2, zz, cx + dx, cy + 2, zz, 'iron_bars');
    }
    fill(cx + dx, cy, 17, cx + dx, cy, 19, 'iron_block');
    seg(cx + dx, cy, 20, cx + (dx > 0 ? 3 : -3), cy, 23, engPal);
    ps(cx + dx, cy, 13, 'end_rod[facing=south]');
}
thruster(-6); thruster(6);
// stern cone fairing
for (i = 0; i < 4; i++) ringZ(cx, cy, 17 - i, 3.2 - i * 0.7, 1.2, engPal);

// ---- 5. SAIL TOWER + MAST + HATCH ----
fill(cx - 2, 23, 27, cx + 2, 26, 33, yellowPal);
for (x = cx - 2; x <= cx + 2; x++) { roofStair(x, 27, 27, 'yellow_terracotta_stairs', 'north'); roofStair(x, 27, 33, 'yellow_terracotta_stairs', 'south'); }
fill(cx - 1, 27, 28, cx + 1, 27, 32, 'yellow_concrete');
ringZ(cx, 25, 27, 2.0, 1.0, 'light_gray_concrete');
fill(cx, 28, 30, cx, 30, 30, 'iron_bars');
pb(cx, 31, 30, 'red_concrete'); ps(cx, 32, 30, 'redstone_lamp[lit=true]');
ps(cx - 1, 29, 30, 'end_rod[facing=up]'); ps(cx + 1, 29, 30, 'end_rod[facing=up]');
// access trunk: backing column OFF the centreline so the deck stays walkable
fill(cx + 2, 17, 31, cx + 2, 26, 31, 'iron_block');
fill(cx + 2, 17, 32, cx + 2, 26, 32, 'air');
for (y = 17; y <= 26; y++) ps(cx + 2, y, 32, 'ladder[facing=south]');
ps(cx + 2, 27, 32, 'iron_trapdoor[facing=north,half=bottom,open=true]');

// ---- 6. DECK + CABIN (the envelope is already hollow - just fit it out) ----
for (z = 20; z <= 51; z++) {
    var hw = 0;
    if (z <= 43) { var q = 1 - ((z - HCZ) * (z - HCZ)) / (RZ * RZ) - 4 / (RY * RY); hw = q > 0 ? Math.sqrt(q) * RX - 1 : -1; }
    else { var d2 = (z - PODZ) * (z - PODZ); var q2 = (PODR - 1) * (PODR - 1) - d2 - 4; hw = q2 > 0 ? Math.sqrt(q2) - 0.4 : -1; }
    if (hw >= 1) fill(cx - Math.floor(hw), 16, z, cx + Math.floor(hw), 16, z, 'smooth_stone');
}
// hidden floor light (sea lantern under carpet) + chandelier-style pendants
pb(cx, 16, 36, 'sea_lantern'); ps(cx, 17, 36, 'light_blue_carpet');
pb(cx, 16, 26, 'sea_lantern'); ps(cx, 17, 26, 'light_blue_carpet');
for (z = 24; z <= 44; z += 5) { pb(cx, 22, z, 'deepslate_tiles'); ps(cx, 21, z, 'iron_chain[axis=y]'); ps(cx, 20, z, 'lantern[hanging=true]'); }
// pilot station at the pod (Cockpit Design: stair seats, button dash, lever throttle, end rods)
chairStair(cx - 1, 17, 48, 'polished_blackstone_stairs', 'south');
chairStair(cx + 1, 17, 48, 'polished_blackstone_stairs', 'south');
pb(cx - 2, 17, 49, 'iron_block'); pb(cx + 2, 17, 49, 'iron_block'); pb(cx, 17, 49, 'iron_block');
ps(cx - 2, 18, 49, 'stone_button[face=floor,facing=south]');
ps(cx, 18, 49, 'stone_button[face=floor,facing=south]');
ps(cx + 2, 18, 49, 'lever[face=floor,facing=south]');
pb(cx - 1, 17, 49, 'daylight_detector'); pb(cx + 1, 17, 49, 'daylight_detector');
ps(cx - 3, 18, 48, 'end_rod[facing=up]'); ps(cx + 3, 18, 48, 'end_rod[facing=up]');
rug(cx - 1, 17, 44, 3, 3, 'blue', 'light_blue');
// science bay amidships
pb(cx - 2, 17, 38, 'barrel[facing=up]'); pb(cx + 2, 17, 38, 'barrel[facing=up]');
pb(cx - 2, 18, 38, 'barrel[facing=up]');
ps(cx + 2, 17, 35, 'brewing_stand');
pb(cx - 2, 17, 34, 'chest[facing=east,type=single]');
pb(cx + 2, 17, 32, 'cartography_table');
ps(cx - 2, 17, 30, 'cauldron[level=1]');
pb(cx - 2, 17, 27, 'crafting_table');
pb(cx + 2, 17, 27, 'furnace[facing=west]');
chairStair(cx - 1, 17, 25, 'polished_blackstone_stairs', 'north');
pb(cx + 1, 17, 24, 'smithing_table');
ps(cx, 17, 22, 'observer');

// ---- 7. SLED SKIDS + STRUTS ----
for (z = 19; z <= 48; z++) {
    pb(cx - 6, 8, z, 'polished_deepslate'); pb(cx + 6, 8, z, 'polished_deepslate');
    if (z % 6 === 1) { pb(cx - 6, 9, z, 'deepslate_tiles'); pb(cx + 6, 9, z, 'deepslate_tiles'); }
}
ps(cx - 6, 9, 49, 'deepslate_tile_stairs[facing=south,half=bottom]');
ps(cx + 6, 9, 49, 'deepslate_tile_stairs[facing=south,half=bottom]');
ps(cx - 6, 9, 18, 'deepslate_tile_stairs[facing=north,half=bottom]');
ps(cx + 6, 9, 18, 'deepslate_tile_stairs[facing=north,half=bottom]');
var sz = [22, 29, 36, 43];
for (i = 0; i < sz.length; i++) {
    seg(cx - 6, 9, sz[i], cx - 3, 13, sz[i], engPal);
    seg(cx + 6, 9, sz[i], cx + 3, 13, sz[i], engPal);
    seg(cx - 6, 9, sz[i], cx - 6, 8, sz[i] + 2, 'polished_deepslate');
}
// keel bar
fill(cx, 12, 22, cx, 12, 44, 'gray_concrete');

// ---- 8. MANIPULATOR ARMS + SAMPLE BASKET ----
function arm(s) {
    seg(cx + 3 * s, 14, 45, cx + 6 * s, 13, 49, armPal);
    pb(cx + 6 * s, 13, 49, 'polished_deepslate');
    seg(cx + 6 * s, 13, 49, cx + 4 * s, 11, 54, armPal);
    pb(cx + 4 * s, 11, 54, 'polished_deepslate');
    ps(cx + 4 * s, 11, 55, 'iron_bars');
    ps(cx + 3 * s, 11, 56, 'polished_deepslate_slab[type=bottom]');
    ps(cx + 5 * s, 11, 56, 'polished_deepslate_slab[type=bottom]');
    seg(cx + 4 * s, 15, 46, cx + 6 * s, 14, 49, 'iron_bars');
}
arm(-1); arm(1);
fill(cx - 2, 9, 53, cx + 2, 9, 56, 'iron_bars');
fill(cx - 2, 10, 53, cx + 2, 10, 53, 'iron_bars');
fill(cx - 2, 10, 56, cx + 2, 10, 56, 'iron_bars');
fill(cx - 2, 10, 54, cx - 2, 10, 55, 'iron_bars');
fill(cx + 2, 10, 54, cx + 2, 10, 55, 'iron_bars');
pb(cx - 1, 10, 54, 'horn_coral_block'); pb(cx + 1, 10, 55, 'sponge');
pb(cx, 10, 55, 'brain_coral_block');
seg(cx - 2, 11, 53, cx - 3, 12, 51, engPal); seg(cx + 2, 11, 53, cx + 3, 12, 51, engPal);

// ---- 9. FLOODLIGHT ARRAY (boom under the pod) ----
fill(cx - 5, 12, 51, cx + 5, 12, 51, 'polished_deepslate');
seg(cx - 5, 12, 51, cx - 4, 14, 48, engPal); seg(cx + 5, 12, 51, cx + 4, 14, 48, engPal);
pb(cx - 4, 11, 51, 'sea_lantern'); pb(cx, 11, 51, 'sea_lantern'); pb(cx + 4, 11, 51, 'sea_lantern');
ps(cx - 4, 12, 51, 'deepslate_tile_slab[type=bottom]'); ps(cx, 12, 51, 'deepslate_tile_slab[type=bottom]');
ps(cx + 4, 12, 51, 'deepslate_tile_slab[type=bottom]');
pb(cx - 6, 22, 42, 'sea_lantern'); pb(cx + 6, 22, 42, 'sea_lantern');

// ---- 10. SEABED SCENE ----
function rock(rx, rz, rr) { sphereSolid(rx, SEA - 1, rz, rr, rockPal); }
rock(8, 14, 4); rock(40, 20, 3.5); rock(9, 44, 3.2); rock(41, 50, 3.8);
rock(15, 58, 2.6); rock(33, 10, 3); rock(5, 30, 2.6); rock(43, 36, 2.6);
function sponge(sx, sz, hgt) {
    var yy; for (yy = 0; yy < hgt; yy++) pb(sx, SEA + 1 + yy, sz, 'bone_block[axis=y]');
    pb(sx, SEA + 1 + hgt, sz, 'sea_lantern');
    ps(sx, SEA + 2 + hgt, sz, 'white_stained_glass');
    ps(sx + 1, SEA + 1 + hgt, sz, 'white_stained_glass_pane');
    ps(sx - 1, SEA + hgt, sz, 'white_stained_glass_pane');
}
sponge(11, 18, 3); sponge(37, 16, 2); sponge(8, 48, 4); sponge(39, 44, 3);
sponge(13, 60, 2); sponge(31, 58, 3); sponge(44, 28, 2); sponge(4, 36, 3);
pb(8, SEA + 3, 14, 'fire_coral_block'); pb(40, SEA + 2, 20, 'bubble_coral_block');
pb(41, SEA + 3, 50, 'brain_coral_block'); pb(9, SEA + 2, 44, 'horn_coral_block');
// a deployed seabed lander / experiment package with a strobe
fill(36, SEA + 1, 34, 39, SEA + 1, 37, 'polished_deepslate');
fill(37, SEA + 2, 35, 38, SEA + 3, 36, 'gray_concrete');
pb(37, SEA + 4, 35, 'sea_lantern'); ps(38, SEA + 4, 36, 'end_rod[facing=up]');
for (i = 0; i < 4; i++) ps(36 + (i % 2) * 3, SEA + 1, 34 + Math.floor(i / 2) * 3, 'iron_bars');
// marker float line
fill(12, SEA + 1, 26, 12, SEA + 6, 26, 'iron_bars');
pb(12, SEA + 7, 26, 'sea_lantern');
noisyScatter(2, SEA + 1, 2, 45, SEA + 1, 61, 'sea_pickle', 0.035, 61);
noisyScatter(2, SEA + 1, 2, 45, SEA + 1, 61, 'dead_bush', 0.018, 19);
noisyScatter(0, SEA, 0, 47, SEA, 63, 'gravel', 0.13, 44);
fill(cx - 7, SEA, 50, cx - 5, SEA, 62, 'gravel');
fill(cx + 5, SEA, 50, cx + 7, SEA, 62, 'gravel');

Static Renders

DSV Deep-Sea Submersible on the Abyssal Shelf (indexed) isometric viewisometric
DSV Deep-Sea Submersible on the Abyssal Shelf (indexed) front viewfront
DSV Deep-Sea Submersible on the Abyssal Shelf (indexed) side viewside
DSV Deep-Sea Submersible on the Abyssal Shelf (indexed) back viewback
DSV Deep-Sea Submersible on the Abyssal Shelf (indexed) top viewtop