Trying to steal Vray's thunder.
I'm gonna wait for Steam version
Ben de Hullu talked a bit about his new plugin for Unreal Engine 4, which allows generating awesome medieval architecture really quickly.
Hello! My name is Ben and I’m from the Netherlands, I’m currently an environment artist working at Starbreeze Studios in Stockholm, Sweden. Previously I did an internship at Larian Studios in Belgium working on Divinity: Original Sin 2. Apart from that I made a number of personal project to continue developing my skills. My main focus is environment art with a desire to become a technical artist.
The idea for the building constructor was on my mind for a long time as I have seen lot of potential use in recent projects I worked on. After doing some early prototypes I found that Unreal Blueprints became too constraining at that point, so I decided to switch to C++. I had no programming skills at the time except for basic Python. Luckily there are a lot of good resources online like Udemy and the Unreal community tutorials, so I got myself up to speed.
The idea was to create a tool which takes care of a boring and tedious task such as constantly placing the same kind of modules by hand. It is designed to work with user defined measurements of modules with some restrictions. The tool takes in simple boxes in the shape of the building and places the modules based on its dimensions. When the user is done with editing the building it can be “baked” down into separate static meshes.
The constructor plugin takes in a modified Unreal data asset called a “Building Kit”. This data base actor holds all the parameters like the module Maximum size, which visuals the construct can pick from and certain additional rules like separate floor tile spawning if they aren’t included in the wall tile.
As for the input shape creation I recommend creating a “brush mesh” that has the measurements of a single tile to make it easier to control. This means in my case a mesh of 150X 150Y and 300 in the Z with the pivot in a corner so I can use whole scaling numbers. Currently BSP volumes can also be used if they are converted to static meshes.
The next step in the workflow would be editing the raw output of the constructor, this is all done in the plugin mode. Select elevation which select all the tiles on the current selected elevation and grow selection which selects all neighbors of the current selected tile.
After selecting the tiles the user can switch variations to change up the building and give it some unique features. Next to this the “Tile type” can also be switched for plain walls, windows, doors or a custom tile.
If there are two single tiles next to each other and they’re both an wall type, the system will merge them together into a “double tile” which can have unique variations and can be split and merged again. This feature is in place to reduce the number of tiles and to have more variation.
As shown in the video there is also a feature to flip the tiles, this is generally used for the roof edge tiles. This feature will become obsolete when the roof generation is overhauled. Some other minor functions worth mentioning are “Toggle tile” and “Toggle Removed”. The toggle tile function is to clean up the unwanted tiles by marking them to be removed when the building is baked to static meshes. These tiles get a red colour so it’s clear to the user which ones are marked. The Toggle removed will display toggle the tiles marked.
At last we have the “Bake Building” function. This function will clean up and convert all tiles to static meshes and creates a folder in the outliner for the buildings.
This will save the user a lot of cleanup time after constructing and will keep the designer and world-builders happy.
Are there opportunities to add your own assets to this editor?
It’s possible to use you own assets with the constructor. The building is reasonably customizable, it can take user defined size modules with some rules bound to it. Currently the main rule is to have the same width as depth and for the double pieces double the width and same depth. The height can be anything the user wants.
In the future I’m planning to make the system more flexible by allowing different width modules.
Creating in UE4
As I mentioned before, the first prototypes were made in unreal 4 blueprints which were slightly too limiting. Some of the algorithms were prototyped in blueprints because it was faster than recompiling and rebooting the engine. Because blueprint nodes are essentially C++ functions, the conversion from blueprint to C++ was pretty quick and fluent. Next to the limitation of blueprints I wanted to have a mode tab in the editor for the interface so C++ was the way to go.
Most of the algorithms used in the system are rather basic condition checking. For example, the current tile type checking is based on numbers of neighbors around the tile itself. Based on that information it will switch to the correct type and orientation.
How could this tool be used in games?
My mindset while creating the tool was to make it as flexible and general as possible. So far I found more than one application for the tool. The infrastructure created in my test scene was also created with the building constructor. Any game or cinematic project with a lot of buildings made out of modular pieces or infrastructure can make use of the tools.
My aim is to release the tool on the market place or Gumroad when it’s finished. Currently I have a list of features that I want to add, which will make the tool more flexible and optimized.