Céline Dameron is a Quality Engineer on the Substance 3D Designer team. Here, she details some of her experiments with the Substance Model Graph, a feature in the most recent release of Substance 3D Designer.
Previously, Substance 3D Designer was typically used to create materials. The most recent release of Designer has added the ability to create parametric geometry, however. The initial objective of this hanging lamp project was simply to test out the new parametric modeling content that is now available.
This project allows you to parametrically generate a wide range of lamps, very quickly. It’s a project that’s potentially really interesting for product designers, for instance, because we start with something really basic, the lampshade shape, which we can modify however we want just by moving a slider; to that we add our material, which is also completely flexible and modifiable. The outcome of this is that we generate a vast range of lamp styles extremely quickly.
If you have your material library ready beforehand, you can create a wide range of variations of lamps in about 2 hours. Though you also need to factor in any time spent preparing your materials – in my case, my materials were already prepared, though I’d previously spent perhaps 2 or 3 days creating each material that I used in this project. Of course, ready-to-use materials are available on platforms such as Substance 3D Assets, and elsewhere.
If you wanted to 3D print your lamp, it just takes 3 clicks to export the mesh for printing.
Parametric Modeling in Designer
This project isn’t at all complex, in technical terms. Really, the node graph for the project is so simple that it’s difficult to get lost. It’s a good way to test out Designer’s parametric modeling function, in fact, if you aren’t so familiar with it.
To create meshes in Designer, we take the same approach as with materials – that is, we start out with a node graph, the Substance Material Graph, and select and connect nodes to create our desired output. One of the big strengths of the parametric modeling feature is that, as with materials, you can expose parameters, and so modify your modeled object in real time, just by changing an exposed variable.
There are still a few constraints to this feature; the software isn’t quite perfect yet. But I hope that this project will show you how easy it is to create something really interesting like this.
The Hanging Lamp
This lamp project is the result of what I’ll call a happy accident. I didn’t originally intend to create a lamp – I was initially playing around with the new Lathe and Shell nodes, trying to create a vase, but I couldn’t find the exact curve that I wanted. I did create a sort of ‘half vase’, however; I turned that upside down, and it looked more like a hanging lamp than anything else. I took the project from there.
I’ll add that my intention with this project wasn’t to stay 100% accurate – the interior of the lamp in particular isn’t so detailed, but that’s a part that you’ll never normally see anyway. Rather, I found it really interesting to be able to place a light within the lamp, and to add some background context to the scene. In my case, I created the background around the lamp very quickly, but it’d certainly be possible to develop the scene in more detail that way.
To create a hanging lamp, also sometimes called a pendant light, there are four main parts to the node graph:
– The lampshade
– The lampshade socket and cable
– The bulb
– The background
The lampshade is the most important part of the project. For this, we start by creating a curve. Shaping this initial curve is probably the most technically complex part of the whole project, in fact. Currently, the only way to create curves in the Substance Model Graph is by using a Curve Primitive node. This node provides several default primitives such as lines, ellipses, or rectangles – but, in this case, none of them exactly meets our needs. So our first step here is to find our base shape, which will define the silhouette of our lampshade.
We do this by using the default spiral curve in the Curve Primitive node. We then resize it to our own preferences using the Trim node. I personally prefer to make sure the curve isn’t too long, and I model the curve in whatever way seems most appropriate.
Next, we take this curve and we revolve it around an axis, using the Lathe node. This gives us our basic 3D shape. Without any texture, you might create something that looks a little like a dog’s bowl; that’s completely fine.
Our 3D shape is still very thin. Next, we add some thickness to the mesh, using the Shell node. Here, of course, we can modify the parameters within the node to control the thickness of the mesh. Lampshades tend to be quite thin anyway, so in exposing this parameter I didn’t make a wide range of values available. Really, I exposed it because principally because certain patterns of materials require a little thickness to them.
For the next step, we take care of the UVs. Currently, no UVs are present on the mesh and so, by default, the way in which materials will be applied to the mesh isn’t so pretty. Materials will be applied from one side of the mesh to the other, rather than from top to bottom. That isn’t the effect we want.
But, happily, Designer includes nodes that allow you to manage the direction and scale of your UVs (thanks, developers!). This node is the UV Project node; we use it here to ensure that our material is applied to the mesh from top to bottom, and that it wraps all the way around. We want to apply our material as a vertical cylinder, basically.
And then we select our material, and apply it. And the lampshade is done.
Really, the strength of this project lies in exposing the parameters of the initial curve itself. I can change the size of the curve, and it’s a type of spiral, so I can separately modify the radius or the revolution of the upper or lower part. And as I modify the shape of the curve, this defines the overall shape of the lampshade.
The Lampshade Socket and Cable
The next section is the lampshade socket, that holds the lampshade, and the cable. And it’s very simple as well.
We start with the vaguely hemispherical lampshade socket. Our first objective is to create a semicircular curve; we do this by first using the Curve Primitive node to create a circle. Then we use the same node to create a square. With this done, we can subtract the square from the circle, to give us our semicircle curve.
Now, as with the lampshade, we revolve this curve in the Lathe node, and this gives us our hemisphere shape. And we can crush our curve just a little to give the lampshade that slight conical shape.
Next, just as with the lampshade, we use the Shell node to add a little thickness to our mesh.
I should add that this certainly isn’t the only way to create such a shape in Designer. But it was the method I opted for. As mentioned above, my initial goal was to test out some of the new nodes in Designer, so I wanted to use the Lathe node as much as possible.
Here, rather than wrestling with the object’s UVs, we just use a gold material; this applies quite evenly over the mesh as it is. If you really want to look at the object in detail, the texturing here isn’t super-clean. But you can’t really see any problems unless you go looking for them; in this particular case I preferred to prioritize speed over perfect accuracy.
And like this, the lampshade socket is done. Next, the cable.
The easier, if slightly less realistic way, to create the cable might be to take a cone-shaped 3D primitive, and adjust parameters so that it becomes a thin cylinder. That would work fine, here.
However, you often find that when a lamp is suspended by a cable – rather than by a chain, or a tube, for instance – that cable is rarely perfectly straight, and I wanted to recreate that detail, so that the cable was a little more organic.
To do this, we first generate two separate curves with the Curve Primitive node, a circle curve and a spiral. With the spiral, we decrease the radius parameters so that we get a very, very smooth bend effect.
We then use a Sweep Curve node to apply our circle shape all along the length of the spiral; this creates the mesh for our cable.
Then, as with the lampshade socket, we apply the same golden material to the cable.
By default, when I created these two shapes they were the wrong way round – that is, the lampshade socket was at the top of the cable, rather than at the bottom. So I used the Transform node to correct this; it allows you to position the lampshade socket relative to the cable, to make sure it’s in the appropriate place.
After this, we can use the Merge node to fuse these two shapes together. And so, like this, we have our combined lampshade socket and cable.
The Transform node is also important to control the y-axis position of the socket and cable, to make sure that it’s always in contact with the lampshade. Depending on the curve you use to create the lampshade, the overall size of the lampshade will vary. The Transform node allows you to slide the socket and cable up or down, to ensure that it’s always neatly on top of the lampshade, no matter how big or small the lampshade might be.
The bulb is very simple to do. We start with a simple sphere, and use the Transform node to center it in the middle of the lampshade. Then we add a material that emits light; a few of these are included by default in Designer. In my particular case, I used Designer’s default light_omni material.
And then we use the Merge node to combine all three parts of the lamp, so that we have the whole object available in a single node.
The background is composed of three simple planes placed around the lamp. I used environment lighting to illuminate the scene, and these three planes helped me to control the amount of light that falls on the lamp. That said, I didn’t want to use much light here, as the light bulb was already emitting light. But this just helped me to ensure that the scene wouldn’t be too dark.
And that’s really all there is. Approaching parametric modeling in this way allows rapid iteration of a vast number of design possibilities, a feature which could potentially be of particular use for creatives such as interior designers, or furniture designers. And, of course, with Substance 3D Designer you’re able to spend as much time refining the materials of your project as you are on the shapes of your 3D objects.