Rik De Keersmaeker showed us the workflow behind the Handpainted PBR Tiles project, discussing how he combined Photoshop and Substance 3D Designer to hand-paint stylized Normal Maps and test lighting in Unreal Engine 5 to achieve a painterly material.
Introduction
Hi there! My name is Rik De Keersmaeker, and I am a junior Environment Artist from Belgium. I have worked for a little under two years in an animation studio, and currently I am looking for new opportunities in both the gaming and animation industries.
Recently, I have been fascinated with combining 2D and 3D techniques to get a unique painterly look. I love analyzing new game and animation projects that have a similar style and figure out how they tackled certain challenges during production. I think it's great that in the last couple of years, the industry has opened up more to combining 2D and 3D techniques. In my opinion, it is taking the best of both worlds, and I think it allows artists to express themselves more freely.
Inspiration
The last couple of weeks, I have been practicing my material art, and after my previous material study in a photorealistic style, I challenged myself to try something new. I wanted to create a stylized material that would look like a painting, but would still react to light and have the complexity of a high-quality tileable material.
My main inspiration for this project was the work of Romain Durand. When I discovered his hand-painted materials, I was in complete awe and realized that I wanted to create something similar in my own style. Usually, when creating a stylized material, you would start from a sculpt in ZBrush or emulate a similar feel by fully creating the material in Substance 3D Designer. There is nothing wrong with going about it this way, but in my opinion, this gives the material more of a sculpted feel and not a hand-painted one. I thoroughly analysed the work of Romain Durand and concluded that he creates his materials almost completely in Photoshop by painting all texture maps, but most importantly, the Normal Map, which sells the illusion. With this information in mind, I started planning a workflow that would fit me personally and that would play to my strengths.
When searching for references to create my own material, I rediscovered some pictures that I saved before on Pinterest of glazed North African tiles that were cut and aligned in a star pattern. I love Moorish craftsmanship, so I decided to use this as my main reference. I think it is always a good idea to regularly gather references and store them somewhere so you can easily access them when you need them later. In this case, it helped me out, and it kept the momentum going on the project.
Base Pattern
My plan was to use both Substance 3D Designer and Photoshop to create the tiles, and not limit myself by software. I knew well what final look I wanted to achieve, so I often switched back and forward between both software depending on the step I was working on.
I started with blocking out the main pattern in Substance 3D Designer. In this case, I only had to create the star-shaped tile, and by duplicating this form with the tile generator node, you will automatically get the cross-shaped tiles as well. In this stage, I have already added some simple deformations to the shapes to make them look less perfect and more organic.
Simplified Normal Map
When I was happy with the pattern and the simple imperfections applied to it, I moved on to working on the Normal Map. I wanted to do a paintover of the Normal Map in Photoshop, but to speed up the process, I decided to first run the texture through a painterly filter that I created.
The main idea I had with this filter was to stylize the Normal Map by using the quantize color node. This node reduces the color palette, and it works great to simplify the texture. I discovered this technique while watching a great talk about the environment art of Prince of Persia: The Lost Crown, which I highly recommend. On top of this, I decided to play a bit with the anisotropic Kurahawa color node that was recently added to Designer, and I was pleasantly surprised by the result. Below, you can see a before and after I ran my base texture through the painterly filter.
Hand-Painted Pass
I was happy with this initial result, so I decided to export the texture and import it into Photoshop, my painting software of choice. Now the exciting part starts. Hand-painting your Normal Map sounds like a painstaking process, but it is rather intuitive once you get used to it.
To guide me during the painting process, I created a Normal Map of a faceted sphere that I used as a reference. When painting, I picked colors from this image with the eyedropper tool, and this color will influence how the brushstroke will react to the lighting later. This way I felt the small imperfections that you naturally get while painting, and I discovered that depending on what look you are going for, you can add as many details as you want. In this case, I remembered that sometimes less is more, and part of stylization is simplifying things to their essentials.
At this stage, I was free to experiment, but I had to keep a couple of things in mind:
- I had to make sure that I had the option to paint across my material without breaking the tiling. I used the pattern preview tool in Photoshop to avoid this issue.
- I constantly had to review the look of the Normal Map when painting by exporting the material and reviewing it in Unreal Engine under different lighting conditions. This way, I could spot mistakes early, and I got to the desired final look more quickly.
- I was not afraid to "break" the rules of PBR by painting certain colors where they normally shouldn't be. This is where the workflow shines, and you can get very cool results this way.
Finishing Touches
When I was satisfied with the look of my Normal Map, I reimported this texture back into Substance 3D Designer. To create all other textures like the Basecolor, Roughness, Height, and Ambient Occlusion Map, I followed a similar process as I explained before with the Normal Map. For example, to create the Color Map, I started again from the base pattern, then added big color variations per tile and gradually scaled down to add smaller details. When I was happy with my procedural base, I did a final polish for each texture in Photoshop. To make sure that these other maps were working well together with my hand-painted Normal Map, I used a few tricks.
I used multiple techniques to create masks from my Normal Map, but one of my favorites was the RGBA split node. Combined with a histogram node, you can create some really interesting masks.
During this project, I also refined a brushstroke generator that I had developed before to procedurally add texture to my color map. I liked the idea of using an atlas texture as an input, like Juan Nuno did on his copper material, so I created a similar setup.
Presentation
For my presentation, I imported my textures into Unreal Engine 5. I plan to use this technique in the future in a full-scale game environment, so experimenting with the reaction of my material to lighting in a game engine was the essence of this project.
For the material cylinder and plane, I created a basic setup with 4 lights. Here, I wanted to show off the material in a pretty neutral condition, so I tried to keep it simple.
On my beauty shots, on the other hand, I wanted to go for a more dramatic look. During my painting process,s I was experimenting with how the tiles were looking with a Sky atmosphere and a directional light to simulate a realistic atmosphere. This was a lot of fun to play around with, and I took some great beauty renders from this setup.
Conclusion
In the end, I am happy with how this project turned out. My goal was to test out a new workflow on a smaller-scale project so I could experiment more freely without spending too much time. The most time-consuming part of this project was doing research and figuring out my workflow, since there hasn't been a lot of documentation released about this way of working. In the future, I want to experiment further with this technique, for example, on props or even on a scene.
Thank you for reading through the whole interview! I want to thank the 80 Level team for giving me this opportunity to share my process. Feel free to check out my portfolio, and if you like my work, please feel free to reach out if you have any inquiries.