@Tristan: I studied computergrafics for 5 years. I'm making 3D art now since about half a year fulltime, but I had some experience before that. Its hard to focus on one thing, it took me half a year to understand most of the vegetation creation pipelines. For speeding up your workflow maybe spend a bit time with the megascans library. Making 3D vegetation starts from going outside for photoscanns to profiling your assets. Start with one thing and master this. @Maxime: The difference between my technique and Z-passing on distant objects is quiet the same. (- the higher vertex count) I would start using this at about 10-15m+. In this inner radius you are using (mostly high) cascaded shadows, the less the shader complexety in this areas, the less the shader instructions. When I started this project, the polycount was a bit to high. Now I found the best balance between a "lowpoly" mesh and the less possible overdraw. The conclusion of this technique is easily using a slightly higher vertex count on the mesh for reducing the quad overdraw and shader complexity. In matters visual quality a "high poly" plant will allways look better than a blade of grass on a plane.
Is this not like gear VR or anything else
Ales Rajar talked about the way he uses scanned assets to quickly build large realistic environments.
Hi, my name is Ales Rajar and I come from Slovenia. I always knew I wanted to make video games, ever since I was a little boy. After finishing high school, a degree in computer science seemed like an obvious choice that would bring me closer to this profession. But even before I graduated, I knew I liked working on graphics more then I liked programming. So, after graduating I worked as an architectural visualizations developer for some time, but then soon found my way into games industry through a couple of smaller companies. I ended up at Zootfly where I did level design, some modeling and level art, as well as scripting. It was a very informative experience and it broadened my horizons immensely. The people were amazing, too. During my time there I worked on games such as Prison Break the Conspiracy, Expendables 2 The Game and some others.
After 5 years at Zootfly I got hired by Ubisoft Montreal to work on Assassin’s Creed Black Flag. I was in charge of designing Nassau, one of the three major cities in the game. Working on an AC title is a completely different beast. There are so many different metrics to respect. We have all that climbing, free-running, stealth… Putting together a level is like solving an intricate puzzle where at least 5 different aspects of game play and aesthetics must work together in an optimal way. I love it! 🙂 After finishing Black Flag I moved on within the studio to start an unannounced project that I’m still working on today.
It started last year during our vacation in Croatia. We were sailing along a coast, I noticed these interesting rock formations and I took out my camera and started taking pictures in regular intervals. I didn’t think I’ll be able to get anything useful from it because of the waves. I thought the whole thing was going to be too noisy and random for Photoscan. But it managed to do a pretty good job and I ended up with a solid foundation for some interesting shapes. I decided to try to capture the general feel of that coast, with these cliffs as a centerpiece.
Some of the source photos used in Photoscan
The result I got from Photoscan was one long, more or less flat surface with little depth. I took it to Zbrush. Looking at the shapes, I first cut it into multiple pieces.
One of the meshes generated in Photoscan
After cutting the surface I had to add the sides and some depth to each module. I also had to add the underwater part. I extruded the outer edge backwards (and down) and then sculpted the extruded surface to blend with the front side. I used some custom alphas grabbed from the front to make it look more consistent, but I also had to do a lot of manual sculpting. I mostly used clay tubes brush and polish brushes for that. At the same time I got rid of all the shrubs and small trees by resculpting them and blending them with the rest of the rock.
Cutting a section into modules in Zbrush
Then I manually added some details, deepened some cracks so they would pop better on normal map, sharpened some edges, etc.
When I had these main pieces done, I was able to start blocking out my basic layout. This helped me to spot problems in modularity of the assets and I went back to Zbrush several times to fix them. It also showed me what kind of shapes I still needed to add to make the layout more interesting and to break up some repetition. At this point I decided I needed two more rocks which I sculpted from scratch, trying to mimic features from the scanned pieces.
When the assets were locked down, I did the final decimation in Zbrush and then cleaned the models and did some further manual optimization in Maya. I unwrapped them and then baked all the maps in Substance Painter. I managed to squeeze two cliff modules into one 4k texture layout. I closed back sides to prevent lighting issues. I did this by duplicating front sides, reducing the polycount and merging them to the back. This way the modules are theoretically usable from both sides if there’s a need for that.
Adding depth in Zbrush
I used Painter to do the textures as well. It is an amazing tool, it speeds up the process so much.
For albedo map I imported the textures generated in Photoscan. They served as a solid foundation, but because of all the resculpting and added geometry, they were incomplete and full of holes. I patched them up manually and I also de-lighted them by painting out the shadows and toning down some strong highlights. I added some more micro details to the normal map as well.
De-lighting, fixing and adding detail to base albedo map in Painter
Roughness is handled by tileable detail materials that I overlaid over the base material in Unreal.
Materials are not very complicated. Like I mentioned, I made the base material with albedo, normal and AO maps and then overlaid it with two tileable detail materials from Substance Share that I modified heavily in Substance Designer. I generated some masks in Painter to determine which detail material goes where. I set up these materials so that the user has full control over their opacity, normal strength, and tiling. They keep their scale regardless of their parent object’s scale. This makes the rocks much more versatile as they can be scaled and still look consistent.
I took the photos of the ground on a neighbouring island. I ran them through Photoscan and chose a nice patch without too many prominent features so it would tile better. I took the resulting albedo and height maps to Designer where I used them to generate the remaining maps: normal, ambient occlusion and roughness. I played around with sharpen filter and I used an aptly named node MakeItTile to make the resulting materials tile.
I wanted to use Speedtree, but I don’t have the access at the moment, so I made all the vegetation in Maya with the help of a nice script, geometry instancer called spPaint3d. It’s available for free on highend3d.com. I modeled the branches and the leaves, then used this tool to spread the leaves over the branches. I baked several of these high poly branches to planes and then used those to assemble the shrubs. The same with the grass, I modeled high poly version and baked it down to planes, then used them to make low poly grass clumps.
Because I wasn’t using Speedtree I had to paint the vertices manually to make it all move in the wind.
In Unreal I made a few instances of foliage material for each piece to have some hue variation. Then I painted the foliage around the terrain using the foliage tool. I left out an area around that small bay where the sun chair is. I placed all the foliage there by hand to have more control over the composition.
Detail materials in Unreal – disabled
Detail materials in Unreal – set to high intensity and opacity
The darker section above the water is present on the real cliffs, so it got captured with photogrammetry process. I extended it onto newly added underwater part and darkened it a little to add some contrast. So, whenever I used the cliffs on dry land I lowered them slightly so that this bottom part is hidden under the terrain.
When cutting the original surfaces in Zbrush, I took care to do it in a way that would later allow me to combine the pieces together seamlessly and in a random order. I decided to cut them in diagonal lines rather than vertical to hide the seams more organically. I also made the cuts follow natural features to hide the seams even more. I tried to make the shapes of the cuts very similar to each other so I could combine the modules in any order. The downside of diagonal cuts, however, is that the modules don’t match when you flip some of them horizontally. To fix that I sculpted a special medium sized rock with which I was able to hide those gaps.
Also, I tried to block out my basic layout even before the pieces were finished so I could see what needed to be changed in order for everything to work well together.
Putting the scene together
There’s really nothing too special about the way I put the scene together. First I placed in my cliffs and medium rocks and played around with the layout. I kept the terrain very basic until I decided the rocks are forming a nice composition. Then I sculpted the terrain around them, blending the two, trying to do it in a way natural forces would shape it over time. In the end I added small rocks and vegetation.
The thing I learned from this exercise is that the sooner you test your pieces in engine the better. You get a better feel of scale, proportions, resolution needed, potential modularity problems, etc. So you can go back and fix them in early stages, when changes are still relatively inexpensive.
Ales Rajar, Senior Level Designer at Ubisoft Montreal
Interview conducted by Kirill Tokarev.