If you explore a cave in Elder Scrolls IV Oblivion, you quickly come to notice repeating patterns. Everything you see you’ve already seen before. The exact rocks, stalagmites, cave wall structures. Here’s an example of a raised platform with three stalagmites, in two different caves:
Even the pillars on the wall behind the platform are identical. So here you have an example of an extremely detailed piece of terrain used as a “prefab” in many different places of the world. Seen once, it is beautiful; seen 50 times it loses its luster and makes it feel like you are no longer exploring.
At the opposite end of the spectrum, in my opinion, would be something like 24 year old game Ultima 5. Here you have a very simple tile set – extremely low detail. Because they have such low detail, the similarity between them becomes irrelevant. It also means they can be assembled into arrangements that give a unique feel to every location in the world. Here’s an overhead map of the underworld:
Someone exploring the underworld:
All of this applies to things like buildings too. Buildings in Ultima 5 may consist of a small number of tiles, but they are assembled in ways that make each building, each room, unique.
In most modern games though, buildings would consist of a set of highly-detailed prefabs. Perhaps they appear in unique arrangements, but almost always the repeating patterns are visible. Most places look like other places you’ve already seen. The more detailed a prefab is, the more noticeable it becomes when it is repeated.
Of course when designing such a detailed 3d world, this is necessary. Given the amount of manpower it would take to create a detailed unique environment for every location (not to mention the memory requirements), anything else would be unrealistic.
And of course as an independent developer this would be even more unrealistic.
So the questions I ask myself are:
- with my limited resources, how can I create a world that appears unique in every spot without resorting to abstract low resolution tiles such as the old Ultima games, or Minecraft?
- how can I avoid the player noticing repeating patterns?
What makes it possible to have a unique-looking environment everywhere? I would argue:
- The fundamental building blocks must not be detailed – they must not carry much “information”.
- It must be possible to assemble them easily into some recognizable structure, or modify/perturb them in some way at each location in the world.
I’ll use the cliffs in my current game engine as an example. They are simply steep parts of the terrain. As a result, they are very minimally detailed, but are easy to uniquely perturb at every spot in the world (by simply adjusting the height). The result is something that looks reasonably unique everywhere, and is very inexpensive (resource-wise) to create.
Unfortunately they are still somewhat “plain”. They are basically no more than Ultima 5 style tiles taken into 3d. The unique textures and normal maps help of course – but it would be nice to be able to create additional detail. How could I accomplish this without resorting to noticeable prefabs?
What I think I would like is some sort of algorithmic method to generate cliffs and varied geology. I’ve played around with this a bit, but haven’t come up with anything useful yet. Ideally I want a small set of knobs to tweak, or “inputs” that allow me to add interesting detail without too much effort.
This could be something like the ability to “extract” cliffs from the terrain and add vertices, and carve grooves or layers into the rock. Basically, something that is very easy to do in the editor to add detail where I need it, without too much thought.
How could I make pillars rock that have the same style and overall look, but which are clearly each unique?
Another area this comes up in is building design. I could purchase a set of prefab building models, but then “everything would look the same”. Why does person X have the exact same house as person Y who lives on the other side of the world?
My current “implementation” (if you can call it that) for buildings really is just “Ultima 5” taken into 3d. These are simply straight lines I draw on the map. There aren’t even roofs – I just block out the insides when you’re outside, and block out the outside when you’re inside.
It looks acceptable for “just being straight lines”, but of course I want something that looks a little better. There are obvious improvements to make, such as using different textures, applying decals for things like cracks or missing bits of mortar – and of course furnishing the insides.
But I don’t want noticeable repetition. I want to keep the illusion that every bit of the building is different than every bit of every building you’ve seen in the past. So I want small building blocks from which I can easily assemble something unique.
What tricks/techniques have you used to create realism and uniqueness in your environment models, without “breaking the bank” (in terms of time or money), and without incurring noticeable repetition?