Procedural Arcade Environment

Hi there! Thanks for checking out my environment! All of the elements you see on this page were made by myself over the span of 3 weeks. The software I predominantly utilized for this project was Maya 2016, Substance Painter, Substance Designer, and Unreal Engine 4. Everything in the environment below was generated procedurally through the use of modular meshes, procedural materials,  and basic blueprint logic. If you’re interested in using any of these assets in your own projects, feel free to check out my Gumroad where I have this environment for download!

Procedural Tile Blueprint

Everything in the environment is built off of one singular blueprint tile. All arcade cabinets, walls, props, lighting, and miscellaneous objects are spawned and placed based on a random seed dictated in the blueprint class. All of the spawn values are stored in a struct which allows local manipulations to any generated asset. I ended up making two variants of my tile, one that propagates during runtime, and one that propagates during construction. The tile that propagates during runtime is more costly, but allows for more flexibility during gameplay. The construction tile propagates all its props at execution, and because of that has no effect on frame rate. Below you can see the tiles updating at run time!

Below is a portion of the construction graph used for the procedural tile. Most of the graph on the left is generating all the values needed for generating each tile, while most of the graph on the right contains the logic for each element of the tile. (ie: not spawning posters over windows, or turning off lights if there are no fixtures)

Object Position Materials

As I began working on this environment, I came across a problem. In order to output the level of texture variation I wanted in my scene, I would have to spend an inordinate amount of time creating and assigning a torrent of material instances. The solution to this problem, was the Object Position node. I set up a function that takes the object position of whatever mesh the material is assigned, and uses that value to randomly select a 1:1 UV from a tilesheet. With the function made, I was able to add a huge amount of variance to my assets with a single material. Below you can see the object variance function at work as I move around each object. On the left you can see the screen texture and color of my arcade machine randomly generate. The static image in the middle is the tilesheet texture I used to randomly generate the screen variance in the arcade. On the right you can see the poster diffuse and edge wear change as it moves. With these two materials I was able to populate my entire environment with just a handful of materials.

Arcade Machine with textures randomly selected from its ObjectPosition. Arcade machine screen tilesheet. Poster alphacard with ObjectPosition material dictating its diffuse and edgewear mask.

Poster Material with ObjectPosition material dictating its diffuse and edgewear mask.

Arcade Screen Material

In addition to the Object Position Function that I described above, I wanted to implement a On / Off and Glitch state to my arcade screen material, without resorting to swapping out dynamic materials. To solve this, I made some rudimentary switches in my material using the IF statement. This allowed the modpiece blueprint to communicate and switch the screen material using a basic scalar value.



Beauty Shots

Below are some static screenshots I took of some various configurations of my level. They were all taken in real-time straight out of Unreal Engine 4.


Thanks for reading! If you have any additional questions or comments feel free to message me on Twitter: @grossbloy!