Pantheon Benchmark: Antigravity 2.0 / Flash 3.5 (High)
by Mach3 ·
Client: Antigravity v2.0.1 (918154430)
LLM: Flash 3.5 (High)
Interactive Preview & Customizer
3D preview with browser-based OpenSCAD rendering on parameter changes.
Loading preview...
--- Global Rendering Settings ---
step 0.5
--- Architectural Parameters ---
step 0.5
step 0.5
step 0.5
step 0.5
step 0.5
step 0.5
step 0.1
step 0.1
step 0.5
step 0.1
step 0.1
step 0.1
step 0.5
WASM compiler loads on first parameter change.
Prompt Assets
Prompt image
Prompt
Create a cube with a hole on every face.
OpenSCAD Code
// OpenSCAD Pantheon Model
// All dimensions are approximately 1:1 in meters.
// --- Global Rendering Settings ---
$fn = 24; // Render resolution. Use 15-24 for fast preview, 40-60 for final quality.
show_cutaway = false; // Toggle to view the interior niches, coffers, and sphere
// --- Main Colors ---
color_stone = [0.93, 0.90, 0.85]; // Travertine stone (light warm grey)
color_dark_stone = [0.82, 0.78, 0.72]; // Older/weathered stone
color_brick = [0.72, 0.53, 0.38]; // Roman brickwork (terracotta)
color_granite_grey = [0.55, 0.55, 0.55]; // Egyptian grey granite (front columns)
color_granite_red = [0.70, 0.50, 0.45]; // Egyptian pinkish-red granite (inner columns)
color_bronze = [0.45, 0.38, 0.30]; // Patinated bronze (doors and oculus)
color_roof = [0.65, 0.65, 0.60]; // Lead/stone roof tiling
// --- Architectural Parameters ---
rotunda_r_int = 21.65;
rotunda_r_ext = 27.65;
rotunda_h_cyl = 30.40;
rotunda_h_int_cyl = 21.65;
dome_r_int = 21.65;
dome_r_ext = 33.74; // Calculated radius for external dome sphere
dome_center_z = 12.56; // Calculated Z center (includes 1.5m plinth)
oculus_r = 4.5;
portico_w = 34.20;
portico_d = 15.60;
portico_h_col = 12.00;
portico_r_col = 0.75;
portico_x_start = 35.35; // Position of the back row of columns
// --- 1. Base / Plinth Module ---
module base_plinth() {
color(color_stone) {
// Rotunda circular plinth (stepped, 3 steps)
for (i = [0:2]) {
translate([0, 0, i * 0.5])
cylinder(r = rotunda_r_ext + 1.5 - i * 0.5, h = 0.5, $fn = 80);
}
// Portico rectangular plinth (extending from the rotunda to the front)
// From X = 20.0 to X = 52.0 (extra space for steps in front)
for (i = [0:2]) {
translate([20.0, -(portico_w/2 + 1.0 - i * 0.3), i * 0.5])
cube([32.0 - i * 0.3, portico_w + 2.0 - i * 0.6, 0.5]);
}
}
}
// --- 2. Portico Column Module ---
module column(is_grey) {
color(is_grey ? color_granite_grey : color_granite_red) {
// Base
cylinder(r1 = 1.0, r2 = 0.9, h = 0.4);
// Shaft (tapered)
translate([0, 0, 0.4])
cylinder(r1 = 0.75, r2 = 0.65, h = 10.6);
}
// Capital (carved marble)
color(color_stone) {
translate([0, 0, 11.0]) {
cylinder(r1 = 0.65, r2 = 0.85, h = 0.8);
translate([-0.9, -0.9, 0.8])
cube([1.8, 1.8, 0.2]);
}
}
}
// --- 3. Portico Columns Assembly ---
module portico_columns() {
// Column coordinates
// Front row (X = 49.5): 8 columns
// Middle row (X = 43.0): 4 columns
// Back row (X = 36.5): 4 columns
// Y spacing spans from -15.5 to 15.5
y_cols = [-15.5, -11.07, -6.64, -2.21, 2.21, 6.64, 11.07, 15.5];
// Front row (all grey granite)
for (y = y_cols) {
translate([49.5, y, 1.5])
column(is_grey = true);
}
// Middle row (pink/red granite, aligned with cols 0, 2, 5, 7)
for (y = [-15.5, -6.64, 6.64, 15.5]) {
translate([43.0, y, 1.5])
column(is_grey = false);
}
// Back row (pink/red granite, aligned with cols 0, 2, 5, 7)
for (y = [-15.5, -6.64, 6.64, 15.5]) {
translate([36.5, y, 1.5])
column(is_grey = false);
}
}
// --- 4. Portico Roof & Pediment ---
module portico_roof() {
// Entablature (sits on columns at Z = 13.5)
color(color_stone) {
translate([35.5, -portico_w/2, 13.5])
cube([15.0, portico_w, 2.5]);
// Overhanging Cornice
translate([35.2, -(portico_w/2 + 0.3), 16.0])
cube([15.6, portico_w + 0.6, 0.5]);
}
// Triangular Pediment (Front Gable)
color(color_stone) {
translate([49.3, 0, 0])
rotate([0, 90, 0])
rotate([0, 0, 90])
linear_extrude(height = 1.5) {
polygon(points = [
[-(portico_w/2 + 0.3), 16.5],
[(portico_w/2 + 0.3), 16.5],
[0, 22.0]
]);
}
}
// Inscription on the frieze
color(color_bronze) {
translate([50.55, 0, 14.75])
rotate([90, 0, 90])
linear_extrude(height = 0.1)
text("M·AGRIPPA·L·F·COS·TERTIVM·FECIT", size = 1.2, font = "Liberation Serif:style=Bold", halign = "center", valign = "center");
}
// Portico Roof Tiling
color(color_roof) {
translate([35.4, 0, 0])
rotate([0, 90, 0])
rotate([0, 0, 90])
linear_extrude(height = 13.8) {
polygon(points = [
[-portico_w/2, 16.6],
[portico_w/2, 16.6],
[0, 22.1]
]);
}
}
}
// --- 5. Intermediate Block ---
module intermediate_block() {
// Brick walls
color(color_brick) {
translate([20.0, 0, 0])
rotate([0, 90, 0])
rotate([0, 0, 90])
linear_extrude(height = 15.5) {
polygon(points = [
[-17.1, 1.5],
[17.1, 1.5],
[17.1, 16.5],
[0, 26.0], // Higher gable
[-17.1, 16.5]
]);
}
}
// Marble detail band at the top of walls
color(color_stone) {
translate([20.0, -17.2, 16.0])
cube([15.5, 34.4, 0.5]);
}
}
// --- 6. Rotunda Exterior Walls ---
module rotunda_exterior() {
color(color_brick) {
// Main cylinder
translate([0, 0, 1.5])
cylinder(r = rotunda_r_ext, h = rotunda_h_cyl, $fn = 120);
// Stepped rings at the very top of the wall
translate([0, 0, 1.5 + rotunda_h_cyl])
cylinder(r = rotunda_r_ext - 0.2, h = 0.5, $fn = 120);
}
// Horizontal Cornices (travertine bands)
color(color_stone) {
// Lower Cornice
translate([0, 0, 12.0])
cylinder(r = rotunda_r_ext + 0.3, h = 0.6, $fn = 120);
// Middle Cornice
translate([0, 0, 22.0])
cylinder(r = rotunda_r_ext + 0.3, h = 0.6, $fn = 120);
// Upper Cornice (Roof line)
translate([0, 0, 31.0])
cylinder(r = rotunda_r_ext + 0.4, h = 0.8, $fn = 120);
}
}
// --- 7. Rotunda Interior Cella ---
module rotunda_interior() {
// Hollow out the cylinder interior
color(color_stone)
translate([0, 0, 1.5])
cylinder(r = rotunda_r_int, h = rotunda_h_int_cyl + 0.1, $fn = 120);
}
// --- 8. Interior Niches ---
module interior_niches() {
// 7 niches and 1 door opening. Alternating semicircular and rectangular niches.
// Semicircular niches at 90, 180, 270 degrees.
// Rectangular niches at 45, 135, 225, 315 degrees.
// Door opening is at 0 degrees.
color(color_stone) {
render(convexity = 6) {
for (a = [45, 90, 135, 180, 225, 270, 315]) {
rotate([0, 0, a]) {
if (a == 90 || a == 180 || a == 270) {
// Semicircular niche
translate([rotunda_r_int - 1.0, 0, 1.5])
cylinder(r = 3.5, h = 10.0, $fn = 40);
} else {
// Rectangular niche
translate([rotunda_r_int - 1.0, -3.0, 1.5])
cube([4.0, 6.0, 10.0]);
}
}
}
}
}
}
// --- 9. Door Opening & Bronze Doors ---
module door_opening_and_doors() {
// Subtract the door opening
translate([20.0, -3.0, 1.5])
cube([9.0, 6.0, 12.0]);
// Left and Right Bronze Doors (if not cut away)
// Placed slightly open inside the opening
color(color_bronze) {
// Left Door (pivot at Y = -3.0, X = 23.5)
translate([23.5, -3.0, 1.5])
rotate([0, 0, 25]) // slightly open
translate([-0.15, 0, 0])
cube([0.3, 3.0, 12.0]);
// Right Door (pivot at Y = 3.0, X = 23.5)
translate([23.5, 3.0, 1.5])
rotate([0, 0, -25]) // slightly open
translate([-0.15, -3.0, 0])
cube([0.3, 3.0, 12.0]);
}
}
// --- 10. Dome Module (Stepped Exterior & Smooth Inner Sphere) ---
module dome_exterior() {
// Stepped rings (7 rings of decreasing radius)
color(color_brick) {
for (i = [0:6]) {
translate([0, 0, 31.90 + i * 0.8])
cylinder(r = rotunda_r_ext - i * 0.8, h = 0.8, $fn = 120);
}
}
// Smooth dome top (shallow sphere cap)
color(color_roof) {
translate([0, 0, dome_center_z])
difference() {
sphere(r = dome_r_ext, $fn = 120);
// Slice away the bottom of the sphere relative to the sphere center.
// We want to slice below global Z = 37.50 (where stepped rings end).
// Relative Z = 37.50 - dome_center_z = 37.50 - 12.56 = 24.94.
translate([-50, -50, -40])
cube([100, 100, 40 + 24.94]);
}
}
}
module dome_interior() {
// Inner hemispherical dome
color(color_stone)
translate([0, 0, 23.15])
sphere(r = dome_r_int, $fn = 120);
}
// --- 11. Coffered Ceiling Module ---
module coffer_shape(phi) {
// Size decreases near the top of the dome (proportional to cos(phi))
w = 4.2 * cos(phi);
depth = 0.8;
// A coffer is a stepped pocket recess
// Step 1: outer step
translate([-w/2, -w/2, 0])
cube([w, w, depth/3 + 0.1]);
// Step 2: middle step
w2 = w * 0.8;
translate([-w2/2, -w2/2, depth/3])
cube([w2, w2, depth/3 + 0.1]);
// Step 3: inner step
w3 = w * 0.6;
translate([-w3/2, -w3/2, 2*depth/3])
cube([w3, w3, depth/3 + 0.1]);
}
module dome_coffers() {
// 5 rows of 28 coffers
// Spaced between 12.0 and 54.0 degrees elevation
phi_rows = [12.0, 22.5, 33.0, 43.5, 54.0];
color(color_stone) {
render(convexity = 10) {
for (row = [0:4]) {
phi = phi_rows[row];
for (col = [0:27]) {
theta = col * (360.0 / 28.0);
translate([0, 0, 23.15]) // Shift to dome center!
rotate([0, 0, theta])
rotate([0, 90 - phi, 0])
translate([0, 0, dome_r_int - 0.1])
coffer_shape(phi);
}
}
}
}
}
// --- 12. Oculus Module ---
module oculus() {
color(color_bronze) {
// Bronze trim around the oculus
translate([0, 0, 23.15 + dome_r_int - 0.5])
difference() {
cylinder(r = oculus_r + 0.5, h = 1.5, $fn = 80);
translate([0, 0, -0.1])
cylinder(r = oculus_r, h = 1.7, $fn = 80);
}
}
}
// --- 13. Full Pantheon Model Assembly ---
module pantheon_assembly() {
difference() {
// Solid geometry
union() {
base_plinth();
rotunda_exterior();
dome_exterior();
intermediate_block();
portico_roof();
}
// Internal hollow space
rotunda_interior();
// Niches inside the rotunda wall
interior_niches();
// Door opening
color(color_stone)
translate([20.0, -3.0, 1.5])
cube([9.0, 6.0, 12.0]);
// Dome interior space
dome_interior();
// Coffers in the dome ceiling
dome_coffers();
// Oculus hole (cuts through everything at the very top)
color(color_stone)
translate([0, 0, 30.0])
cylinder(r = oculus_r, h = 25.0, $fn = 80);
}
// Add columns (non-subtracted)
portico_columns();
// Add bronze door panels (non-subtracted)
// Pivot points and doors are placed inside the doorway
color(color_bronze) {
translate([23.5, -3.0, 1.5])
rotate([0, 0, 25])
translate([-0.15, 0, 0])
cube([0.3, 3.0, 12.0]);
translate([23.5, 3.0, 1.5])
rotate([0, 0, -25])
translate([-0.15, -3.0, 0])
cube([0.3, 3.0, 12.0]);
}
// Add bronze oculus trim
oculus();
}
// --- 14. Render Output (with Cutaway support) ---
difference() {
pantheon_assembly();
if (show_cutaway) {
// Cut away the front-left half (Y < 0) to view the interior
// Applying color_brick makes the cut cross-sections of the walls look like Roman brickwork
color(color_brick)
translate([-100, -200, -10])
cube([200, 200, 200]);
}
}