The method you use for creating both your caves and your creatures is REALLY COOL!!! It made me think of Wil Wrights new game Spore. Link being that from a few simple variables (DNA?) a hole species is built! Cool stuff.
I know hes hired some chaps from the demo scene... You in there any where?
Tomkh at
Hey, thanks.
From what I saw in public GDC demonstration video Will team did some great stuff with procedural animation and non-scripted behaviours, although I'm not very excited about their modeling techniques.
I might be wrong, but I suspect they are basically using hacks / joining predefined elsewhere body parts nicely. The real proof of not doing just hacks are creatures growing from single cell to baby, then adult and finally old stadium. Having strange configuration of legs, or 7 eyes might be funny, and even can be called procedural (which just means that "a model is evalutated using rough description and some procedure") but it's not really close to real developmental mechanism in biology and DNA (which is actually coding some low-level processes, like development of protein molecules, which are not that fully unveiled and very computational intensive).
Anyway, in Suboceanic the creatures can grow, although the algorithm is still heavily hacked (they are basically recursive subdivision rules with some tweaks and some skining algo = to put smooth skin over spherical "cells").
Also I'm not working for Maxis.
Dune at
How do you create the models from a cell? Is there a base model that the DNA is taken from with slight variation?
i wasn't able to look at the demos. Linux only system here.
Edited at
Tomkh at
In Suboceanic models are made from spherical "cells".
My spherical growth model:
* a rule is an arrangement of few spheres with orientation matrix
(scale/translation/rotation)
* for any sphere you can assign a rule number
+ some additional tweaks (second rule, iteration step, randomized angles, mirror symmetry...)
"Growing" is just a recursive substitiution:
1. Start with rule 0 (aka strating rule)
2. For every sphere s that has a rule number assigned, replace it with the assigned rule scaled/translated/rotated according to s orientation matrix
3. Repeat step 2 finite number of iterations (usually 10x-30x)
4. Put nice skin over spherical model (I use some nice tricks here :)).
You can consider rule definition as DNA, but it is really a big simplification, and rules are much easier to encode (I edit them in a nice visual editor with fast preview of growing model, will be released one day).
Additionally in genedit I check collisions between spheres/cells.
Recently I'm working on some new/better substitiution model, but not yet ready (still thinking/experimenting).
Dune at
I cant wait for the editor and hope you release it in Linux too : )
This is fascinating. I was also discussing allot of stuff lately about auto-generation. I was doing labyrinths with parts elevated on a terrain. Each part seperated by height was usually a differnet object.. This reminds me of The Genesis Project from Star Trek 2: The Wrath of Kahn. (and your cave demos - beautiful, by the way)
Computers definitely need to do this stuff. It’s allot more fun to ‘grow’ the levels instead of too much mouse clicking. I went nuts when I started using UnrealED 3. I thought, am I an architect or level designer.
The DNA strands are like an array.
I know you need proteins and all of that too but you would need a Petaflop speed computer for the atomic parts between synapses.
Would this be good for the free game community? For auto-generating chairs, bikes, and cars? It would be cool if a sim would allow you to tweak your world on the fly just by putting in a few parameters to create worlds instead of manually doing everything. I think this was the original intention of world editors in the 90s but never happened.
Looks like what Maxis is doing but they probably copied off of you or what I have been hearing and saying. Plus it will be closed source and hard to integrate into the community.
Tomkh at
In UnrealED (and Q-Radiant), as far as I remember you are shaping things from polytopes (boxes, prism, tetrahedron, etc..) with boolean operators and have a control over single surface patches (flat, curves).
Also level description is pretty static.
If you want to make 'growing' levels, on the top of those primitives (or other ones, like spheres in my case) you have to describe growing rules, which doesn't really make editing easier, but it could be faster indeed, because you don't have to specify details that will just grow on its own :)
Hmm.. actually it could be nice experiment to apply substitution rules to polytopes (not only spheres) also with CSG operators.
In simple scenario: you could have a walls with growing spikes on top of them, growing corridors, etc... :)
Maximus at
Im really intrigued by your random/controlled generations.
Spore uses cells in a splitting type thing. You say this is how you built those cool creatures (octopus etc. Very HP Lovecraft Cthulu style! ME LIKE! :P). Is it thew same way that you built your caves? Not just in Suboceanic but also in Invseed? Again is this also a similar method to what you used for CaveGen voxap demo? (This is assuming that you wrote the Cave Generating code...) I'm guessing the technique for the voxap may be similar but far from identical. It appears that you may just use curves, or some geometric structure and populate it with 'shapes'.
many thanks
-Rik
Tomkh at
InvSeed, CaveGen (my code, minor Ken optimizations) is basically the same algo, but for different dimensions (2D vs 3D).
All using some kind of Voronoi Fractal (multiplicatively weighted) - typically just 2-3 iterations of generating random cells with hollow/solid property, and using previous iteration (using just closest point from previous iteration) for calculating this property.
Suboceanic is the same structure but with polys (Voronoi, but actually single cells can be any shape here, not just voronoi cell, note noisy yellow-brown material geometry).
Also Anti-Botic have similar random levels (2 iterations), but very slow algo and interpolated (smooth edges).
Not mentioning non-realtime movie inside "caves" :)
It could be pereceived as some kind of random cell subdivision - but inside algo I just generate each time new set of random points (cell centers), more dense than previous iteration.
I described this Voronoi idea 1 year ago in some "scientific" paper - unfortunately it was in polish language and not very broadly published. Recently I'm working on english version (my thesis at university), which will be hopefully public available.
Octopus is actually precisely controlled cell subdivision/substitution (l-system or IFS like, exact algo in previous post), no random subdivisions/positions, and all cells are solid (no hollow property and voronoi cells).
Maximus at
Voronoi... Very interesting! It reminds of a lecture I had last week on K-Nearest Neighough with reference to AI cllassification systems. It uses a similar system (possibly the same?) for creating cells around data-points for the classifications.
Have you thought, or attempted, to create a terraforming algorithm? I keep toying with the idea of doing this... It would be cool to create a randomly generated solarsystem and be able to zoom from planet to planet, using huge amounts of detail from random generation! Ever played VIRUS or ZARCH? It was popular on the old Acorn made by the chaps that made Elite. Anyhow these games (including Elite) use random generation of worlds.
Like I say this stuff just interests me at the moment. :D
Tomkh at
Oh yes. Voronoi diagrams it's a simple/basic concept and can be found in many applications.
I use K-Nearest neighbourhood concept in my stuff. It is also used in so called Worley noise.
About those games - I've never played them unfortunately, if I will find some time I will try to google them.
Actually I'm more interested in modeling random living organisms than randomly generated solar like systems. I would rather make some imaginary universe, like donut-shaped planets travelling on a zig-zag curve and instead of sun, big thunders going across gallaxies, and whole stuff is actually surrounded by big fractal cave system where caverns have radius equal to millions of light years, and there are also some negative spherical planets inside the rock and positive planets hanging on a rope near the cavern ceilings, not mentioning warped distance matrics and aerial portals all around. Ok, just trying to be fancy :)
Maximus at
Bit long to respong... Had to submit my interim report... bla bla bla bla...
What do you use K-Nearest for? I thought/assumed you were more of a graphics guy? Am I wrong? Also I'm assuming, from what i've seen, you are a research fellow. Whats your field? What are you working on at the moment?
On a tangent,
A post in the KS forum asked him what programming languages he uses. From your publicly available work I can see you like C/C++ (you save as .cpp rather then .c like KS does...) and good old ASM. Any how, do you do much PURE c++, objects and polymorphic stuff? Just out of interest.
Tomkh at
Recently I'm just working for myself, doing my own almost full-time research in geometry modelling field (mostly creatures and fractal surfaces) and collaborative software (like moonedit).
For language: I've tried C++ or Java, but I feel most comfortable with just C, especially for little experiments (prototyping some ideas). I call it ".cpp", because I occasionaly use some C++ syntax: "inline", strict control of variable types and ability to declare variables at any place in the scope.
I use K-Nearest to find voronoi boundaries: 3d voronoi face is when 1st and 2nd nearest point is in equal distance to our sample/voxel, edge is if 3 nearest points are in equal distance, vertex if 4.
I am also using it in "texgen" for so called cellular noise (I adopted it from Worley), where the texture basis is a function (usually just linear combination, weighted sum) of distances to K-Nearest points/lines/whatever.