Rookie Awards 2024 - Open for Entries!
OIL RIG - Procedural Tool
Share

OIL RIG - Procedural Tool

Finn Bogaert
by FinnBogaert on 17 Feb 2024

Creating a procedural asset of this scale is one of the most challenging tasks I've had so far. This is the full process of the creating of the OIL RIG, a procedural tool created in Houdini, and rendered in Unreal Engine 5.

21 1322 11
Round of applause for our sponsors

Procedural Oil Rig Generator

Intro

Hey! Im Finn Bogaert, a 19y old student at Howest Digital Arts and Entertainment, where I study Game Graphic Production, in the Tech art minor.

Procedural Assets

One of my subjects at school was based around Procedural Asset creation in Houdini. We were tasked to make a Procedural Asset of choice, that would be able to fit in a game called "Rustborn", which is a project we at Howest DAE are working on. The tool we made should fit in the aesthetic of Rustborn, which is a scrappy/rusty type civilization making use of what they can.

Oil Rig

After a lot of thinking I decided to go with a Procedural Oil Rig tool. I knew this was going to be really challenging, since its a "Grand" thing, and I never really made something in this scope. But I was definitely up for the challenge. My goal here was to create a fully functional Oil Rig tool that allows for fast iterations of different Oil Rigs. I also wanted to delve deeper into scene creation in Unreal Engine 5.

This post is divided in multiple parts :

- Favourite render ( Night&Day )

- Tool Demo

- Tool Breakdown

- Renders

Night & Day

OIL RIG - Night&Day

Probably my favourite shots from the whole project, a night and day render of the oil rig, set in a simple ocean scene. The goal of this assignment wasn't environment design, but since I never had the chance to play around with environments in Unreal I thought this would be the perfect opportunity to try and make something nice.

TOOL DEMO

Proceduralism

Of course as this was a Procedural Tool, I didn't work too much on the environment itself, and decided to focus on showcasing the tool itself.

When starting this project I realised that Oil Rigs come in different sizes, shapes and forms. So I kept that in mind while working on the project, that it should be able to make multiple different shapes, without too much effort. Here is a preview of just a few of the many possible combinations.

Parameters

I have a lot of different parameters set up to make these different shapes and forms of the oil rig. As you can see the flarestack placement can be changed, the base can chance from amount and size, the tower can change in height etc... I could keep going.

Here is a small video that showcases some of the parameters :

Techniques

As you can see in the videos the tool is built up from 3 cubes. I did this to make the iterating process really easy for the user, and after testing my peers seemed to like the idea, so I continued to make it more usable.

Tool Breakdown

Since this was a pretty big project, ill divide the breakdowns into 3 layers.

These 3 layers will be the corresponding boxes the user inputs when using the tool ^ see image above.

The Base ( Pillars )
The Body ( Middle, Flarestack, Helipad)
The Top ( Third floor & Tower )

The Base

- First I had to clean up the incoming geometry ( the boxes ), I do this by just running a bound node around the geometry.

- Get 4 corner points to place the pillars, keep in mind the pillars are instanced objects, which means I had to divide the size of the base geometry by the size of a pillar piece, like this I instanced a bottom and top pipe on top of each other, without overlapping and fitting in the base geometry.

- To make the concrete pillars running from pillar to pillar, I extracted a plane from the base geometry, and ran a polywire over the edges resulting in me getting the connecting pipes.

That's pretty much it for the base, the easiest part of the Oil Rig.

The Body

- When starting on the body I needed a way to quickly iterate between different ground planes, for both the first and second floors. I decided to go with a grid based workflow. I will break this down :

1. Extract the base geometry into a plane, and divide it into a 10x10 grid.

2. Extract a different plane, but this one into a 2x2 grid.

3. Copy boxes on random selected points of the 2x2 grid (step 2) This selection is randomized with a group create, and parameterised with slides for the random seed, and percentage of selection.

4. Use these boxes to select faces on the 10x10 grid, and blast these off. Now we have our easy iterating process for the bottom floor.

This is not all for the base floor, after this I run this plane trough a connectivity and measure node, this is how I make sure I never have floating parts, since that wouldn't make sense. 

After this I just add a small extrude, unwrap and assign a material to the base. This is the base floorplane finished.

- For the second floor I use a similar workflow, except here I extrude the base 10x10 grid outwards, to make an 11x11 grid. This allows me to work with overhangs later, which have a nice effect and add to the silhouette.

Here I just added some simple railings, support beams, a sweep of the bottom floor, but then towards the top floor which gives me a pipe connecting all the support beams, and cross beams between the support beams.

Since I'm using instanced pillars I had to make sure the orientation of the pillars was always correct. I do this by doing a dot product of the centre of the input geo, with the v@right vector I made in a vector frame earlier. This way I could get the orientations down right.

The Body

Continuing on the Body with one of the harder systems to wrap my head around in this project was the overhang beams, and overhang detection. I needed to find a way to detect if there was a spot overhanging, and then add the overhanging support beams under the overhangs, connecting to the base plane IF there was a base plane there. ( I know it sounds really complicated, and it was ).

It was especially hard since I had changeable bottom and top planes, so here ill break down how I solved this issue.

1. First I booleaned the our bottom plane ( 10x10 grid with cut-outs ) with the top plane ( 11x11 grid with cut-outs ) This got me all the places I HAD a top plane, where I didn't have a bottom plane ( the begging to finding the overhangs ) We'll call this Plane A for further explenation.

2. I selected all the verts on plane A, and then made a new selection with plane A and the uncut 10x10 grid. By reversing this group I could access all the outside points on plane A. After a few different point selections I managed to get the point selection I needed, only the points where there's overhangs.

3. The normals and vectors on these points we're all over the place since we just did a lot of selections and deletes, so to clean this up I set up a simple vector frame, this will help me orient the beams correctly later. I also run this through the same dot product formula we used earlier, the make sure we get all our v@right vectors pointing inwards.

4. Finally now that we have our vectors and points set up, we finish off by orienting our lines correctly on the points. Since the overhang changes with the scale of the base geometry, we will need to run a bigger formula to calculate angles and such. 

That's it for the foundations of the body, I did however add a lot of detail which I will quickly show here :

Large Detail

1.  The Helipad was built up procedurally, and then positioned on top of the Oil Rig, I won't go into the creation of the helipad, but the positioning is quite interesting to go through.

- I take all the edge primitives of the second floor of the Oil Rig, This gives me a "Ring" around the oil rig. Now using a groupbyrange I set it so that I select 1 primitive in the ring. After I get this primitive I blast the rest, and calculate the axisdirection in VEX, to know which way to orient the helipad. 

2. The Flare stack was also just like the Helipad built up procedurally, and also placed exactly the same way, this way I can control both of them independently.

Small Detail

1. The Barrels were instanced, but also not that easy to place. I had to make sure they wouldn't place when there's no place below them, since we work with changing ground planes. First I had to find the points around the middle hole, once I had one point on each side I randomly selected one of those points to spawn a barrel stack on. 

I did this by ( If the point is selected ) doing a trace from a box sized the same as a barrel stack. this trace would compare all 4 bottom primitive points against the points of the underlying plane. If one of the trace points misses, we know there's no plane underneath, which means we don't spawn the barrels. I did this for both the bottom and top floor.

2. Staircase was built up by taking the centre hole in the Oil Rig. taking 1 of the edges of that hole and building up a stair from there. Then mirror that for all 4 sides. I used instanced staircases, so I just kept the points and made support pillars going down from them.

3. Lamps & Pallets For these I pretty much just scattered points across the planes ( Pallets ), or around the lines of the planes ( Lamps ), This did the trick

The Top

- The top was also pretty simple, for the tower I just made sure to make the incoming geometry a square, to make sure the tower always stays square. Then I just built up the tower with a ladder, and added sub platforms between, and on top

- The Third floor on top Is also a user input controlled platform, which used the techniques explained earlier to create a platform on top of the oil rig.

finally finished with the breakdown, time for


Renders

- First I started off by rendering the Oil Rig in an ocean made using the Unreal water plugin.

I liked this a lot, but I felt like I could push it even further. So I decided to start learning more about unreal, and I watched a lot of videos of how to render nice scenes. I then stumbled across the Ultra Dynamic Sky pack in the Unreal Store, and thought I'd give making a misty/rainy scene a go, because why not right?

In the end I'm really happy I gave this storm render a shot, since I'm extremely happy with how it turned out, ofcourse it took a lot of tweaking, but we got there in the end.

The End

Thanks a lot for reading through my breakdown and work process! It was my first time working from Houdini To unreal, and since I'm very inexperienced in both Houdini and Unreal Engine 5 I feel like this was a nice achievement on my end. I hope you found something interesting in this breakdown, if you have any questions/feedback please let me know!


Comments (11)