Loading...
 

Tutorials

Technique for automated terrain-feature propagation
-------------------

These days, a gigantic open-world terrain presents a gigantic challenge in how to decorate it all in any kind of artistically meaningful way. Modern approaches used by professional development studios is to use algorithmic programmatic procedural techniques, perhaps even AI-driven, to do this mostly automatically. Since we currently lack the programming chops to do this ourselves, I have an idea that would use images, derived from heightmaps, to create "scatter placement" images that designate pixels as locations where predefined objects would be placed, that, in its very basic form, would be fully automated.

First we analyse the heightmap itself to isolate areas where the mapper wants large detailed objects, such as huge trees. We'd have an image that will prevent them from being placed at high elevations, for example, used to negate propagation. We'd also be able to automatically determine flat (or comparatively even) terrain and exclude any sloped surfaces. The most low-tech approach would be to generate a normalmap and isolate the lavender hues, by removing the others. Other images used to exclude placement can easily be painted in manually, or counterwise, areas can be manually painted to include objects, or refine the types of objects included. Combined with some other image-processing trickery, we now have an image that represents isolated areas where we want these huge tree objects. Keep in mind, we're only using giant trees as an example, although it's the most logical one.

Now we need to generate specific pixels that will represent where each individual tree will be placed. There are a few approaches to achieving this, such as noise generation algorithms. We can create dispersed random distributed populations of pixels, and manually paint in more as we want them, using custom brushes. We use this image within a scatter-modifier to place these mapobjects only where the pixels are white and only distributed in such a way where one tree fits within the area of one pixel on the texture, to always avoid overlapping duplicates. So far this is pretty standard, but going back through this workflow, to the image-processing level, will allow us to further define other objects, those that would likely "flesh out" scenery typically located around a huge tree, all done using only image-processing techniques.

The individual "tree" pixels can be dilated out, use a "spread" or noise effect, or both, perhaps even a palletised blur, or any combination together, suited to this task - the task of creating a halo-like area around the original tree objects to all manner of varying degrees, in terms of potential distribution, that can then be used to designate different accompanying objects. For example, the first pass will create a small perimeter with highly dispersed pixels to place large rocks, around which another pass is generated to place smaller rocks. Likewise, the same process can be used, although with a different "seed" to create smaller trees or large bushes, around which even smaller bushes can be placed, and so on. Broader halos can be generated to populate the area with smaller rocks and shrubs, and finally weeds and small bushes. The possibilities are limited only by which image-processing techniques are used and which objects (or groups of objects) are assigned to the final pixels. When applying everything inside Blender, the objects will automatically be placed at the correct elevation of the original heightmap, at a custom depth, with custom dispersion and rotation values, and even tilted to match slope angles if desired.

The end result will be, more or less, propagation of features that (somewhat) "intelligently" automatically accompanies the large main features (such as large trees) with other appropriate objects, outwards and gradually. Each image can (and likely will) be used against each other to merge these features in a nicer, more meaningful way. Such as if two large trees are in close proximity where such generated halos overlap, they will become merged and operated on as one single non-circular perimeter and not result in a jumbled overlapping mess. Furthermore, all images can be compared against each other to cancel out any unnecessary mess or overlap, to keep the final result as clean and curated as possible, all achieved in the image-processing phases themselves. Ultimately, every phase in this particular workflow can be manually adjusted by the mapper to refine more purposeful results, right from adjusting the original images, to manually adjusting mapobjects within Radiant, as exported from Blender. We would definitely make sure all objects remain unique and get exported (although en masse) and then imported as individual objects, to allow mappers every freedom at any phase of the procedure, if they choose to make fine adjustments to what is otherwise a fairly randomised and automated technique.

https://www.violationentertainment.com/temp/taz_0.pnglink-external
https://www.violationentertainment.com/temp/taz_1.pnglink-external
https://www.violationentertainment.com/temp/taz_2.pnglink-external
https://www.violationentertainment.com/temp/taz_3.pnglink-external
https://www.violationentertainment.com/temp/taz_4.pnglink-external
https://www.violationentertainment.com/temp/taz_5.pnglink-external


,
,
,





Level design - direction, curation and purpose.
-------------------

The popular and common approach to level design these days is very much 'just open-world', with any kind of intent or fundamental optimisation an incidental byproduct of the design, instead of from a very considerate and technical perspective. The truth is, even for vast open-world open-ended environments, a designer still needs to consider intent and optimisation - direction, curation and purpose.

- Direction in a sense that the player and every other dynamic AI-driven character needs specific directions to traverse, no matter how immediately complicated these directions might seem. Overall, there would always be some direct-lines even in a haphazardly created open-world layout, just incidentally.
- Curation is recognising these throughways and chokepoints, and carefully designing the world, both conceptually and technically, to provide support to that design, and to do it on purpose instead of waiting for them to arise incidentally. If the word 'curation' invokes visions of a museum, that's exactly what I mean - the exhibits are organised in such a way to keep the visitors interested and moving throughout the building, to see everything provided and make it as worthwhile an experience as possible.
- Purpose is the fundamental thing that should drive both direction and thus curation. If someone is going from one place to another, there must be a purpose, and for that throughway to exist for that same purpose. A dead-end or a pointless open field should always be a luxury, done intentionally, and also serving some kind of purpose.

A common complaint of modern games is that they are too vast and open-world, but with nothing to do, or nothing too specific. Grind-quests and copy+paste features scattered randomly, as filler. A mile wide but an inch deep. Only modern games can really fall into this trap of short-sighted open-world design. In earlier titles, the hardware just couldn't do that, or couldn't do that in a substantially interesting way, and designers were simply forced to 'curate the directions with purpose' out of necessity. Even if a map was never intended to be "open-world", the same design traps can be fallen into, by losing sight of the purpose, or maybe never even having one.

That's not to say that all maps need to always strictly make a direct-line from one objective to another, or one important NPC to another, or one "beat" to another. First of all, even with our racing game, having multiple branching paths almost constantly is something we strive for, for the sake of variety. In our shooter, these alternate paths often would create "figure-eight" layouts that keep the player looping around the environments, so every time the game is played it's almost impossible to do it exactly the same way again. The player is not so much 'just moving forward' as they are 'circling around and back', in order to find that exact direction and purpose, to then progress.

Purpose is extremely important, but perhaps what makes it so important is that it gives the mapper a sense of obligation from a technical point of view, about where to provide interesting details, keep the story moving along and have some bearing on where the player came from, where they're going and what the experience is, to some degree. I would say this is even true for self-proclaimed open-world role-playing games, and for the same reasons. The difference there is, there are directions, making it plural. A mapper should never need to find themselves just filling-it-in or phoning-it-in, just to get it done. If that happens, it's likely because the purpose is not there, and if there's no purpose and the mapper isn't enjoying the process of creation, then it's almost guaranteed that the audience isn't going to enjoy the process of playing it.

(:invisible walls and map boundaries.)
(:procedural automatic detailing.)

,
,
,