How to create large-scale road network in Blender 2.8x


Assalamualaikum. Hi guys!

I just published my latest Blender 2.8X tutorial which covers the concept and the workflow of creating a road network suitable for large-scale 3D visualization. The techniques I explain in this tutorial can be extremely useful especially if you are doing a lot of massive-sized projects such as urban planning, site master plans, or perhaps you just need to create a scene from an aerial view perspective.

I hope this tutorial can be helpful. Happy Blending! Regards, Widhi Muttaqien

Video transcript:

Assalamualaikum. My name is Widhi Muttaqien from Expose Academy. Since the year 2003, I’ve been doing architectural visualization projects from clients across the globe. I’ve created thousands of images like these since then. On some of the projects, I was commissioned to create this kind of large scale aerial view renderings. If you need to create something like this or something at this scale, and you only have 3 to 4 days to finish it. You need to have the correct strategy. You can not use the same techniques that you usually used for close up shots. You also need to be very optimized with the polygon counts. Otherwise, it won’t render at all. So these are some of the key points you need to consider when doing massive scale rendering. The first one is “speed”. You need to find ways to create everything as fast as possible. Remember you only have several days to finish it, not months. Second is “simplification”. If the object you want to create won’t be visible in the final rendering, or it will be smaller than a single pixel, then just skip it. If you can replace multiple objects with a single texture then use the texture instead. The third is “instantiation”. You need to reuse and repeat the objects in your scene as much as you can using object instances. This will help significantly in terms of the memory requirement, production speed and also the time needed for the rendering. Fourth is the “level of aesthetic”. What I mean by this is that although you need to simplify and reuse a lot of things. And you also need to finish the project quickly. At the end of the day, your image must look pretty. But the way you approach this is different from small scale or man’s view level renderings. What looks good at 1 meter distance, not necessary looks good at 10 m distance. And what looks good at 10 m distance, not always look good viewed from 100 m distance.

So these are the basic concepts. At the practical level, there are so many things to discuss in detail in terms of aerial view or large scale rendering. For now, in this tutorial video, we’re going to focus only on creating the road network. The process is like this. First, we prepare the reference. Which basically involves importing the reference and then scale it to the correct size. Next, we create the road using the point to point technique and the skin modifier. Then use the mesh editing technique to fix the corners. Next, we create the curb or the sidewalk using the curve bevel method. Then we create the island using the same technique we used for the sidewalk. Then we use UV projection method instead of UV unwrapping for faster workflow and better flexibility. Finally, we add the materials and textures.

Now, I’ve discussed about adding image reference before in this YouTube channel. And also about using curve bevel technique in the crown molding tutorial. Please check them out if you haven’t done so. But I haven’t discussed about using the skin modifier. So, before we go through the process of creating the road. Let me first explain the basics of using the skin modifier to create a road network.

Skin modifier basics

Let’s delete all of the objects. Go to the top view. We’ll be editing a lot of vertices and edges so it is better to have the viewport background brighter. Let’s make the color value to 0.7. Next, let’s create a single vertex a the center of the world. You can do this using the official add-on called the “extra objects”. If you have this add-on enabled, when you press Shift + A you will see a new option called “single vertex” and then you can use this “add single vertex” option. Or you can just use a plane object, then go to the edit mode. Press X and then choose “edge collapse”. This will leave you a single vertex at the center. Now, you need to be in the vertex mode in order to see the vertices.

Next, let’s say you want to create the main road. You can hold Ctrl and then right-click on the location you want to add a new vertex. Just keep doing that until you create the path of the road. Next, let’s imagine there is an intersection here. You need to click to select this vertex. Then just like before, hold Ctrl then right-click here and so on to create the road path. Then for the other side. You need to re-select this vertex again. Hold Ctrl and keep right-clicking to create the path. As you can see you can quickly build a network of roads and intersections using this method. Now, just imagine that you have finished building all of the road paths. To add thickness to the road paths we can use the skin modifier. So go to the “modifier” panel. Then “add modifier”, then choose “skin”. We can see we just added some thickness to the road paths. Now to control the thickness or the width of the road. Make sure we are in the edit mode. Then either go to the wireframe mode or press Alt + Z to activate the X-Ray mode. For example, I want to control the thickness of this vertex. First select the vertex, then press Ctrl + A and then just move the mouse closer or further to change its thickness.

Now, when we press Ctrl + A, we actually change the vertex data called the “radius”. You can access them via the sidebar panel by pressing N on the keyboard. There are 2 types of the radius value. “Radius X” and “radius Y”. You might be wondering, why do we need 2 values here? Well, the reason for this, is that each of the values controls a different aspect of the thickness. The radius X value is used to control the thickness on the horizontal plane. So it’s equal to the X and Y axes. While the radius Y value is used to control the thickness on the vertical direction or equals to the Z-axis. So again, I repeat. Radius X is for the horizontal thickness. While the radius Y is for the vertical thickness. To show you this more clearly. If I select this vertex here and then change the radius X value, the thickness changes in the horizontal direction. If I change the radius Y value, the thickness changes only in the vertical direction.

Now, because we’re building roads, you might be thinking that you only need to control the radius X. Well, that is true, but not 100% correct. We still need to control the radius Y value. Let me just show you why. Let’s say we want to make the main road wider. We can select the vertices easily by first clicking on this one to select it. Then hold Ctrl and click on the vertex at this end. Blender will perform the “shortest path” selection operation for us. Because we have multiple vertices selected, now the radius X parameter is called the “mean radius X”. We can slide it to change the width. We can see how we can control the width of the selected roads easily using this technique. If for example, we want to control this road branch here. Click here. Hold Ctrl + click here. Then just drag the radius X value to make the road smaller or bigger. Okay so why should we care about the radius Y value then? Well, to actually see what this radius Y value does to the skin modifier, you need to turn on the wireframe overlay. If you are confused on how do I turn on the wireframe like that. You can open the viewport overlay option up here and find the wireframe checkbox down here. I map this option to a custom shortcut which is F5 in my computer. So every time I press F5, I toggle the wireframe visibility. Okay, now to see how this radius Y affects the skin modifier. If I select all of the vertices. And then drag the radius Y value back and forth. If I increase the value, the higher the value the fewer edges created by the skin modifier. But if I do this too far, we’ll start to see some overlapping. Now, if I drag this down, the overlaps are gone. But we start to get more and more edges that we actually don’t need. So basically you just need to find the balance. You need to get the least amount of edges created by the skin modifier but at the same time avoiding the overlaps to happen. Okay, so now, how can we flatten the roads then? Well, we will discuss this later while doing an example project.

Let’s go back to our workflow and let’s do an example project from start to finish creating a road network. Let’s start with the first process which is setting up the reference.

Setting up the reference

When you do architectural visualization projects, there are many different types of references that you may get from your clients. But the most common ones are these 3. First is in a form of Autocad files, second in form of SketchUp files, and third in a form of images. Now we won’t be covering the first 2 types of references, as each of them will require a dedicated tutorial. We will focus on the third type, which is images. If the project is at a very early stage where the design is not yet fixed. Big chance that you will only get images as references from your clients. Sometimes your clients draw the image on top of a google map screenshot like this one. Sometimes they draw it on top of existing Autocad files like this. Sometimes they just draw it from scratch. Let’s say you are given this image from the client.

Disclaimer. I didn’t create this image. I Google it and download it because I think the image suits well for our tutorial purpose. I tried opening the source site which is rwcspgh.org [https://www.rwcspgh.org/]. But the site seems does not exist anymore. Okay.

To place the image, first, make sure you are in the top view. Then just drag the image from your file browser to the viewport. Next, we need to change the size of this image reference so that it is perfectly scaled with 1 to 1 ratio, based on the measurement unit in Blender. There are several ways that we can do this. But the easiest way is like this. Let’s say we have the information from the client that the width of this road here is 17 m. We have 2-ways-traffic each with 2 lanes. Commonly the width of a single lane is between 2.5 to 3.5 meters. So if we have 3 m width lane, that is pretty average for a road. 3 m multiply by 2 lanes equals 6 meters. And we have another 6 m here. And finally, we have 5 m width for the island. So the road has a total of 17 m in width. Let’s just use this number as our base to scale the reference image.

To make the scaling process easier let’s reposition the image so that this area is at the center of the world where the 3D cursor is located by default. So press G and then move this so that the 3D cursor is exactly at the center of the road island. Next, we need to create a dummy object that has a diameter of 17 m. Let’s create a UV sphere for this purpose. And change the radius value to 17. Now, remember we need a diameter value, not radius. So type 17 divided by 2, then Enter. We can see we have 8.5 m as the result for the radius. And we now have a very large sphere compared to our initial reference image size. Select the image from the outliner. Now, before we scale this up, very important that you have the pivot point set to “3D cursor”, not the “median”. Okay. Then press S to scale this up. All the way. Until we have the UV sphere fills up the road. Now we can be assured that the distance between this point to this point is 17 m. We don’t need the sphere any more so we can delete it. Next, we need to apply the scale by pressing Ctrl + A and then choose “Scale” here. After we have the correct size, we don’t want this reference image to be accidentally moved or rotated or scaled. We can lock the transformations by going to the object panel. But before we lock all of these. We want to move the image on the Z-axis so it is below the ground plane. This is useful to avoid it from intersecting the road object later. We can input any minus value here, for example, -10. Then we can click and drag like this to lock all of the transformation parameters. Finally, to make the image less obvious. We can open the image properties panel. Turn on “use alpha” and then change the “transparency” value to “0.4”.

Creating the road

After we have the reference set up correctly. We can now move on to creating the road for our project. We will start by creating the road path in this area, vertex by vertex. We will be focusing only on this portion of the map. We’re not going to do the other areas because basically the process is similar. So let’s start by creating a single vertex. Make sure we are in the vertex mode. We want to move the initial vertex so it is located at the starting point of the road path. Press G and just move this here. Exactly at the center of the road. Then hold Ctrl and then right-click here. Then here. And then here. Then put one at the center of the intersection. Then here. The reason why I put the vertex here is because the corner curve of the intersection ends here. Okay. But don’t worry too much about this as you can readjust them later if you need to. This is not something set in stone. I’m speeding up the video now as there is no new technique to discuss. Just try to make an optimum number of vertices when creating the road path. Don’t create vertices that you don’t really need. So basically if you have a straight road for example, you can just create it with only 2 vertices.

Now for this one. Because this is a straight road, I need to explain how I usually approach this situation. We can select the vertex at the intersection. Hold Ctrl and right-click here. This first initial line will make sure that the road is straight. Now to create a new vertex here at the intersection we can do a subdivide command, but I prefer to use the Ctrl + R shortcut as it is just faster to perform. Then to slide the vertex along the existing edge we can press Shift + V or just press G twice. You can see how the vertex snaps to the existing edges. Move this to the intersection point. I also want to show you another method for creating a perfect 90-degree turn. Ctrl and right-click here. Then here. If you don’t get them correctly at the first try, you can always adjust them later afterward. Then select this vertex. We want to do a vertex bevel. Press Ctrl + Shift + B and just move the mouse further. Scroll the mouse so we have at least 2 vertices at the turning curve. Next, we also need to put vertices at this point here, and here and then here. I’ll be using the same Ctrl + R method and vertex sliding method like before.

After we are done creating the road paths, we can then add the skin modifier. Press A to select all of the vertices. Then press N to open the sidebar panel. For the starting road width, we already know that this main road width is 17 m or 8.5 m radius. So let’s start with that number. Click-drag like so to select both of the input fields. Then type 8.5, then Enter. To be able to see this clearly, we can press Alt + Z to turn on the X-Ray view mode. And then I’m using my custom shortcut F5 to turn on the wireframe. As you see we have the road color almost identical with the background color. I think it is better to have a flat color for now and set the color to be based on the “object” color. To change the object color we need to go to the object properties panel. In the “viewport display” section you will see the object color. Change this to something contrast like blue for example. This way we can see and edit the road object better.

Let’s start with this small road here. I forgot to add a vertex here. So let’s fix this first, Ctrl + R to add a vertex. Then press G, G, to slide the vertex. Select the vertices. Then slide the radius X value so that the width matches the reference. Then let’s select these vertices. Slide the radius X value again so they match the reference image. I’m speeding up the video now as the process is fairly identical. Okay. Next, to tidy up the edges we need to find the best radius Y values for all the vertices at once. So press A to select all. And slide the radius Y to find the best value for our current roads. I think I go with 7 meters for now. And let’s tweak the vertices around this intersection so we have better topology. You can freely fix any vertices location at this stage. Next, let’s select the vertex at the roundabout area. And change the radius X value. Try to find a quad structure that has the corners touching the outer circular border. I don’t think we can find the polygon shape that we need in this current case. If you stumble upon this situation, don’t feel bad. Because we can fix this later easily in the mesh editing process. But, I think I need to fix this vertex radius a little bit. Okay.

If we rotate the view, we can see we have a thick or tall road like this. Turn off the X-Ray mode. Now this geometry is all generated by the skin modifier. So to be able to edit this road as a regular mesh, we need to apply the skin modifier first. We need to be in the object mode. Then hit “apply” here. Then go to the edit mode. Select all and then press S to scale, then Z to use the Z-axis as the constraint. And then press zero to flatten it down. Next, we need to select only the faces that are facing up. To do that, select one of these faces. To select the other faces that are facing up, you can do this in 3 different ways. Again for this to work, you need to have at least 1 face selected first. The first 2 methods are by pressing Shift + G and then either click this “normal” option here or the “co-planar” option here. Or, the third method is by going to the “select” menu, “select linked”, and then “linked flat faces”. Now that the faces that are facing up are all selected. We can delete the other faces by first inverting the selection. So press Ctrl + I. Then press X and then choose “faces”. Now we have clean flat faces on the road object.

The next thing that we’re going to do is fixing the corner details. Now, this process is tentative, depending on how close your camera to the subject and how detailed you want to create the road. You can skip this whole detailing process if you want to. The process is very simple. Let’s say you want this line to curve. Basically, you can add more loop cuts using the Ctrl + R shortcut. You can scroll to add more loop cuts. Then just use the tweak tool to fix the new vertices locations. The process is basically the same for the rest of the corners, so I’m speeding up the video now.

At the roundabout area, we need to use a different approach. First, deselect all faces. Then press C to activate the circle select mode. Select all of the center faces. Then press F. This will generate a large N-Gon to replace all of the previous faces. Then just use the tweak tool to reposition the vertices so they match closely to the reference image. Finally, to make all of the faces quads in the road object. We can select this vertex, then hold Shift, and then this vertex, then this vertex, and then this one in the correct order. Then press J. You can add more details using the same technique. For example, if you want to make this line more curved. Just press Ctrl + R and add a loop cut. And just tweak the new vertices as needed. You can keep adding details as you want, but for now, I consider this done. Let’s move on to adding the curb or the sidewalk.

Adding the curb/sidewalk

To create the curb, make sure we are in the edge mode. Select one of the outer edges. Then Shift + G and then choose the “amount of faces around the edge” option. This will select all of the outer edges for us. Next, we need to duplicate them and then separate them as an independent object. So Shift + D to duplicate, right-click to cancel the movement. And then press P and choose “selection” here to separate it from this object and create a new independent object. Now we have the original “plane” and “plane.001”. Let’s hide the original plane object and let’s rename it to “road”. Then rename this one to “sidewalk” or maybe just “curb” as this is shorter. Go back to the object mode and select the “curb” object. Go to the edit mode and select all of the edges at the center of the road. These edges are not supposed to be there if we have the complete road network. So let’s remove them. Go back to object mode and convert this object into a curve object. To do that we can go to the “object” menu. Choose “convert to” and then choose “curve”. Now this object is a curve. We can see this by its icon in the outliner.

Next, we need to create the bevel profile for the curb and the sidewalk. For the curb, we want it to have 20 cm height above the road surface. To do this we can start by creating a plane object. Change the size to 20 cm. Then press the dot symbol on the Numpad to zoom extent the plane object. So this is the 20 cm square plane object which is quite small compared to the overall scene. Go to the edit mode, press X and then choose edge collapse. We now have a single vertex here. Make sure we are in the vertex mode. Hold Ctrl and right-click in here. Then here. About 20 cm from the first vertex location. Then to make it straight we can press E to extrude and then press X to constrain it to the X-axis and just move it to about this position. And then add more vertices. From this point, we want to create a sidewalk to the left for 2 meters. To do that we can press E than X then minus 2 then Enter. So this is the profile for the curb and or the sidewalk. From the starting vertex which is located at the object’s origin. Then going up to form the curb, then going to the left to create the sidewalk. Now for the sidewalk. To make it easier when we later need to select the mesh for the material assignment. We can split or rip this vertex. To do that you can press V and then press X to constrain it to the x-axis. Move it to about this location. One thing that I need to stress out is the local axis of the profile object. To make things easier, just create the profile from the top view, not the front or the side view. The reason why it is better to create from the top view is because the local coordinate of the object will have the Z-axis perpendicular with the profile plane. This is one of the prerequisites of creating a bevel profile. Okay. Next, we need to convert this object into a curve also. Make sure you are in the object mode. Go to the “object” menu, “Convert to” then “curve”. And let’s rename this object to “curb.profile”. Select the curb object. Go to the “object” panel. Oops sorry, I mean the “curve data” panel. In the “geometry” section, in the “bevel” sub-section, we need to pick the profile object as the bevel profile. We can do this by clicking here to open the list and then select our “curb.profile” object. Now we have something like this. Just check whether we have any flipped profile. If you do see any flipped profile, you can fix it by switching the segment direction. I already explain this in my previous tutorial about how to create a crown molding. So please go check that out for more details. Then we can also turn on the face orientation overlay. I set a custom shortcut for this on my computer which is F6. We can see they are all red. From the bottom, they all look blue. This is not right. The upper areas that will be visible in the rendering are the ones that should be blue. Let’s turn off the face orientation overlay. To fix this, select the curb profile. Press 7 and then dot in the Numpad. Then press Tab to go to the edit mode. Make sure everything is selected. In the “segments” menu, choose “switch direction”. Now we can see the curve direction is now this way. Go back to the object mode. And activate the face orientation overlay again, from the top view it should be blue. And from the bottom view, it should be red. So everything looks good now. We can unhide the road object now to check it’s face orientation also, just to be safe. Yup, the road also has a correct normal direction. Now we can turn off the face orientation overlay again. And turn off the flat shading mode by switching it to MatCap and use the “material” option instead for the color.

Next, depending on the project or the zone you are working on. You might want to fill in grass areas after the sidewalks. We can do that easily using the mesh editing technique. So select the curb object again. Convert this back to a mesh object by going to the “object” menu, “convert to”, then choose “mesh”. Go to the edit mode. Hold Alt and then click on any of these edges. This will select the edges at the inner side border. Then press F. So now we have an N-Gon like this. If you want to add a vertex in here. We can use the Ctrl + R shortcut. Then just use the tweak tool to move the vertex to this position. You can see how easy it is to create grass areas using this method. Another example. Hold Alt and click here. Then F. Then Ctrl + R. And move the vertex here. For this one, we don’t need to add any vertex. This one also. And this one also. Alt + click here. Then F. Then Ctrl + R. And just tweak it. Just do the same thing with the last one. So until now, we have something like this.

Creating the road islands

The next thing we’re going to create are the islands. Basically, for the islands, we will use the same techniques as the road but then finish up with the technique used for the sidewalk. Let’s go to the top view. And hide the road and the curb objects for now so they don’t get in the way. To create the island which basically these areas at the center of the road. We need to separate the creation process between this lane island and the roundabout island. Because this is basically a circle, it will easier to just create it from a circle. So let’s start by creating a plane object. And then convert it into a single vertex just like before. Press G and move this to the left-most island. And create a network of edges and vertices like before following the island shape. Now at this stage, you should just continue the path to the next island without cutting it. The reason for this is because the skin modifier will not work on separate mesh elements. Well, unless you set each of the starting vertices at the gap as a root node. But I find it is just faster to create a continuous path and fix the gap later during the mesh editing. Okay. Another example is at the roundabout. Don’t cut the path. Just continue creating it to the next island across the roundabout. Let’s just stop here.

Next, let’s add a skin modifier. And let’s input 7 first for the radius Y value. And for the radius X. Press Alt + Z to turn on the X-Ray mode. We know from before that the center island is 5 meters, so let’s input 2.5 m here for the radius. For the last 2 vertices, they get smaller at the end so select them both and find the radius x value that matches the reference. Let’s round this value to 1.25 m. Let’s do a double-check if we need further tweaking. I think we’re good now. Let’s apply the modifier by going to the object mode first. Then apply here. Next press Alt + Z to turn off the X-Ray mode. Previously, when we created the road, we flatten the mesh. For now, let’s try a different approach. Go to the face mode and select any of the top faces. Press Shift + G and then choose “Co-planar” here. Ctrl + I to invert the selection. And then X and choose faces. Select all and move all of these to the ground plane by inputting 0 in the z-axis coordinate.

Next, let’s go back to the top view. We want to fix the gaps on the islands. Basically, it is just erasing faces and tweaking vertices, so I’m speeding up the video now. I’m adding bevels on the corners and also adding loop cuts to create curved shapes on the islands. Okay. The island along the lane is finished. What we need to do now is to create the circular one. Go back to the object mode. Create a circle. Move the circle to the roundabout location. Change the pivot point back to “median”. And scale it and just adjust it as needed. Personally, I don’t think the sketch in the reference image is 100% correct or accurate. You can see that these roads in these areas are wide, but when we get to this point it becomes very narrow. This type of mistake happens a lot during the design development phase. So you just need to understand them and find workarounds for them. For now, let’s just assume that the reference image is correct. Okay. Next, select the lane island object and go to the edit mode. Select one of the outer edges. Shift + G and choose “amount of faces around an edge”. This will select all of the outer border edges. We need these edges and we actually want to remove the other edges. So press Ctrl + I, then press X and then choose “edges” here. Now we have something like this. We have the border edges without any faces. Next, we need to join the circle object with this island object. So go to the object mode. Select the circle and then hold Shift and select the main island object. If you have a hard time selecting an object, sometimes it helps to hide the reference image first. Okay so after we have the two objects selected, press Ctrl + J to join them as one object. We can rename this object to “island”.

To finish up the island, we’re going to use the bevel profile method again. But we will need a different profile, because the island doesn’t have any sidewalk. We can just copy the curb profile and make changes to it as needed. So select the curb profile object. Press dot to zoom extent. Then press Shift + D, then X to duplicate it. Go to the edit mode. Select this point and then press G, then X, and move it to about this location. And the profile is done. Go to object mode and rename this object to “island.profile”. Now, we can select the island object again. Convert it into a curve. Then in the curve data panel. In the bevel section, choose the “island.profile” as the profile. So now we have the curb for the island finished. But notice that the circle area is actually flipped. We can see this outer area is darker. But in the circle path, the dark faces are inward. Let me show you this in the perspective view. We can see this one is going up like this then flat. But this one is flipped. It is facing inward instead of outward. So I guess this is a good chance to show you how to fix a flipped bevel profile like this. You can use this method also to fix the curb at the road sidewalk if they are flipped. So to fix this, select the island object. Remember this is still a curve object. Press Tab to go to the edit mode. Select any of the points in the circle path. Then go to the “segments” menu or you can also use the right-click menu, then find this command “switch direction”. As we can see the profile is now facing the correct direction. After you are sure that there is no more flipping profile problem in the object. We can then move on to convert the object back to a mesh object. Then go to the edit mode. Hold Alt and click on the inner edge border. Then press F to fill it with an N-Gon face. Just do this for the rest of the islands. Okay. We now have all of the objects for the road network finished.

Adding UV projection

Let’s move on to the next phase which is adding UV projection. Before we can add or see the textures correctly on our road objects, we need UV maps. Normally you would do this via UV mapping techniques such as UV unwrapping. But just imagine you have dozens or even hundreds of roads in your scene. You just don’t have time to UV unwrap them. What I usually do is just to project the texture vertically using the UV project modifier. Because at large scale rendering you won’t be able to see the textures at the side faces anyway. Also by using the UV project modifier you can later scale, move and rotate the texture easily. And also you can make changes to the model in case of revision without having to worry about destroying the UV map. Now, the UV project modifier will not generate a UV map channel automatically for us. So we need to create them manually for each of the objects. To show you how it is done. Let’s select the road object first. In the mesh “data” tab. In the “UV Maps” section. Click this plus button here. This will create a UV map channel for the object. Then go to the modifier panel. And then add a “UV project” modifier. Essentially the UV project modifier will project a texture using another object as the reference for the projection direction. It will use that object’s local negative z-axis as the projection direction. We can pick the reference object using this list here. So let’s create an empty object for this purpose. Choose the arrow type so we can see the local axes of the object better. Currently, it is too small for us to see at this level. Let’s change the size value to 10 m. Now we can see it. Let’s move this up a bit. Later we can manipulate the transformation of this empty object to transform the textures. So select the road object again. Open the modifier panel. And choose the empty object. I think we need to rename this object to make things more organized. Let’s just name this “UV project”.

Next, we need to do the same thing to the curb and the island objects. I’ll speed up the video now as there are no new things to discuss. Okay. So now the UV maps of these 3 objects are controlled by this empty object.

Adding the textures

Let’s move on to the next phase which is adding the textures. As you probably already know. We need material to be able to use textures. So select the road object. Go to the material panel. Create a new material. Let’s rename this material to “road”. Then, we don’t want any glossy effects on this material. So set the roughness value all the way to one. Then for the base color, we can override the color with image texture. Click the open button here. And choose an asphalt texture that you have. I already downloaded some of these textures off the record. Most of them are free textures that you can download yourselves from “textures.com”. Okay. Now to see the texture in the viewport we need to be on either the “material preview” mode or “rendered” mode. Let’s activate the “material preview” mode or also known as “LookDev” mode before. If you zoom in close enough you can see the texture already.

We’re going to do a lot of node editing now. So let’s use the provided “shading” workspace here. At this stage, you need to understand that the empty object is already controlling the texture or the UV of the road object. You don’t any additional nodes. You can simply select the empty object. And if for example, you scale it up. You can see how it affects the asphalt texture size. This is cool. But this empty object will affect the UV of all objects connected to it. Sometimes you just want to control each of the texture individually. If that is the case, then you need to have additional “mapping” and “texture coordinate” nodes in the material. So press Shift + A and search for the “mapping” node. Plug this vector output to the vector input in the image texture node. Shift + A again and search for the “texture coordinate” node. Then plug the UV output to the vector input in the mapping node.

To scale the texture we can use these scale-X and scale-Y values. Let’s say we want to change them to 0.2 for example. We can see the texture becomes larger. So the bigger the scale number, the smaller the texture size will be. And the smaller the scale value, the larger the texture size will be. Okay. Next to add the material for the other parts of the road. Let’s first select these 3 nodes. And then press Ctrl + C to copy them to the memory. Select the curb object. For this object, we need to create 3 materials. So create 3 material slots here. Let me resize the UI so we have more room for the materials. In the first slot let’s create a new material for the grass. Rename it to “grass”. Set the roughness value to 1. Paste the 3 nodes we copied before. Plug the “color” output to the “base color” input. Change the image file from the asphalt to the grass texture. I think we need to change the scale value down a bit to get a bigger texture size. Select the X and Y scale values. And type in 0.05. Hmm, I think the texture becomes too big now. Let’s try at 0.1. Okay, I like this one. Next, create a new material for the sidewalk. And rename it to “sidewalk”. I actually want this material to be a bit glossy so let’s just leave the roughness value to the default for now. Then just like before, Ctrl + V here to paste the 3 nodes. You can create these 3 nodes quickly also using the node wrangler add-on if you want to. Link these up. Then change the image to this one. Then we need to select the faces at the sidewalk to assign the second material slot. I prefer to do this in the layout workspace as the viewport is just wider. Go to the edit mode. Hold Alt and click on this edge. Then Shift and Alt and click on this edge. Then this edge. And so on. Until all of the sidewalk faces are selected. Next, make sure you have the sidewalk material slot active. Then hit this assign button. The last one is the curb material. Rename it to “curb”. And change the roughness value all the way to 1. Make sure nothing is selected. Hover the mouse on top of this curb and then press L on the keyboard. Then hover on this curb and then press L again. Just repeat the process. After that, we can assign the curb material slot. And just continue the same process for the other curbs. Currently, it doesn’t show any texture because we haven’t assigned any. Let’s go back to the shading workspace. Select the sidewalk material for now and select the 3 nodes, and copy them. Go back to the curb material and paste them in. Link these up. And change the image to this one. Now, I think the sidewalk texture is too big. To make it smaller we need to increase the scale value. Let’s try at 0.5. Nope too big. Let’s try at 0.4 now. Okay, I think it looks better now.

The last one is the island object. For this object, we only need 2 material slots. For the first one, we’re going to reuse the existing “grass” material. And for the second one, we’re going to use the existing “curb” material. To assign the curb material, we need to select the curb faces first. So go back to the layout workspace. Go to the edit mode. Select this face here. Hold Shift and select this face and so on. Ctrl + plus to grow the selection. Then Ctrl + I to invert the selection. Make sure the curb material slot is active. Then click the assign button. And that’s it. We’re done. Again, the beauty of this UV projection method is that we can make changes globally on the textures just by tweaking the transformation of the empty object. You can scale it like before. Or move this around like so. Or you can rotate it on the Z-axis like so. You can also adjust or tweak the vertices on any of the objects in case of revision, and the UV mapping will not break.