Frank Slater, the creator of the tool Path Painter that allows to easily create paths and shape terrains in Unity, talked about its development, features, integration with Procedural Worlds tools, and more. He also shared a few videos that show the tool in action and might help you to learn it. Path Painter has been deservedly included in the Best of 2018 selection by Unity.
I was 8 years old when it all started after we got our first Commodore. My brother's and my absolute favorite game was Elite. I bumped into a book that came with the computer. I believe it was a sort of reference book for the BASIC language, but I can't be sure because it was written in a foreign language. That didn't stop me and soon I was making games and from that point, my hobbies revolved around it. Back then, being a kid from a small town meant that I didn’t have any opportunities to connect with other like-minded people and I didn’t have a way to get the games out in the world for others to enjoy.
I always liked creative activities and enjoyed coming up with things. I had my inventions and I was one of the kids good at drawing in my school. Later, I turned to CG. I have done all sorts of 2D (raster, vector) and 3D graphics. First 3D Studio Max R1, later Maya, then Blender. I also chose my university program (Software Architecture & Design + Engineering) according to my young age goals: to publish my own games one day.
Things were going pretty well, but a family tragedy took me off the path for most of the next 14 years.
The road got a little bumpy, but I jumped back into the hobby whenever I could catch my breath. For example, in 2010, I was able to spend some free time on building an experimental 3D game engine using C++ and OpenGL, but I was rudely interrupted by the recession. The little company I was working for was hit hard, and one day to the other it was gone.
Later, while working for one of the world's top tech giants, I came up with systems that addressed the biggest hurdles and risks of my department. Unable to fit the construction into the relevant devs’ schedule, I ended up learning new tech and building them myself in my free time. The systems saved millions of dollars for the company and I won an award.
A weird year was ahead, filled with visitors from overseas offices acting like I’m some sort of a movie star. I didn’t know what to do with the situation really.
How Path Painter Was Born
A couple of years later, when a new position changed direction on me and turned into something that would move me further from my goals rather than closer to them, I thought I'd better stepped back and took a look where I was heading. I realized I wasn't getting any younger and I could be missing my window. I assessed the risks and took the plunge.
I chose to start with Unity due to the community I was seeing around it (even though C++ is close to my heart and I knew nothing about C#). I completed a fun little game and enrolled in a course. While getting busy with Unity, I bumped into difficulties, and that's when I came up with the idea of Path Painter. Path Painter opened new opportunities and I got to know a lot of great people. I got to collaborate and work on cool projects thanks to it.
I love to see the amazing things people do with Path Painter and I’m looking forward to seeing more.
What makes game development interesting to me? I think from an early age (perhaps thanks to Elite) I have very passionate feelings about creating amazing worlds. I believe we need the kind of games that have a positive influence on people’s lives and our future. I'm passionate about creating things that inspire people to think of humanity as a whole and work towards a better future for mankind. I wish I could do as much as some great entrepreneurs of our era do.
Development of Path Painter
Path Painter is a tool made for artists and non-artists for simple path creation and shaping in Unity. Paths, riverbeds, ramps, lakebeds, and other things can simply be painted on the terrain similar to how a painter paints on a canvas. Brushstrokes can be easily adjusted to the user's liking immediately after painting them on.
Its origin goes back to when I started learning Unity and picked up a GameDev.tv course. For those unfamiliar with GameDev.tv, it may be the best place to start learning game development. They have great courses, world-class instructors, and an amazing community. I’m grateful for all the helpful feedback and support of teaching assistants, admins, moderators, and community members - people like Irresistible Jelly (Marc), ninjachimp (James), Rob, elqlippoth, G-Wolf, Raistael, Grutusk, JohnnyDalvi. I owe a big thanks to Rick (Davidson), who has been very encouraging, and of course to Ben (Tristem) and the whole team for their great work that in a way inspired the creation of Path Painter.
I was halfway through my first Gamedev.tv course, working on a project called Zombie Runner. I wanted to add pathways to an island and found the task extremely difficult (especially ramps), so naturally, I turned to Google. I searched for a long time but didn't find anything close to what I needed. There was one asset that could possibly be used for what I wanted, but it was really for something different, and it seemed like I would just make my life difficult if I was going to use that.
I had a picture in my mind about the ideal tool for me, and since it seemed very challenging, I started working on it to see if it was even possible. Since I couldn't prove it to be impossible, I kept going and eventually, after months of hard work, I had a working prototype.
What's technically at the core is difficult to answer, because I didn't look for existing concepts or solutions to solve the big challenges. I wanted to come up with it on my own. There was a lot of time spent thinking and R&D to create what's at the heart of the tool. I don't think I came up with anything new, but I don't have any terms to name the core elements either.
For the work to hook things up with Unity, I looked at Unity scripting references. There were some things (mostly UI stuff) for which no helpful documentation was available. For those, I did a lot of trial and error and/or looked for tips wherever I could, including digging into the available Unity source code.
I had a vision of how I wanted it to work. I guess sticking to that as much as I could was what helped me explore the direction. And Unity, of course.
Integration with Procedural Worlds Tools
When I had a working Path Painter prototype, I realized it could help a lot of people, but I didn't know how to go about it.
I was thinking it would be nice to release it for free, but I was concerned about how I was going to be able to make sure that the users are happy in the long run. I didn't want to put something out there that got outdated/abandoned quickly, and there was also a lot more work to be done if Path Painter was to be released.
I was pretty sure I needed to keep going with Path Painter, but I wasn't sure if at the same time I was going to be able to be there for the users and promote the tool. My number one priority was users being looked after and being happy in the long run, so when Adam brought up the idea of Procedural Worlds taking care of first-line support and marketing, I was presented with the solution. Procedural World's support is great and there is more than one company to look after Path Painter, so it will not become orphaned.
Path Painter being a sibling to Procedural Worlds products is great, because these products can be integrated and complement each other. For example, I worked on integrating Gaia, GeNa, and CTS with SECTR, and integration with other PW tools has been on our minds from the beginning. For example, an integration with Gaia would be to auto-generate pathways between farms and other points of interest when spawning. In fact, last year I created a proof of concept for this. Here are examples of auto-generated paths between 2 points:
The recently added API (v1.2+) allows people to use Path Painter with other tools (e.g. splines tools) and do a lot more with it. For example, in the API examples of the documentation, I provided a simple script to paint paths using Pegasus splines. I actually uploaded a WebGL build of the simple project that was built in all supported Unity version (5.6+) as part of testing - you can check it out here. In this "game", you use a Pegasus track to paint a path.
How It Works
The concept of the Painter is to have a more artist-centric, simple tool. It's akin to painting on a piece of canvas.
I recently worked on a video that provides a quick overview of how Path Painter works:
One of the big challenges currently is that Path Painter is sort of pushing the limits of what's possible, and now with Unity updates, we entered a more multi-tile terrain focused era. Multi-tile support is very simple without some of the features that make Path Painter unique and special, but it’s a tough nut to crack with Path Painter. I have already done some major heart surgery with many thousands of lines of code changes in dozens of files.
I found that most of the time, I use the Smooth curve unless I need a specific look. The weird thing about Path Painter is that compared to how simple it is, you can do so much with it in many different ways. You get surprised even after months of use as you get a new idea and create something interesting. I've used Path Painter for different things at different stages of scene creation.
The one setting that can be a little more difficult to wrap your head around is Smart Paint mode for texturing. It helps the user easily connect paths of the same type without painting embankment textures over them. In rare cases, it may seem, however, that texture painting is not working well due to it (when painting over areas where the selected path texture is at full effect). So that's one thing you want to keep in mind when texture painting doesn't seem to work as expected: try turning off Smart Paint for the area (as the tooltip should tell you as well).
Getting a Grasp of the Tool
I recommend at least skimming through the documentation (it's included in the package plus you can also check the Quick Start Guide here). There are many images that explain things or give you tips.
For example, these are the images that explain the different embankment curves:
But you can find other tips with instructions as well. Like this one that shows how you can add to a ramp using edit mode (shift):
After that, I would recommend creating a scene where you do all the shaping of the terrain with Path Painter just for fun (start on lower terrain resolutions for the bigger things like mountains, and scale your terrain maps as you work your way towards more detail. This workflow is one of the powerful uses of the built-in MapScaler). You may have a few of your own tricks up your sleeves by the time you are done.
Before first use, I also recommend playing with it on a sandbox terrain a little. It will take only a few minutes to test what each setting does and you will have a much better idea of how the tool works at the end.
Path Painter Full Potential
There are probably a ton of things I didn't discover myself yet, especially because I had very limited time for Path Painter since its release. It's a bit like if we could ask Nicolas-Jacques Conte (inventor of the modern pencil) to predict what things people are going to be able to do with it (I'm not saying Path Painter is anywhere the same significance as the pencil though). Conte probably would have never imagined the amazing things people have done with it over the years. For example, 3D drawing (worth a Google image search).
The Path Painter documentation contains some tricks. For example, it explains terracing you can do with Path Painter:
I also made a few videos and salvaged old ones to give you a few examples.
Here is a riverbed shaping process example:
And the same for paths:
You also might want to build up your paths, riverbeds, and other things in multiple sections (with different settings):
Sinespace creators build their scenes in Unity and that's where Path Painter can come handy. Anything outputted to a terrain in Unity will work in Sinespace. Adam Frisby is open to make Path Painter work (runtime) in Sinespace, but this isn't something we have seriously discussed yet. It’s something that may or may not make sense in the future.
Overall, you can do pretty big things with Path Painter.
For example, you can use the terracing effect on steroids to cut into the side of mountains to create huge play areas. The one in this video could be a big walled courtyard of an Ironforge like mountain city:
The documentation also shows the first steps of the creation of mountain ridges you can easily paint:
Even better: with the built-in map scalers you can just start on lower resolutions to create big shapes and work down towards more details while increasing the terrain map resolutions.
Once you are familiar with Path Painter, you would probably also do more things like prepping the terrain, like in these videos:
Here is another valley video where it was done somewhat differently:
When you use Path Painter, try to think of yourself more like a painter in front of canvas rather than a developer. It would be generally fairly rare that you paint a path or something else with a single stroke, and that's actually the power of it. This way you can create some very interesting looking things easily. However, it's also the reason why solutions for requests like making paths permanently editable (and not just adjustable right after creation) are not at all straightforward. For example, I have created riverbeds or lakes with dozens of overlapping brush strokes, and I would have no idea what I’m doing if I tried to edit those strokes. It would be a mess to deal with from the user’s perspective, and it could be more difficult than what painters do when they want to change part of their paintings. What they do is they just paint over it. It's a different mindset (engineers tweaking vs artists creating), but then again, the intention wasn't to create something that was already available.
Combine things and use each tool for its best, but also try unconventional ways.
Best of luck and have a lot of fun!