← Back to Models
Pantheon Benchmark: ModelRift / Gemini Flash 3.0

Pantheon Benchmark: ModelRift / Gemini Flash 3.0

by Mach3 ·

Interactive Preview & Customizer

3D preview with browser-based OpenSCAD rendering on parameter changes.

Loading previewLoading preview...

Level of detail

step 1
step 0.5
step 0.5
step 0.1

Number of stepped rings on the dome base

step 1

Prominent radial structural seams

step 1

How much the ribs stick out from the dome

step 0.1
step 0.1
step 0.5
step 0.1
step 0.1
step 0.1

Reduced width of the column base

step 0.1
step 0.1
step 0.1
WASM compiler loads on first parameter change.
Download current STL

Prompt Assets

Prompt image

Prompt reference 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

/* [Global] */

// Level of detail
$fn = 64; // [32:1:128]

/* [Rotunda & Dome] */
rotunda_radius = 21.5;
rotunda_height = 21.7;
oculus_radius = 4.5;
// Number of stepped rings on the dome base
dome_steps = 5; // [3:1:7]
// Prominent radial structural seams
rib_count = 32; // [16:2:64]
// How much the ribs stick out from the dome
rib_height = 0.8; // [0.2:0.1:2.0]
rib_width = 0.7; 

/* [Portico Columns] */
column_span = 34;
column_height = 14.5;
column_radius = 0.95;
capital_flare = 1.55;
// Reduced width of the column base
base_radius = 1.6; 

/* [Entablature & Roof] */
entablature_h = 4.5;
pediment_h = 6.5;

/* [Hidden] */
eps = 0.05;

// Main Assembly
union() {
    color("LightGray") rotunda();
    color("DarkGray") intermediate_block();
    color("Ivory") portico();
}

module rotunda() {
    // The main cylindrical wall
    difference() {
        cylinder(h = rotunda_height, r = rotunda_radius);
        translate([0, 0, -eps])
            cylinder(h = rotunda_height + eps*2, r = rotunda_radius - 2.5);
    }
    
    // The Dome with prononuced Radial Ribs
    translate([0, 0, rotunda_height]) {
        difference() {
            union() {
                // Base Hemisphere
                intersection() {
                    sphere(r = rotunda_radius);
                    cylinder(h = rotunda_radius, r = rotunda_radius);
                }
                
                // 1. Pronounced Radial Ribs (The requested structure)
                intersection() {
                    // Larger sphere defining the rib profile
                    sphere(r = rotunda_radius + rib_height);
                    union() {
                        for(r = [0 : rib_count - 1]) {
                            rotate([0, 0, r * (360 / rib_count)])
                            translate([-rib_width/2, 0, 0])
                            // Ribs extending from center to beyond radius
                            cube([rib_width, rotunda_radius + 2, rotunda_radius + 2]);
                        }
                    }
                }
                
                // 2. Horizontal Stepped Rings
                for(i = [0 : dome_steps - 1]) {
                    translate([0, 0, i * 1.35])
                        cylinder(h = 1.4, 
                                 r1 = rotunda_radius - (i * 0.95), 
                                 r2 = rotunda_radius - (i * 0.95 + 1.2));
                }
            }
            // Hollow interior
            sphere(r = rotunda_radius - 2.5);
            // Oculus (the hole at the top)
            translate([0, 0, rotunda_radius - 4])
                cylinder(h = 10, r = oculus_radius);
        }
    }
}

module intermediate_block() {
    w = column_span + 6;
    h = rotunda_height;
    d = 12;
    translate([-w/2, rotunda_radius - 4, 0]) {
        cube([w, d, h]);
        // Secondary pediment
        translate([w/2, 0, h - eps])
            draw_pediment(w, d, 5.5, framed=false);
    }
}

module portico() {
    y_start = rotunda_radius + 6;
    p_depth = 19;
    total_w = column_span + (base_radius * 2) + 0.5;

    translate([0, y_start, 0]) {
        // Floor
        translate([-total_w/2, 0, 0])
            cube([total_w, p_depth, 1.5]);
        
        // Columns
        spacing = column_span / 7;
        for(x = [0:7]) {
            xp = (-column_span/2) + (x * spacing);
            translate([xp, p_depth - 3.5, 1.5]) column_corinthian();
            if (x == 0 || x == 7 || x == 2 || x == 5) {
                translate([xp, p_depth - 9.5, 1.5]) column_corinthian();
                translate([xp, p_depth - 15.5, 1.5]) column_corinthian();
            }
        }
        
        // Entablature
        translate([-total_w/2, 0, column_height + 1.5]) {
            cube([total_w, p_depth, entablature_h * 0.3]);
            translate([0.5, 0.2, entablature_h * 0.3])
                cube([total_w - 1, p_depth - 0.4, entablature_h * 0.4]);
            translate([-0.8, -0.8, entablature_h * 0.7])
                cube([total_w + 1.6, p_depth + 1.6, entablature_h * 0.3]);
        }
        
        // Main Pediment
        translate([0, 0, column_height + 1.5 + entablature_h - eps])
            draw_pediment(total_w + 1.6, p_depth + 1.6, pediment_h, framed=true);
    }
}

module column_corinthian() {
    cylinder(h = 0.5, r = base_radius);
    translate([0, 0, 0.5])
        cylinder(h = 0.4, r1 = base_radius - 0.1, r2 = column_radius);
    cylinder(h = column_height, r = column_radius);
    translate([0, 0, column_height - 1.2])
        cylinder(h = 1.3, r1 = column_radius, r2 = capital_flare);
    translate([0, 0, column_height])
        cube([capital_flare * 2, capital_flare * 2, 0.5], center=true);
}

module draw_pediment(w, d, h, framed=true) {
    rotate([90, 0, 0])
    translate([0, 0, -d])
    linear_extrude(height = d)
    polygon(points = [[-w/2, 0], [w/2, 0], [0, h]]);
    
    if (framed) {
        frame_t = 1.2;
        color("Ivory")
        translate([0, d, 0]) 
        rotate([90, 0, 0])
        linear_extrude(height = 1.8)
        difference() {
            polygon(points = [[-w/2 - 0.5, -0.2], [w/2 + 0.5, -0.2], [0, h + 0.5]]);
            polygon(points = [[-w/2 + frame_t, 0.8], [w/2 - frame_t, 0.8], [0, h - frame_t]]);
        }
    }
}