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.
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.