Obsidian

Material Breakdown

Júlia Sauleda

art_thumb_obs
228

Júlia Sauleda

Material Artist

Introduction

Hello! I’m Júlia, a Material Artist with 5 years of experience in the Industry, currently working at Ubisoft as a Texture Artist.

Project

One of my favorite Substance Designer exercises is revisiting materials I created years ago when I was learning the basics of procedural material creation, and putting both results next to each other as a way to visualize improvement over time.

This time, I decided to revisit my old obsidian material.

old-vs-new

PureRef & References

To gather references, I focused on sculpted obsidian rather than the raw mineraloid. My aim was to evoke the feeling of carved or hammered stone, reminiscent of prehistoric tools.

I took the liberty of borrowing the appearance of flint tools for inspiration as well. Since obsidian is a glass-like volcanic material with traces of iron oxide, its surface might show interesting color variations.

For my reference sheet, I sought out high-quality images showcasing the grainy texture and iridescent effect.

pureref

Height Map

The base for this kind of material is a cells map. Using one of the default cell nodes is more than enough, but for this challenge, I wanted more control.

So I followed James Braley’s workflow, which consists of a tile sampler with a Gaussian noise in the scale multiplier for size variation, followed by several warps and low-intensity swirls to create an organic feel.

graph-1-cells

The final result is inverted and then on top you can add as many scratches, cracks, slopes, and micro-details as you want (without overdoing it, of course).

height-process

Flood Fill

When you are creating a material with some kind of organic pattern, you’ll want as much control of the individual tiles as possible. Enter Flood Fill, one of Designer’s most useful nodes.

The challenge here was to get a binary map from my final obsidian height map, which might seem tricky at first. My approach was to plug it into a normal node with 20 intensity, then a curvature Sobel node (which will give you extremely sharp edges).

And then through levels and a threshold node, get a clean and functional input for the Flood Fill.

graph-2-flood-fill

Then I just had to use a distance node to get rid of the outlines, and there it is: a pretty good random grayscale map that I can use later as a mask for various effects.

Noise

A material like this one has a fair amount of micro-detail. Most of the noise on my reference sheet had a radial pattern, similar to the rings of a chopped tree.
My approach was to process several noises through directional warp, using my height map as intensity input.

This gave me different results that looked random and organic and also respected the direction of the obsidian cells.

graph-3-noises

Normal Map Artifiacts

Once I had the normal map, it was time to toy a little bit with it.

Obsidian is a glass-like material with different facets, so I wanted to fake the subtle light/reflectivity artifacts you’d normally see on its surface.

gif-NM

To do so, I created colorful gradient maps using my noises as input. Then I blended each one with the normal map (overlay mode with very low opacity).

As masks, I used the curvature map, the gradient maps from the Flood Fill, and a light node with strong contrast.

NM-artifacts

Base Colour

Time for the Base Color. The diffuse of a dark obsidian material might look like pitch black on first glance, but on closer look one can see some iridescent spots that change with light direction.

To fake the illusion of that iridescence, I created a base gradient map from a light node, and then blended a couple of color grunges using my curvature and Flood Fill masks again.

Finally, I highlighted the edges of the obsidian cells with a curvature smooth overlay. The final result was a bit too intense so I lowered the brightness inside Marmoset for the final renders.

stages-of-base-color

Roughness & Metallic

The roughness is very simple: an inverted curvature smooth with high contrast and a sharpen node to bring all the microdetail out. I also used the curvature smooth map for the metallic, but with very low brightness.

Metalness maps are supposed to be black or white, but for this kind of material I like to twist the rules a little bit to get interesting results.

screenshot-with-texture-set

Feedback

Once you are satisfied with your material, it’s time to move on. You don’t want to overdo it or get visual fatigue.

That said, there’s always room for improvement, and looking at my final renders I see a couple of things I could’ve done better.

The noise on the normal map is too noticeable, and the fake iridescence spots, while cool, also become noticeable when you rotate the light, as they remain static instead of reacting to the light source as they would in real life.

Marmoset

When I create scenes for Marmoset I try to focus on the light and how it will impact the material.
I create several lights in different positions, do a bit of post-processing in the render and camera menus and depending on the material, maybe add some subsurface scattering or fresnel.

To showcase the obsidian I used a combination of primitive meshes, a very simple prehistoric knife, and an abstract object made from a spline that from up close could evoke an alien landscape.

Some very minor touches in Photoshop, and voilà!

marmo-scene1
marmo-scene2

Conclusion

Some of the techniques shown here are a bit unorthodox. Ideally, we want physical simulations to be handled by the shader, but if we are dealing with a simple PBR pipeline, we sometimes ought to make use of these tricks.

Rotating the environmental light can give the effects away, but the results are still quite nice if done sparingly and with taste.

And that wraps it up! I hope you liked this walkthrough and it gave you some ideas you’ll want to try in your own materials!