Ahri Northern Lights AoE - Texturing breakdown

General / 23 April 2024

This article covers the texture creation process for the ice material, that I made for my portfolio piece "Ahri Northern Lights AoE ability": https://davidlindberg8.artstation.com/pages/ahri-aoe

Coloring:

I wanted to be able to iterate on the colors directly inside of Unreal Engine, which means everything exported from Substance Designer is all considered greyscale

Shape language:

Ice surface:

To work well with a stylized aesthetic, I wanted to use simple shapes without too much minute detail. I settled on using hexagons in a tile sampler to create the "ice flakes" look:

From here I added a little bit of noise, both for warp and added highlights:

This created a nice base look which both breaks up the straight lines from the hexagons while also providing a little bit of extra highlights, seen here alongside the AO derived from this texture:

Snowflakes:

To add a little more flavor to the surface I created a few different snowflake patterns:


From the examples above, I took the last three frames (the three different snowflake variants) and fed them into a tile sampler, to create a frosty surface like this:

By combining this with the ice texture from before, I can create a mask for highlighting "snow peaks" and giving a bit of color variety across the surface:


Cracks in the ice:

The cracks in the ice needed to go from having small fragments in the center, to larger pieces towards the edges. The best way to do this is with the Distance node. By grouping dots closer together near the middle and further apart near the edges, the resulting output from Distance becomes increasingly larger fragments:

By using Flood Fill and Flood Fill to BBox Size, we can get a gradient color increase from the center. This allows us to mask out specific tiles with Histogram Scan, so we can do things like reducing the sizes of the cracks on the inside- or outside pieces, then put them back together with the opacity mask:

The cracks are combined with a bit of noise and blur to fake the light "bleeding" through the ice material:

The directional light tilt on the cracks is done with another Flood Fill and Flood Fill to Gradient, but this time with a spherical shape as the slope input, to make the cracks look as though they are tilted out from the center of the impact:

The combined result in Unreal:


Environment VFX - procedural fracture and vertex coloring system

Making Of / 18 April 2024

This article covers the Houdini pipeline for shattering meshes and adding vertex colors per-piece from the fracture. The technique was used in this piece: https://davidlindberg8.artstation.com/pages/env-vfx

Process overview:

The complete Houdini graph looks like this:

In summary, the process is:

For the small animatable pieces:

1. Subtract a piece from the source geometry, defined by a second mesh

2. Run RBDMaterialFracture to turn it into smaller pieces

3. Separate small and large pieces, to add detail to flat surfaces on large pieces

4. Put the small and large pieces back together

5. Group faces by connectivity

6. Pack each group to primitives (points highlighted below, to show primitive locations)

7. Assign primitive ID numbers based on primitive distance to a point (in this case just origo)

8. Store the primitive number as a custom int named id

9. Refit the values of the primitive IDs to be between 0.0 and 1.0

10. Unpack the primitives, transferring distanceId and id

11. Assign a color attribute based on the value of distanceId (range 0 to 1)

12. Promote distanceId from a primitive attribute to a vertex attribute

13. Set the color of each vertex, based on the value of distanceId for that vertex

14. Shift the UVs for the "interior" geometry to the top of the UV space, so that the new geometry from the boolean and fracture can be colored with a strip in the texture

For the large immovable piece:

1. Subtract a piece from the source geometry, to be shattered and colored

2. Color the geometry black, so that any vertex animation multiplied with it, will make not cause it to move

3. Shift the UVs of the new interior geometry (the "damaged" parts) to the top of the UV space, so that we can use an "interior" strip in the texture for the inside of the statue

Both the large and small pieces are triangulated before being merged together.