Yeah, greeble is known to be stimulating young adult males since time immemorial. It's a modern variant of horror vacui phenomenon [link]
Anyway, displacement is neat because it lets you control the whole thing via textures. As always with 3d, especially if it's realtime, you first ask if problem can be solved by texture mapping somehow. Better to cram it all on renderer than to push around complex geometry generated by scripts. Renderers are at least sharply optimized for speed whereas scripting engines and 3d dataset managers in 3d packages are generally not.
Pure fractals are not too good for this because they are hard to control and may generate insane amount of unnecessary data. However, with texture driven displacement, you can experiment with fractal generated textures and mix/overlay them with more rigid stuff to get different greeble patterns. All that without any additional performance tolls for complex textures. And it's very easy to try various things and arrangements. Just play with textures or uv sets and press render button.
Drawback of displacement is that it operates strictly along surface normals. So no additional concavity can be generated. This is not a big problem. All concavity you may need can be achieved by manually arranging large structural blocks. You want to do this manually anyway since large blocks are making your composition. Why rely on some dumb script or pure randomness to generate your compositions?
In this type of images, it's more important to get this global composition and atmospheric perspective right. This is what gives it its monumentality, not overabundance of greeble patterns.
If you just must have elaborate concavity with your displacement, you could write a custom displacement shader that takes in additional information via normal map, and then displace along supplied perturbed normals. For some real software fetish masturbation, you could send any other function encoded into a texture map (say sine, or a series of arbitrary vectors) and let your custom shader use that as a backbone to generate any type of (concave) extrusion instead of straight displacement. Even branching is possible. This is not at all hard to do with renderers like Mental Ray that can invoke partial geometry tesselation on demand from within shader code.
Right. Here's a different approach using geometry generation. I put together a quick "recursive" subdivide/extrude script that generates some geometry. With this approach you can have a lot of concavity. It comes with the cost of messing your uv data. But this is irrelevant if you don't need to texture it further using 2d textures.
Here's the script for Maya written in Python. If someone wants to try it - just select a simple object(s) and run it. Play with parameters for different type of effect. Note how simple the whole thing is:
# greeble.py for Maya
# simple recursive extrusion greeble script
# by Lacan
from maya.cmds import *
from random import *
# procedure that does the actual job
def greeble(selection, extrusion, extrusion_random, percentage_extruded, inset=1):
for s in selection:
for e in extrusion:
polySubdivideFacet( duv=2, dvv=2, sbm=1, ch=0)
polySelectConstraint(rr=percentage_extruded, type=8, random=1, m=2)
ez = e + uniform(-e*extrusion_random, e*extrusion_random)
if inset != 1:
polyExtrudeFacet( constructionHistory=False, divisions = 1, keepFacesTogether = False, localScale=[inset, inset, inset], localTranslate=[0,0,0])
polyExtrudeFacet( constructionHistory=False, divisions = 3, keepFacesTogether = False, localTranslate=[0,0,ez])
# we don't to be bogged down with history of thousands of extrudes
# number of passes and average extrusion in each pass
extrusion=[20, 10, 5, 5]
# percentage of extrusion randomization 1=100%
# percentage of faces extruded 1=100%
#extrusion inset percentage 1=none, .5=50% etc.
#get selected objects
sel = ls(sl=True)
# do it
greeble(sel, extrusion, extrusion_random, percentage_extruded, inset)
If I catch some time I'll try to paint the thing manually. I really don't see any problems in doing it except it'd be a bit tedious if you insist on uber detailing. But you can get other qualities from the manual approach. I'd tackle it precisely the same way as in 3d. Establish a composition of large blocks and then subdivide and extrude smaller and smaller parts. It's just boxes after all.
Regarding the "how was this done" mindset, my experience is that whenever I wondered "how they did it" - and then found out how - I was disappointed. They always "did it" using the plain old tools everybody else can use. Just that they knew how to use them well and made some effort to combine them in powerful ways. If you wish to achieve "mind blowing complexity", the best path is to count on emergent qualities that arise when cleverly combining several simple approaches.
Analogy for the end: When you see a magic trick performed by a good illusionist, you always wonder "how the hell is that done?". If you eventually find out how, it's always sort of anti-climatic. You're slightly disappointed with simplicity of the rig. And if you try to replicate the illusion using the same rig, you'll most certainly fall short. Then you realize that the only thing that actually makes of breaks the illusion is magician's pure sleight of hand skill.