(A woman's voice from off-screen, firm yet gentle.)
Aether: the celestial ocean. These are the voyages of the dream-rider Spirit Walk. Its forever mission: to befriend more cool people and have a blast; to poke at corners no-one noticed before. ...Isn't that right, kitty?(loud purring)
Welcome aboard! The Spirit Walk is a dream-rider, a vessel made for the literal space ocean from a steampunk / dieselpunk setting called The Dream. Neither airship nor submarine, it has a little bit of both.
OpenSCAD source code is included below (version 2 as of summer 2023):
module Hull() {
scale ([1, 7, 1]) sphere (d = 5, $fn = 30);
}
color ("Khaki") Hull();
module Viewport() {
rotate ([0, 90, 0]) {
color ("Goldenrod") difference () {
cylinder (h = 0.10, d = 0.55,
center = true, $fn = 8);
cylinder (h = 0.15, d = 0.45,
center = true, $fn = 8);
}
color ("Turquoise")
scale ([1, 1, 0.2])
sphere (d = 0.5, $fn = 8);
}
}
translate ([0, 5.5, 0]) {
// Crew quarters
translate ([-1.5, 0, 0]) {
color ("Khaki")
scale ([1, 5, 1])
sphere (d = 3, $fn = 15);
translate ([-1.45, 0, 0]) Viewport();
translate ([-1.35, 3, 0]) Viewport();
translate ([-1.35, -3, 0]) Viewport();
}
translate ([1.5, 0, 0]) {
color ("Khaki")
scale ([1, 5, 1])
sphere (d = 3, $fn = 15);
translate ([1.45, 0, 0]) Viewport();
translate ([1.35, 3, 0]) Viewport();
translate ([1.35, -3, 0]) Viewport();
}
// Brigde section
translate ([0, 0, 1.5]) {
scale ([1, 5, 1.5]) {
color ("Khaki") difference () {
sphere (d = 3, $fn = 15);
translate ([0, 2, 0.7])
cube ([0.5, 2, 0.6],
center = true);
rotate ([0, 0, 30])
translate ([0, 2, 0.7])
cube ([0.3, 2, 0.6],
center = true);
rotate ([0, 0, -30])
translate ([0, 2, 0.7])
cube ([0.3, 2, 0.6],
center = true);
}
color("Turquoise")
sphere (d = 2.9, $fn = 15);
}
color ("Khaki")
translate ([0, 1.5, 1])
rotate ([0, 90, 0])
cylinder (h = 2.7, d = 0.6,
center = true, $fn = 8);
color ("Khaki")
translate ([0, -1.5, 1])
rotate ([0, 90, 0])
cylinder (h = 2.7, d = 0.6,
center = true, $fn = 8);
translate ([1.35, 1.5, 1]) Viewport();
translate ([1.35, -1.5, 1]) Viewport();
translate ([-1.35, 1.5, 1]) Viewport();
translate ([-1.35, -1.5, 1]) Viewport();
}
}
module TailFin() {
scale([0.1, 1, 1]) cylinder (h = 3, r1 = 2, r2 = 1);
}
color ("Khaki") translate ([0, -15, 0]) {
rotate([0, 45, 0]) {
TailFin();
rotate([0, 90, 0]) TailFin();
rotate([0, -90, 0]) TailFin();
rotate([0, 180, 0]) TailFin();
}
}
module BigFin() {
color ("Khaki") scale([0.2, 1, 1])
cylinder (h = 3, r1 = 1.5, r2 = 0.5);
}
module SmolFin() {
color ("Khaki") scale([0.2, 1, 1])
cylinder (h = 3, r1 = 1.5, r2 = 0.3);
}
// Belly fins
translate ([0, 0, -0.8]) rotate([30, 180, 0]) SmolFin();
translate ([0, 5, -1]) rotate([30, 180, 0]) BigFin();
translate ([0, -5, -1]) rotate([30, 180, 0]) BigFin();
translate ([0, 10, -0.3]) rotate([30, 180, 0]) SmolFin();
translate ([0, 15, 0.5]) rotate([30, 180, 0]) SmolFin();
// Side fins -- aft
translate ([1, -2, 0]) rotate([30, 90, 0]) BigFin();
translate ([-1, -2, 0]) rotate([30, -90, 0]) BigFin();
// Side fins -- fore
translate ([0, 15, 0]) rotate([30, 90, 0]) BigFin();
translate ([0, 15, 0]) rotate([30, -90, 0]) BigFin();
module EnginePod() {
color ("Khaki") rotate ([90, 0, 0]) {
hull() {
cylinder (h = 5, d = 0.5, $fn = 8);
cylinder (h = 4, d = 1, $fn = 8);
}
}
}
translate ([1.5, -12, 0]) EnginePod();
translate ([-1.5, -12, 0]) EnginePod();
// Upper hatch
translate ([1, -1, 0]) {
color ("Khaki") cylinder (h = 2.5, d = 1, $fn = 8);
color ("Goldenrod")
cylinder (h = 2.6, d = 0.8, $fn = 8);
}
// Crane
translate ([-1, -1, 0]) {
color ("Khaki") cylinder (h = 2.5, d = 1, $fn = 8);
color ("Goldenrod") rotate ([0, 0, 30]) {
translate ([0, 0, 2.8]) {
difference () {
cube ([0.3, 0.6, 0.6], center = true);
cube ([0.1, 0.7, 0.7], center = true);
}
}
translate ([0, 0, 2.5]) {
rotate ([45, 0, 0]) {
cylinder (h = 1.5, d = 0.1);
cylinder (h = 3, d = 0.05);
}
}
translate ([0, 0.25, 3])
rotate ([0, 90, 0])
cylinder (h = 0.05, d = 0.5,
center = true, $fn = 8);
}
}
// Side door
color ("Goldenrod") translate ([-0.1, 0, 0]) {
intersection () {
Hull();
translate ([-1.5, -1, 1])
cube([3, 0.8, 1.6], center = true);
}
}
// Cargo doors
color ("Goldenrod") translate([0, 0, 0.1]) {
intersection () {
Hull();
translate ([0.8, -4, 2.5])
cube([1.5, 3, 2.5], center = true);
}
intersection () {
Hull();
translate ([-0.8, -4, 2.5])
cube([1.5, 3, 2.5], center = true);
}
}
Note that the new deck plan used in most stories doesn't match this model.
An older version is up on Open Game Art.