Pantheon Benchmark: Codex 5.5
by Mach3 ·
Client: Codex Desktop 26.519.22136
LLM: GPT 5.5 High
There were two reference images, not one - see blog entry for details.
Interactive Preview & Customizer
3D preview with browser-based OpenSCAD rendering on parameter changes.
Loading preview...
step 0.5
step 0.5
step 0.5
step 0.5
step 0.5
step 0.5
step 0.5
WASM compiler loads on first parameter change.
Screenshots
Prompt Assets
Prompt image
Prompt
see two ref images and build .scad file with openscad implementation of pantheon. use openscad CLI (available) to preview your work (by rendering openscad model to .png) and iterate until you are happy with the result.
OpenSCAD Code
// Pantheon, Rome - stylized architectural model from front and aerial references.
// Units are arbitrary and chosen for proportion rather than survey accuracy.
$fn = 96;
stone = [0.72, 0.66, 0.56];
warm_stone = [0.62, 0.51, 0.42];
aged_marble = [0.82, 0.80, 0.72];
shadow = [0.13, 0.12, 0.11];
roof_tile = [0.44, 0.32, 0.22];
dark_roof = [0.24, 0.22, 0.19];
plaza = [0.52, 0.50, 0.45];
rotunda_r = 43;
rotunda_wall_h = 30;
dome_h = 28;
portico_w = 67;
portico_d = 45;
front_y = -76;
module triangular_prism(width, depth, height) {
polyhedron(
points=[
[-width/2, -depth/2, 0], [ width/2, -depth/2, 0], [0, -depth/2, height],
[-width/2, depth/2, 0], [ width/2, depth/2, 0], [0, depth/2, height]
],
faces=[
[0,1,2],
[3,5,4],
[0,3,4,1],
[1,4,5,2],
[2,5,3,0]
]
);
}
module rounded_step(radius, height, z, start_angle=0, end_angle=360) {
color(stone)
translate([0, 0, z])
cylinder(r=radius, h=height);
}
module annular_cylinder(outer_r, inner_r, h) {
difference() {
cylinder(r=outer_r, h=h);
translate([0,0,-0.1]) cylinder(r=inner_r, h=h+0.2);
}
}
module rotunda_wall() {
color(warm_stone)
difference() {
cylinder(r=rotunda_r, h=rotunda_wall_h);
translate([0,0,-0.2]) cylinder(r=rotunda_r-3.2, h=rotunda_wall_h+0.4);
// Deep shadowed entrance where the portico attaches.
translate([-24, -rotunda_r-1, 0])
cube([48, 12, 25]);
}
// Horizontal brick and cornice bands visible around the drum.
for (z=[4, 10, 16, 22, 28]) {
color([0.50, 0.40, 0.32])
translate([0,0,z])
annular_cylinder(rotunda_r+0.45, rotunda_r-0.35, 0.65);
}
color(aged_marble)
translate([0,0,rotunda_wall_h-1.2])
annular_cylinder(rotunda_r+1.4, rotunda_r-3.8, 2.1);
// Small square openings in the ancient brick drum.
for (a=[18:18:342]) {
if (a < 210 || a > 330) {
rotate([0,0,a])
translate([rotunda_r-0.7, -1.0, 14])
color(shadow) cube([1.1, 2.0, 3.2], center=true);
}
}
}
function dome_z(r, R, H, z0) = z0 + H * sqrt(max(0, 1 - (r/R)*(r/R)));
module dome_shell(R=42, H=28, z0=30, oculus=7.5, shell=1.6, steps=36) {
outer = [for (i=[0:steps])
let (r = oculus + (R-oculus)*i/steps)
[r, dome_z(r, R, H, z0)]
];
inner = [for (i=[steps:-1:0])
let (r = oculus + (R-shell-oculus)*i/steps)
[r, dome_z(r+shell, R, H, z0) - shell]
];
color([0.70, 0.67, 0.58])
rotate_extrude(angle=360, convexity=8)
polygon(points=concat(outer, inner));
// Oculus rim.
color(aged_marble)
translate([0,0,dome_z(oculus, R, H, z0)-0.9])
annular_cylinder(oculus+1.4, oculus-0.2, 1.2);
// Stepped concentric rings on the dome, strongest in aerial view.
for (r=[13, 18, 23, 28, 33, 38]) {
color([0.77, 0.74, 0.65])
translate([0,0,dome_z(r, R, H, z0)-0.35])
annular_cylinder(r+0.55, r-0.55, 0.55);
}
// Radial ribs following the dome curvature, important in the aerial reference.
for (a=[0:10:350]) {
rotate([0,0,a])
curved_rib(R, H, z0, oculus+1.2, R-2.2);
}
}
module curved_rib(R, H, z0, r1, r2, segments=12) {
color([0.79, 0.76, 0.67])
for (i=[0:segments-1]) {
ra = r1 + (r2-r1) * i / segments;
rb = r1 + (r2-r1) * (i+1) / segments;
hull() {
translate([ra,0,dome_z(ra, R, H, z0)+0.08])
scale([1.0,0.38,0.28]) sphere(r=0.62, $fn=16);
translate([rb,0,dome_z(rb, R, H, z0)+0.08])
scale([1.0,0.38,0.28]) sphere(r=0.62, $fn=16);
}
}
}
module column(x, y, h=25) {
translate([x,y,0]) {
color(aged_marble) cylinder(r=2.45, h=1.1);
color(aged_marble) translate([0,0,1.0]) cylinder(r1=1.75, r2=1.55, h=h-2.0);
color([0.68,0.64,0.57]) translate([0,0,h-1.2]) cylinder(r=2.0, h=0.8);
color(aged_marble) translate([-2.3,-2.3,h-0.5]) cube([4.6,4.6,1.0]);
// Dark flutes give the cylindrical columns definition in front renders.
for (a=[0:30:330]) {
rotate([0,0,a])
color([0.38,0.36,0.33])
translate([1.62,-0.05,3])
cube([0.08,0.10,h-5]);
}
}
}
module portico() {
// Stylobate and stair platform.
for (i=[0:3]) {
color([0.64,0.60,0.53])
translate([-portico_w/2-i*2, front_y-i*4, -1.2-i*0.45])
cube([portico_w+i*4, portico_d+i*6, 0.45]);
}
// Shadowed interior bay.
color(shadow)
translate([-27, front_y+10, 3])
cube([54, 24, 21]);
// Rear masonry transition into the rotunda.
color(warm_stone)
translate([-30, front_y+24, 0])
cube([60, 22, 25]);
// Double column row: eight in front, four inner columns for depth.
xs = [for (i=[0:7]) -28 + i*8];
for (x=xs) column(x, front_y+8, 25);
for (x=[-20,-7,7,20]) column(x, front_y+27, 23.5);
// Entablature with inscription band.
color(aged_marble)
translate([-portico_w/2, front_y+4, 25])
cube([portico_w, 32, 4.2]);
color([0.38,0.34,0.29])
translate([-27.5, front_y+3.75, 27.2])
rotate([90,0,0])
linear_extrude(height=0.18)
text("M AGRIPPA L F COS TERTIVM FECIT", size=2.35, halign="left", valign="center");
// Triangular pediment and heavy cornice.
color(aged_marble)
translate([0, front_y+20, 29.2])
triangular_prism(portico_w+4, 32, 12);
color([0.58,0.54,0.48])
translate([-portico_w/2-2.5, front_y+2, 28.7])
cube([portico_w+5, 36, 1.1]);
// Pitched roof running behind the pediment, visible from the aerial reference.
color(roof_tile)
translate([0, front_y+43, 29.3])
rotate([0,0,0])
triangular_prism(portico_w-4, 38, 9);
// Low side walls of the portico block.
color(warm_stone)
translate([-portico_w/2, front_y+9, 0])
cube([3, 38, 20]);
color(warm_stone)
translate([portico_w/2-3, front_y+9, 0])
cube([3, 38, 20]);
}
module plaza_context() {
color(plaza)
translate([0,-18,-1.8])
cube([130,135,0.35], center=true);
// Curved foreground steps/fountain hinted in the front reference.
color([0.66,0.63,0.56])
translate([-56, -92, -1.1])
cylinder(r=19, h=0.55);
color([0.60,0.57,0.51])
translate([-56, -92, -0.45])
cylinder(r=14, h=0.45);
color([0.28,0.34,0.35])
translate([-56, -92, 0.05])
annular_cylinder(10, 6.5, 0.55);
// Piazza obelisk/fountain visible in the aerial reference.
color([0.55,0.50,0.44])
translate([55, -87, -0.3])
cylinder(r=7.5, h=0.5);
color([0.46,0.39,0.32])
translate([55, -87, 0.2])
cylinder(r=1.1, h=14);
color([0.43,0.35,0.29])
translate([55, -87, 14])
cylinder(r1=1.2, r2=0.1, h=5);
}
module pantheon() {
plaza_context();
rotunda_wall();
dome_shell(R=rotunda_r-1.2, H=dome_h, z0=rotunda_wall_h-0.2, oculus=7.2);
portico();
}
pantheon();