Archive for January, 2009

Intersection of a line and a Cone

Saturday, January 31st, 2009

Currently I am trying to make some volume lights at work

To optimise I need to work out where the eye ray intersects a implicit cone

Animation of the Intersection of a line and a Cone

Animation of the Intersection of a line and a Cone

You will find some links and a quick animation below

When I have cracked the renderman solution I may post that too

(more…)

In memory of Vida Symons: Nanna

Thursday, January 22nd, 2009

I wrote this on the 23 January 2008 8:10:17 PM

Our Dearly Beloved Grandmother had passed away, it wasnt a shock, she was an old lady and it was her time to go

This year we are heading back to Kangaroo Island to scatter her ashes on the family farm

(more…)

voxel madness

Monday, January 12th, 2009

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 ;)

A prediction of shadows with six meter trees (Ornamental Pear)

Saturday, January 10th, 2009

house_6_10

Since the previous attempt with the large purple spheres,  went back to the scene file and check the scale and looked at the tree we are wanting to plant , ornamental pears

Burkes Backyard gives them a rundown here

We are looking at getting the cultivar called “Capital” because its tall and thin

Capital Pear (Pyrus calleryana ‘Capital’)
Columnar flowering tree. White flower clusters in early spring. Green glossy leaves change to purple in the fall. Used in narrow spaces.
(35′ tall x 15′ wide) Zone 5
Available 5 gal, 15 gal, 2-1/4″ 2-1/2″

We went and looked at a few at Engel Trees and Paul there was really really helpful

The image also now has a uniform colour and details such as the screen and the shed and the other hedging plants

Flash Interactive Link click and drag to interact

NB: the image has been updated with a Month and Hour indicator, month is where 1 = January and 12 = December, and Hour 1 = 1am, 13 = 1pm, etc

The Sun Sets in the West, doesnt it?

Saturday, January 10th, 2009

Having completed the construction of the house in July we moved in an were extremely happy with how the garden was progressing

one interesting thing is that the sun changes directions with the seasons

Using my computer graphics background I whipped up the rough example about how the situation would be changed by planting three trees

The trees are represented by the big purple ovals

Amazing direction of the sun, scroll, left for season, up and down for time of day
Click here for interactive imagehouseseasons0010

Click and drag, or use arrow keys to interact

Once I was young

Monday, January 5th, 2009

sam

I used to look like this when I was at Uni all those years ago, I think this is circa 1992.

Which makes you wonder why I was scanning my student card
, all those years ago, but it does make me realise ive been pushing pixels around for quite some time, but the pixels that make up my face have cahnged a bit over time too