Samiam’s Scribble Pad

January 12, 2009

voxel madness

Filed under: linkedin,Uncategorized — Tags: , — admin @ 11:07 pm

Basically I want a big block of RiPoints to shade into, so I made them like this

I used  cgKit to make a big block of points, now I just need to see how it performs under stress

Parent Voxel script

voxelParent.py

#!/usr/bin/env python
from cgkit.ri import *
 
"""
RiProcedural(data, bound, subdividefunc, freefunc=None)
    Declare a procedural model.
 
    subdividefunc and freefunc may either be the standard RenderMan
    procedurals (RiProcDelayedReadArchive, RiProcRunProgram,
    RiProcDynamicLoad and RiProcFree) or Python callables.
    In the former case, data must be a sequence of strings or a single
    string containing the data for the functions. In the latter case,
    data may be any Python object which is just passed on to the
    functions.
    freefunc is optional and defaults to None.
 
    Because this module can only produce RIB, a custom subdivide function is
    simply called with a detail value of RI_INFINITY to generate all the
    data at once.
 
    Example: RiProcedural("mymodel.rib", [-1,1,-1,1,-1,1], \
                          RiProcDelayedReadArchive, RI_NULL)
 
             RiProcedural(["python teapot.py",""],[0,1,0,1,0,1], \
                          RiProcRunProgram, RI_NULL)
 
             RiProcedural(["teapot.so",""],[0,1,0,1,0,1], \
                          RiProcDynamicLoad, RI_NULL)
"""
 
import sys
 
args = sys.stdin.readline()
 
while args:
	arg = args.split()
	size=float(arg[0])
	parts=int(arg[1])
	seed=int(arg[2])
	childCount=int(arg[2])
	childSeed = seed
	for xstep in range(parts):
		for ystep in range(parts):
			for zstep in range(parts):
				xmin = xstep - 0.5*size/parts - size*0.5
				xmax = xstep + 0.5*size/parts - size*0.5
				ymin = ystep - 0.5*size/parts- size*0.5
				ymax = ystep + 0.5*size/parts- size*0.5
				zmin = zstep - 0.5*size/parts- size*0.5
				zmax = zstep + 0.5*size/parts- size*0.5
				childSeed+=1
				print RiProcedural(["python voxelChild.py","%s %s %s %s %s %s %s %s" % (xmin,xmax,ymin,ymax,zmin,zmax,childSeed, childCount)],[xmin,xmax,ymin,ymax,zmin,zmax], RiProcRunProgram, RI_NULL)
	sys.stdout.write('\377')
	sys.stdout.flush()
	args = sys.stdin.readline()

Child Voxel Script

#!/usr/bin/env python
from cgkit.ri import *
 
from cgkit.cgtypes import *
 
import sys
import random
args = sys.stdin.readline()
 
while args:
	arg = args.split()
	xmin=float(arg[0])
	xmax=float(arg[1])
	ymin=float(arg[2])
	ymax=float(arg[3])
	zmin=float(arg[4])
	zmax=float(arg[5])
	childSeed=int(arg[6])
	childCount = int(arg[7])
	pointList = []
	pointSize = vec3(xmax-xmin,ymax-ymin,zmax-zmin).length() / float(childCount)
	for xstep in range(childCount):
		childSeed+=1
		random.seed(childSeed)
		xval = random.uniform(xmin,xmax)
		random.jumpahead(1)
		yval = random.uniform(ymin,ymax)
		random.jumpahead(1)
		zval = random.uniform(zmin,zmax)
		random.jumpahead(1)
		pointVal = vec3(xval,yval,zval)
		pointList.append(pointVal)
	print RiPoints(P=pointList,constantwidth=[pointSize])
	sys.stdout.write('\377')
	sys.stdout.flush()
	args = sys.stdin.readline()

Just add brick map or ptc based 3d look up shader and rejoice!

I still have an outstanding testing of seeing if it acutally produces geometry and see if it looks good, but they are small details ;)

Powered by WordPress