Eon (3D Scene) Entry: James Kaufeldt

Become a member of the CGSociety

Connect, Share, and Learn with our Large Growing CG Art Community. It's Free!

THREAD CLOSED
 
Thread Tools Search this Thread Display Modes
  10 October 2006
I like the idea of abstration to show us a future human world.Good luck to you!
__________________
WEB
UNIDAD ON PATREON
 
  10 October 2006
the abstract tests are looking really good and promising especially like the last one!
__________________
www.mdadela.com



 
  10 October 2006
Hey James, Your abstarct design has definitely strong mojo
One of my favourites. Good luck!
__________________
my Master & Servant Challenge>
http://www.cgtalk.com/showthread.php?threadid=229439
 
  10 October 2006
Heya James !

The amazing work continues .... the concept is just great , and the library looks very modern and huge and "hi tech" ... pretty much like I was picturing it while I was reading !!

So I just can't wait for the next !!

cheers ,

-Zapan
__________________
Dominance War V
Secret Agent
Anatomy Thread

"One today is worth two tomorrows"
-Benjamin Franklin-
 
  10 October 2006
as you know, no time to join myself, but I'm warning you that I will find the time to come and stick my nose in here ...... just not on Thursdays it would seem

nah what the hell, sounds like an interesting concept wabbit
__________________

 
  10 October 2006
Evenin', dudes and dudettes.

Oh, the greek and the pig have found my thread... this cannot possibly be a good sign.

Anyways, been fiddling around a bit more - update below

--------------------------------------------------------------------------------------
 
  10 October 2006
Concept Sketch or 3D pre-visualization: More experiments



Have added, and subsequently removed again, lots of stuff. Then I added some other stuff instead, and kept it. Anyhow, I think the archway may have a reasonable amount of various chunks going in different directions now.

Played around with some lights too in order to see how far I could get with just a bunch of square, squeezed spots.

Next task will be to find a decent method to add a couple of millions (literally) of books in the silo, and just generally flesh things out to get from previs to actual production level of detail.
__________________

xenomata

Be indiscreet - do it continuously.

Last edited by JamesMK : 10 October 2006 at 10:02 PM.
 
  10 October 2006
nice light setup james. look forward to seeing all those millions of books! i expect seperate titles on all of them. har
 
  10 October 2006
Nice model, and very clean.

David.
__________________
Wake up !!
|| website ||
 
  10 October 2006
Cool

looks great, very playful but stylish constructions stuff it with books ^^
 
  10 October 2006
here we are: very interesting architectural structor, love it. Here you have a lot of potential to reach an excellent space int your library. the small bridge now give the immensity of space sensation
__________________

Effectred. Creative Studio
www.effectred.com
 
  10 October 2006
great......where are the worms ??
__________________

 
  10 October 2006
!!! "Rough Geometry test" ALready it is better then my whole project!! Wow, great modelling, lighting and texturing so far. Even if it is still rough.

Great work! Keep up awesomeness JamesMK.


-Steven
 
  10 October 2006
nice architectural visualisation looks very promissing in me eyes...
__________________
Er zog los um Abenteuer zu suchen, durch deren Überwindung er ewigen Namen und Ruhm gewinnen würde.
 
  10 October 2006
For whom the script tolls

Um, cheers guys...

[No, the worms have not yet arrived. I actually didn't even know I was supposed to have any to be honest.]

Anyway! Concerning the task at hand - how to add an insane number of books to the silo? After thinking about it for a while, I've decided to combine low poly bookshelves with colour and displacement maps. To do that however, I need a reasonable method to generate lots of unique textures that look like lots of books.... Given the total amount of shelves, around 2000-2500, of which several hundred might be visible simultaneously in any given shot, it's important that these maps look believably random - i.e. I don't want any obvious repetition. That in turn means I probably need at least 50 different maps, each one representing 300-400 individual books.

After studying typical library bookshelves in a deeply scientific way (that is, looking at them for a few minutes while saying 'hmmmmm...' and thoughtfully scratching my beard) I wrote down a couple of basic rules for bookshelf population patterns, and started coding a script that would generate endless variations to be rendered out as textures.

So, here's SBCGAL - Stochastic Bookshelf Content Generator for Alexandria Library!

After setting various parameters such as book thickness and height intervals and so forth, it's merely a matter of a single click to generate stuff like this, with as many randomly assigned materials one cares to create beforehand:



My next job is to make a load of decent book materials, generate a bunch of these simple shelf sets and start rendering textures.

As a token of infinite kindness, the full script is found below here for ye olde copy/paste operation... It's not perfect by any means, but good enough to do this particular job. Since it's written in COFFEE, it will only run in Cinema4D, and because I wrote it for R10 it's rather unlikely that it will run in any earlier version without modification... but anyway... here it is:


// -------------------------------------------------------------------
// SBCGAL                                                            -
// Stochastic Bookshelf Content Generator for Alexandria Library ;)  -

// COFFEE script for Cinema4D R10                                    -
// (c)2006 James Kaufeldt	                                           -

// LICENCE:                                                          -
// GNU General Public License - http://www.gnu.org/licenses/gpl.txt  -
// -------------------------------------------------------------------



// CONSTANTS - Adjust these values to influence the overall result:            

var gap = 3,          // inbetween padding, adds space to the right of each book
w_min = 10,         // mimimum width (thickness) for the books
w_max = 60,         // maximum width
h_min = 200,        // minimum height
h_max = 340,        // maximum height
b_depth = 200,      // constant depth for all books
t_max = 0.4,        // maximum angle (in radians, not degrees) for tilted books
t_prob = 0.05,      // probability factor for books to be tilted
v_prob = 0.05,      // probability factor for empty slots 
shelf_width = 2000, // total width of each shelf
shelf_height = 400, // height of each shelf level
shelf_num = 7;      // total number of shelfs to fill

// Do not edit code below this line unless you know what you are doing
// -----------------------------------------------------------------------


// PRE-DECLARATIONS:
makeBook( rand, y_baseline, x_left, gap, w_min, w_max, h_min, h_max, b_depth, t_max, t_prob, v_prob, shelf_width );
countMaterials(doc);
addRandomMaterial(rand, doc, op);

// GLOBALS:
var previous_tilt = 0;
var previous_empty = 0;
var booknum = 0;
var parent;

// MAIN:
main( doc, op ) 
{
	// add a null object to hold the books:
	CallCommand(5140);
	parent = doc->GetActiveObject();
	parent->SetName("Books");

	// add and initialise random number generator instance:
	var rand = new(Random);
	rand->Init(time());

	var r = 0, y_base = 0, x_left = 0;

	// infinite loop - calls makeBook() repeatedly and breaks out when the bookshelf is filled up:
	while (true)
	{
		r = makeBook( rand, y_base, x_left, gap, w_min, w_max, h_min, h_max, b_depth, t_max, t_prob, v_prob, shelf_width );
		x_left = r;
		if (r == 0) 
		{
			y_base += shelf_height;
			if (y_base/shelf_height >= shelf_num) break;
		}
	}
	CallCommand(100004767); // deselects all objects
}

// IMPLEMENTING makeBook():
makeBook( rand, y_baseline, x_left, gap, w_max, w_min, h_max, h_min, b_depth, t_max, t_prob, v_prob, shelf_width ) 
{
	// Calculate random dimensions for the new book:
	var xsize = (w_max - w_min) * rand->Get01() + w_min;
	var ysize = (h_max - h_min) * rand->Get01() + h_min;
	var zsize = b_depth;

	// Check if book should be tilted:
	var b_angle = 0;
	if (rand->Get01()<= t_prob && previous_tilt==false && previous_empty==false) 
	{
		b_angle = t_max * rand->Get01();
		previous_tilt=true;
	} else {
		previous_tilt=false;
	}
	var tiltoffset = sin(b_angle)*(ysize);

	// Return 0 and discard book if there is not enough room on the current shelf:
	if ((shelf_width - x_left) <= xsize + tiltoffset)
	{
		return 0;
	}

	// Return new x_left and bail out without adding new book if this should be an empty slot:
	if (rand->Get01()<= v_prob && previous_tilt==false)
	{
		previous_empty==true;
		return (xsize + x_left + gap + tiltoffset);
	} else {
		previous_empty==false;
	}

	// Create the new book:
	CallCommand(5159); // adds a cube
	var bookob = GetActiveDocument()->GetActiveObject();
	bookob#PRIM_CUBE_LEN:VECTOR_X = xsize;
	bookob#PRIM_CUBE_LEN:VECTOR_Y = ysize;
	bookob#PRIM_CUBE_LEN:VECTOR_Z = zsize;

	// Calculate multiplier to direct tilts randomly to the left or right:
	var tbias = 0;
	if (int(rand->Get11()+0.5)){tbias=1;}else{tbias=-1;} // whoa, obfuscation...

	// Translate:
	bookob#ID_BASEOBJECT_POSITION:VECTOR_X = x_left + (xsize/2) + tiltoffset/2;
	bookob#ID_BASEOBJECT_POSITION:VECTOR_Y = y_baseline + (ysize/2);
	bookob#ID_BASEOBJECT_POSITION:VECTOR_Z = 0;
	bookob#ID_BASEOBJECT_ROTATION:VECTOR_Z = b_angle * tbias;

	// Place cube as child of parent null and give it a name and number:
	if(parent) {
		bookob->Remove();
		bookob->InsertUnder(parent);
		var booknumstring = tostring(booknum);
		bookob->SetName("book_"+booknumstring);
		booknum++;
	}

	// Apply random material:
	addRandomMaterial(rand, GetActiveDocument(), bookob);

	// Return the new x_left value to offset next run:
	return (xsize + x_left + gap + tiltoffset);
}

// IMPLEMENTING countMaterials(doc):
countMaterials(doc)
{
	// Returns the total number of available materials in the document:
	var mat = doc->GetFirstMaterial();
	var i = 0;
	while(mat) {
		i++;
		mat = mat->GetNext();
	}
	return i;
}

// IMPLEMENTING addRandomMaterial(...):
addRandomMaterial(rand, doc, op) 
{
	// Calculate random number between 0 and max.materials:
	var random_material = int(rand->Get01() * countMaterials(doc));

	// create a texture tag and set it to UVW Mapping:
	var ttag = AllocTag(Ttexture);
	var tbc = ttag->GetContainer();
	tbc->SetData(TEXTURETAG_PROJECTION, 6);
	ttag->SetContainer(tbc);

	// loop through available materials until random number reached:
	var mat = doc->GetFirstMaterial();
	var i=0;
	while(i < random_material)
	{
		mat = mat->GetNext();
		i++;
	}

	// apply tag to object, then material to tag:
	op->InsertTag(ttag);
	ttag->SetMaterial(mat->GetMarker());
}

// ------------------------------------------------------ end ------------------------
__________________

xenomata

Be indiscreet - do it continuously.
 
Thread Closed share thread



Posting Rules
You may not post new threads
You may not post replies
You may not post attachments
You may not edit your posts

vB code is On
Smilies are On
[IMG] code is On
HTML code is Off
CGSociety
Society of Digital Artists
www.cgsociety.org

Powered by vBulletin
Copyright ©2000 - 2006,
Jelsoft Enterprises Ltd.
Minimize Ads
Forum Jump
Miscellaneous

All times are GMT. The time now is 02:45 AM.


Powered by vBulletin
Copyright ©2000 - 2017, Jelsoft Enterprises Ltd.