My name is Marina and I'm really happy to show some of my work for the first time.
At the moment I'm developing a procedural house tool in Houdini for Unity
. It's a hybrid system
that uses traditionally baked meshes of any kind and style to quickly create game-ready environment content procedurally
. This involves features like LOD's, custom collisions, decals etc.
Most important for me is that it will be easy to handle and theoretically ready for production. So I'm really excited about any feedback you guys could give me!
So 80.lv recently published an article about this tool! If you're interested in how it worky beyond this thread feel free to have a look! https://80.lv/articles/procedural-environment-for-unity-with-houdini/
#01 This is the first beauty shot created completely procedurally inside of Unity. More shots and videos will follow soon!
Same tool, different settings. This scene features over 60 buildings and runs at 60+ fps. The wires are also procedural (video will follow).
At this point the first features and base algorithms are implemented: as the whole thing is based on a stack boxes
kind of procedure, it's already in. With an iteration parameter you're able to control the amount of boxes aka levels that are generated
by the system.
I already added different kinds of roofs
(garden, flat and angled) that are created based on an adjustable probability to appear. The green boxes are stand ins for different types of plants
(trees, bushes, agricultural crops). They will appear as input slots in Unity
where the user can drag & drop in any e.g. SpeedTree assets.
The last interesting thingy are the doors
: they are placed based on a set of raycasts inside Houdini
, checking whether the face is obstructed (no door at all) and whether there is ground below (normal door). If there's notrhing below, it becomes a possible spawning point for a balcony or patio. The amount of each type of mesh are adjustable with a parameter. These will also be input objects inside Unity, so you can choose what types of meshes to use.
I'm open to feedback and critique and would be very happy about any comments from the community!
[EDIT] I changed the name of the thread to be a little shorter, non-confusing and more descriptive. Previous title was "Procedural Hybrid Environment Tool for Unity with Houdini Engine".
#01 Current WIP
Here is some great concept art by Jonas Hassibi which I am basing my work on:
Colors & MaterialsThe concepts are a great base to always get back to and see how certain elements are used (e.g. there's mostly three materials: concrete, wood and (corrugated) metal, also some plastic foil that gives color). They are quite monochrome so I have to take care of that regarding visual appeal. I don't want the final outcome to look like a grey/brown-ist blob.
What can give color there are painted spots like you see them in picture 5 (anarchy and red/yellow/green paint). It's very important to me that the houses feel like somebody lives there and modified them over some time.
Story SynopsisAs global warming proceeds and water levels are rising beyond control a huge part of mankind is seeking refuge. There are only a few places left to settle. The wealthiest among us live high above the water, whereas the poorest seek a home near the deadly sea.
After several floods only the skeletons of former buildings are reaching out of the mud and above the water level. Refugees from every part of the world are building their new houses on top of these structures: they use whatever has been left behind. A new kind of shanty town evolves.
Material Distribution AlgorithmAfter setting up the skeleton for the tool and placing the first stand-in meshes I started working on a material distribution system. If you look closely at the concept art you will see that materials are not scattered per face or randomly, but more organically. That means for example one whole wall is made of wood and it even goes around corners. Another wall may be out of metal which spreads towards the next level of the house an so on.
In this video you see how the process works (with comments):
Modules ConceptsIn the first post you already saw some stand-in meshes for doors and balconies. Of course those are to be replaced and I am really excited to show you the first concepts for the final modules!
The unique feature of this tool is that it is a hybrid tool. This means that it will work with conventionally produced models of any kind and style, which makes it very versatile. It only takes the time to build the meshes and implement them once into the system, after that you can build countless scenes and environments with it. The tool is generally speaking just an algorithm to order meshes after a certain ruleset to make them assemble into houses
But this also means that the modules are the heart and soul of the tool's final look, so they better be gud :>
#01 Doors & Balconies
#03 Tower Elements & Props
The concepts were again made by fabulous Jonas Hassibi, check him out on ArtStation.
Comments and Critique very welcome!
See you soon
Material MeshesI decided to go for three materials (besides concrete plaster): metal plates, corrugated metal and wood. These materials will be meshes that are placed on top of each primitive after the distribution algorithm posted above. The meshes are quite low poly (around 1000 tris each) and each primitive only "stamps out" a random part of it. Still as this produces a lot of computation (around 2 secs for a medium sized house) and a lot of polys, I decided to go for a two way solution:
1. A High Poly Mode: this mode is the beauty shot mode, it uses a lot of polys so it will drain the engine more. Still it produces better looking results as shadows and texture quality are top.
2. A Low Poly Mode: this mode is for quick iteration and building. It doesn't look as good as the high poly mode but gives an exact depiction of how the high poly result wood look like. The mesh material plates & textures are baked on planes (like a texture atlas) to allow for that.
More concerning how this system affects the whole workflow and how it's set up later.
#01 High Poly Mode: the mesh is divided into clusters, each cluster will have its edges moved randomly and assigned one kind of material. A mesh variation of the chosen type will be stamped in the shape of each cluster's primitive at a random position. The end result is a vivid and organically distributed set of materials.
#02 High Poly Mode: examples of wall meshes, vertex colors assigned for easier texturing and faster iteration. UV's on the right.
#03 Material Placement Breakdown (GIF).
If you're interested in a close look at how the system works here you'll find a tutorial walkthrough. As always I'm really happy about any comments & critique.
Modules MeshesSo after finishing the wall meshes I started creating all the necassary meshes to fill the system with. This took a little while and it was really hard to find a good balance between a shanty worn down look and the colorful spirit I want the meshes to have. They should look like people are actually using them and living there.
If you look closely you will find some of the meshes are exactly taken from the concepts. They are all quite low poly as I know some of them will be used a couple of times throughout every building. So they absolutely need to be. Texturing happenend in Substance Designer & Painter.
#01 Windows: You see people painted little messages with their fingers in the wet spray paint, there's hand prints and clues to the inhabitants former origin or what they liked.
#02 Doors: The doors variations use colors and old fabrics that are sewed together. The colors are bright but covered with thick dirt. From below moss and mold are climbing up the wood as the water level rises.
#03 Annexes: These annexes will be placed on the outside of walls as little custom additions to the existing buildings. They are made of scrap metal or metal plates that are painted. Somebody tried to cover the annex in white paint starting from the window but gave up. The textures are interchangable.
#04 Balcony: These balconies are combined with the doors to form little platforms and patios.
#05 Walls: These are all the walls that will be used in the system. They follow a strict modest color palette to allow the other meshes to stand out against them.
#06 Sunshades: These are different types of sunshades placed throughout the system. They are made of old expensive curtain fabrics that nobody needs anymore and worn down towels and linen. The red sunshade is made of a shiny plastic tablecloth for the garden.
I'm always happy about comments & critique! Please tell me what you think : )
Hey! So there's a lot going on: after finishing creating the textures meshes I could finally implement most of them into the tool!
To gamble between different types of mehses (e.g. balconies or doors) and inside of those meshes between their different materials is mostly dones based on the main seed. But sometimes I also included a position of some random point in the mesh. I really regret doing this as sometimes now if I cange the height of my building or the general assembly, props/ doors/ or windows also change. But eh, it's alright.
Especially interesting was the scattering of windows. In the beginning I just placed them all over but it looked horrible (sry no screenshots taken). After I placed one per face it started to get somewhere. But often as the sizes of the windows were so different they would overlap the edges or each other. So I implemented a quick check to account for the dimensions of the given prim. Then I choose a window that fits or if nothing fits no window. I think it's working good, even though there are still some accidents happening
I's immensely appreciate any comments or critique!
I threw my buildings into Unity again after some time. And there were plenty of things to fix but I am quite happy!
Of course in the beginning I did some a-z to see how far I could challenge the Houdini Engine. I bet there are some surprises yet to come. But the Houdini Support is just great. They are really helping my sorry butt out of a lot of trouble. So if you ever panic, just text them. Haha
#01 Sample City in Unity
I assigned some sample materials just to check whether the material distribution in Unity works at all. I know it's not beautiful, but it works!
Thanks for sharing your progress - Looking forward to seeing some completed buildings!
Thank you very much! Here's one for you I had a little fun assembling a few houses and playing around with the look (after spending hours putting the materials together ...). They are pretty beachy and tiki style right now. What do you think?
Especially those yellow and blue tones are just too strong. But now I've got a great starting point from which I can start adjusting things.
#01 First Panorama Shot inside Unity.
#02 Another Angle, a little closer.
I agree that the colors are a bit too saturated. Specifically, the yellow props are quite distracting and don't feel integrated into the scene. But as you said, you have a great starting point and it should be easy to tone that down.
Looking forward to see how you finalize this scene!
Color & Contrast
I'm right in the process of working on my values and colors. Right now the only creation of contrast really comes from saturation which is bad so to say. I need more contrast inside the wood/ metal materials. I added a concrete material that appears on ground floor houses that have at least two points attached to the ground. This concrete Material also features procedural decals, which is a huge deal for me. I didn't know if this would work out but it did! I will make a post on the setup later.
But for now I can show you how the progress looks like:
#01 Check for color values and overpaint (op by Jonas Hassibi).
In the picture #01 you can see that the concrete bottom already has some good contrast. Still the plateau base and the props placed upon it are too uniform. Same goes for the tower which is even worse. Also the reddish tones in the left side of the picture feel horrible to me. Jonas was so kind to overpaint it for me and had the idea to try to brighten up a house the taller it gets. I think I will solve this by adding a white vent to the top sometimes. Also I will add laundry wires.
Another big thing are transitions between the house levels/ iterations of the tool. I'm thinking about adding bushes or mud to the seams (scribbled in black above). But that might be challenging as it will for sure involve booleans in Houdini.
Hiho! After being sick for a little while I'd like to show some further insight into how the tool's parameters work.
#01 Visual walkthrough some of the most important parameters of the tool.
#02 Parameters Closeup
To be hosest I rarely use any other than the main parameters (iterations, seed, custom mode, lp mode). Just because most of the time I don't need to precisely edit the asset so that it fits some certain concept. Still at that point if I need to I mostly use the "destinct wall material" option and play around with "windows amount" and the "props density". Still I won't get rid of the other parameters as sometimes it's nice to have that extra bit of control.
CollidersAs this tool was originally thought to be used in a parcour game with bunny hopping and strafing mechanics, it was important to have fitting low poly colliders. Mesh colliders would of course have cost too much performance and I needed a strict separation between angled surfaces, flat surfaces and walls. Also I wanted our dev to be able to be able to change the player's behaviour based on what kind of floor material he is walking on. So I needed a dirt and metal separation as well.
This was quite tricky as SideFX changed the way Houdini Engine is handling the separation of elements inside of Unity. In version 1 of the HE every separate group would result in a separate mesh, which was changed completely in version 2. Now all meshes result in one mesh, no matter if they have different groups assigned. This made my work much harder. But after contacting the incredibly helpful SideFX support a lot of times we were able to work out a new workflow with the same outcome. Unfortunately that meant I had to restructure the whole tool.
Now the tool is a subnet of geometry nodes, whereas one of those is the tool itself and the others are all the meshes I need separately. These are merged in from the tool node.
#01 Left: different collider meshes, right: the tool network itself.
#02 This is how the colliders look inside of Unity.
As one tag in Unity can always just be given to one mesh this also meant that now (finally) we could tag the separate collider meshes and create nice gameplay. For convenience reasons still I mostly turn off the colliders when I build scenes with the tool as they are stressful to look at ;D
Of course lightbaking is a big thing and even if it is decided not to use it, it's important that it's possible. I had quite some issues with that as the mesh that is used inside of Unity as a house later is not just one asset from the project but a changing tool.
The easiest way to handle lightbaking is provisionally unwrapping the whole asset once it is completed and storing thet UV in the second UV channel. I implemented a lightmap padding parameter that can be increased when the house is rather small or decreased when a lot of space is needed for a bigger house.
Here you see how it works:
#01 Lightbaking in Unity and UV2 in Houdini.
See you soon!
Inside HoudiniFor everyone who is interested I created a short video to illustrate how the whole tool comes together inside of Houdini.
#01 Tool Breakdown inside of Houdini
Beauty Shot #01
After fixing a lot of the props colors (toned them way down) and creating some additional meshes like AC's, some stairs, lights and laundry wires this is the first beauty shot I created completely procedurally. The tool takes speedtree inputs so all the foliage you see are speedtree assets. In addition to that just the water and the rocks are not created by me (the water is a free standard asset and the rocks are free from the asset store).
It took me around 2 days to create this scene whereas most of the time went into looking for suitable rocks and setting up the volumetric lighting inside of Unity. I really have to say that handling all those small plugins and scripts and having them float your project is maybe the worst thing about Unity for me. I'll be posting additional shots and a video later today or tomorrow so stay tuned.
Also I would be very happy about comments & critique on this one
Anyway... I've been following this thread for awhile now and this is some really great stuff! That last beauty shot has a nice cohesive logic to it that is sometimes lacking with procedural work. It would be cool to see some shots from a lower camera angle to put the viewer 'in' the shanty town. Although that might require some small scale props so the detail holds up?
I think it would be great to see a larger shanty town (city?) built with this. Something along these lines maybe...
I have been thinking about picking up Houdini for this type of procedural work and appreciate your breakdowns. Can you recommend any Houdini learning resources for this type of thing? (a lot of it seems to be geared towards VFX.) Thanks!
#01 Favela Scene fully procedural. Same tool, different settings.
This scene features over 60 buildings and runs at 60+ fps.
What do you think?
I started with learning the basics from Rohan Dalvi (procedural modeling, the one with the bus) and then did some Anastasia Opara. That's basically it. Joy of Vex is also great for learning vex, after that it was just forums, documentation and SideFX support
The new shot looks good and shows some of the versatility of what you've created. I'm still dying to push the camera into a street level shot though.
Thanks for your feedback!
I did Tutorials almost full time for a month+. (copy from above) I started with learning the basics from Rohan Dalvi (procedural modeling, the one with the bus) and then did some Anastasia Opara. That's basically it. Joy of Vex is also great for learning vex, after that it was just forums, documentation and SideFX support.
Im working on a university project right now and have the same problem with the separated meshes.
I use the Object Merge Node to input my meshes from other Geometry Nodes. I need to enable the Pack Geometry feature to achieve separated Meshes in Unity, but with this feature i lost my collision group and any other stuff. (with packed geometry, the Lods will not work)
How did you solve it?
Haha, yeah I encountered exactly the same problem. Also you will lose your UV's as they are packed and will be unpacked once rendering starts in Mantra. But what if you're not rendering ^.^ I have acturally not found a solution yet. I would adive to write the sidefx support, I will do that too and already did it. But it's just a feature not implemented yet.
Thank you! Yes that's true. I changed a lot about her approach because of the specific requirements that a game asset/ tool has. E.g. I cant generate any geometry inside of Houdini and it has to be super fast für building of huge scenes etc.
Kaine123 said: You can just get the rock meshes at the Unity assetstore, it's "Rocks and Boulders 2".
Bending & DistortionSo one thing I didn't go over at all is that every house features a subtle distortion. Depending on the height and width of each house iteration (or otherwise put each house box).
That means that a part of a house that's really high and thin will bend a lot, whereas a very low and wide house won't bend at all.
#01 Left: Intensity of bending for high parts of a house, right: very intense bending and wall/ corner spreading.
On the other hand that same low & wide house may have a saggy roof:
#02: Saggy roof of a small house.
How?The distortion algorithm is fairly simple. I am using different kinds of distortion: 1. bending, 2. saggy roofs, 3. wall/ corner spreading.
I am performing all these deformations one after another on each house iteration/ house box. But in the end I am feeding this deformed geometry into a lattice node, together with a lattice box and my default geometry. This will make for a very smooth deformation taking into account all parts of the existing mesh.
On the other hand I am excluding certain points that should not be bend. These are for example the intersection points between the several house boxes, als it will look really odd if the boxes would drift away from each other. I am getting these points from one of the earlier boolean operations in which I deleted the inside of each house and am left with the shell.
#03: Node network for deformation process.
I learned this technique in the tutorials from Anastasia Opara, so thanks a lot!
Hey! So 80.lv recently published an article about this tool! If you're interested in how it worky beyond this thread feel free to have a look!