Before delving head-first into RenderMan, we decided to brush up on some of the MEL (Maya-embedded language) basics. Below are some examples of simple modeling through the use of the simple"for" loop below. A transparent shader was applied to exaggerate the sense of build-up as you look through the column.
for($x = 0; $x < 50; $x++) { 
    for($y = 0; $y < 100; $y++) {
        sphere -r 0.25;
        move (sin($x)*($x*0.2)*sin($y)) ($y*0.5) (cos($x)*($x*0.2)*sin($y));
        scale ($x*0.03) ($x*0.03) ($x*0.03);
    }
} 
Here are some point-based occlusion renders of the same column:
 
Next, it was decided that we would explore writing custom RIB archives using MEL. The following script was used to read in geometry from Maya, query its vertice positions, and wrap a single RenderMan curve through those vertices. I added some fun jitter to the vertice positions and also a ramp to control the amount of jitter as the verticy number increases.
global proc meshOut(string $path)
{
  
// Find maya selection and count verts of that selection
string  $obj[] = `ls -sl`;
int     $num[] = `polyEvaluate -v $obj[0]`;
string  $shp[] = `listRelatives -shapes $obj[0]`;
string  $shape = $shp[0];
  
// Open file and write curve header
int $fileid = fopen($path, "w");
fprint($fileid, "AttributeBegin\n");
fprint($fileid, "Basis \"b-spline\" 1 \"b-spline\" 1 \n\tCurves \"cubic\" [" + $num[0] + "] \"nonperiodic\" \n\"P\" [");
  
// Loop over verts, jitter their position, and write those positions to the file
for($n = 0; $n < $num[0]; $n++) {
    $vert = $shape + ".vtx[" + $n + "]";
    $pos = `pointPosition -local $vert`;
  
    float $jitter = sqrt($n+1)*(0.0000005*$n);
    
    $x = rand(-$jitter, $jitter);
    $y = rand(-$jitter, $jitter);
    $z = rand(-$jitter, $jitter);
        
    $str = ($pos[0] + $x) + " " +
           ($pos[1] + $y) + " " +
           ($pos[2] + $z) + "\n";        
  
    fprint($fileid, $str);
    }
  
// Write curve footer and close file
fprint($fileid, "]\n\"constantwidth\" [0.005] \n");
fprint($fileid, "AttributeEnd\n");
fclose($fileid);
  
print "\nI'm working!\n";
}
  
// Run procedure
string $path = "/stuhome/vsfx419/archives/test.rib";
meshOut($path);
 

 

Here are some images of the progression of this script.

The curve wraps around the vertices. Detail of the wrapping curve. Random jitter is added to the vertice positions
Constant jitter = 1.0 Constant jitter = 0.2 Ramped jitter as the vertice number increases.
   
More exaggerated jitter ramp.