Claude's Corner: Art Works

The Iris: a steampunk submarine cruiser... in spaaace!

Preview of a 3D model depicting an old submarine that's grown wings and jet engines.

This is a ship from old Earth that was somehow transported to The Dream and given a refit for its new environment. It's old and battered, but still dangerous. The Iris started out as the Spirit Walk's nemesis, but was later taken over by an honorable crew.

Length:
89 meters
Beam:
10 meters
Wingspan:
32 meters
Displacement:
~2000 tons (submerged)
Decks:
?
Complement:
25 / 110 (skeleton crew)
Capacity:
N/A
Armament:
2 rapid-fire deck guns
6 torpedo tubes

Out-of-universe, the Iris was devised by Kantuck for her novel Shadowing the Dream, and showed up in more stories since.

OpenSCAD source code, first version as of May 2025:

module MainBody() {
	difference () {
		color("lightgray") union () {
			scale([0.09, 1, 1]) cylinder(h = 8, d = 89);
			scale([0.09, 1, 0.09]) sphere(d = 89);
			translate([0, -21, 2])
				cylinder(h = 2, d = 10, center = true);
			translate([0, -21, 5])
				cylinder(h = 2, d = 10, center = true);
		}
		color("gray")
			translate([0, -44.5, -2])
				scale([1, 2, 0.89]) rotate([0, 90, 0])
					cylinder(h = 16, d = 8.9, center = true);
		// Port
		translate([-1.5, 44, 2]) TorpedoTube();
		translate([-1.5, 44, 5]) TorpedoTube();
		// Starboard
		translate([1.5, 44, 2]) TorpedoTube();
		translate([1.5, 44, 5]) TorpedoTube();
		// Aft
		translate([-1.5, -44, 5]) TorpedoTube();
		translate([1.5, -44, 5]) TorpedoTube();
	}
}

module TorpedoTube() {
	color("steelblue")
		rotate([90, 0, 0])
			cylinder(h = 12, d = 1, $fn = 8, center = true);
}

module Sail() {
	difference() {
		scale([0.21, 1, 1])
			color("lightgray")
				cylinder(h = 5, d1 = 21, d2 = 13);
		translate([0, 8, 3])
			color("steelblue")
				cube([2, 3, 1], center = true);
		translate([0, -5, 5])
			cube([5, 10, 4], center = true);
	}
	difference() {
		scale([0.21, 0.95, 0.95])
			color("turquoise")
				cylinder(h = 5, d1 = 21, d2 = 13);
		translate([0, -5, 5])
			color("lightgray")
				cube([5, 10, 4], center = true);
	}
	color("silver") {
		translate([-2, 3, 1]) HatchDoor(-80);
		translate([2, 3, 1]) HatchDoor(80);
		translate([0, -4, 3]) rotate([0, 0, 180]) DeckGun();
	}
}

module HatchDoor(rotx) {
	rotate([rotx, 0, 90])	intersection() {
		cube([1, 2, 0.1], center = true);
		cylinder(h = 0.15, d = 2.1, $fn = 8, center = true);
	}
}

module Boiler() {
	translate ([0, -13, 8]) {
		rotate ([90, 0, 0]) {
			color("silver")
				cylinder (h = 13, d1 = 5, d2 = 3, $fn=15);
			color("gray")
				translate ([0, 0, 13]) sphere (d = 2, $fn=12);
			color("gray")
				cylinder (h = 1, d = 3, center = true, $fn=12);
		}
	}
}

module Wing(rot) {
	translate ([0, -21, 8])
		rotate ([0, rot, 0])
			scale ([0.1, 1, 1])
				color("silver")
					cylinder (h = 13, d1 = 8, d2 = 5);
}

module Thruster() {
	rotate ([90, 0, 0]) {
		difference() {
			hull() {
				cylinder(h = 8, d = 3, center = true, $fn = 8);
				cylinder(h = 13, d = 2, center = true, $fn = 8);
			}
			cylinder(h = 14, d = 1.5, center = true, $fn = 8);
		}
		scale([1, 1, 8]) sphere(d = 1.5, $fn = 8);
	}
}

module DivingPlane(y, rot) {
	translate([0, y, 3])
		rotate([0, rot, 0])
			scale([0.15, 1, 1])
				color("gray")
					cylinder(h = 8, d1 = 5, d2 = 3);
}

module Boat() { scale ([1, 5, 1]) sphere (d = 2, $fn = 12); }

module DeckGun() {
	// Base
	cylinder(h = 0.5, d = 2, $fn = 8, center = true);
	translate([0, 0, 1]) rotate([0, 90, 0])
		cylinder(h = 1.2, d = 0.2, $fn = 8, center = true);
	translate([0, 0, 0.5]) difference() {
		cube([1, 1, 1.6], center = true);
		cube([0.6, 2, 3], center = true);
	}
	translate([0, 0, 1.2]) rotate([-90, 0, 0]) union () {
		cylinder(h = 1.2, d = 0.5, $fn = 6, center = true);
		cylinder(h = 2, d = 0.3, $fn = 6);
		translate([0, -0.25, 0])
			cylinder(h = 1.5, d = 0.15, $fn = 6, center = true);
		translate([0, 0, -0.5])
			cube([0.5, 0.8, 0.6], center = true);
	}
}

module Propeller() {
	cylinder(h = 5, d = 0.6, $fn = 8);
	// cylinder(h = 0.2, d = 1.2, $fn = 8);
	scale([1, 1, 3]) sphere(d = 1, $fn = 8);
	for (i = [30:90:360]) {
		rotate([0, 0, i])
			translate([1.2, 0, -0.3])
				rotate([-30, 0, 0])
					scale([2, 1.2, 0.2])
						sphere(d = 1.2, $fn = 8);
	}
}

module Rudder() {
		translate([0, 0, -2]) cylinder(h = 6, d = 0.5);
		scale ([0.1, 1, 1])
			rotate([90, 0, 0])
				cylinder(h = 2, d1 = 5, d2 = 4, $fn = 12);
}

MainBody();
translate([0, 13, 8]) Sail();
Boiler();
Wing(rot = -96);
Wing(rot = 96);
translate([-13, -21, 6]) color("silver") Thruster();
translate([13, -21, 6]) color("silver") Thruster();
DivingPlane(34, -90);
DivingPlane(34, 90);

color("silver") {
	translate([-4, 0, 6]) Boat();
	translate([-3, 25, 6]) Boat();
	translate([4, 0, 6]) Boat();
	translate([3, 25, 6]) Boat();
	translate([0, 34, 8]) DeckGun();
	translate([0, -39.5, -1]) rotate([-90, 0, 0]) Propeller();
	translate([0, -42, -1]) Rudder();
}

Note: the Iris isn't mine. Source code is provided for entertainment and education.