top of page
  • Writer: rubenltn
    rubenltn
  • Apr 19, 2021
  • 2 min read

A simple system done in a couple of days that creates a procedural main path that in turn takes other HDA`s that auto-snap to the main path`s outer edges to create a variety of borders. In this case a skate ramp is used, but the system is built in a way that other procedural objects can be aligned to the snapped curve.


Video Demo


The video below shows the latest HDA`s in action in Unity:


HDA`s Details:


The 3rd HDA generates a terrain that deforms itself to accommodate the gameplay elements.


The main path is very straight forward. It simply takes a curve that has been added to the Digital Asset`s "Editable Nodes" so that Houdini Engine can hand it off to Unity as a user curve tool. A few other parameters are exposed to be edited in Unity such as the path resolution, cross sections and width.



Ramp Generator HDA is a bit more involved. The ramp profile is swept across a user curve that`s processed by a sub-net digital asset that handles border edge detection and snapping of the user curve to the main path curve`s geometry output.




The snapping system uses a custom written attribute wrangle node that moves the point of the first input into the closest point of the second input. This happens a couple of times followed by a refine node to add more points as needed depending on the main path resolution.

Some custom normals are also computed mostly to detect the direction of the main path`s cross section that has the sharing point being snapped to to define which direction the sweep should happen.














Below you can see the terrain generation HDA. Its a basic terrain HDA that takes other HDA`s to project and flatten areas to clear out gameplay elements.






 
 
 
  • Writer: rubenltn
    rubenltn
  • May 20, 2018
  • 1 min read

Decided to start with the accent chair found in the main living area.

For the models in this project I want to work with the PBR shader workflow with textures created in Substance Painter and using Zbrush for things that require some kind of detail work. The final result in Substance Painter can be seen below.




1st part is to get the base model done in Max

I get enough tesselation in the geometry so that I don't need to go crazy in ZBrush with the subdivisions, while making it manageable.



Also try to make it so that the UV islands make sence and also have clean contiguous seams.



The leather part of the chair will need some details such as folds and leather seams. Below is the image for the high poly ZBrush model after done with this step.




Bringing the low poly and high poly meshes into Substance painter to get normal, height, ambient occlusion and curvature maps baked from the hd to the ld version.

In Substance Painter I try to get the materials to look as close to the reference images as I can. Paying attention to details such as leather textures and metal scratched on the base of the chair.

And the final result can be seen below with all the different textures exported from SP to be brought into Unreal.



When working with Unreal, I like to get a basic structure in there with the actual materials applied as fast as possible. This enables me to bring the objects as I work on them to use unreal's awesome engine to quickly visualize the final result and iterate on changes when needed. The image below shows the final result of this step.


After bringing the model from Max, I setup the lightmass importance volume. This is very important to make sure all the lightmass calculation goes to the right area of the map, saving a lot of time whenever we calculate it. Since I'm here I throw in a post-process volume as well.


The floor will be made of wood... French Oak to be more exact :) . The albedo texture was downloaded from the internet and altered in Photoshop. It was then used to generate the roughness, which was used to generate the normal map in xNormal, which was used to create the ambient occlusion and roughness maps, also in xNormal.


A basic shader network was created for the wood material. Nothing special here. Hooked up the textures above to their correspondent outputs and added functionality to change the normal intensity and tiling for everything.

Below you can see the final result.


The wall was made in a similar fashion...

... textures created in Photoshop and xNormal. Note that roghness was not needed for this, since it's a plaster material with uniform roughness all across to give it a nice unblemished look.



The material is slightly more complex, since I wanted to be able to use the same material for both white and dark gray walls, by just adjusting the tint parameter across material instances. Result seen below.




Finally added a sky light with a HDR map, a directional light for the sun, and light portals on both window openings.

For this stage, I decided to use the "Medium" lighting quality, without any lightmass.ini modifications. When the work is final, I will be changing the photon count in the ini file and switching to "Production" light quality.

We can also see the baked light only, without any of the detail added on top. This is useful for looking at artifacts caused by either bad lightmap UV's or bad world settings for the lightmass bake.

This is good enough for this part, since all we really want is a stage to place all the assets that will be created to fill up this environment. Unreal also provide great visualization tools for the different pbr material properties. Below you can see the "Overall" buffer vizualizer with various PIP screens for the different buffers. They can also be displayed separately as a bigger screen.

And finally, my personal favorite... the "Detail Lighting" visualizer, which removes the albedo and GI information, so you can see the PBR materials properties more effectively.

A couple of reflection probes for each of the 2 bigger areas and pumped up the Screen Space Reflection settings in the Post-Process Volume parameters.


bottom of page