This post is a breakdown and discussion on what I am calling “3D Wood Grain”.
At its core, the question arose: can correct wood grain be achieved? Usually, you would scan or create a 2D wood grain and UV map it to texture. My regular wood workflow in Substance Painter involves multiple wood grain textures and Substances. Once a wanted result is built up I then copy the folder and turn every texture by 90 degrees. Together with an anchor and painted mask correctly flowing woodgrain can be accomplished. This works well for furniture or regular tasks.
For my Trench project, however, I was making crates. These are made from lumber cut into basic boards. Unlike furniture where traditionally one would want to hide the ends of pieces on a crate or pallet, these ends are open and visible.
The aforementioned question thus arises.
Some 3D programs like Cinema4D have this 3D texture built in. In my current Blender-Substance-Unreal workflow, however, this seemed to not be an option. By the end of the project, I had two versions of working 3D grain, the second an improved and lightened first. The following will show the approach then discuss its shortcomings and success.
Substance Designer does have some 3D noise generators based on a baked Position map. I, however, found it difficult to produce proper wood grain using just these. And after some trying sidelined the idea. Said 3D generators will come in handy later, but not for the base grain.
I then took a step back and looked at what wood grain actually is. A tree growing outwards and upwards will produce rings. We all know a cut trees rings and that it shows its age. Cut vertically these rings form our regular 2D texture wood grain.
Not entirely biologically correct I am sure but close enough.
This means: we should never actually create 2D lines of woodgrain. The oh so familiar 2D patterns of grain and wood are mostly results of jointing and planeing as well as gluing the wood.
– Sidenote: Way back, years ago, in high school grade 11 I was fortunate enough to spend a year in Canada and there chose Carpentry as a subject in the 2nd semester. If thus my basic understanding of lumber to planks to boards is either below or above the reader’s knowledge of woodworking, I do apologize. –
The conclusion of this thought process: for a plank, cut from a tree and prepared to be used in the construction of a crate, we need to create a single wood ring texture and use it to project onto the end of the geometry.
Using Substance Designer’s 3D Planar Projection node this can be achieved. (Some masking setting configuration is needed, mostly to have it show up all the way onto the other end.)
MK I and MK II
Sadly I am only able to share my second and improved version. The first was lost when on Christmas Eve my hard drive and its backup failed. I shall talk about the first version and show more of the second.
The first version was trying to be an end all be all. Using the one ring I went to project it 4 times, with a painted input mask from Painter allowing the user to choose the grain/projection direction.
For added variation, I copied this setup 3 times but moved its projection centers around. To add an extra layer of detail I went back to the beginning and using 3D noises was able to create warping effects on the otherwise straight projection. Overall and combined with common texture overlays the end result was very good. I was quite pleased with how the boards on the ordinance crate looked.
3D wood grain: done!
But wait. First off: it is not the best-looking woodgrain ever made, nor the most realistic one. It is correct and in 3 dimensions, but the rest needed more work. Additionally, its setup between 3 clusters of 4 projections was dreadfully slow and nearly unusable within Painter.
So the second approach was much like the first – this one I did save on a different drive and luckily it alongside the actual project survived the great hard drive crash.
This time I wanted speed. So now it’s 2 Materials. The first one is the same wood ring but only projected once. With the nodes projection and alignment variables exposed to be used in Substance Painter. (Shown in images above)
The second material is the same 3D noise based modulation of grain to add more detail. Simply now broken into its own Material to be placed above all grain materials in Painter.
This is a lot faster!
This, however, also means a lot of annoying alignment work within Painter.
The second version I only used on the stretcher prop and thus only needed to align it once. The first version I used on the crates and chests – any wooden box.
Overall I am pleased with the idea and result. It shines the most on the ammo crate where rounded and splintered edges now look correct in terms of wood grain.
Example: (Just the ring projection, no 3D noise to warp the grain down the plank.)
That I find very nice. In theory at least.
Is this technique actually usable though?
Well… not really. If it is, then for a very specialist job. The time needed in the second version to align it is simply too much, too tedious. With a 3rd version, one might be able to improve this. One is, however, not able to improve the fact that 3D Planar Projection in Substance Designer is somewhat problematic. It is pixel dependent and thus the ring needs to be large. In addition, the actual projection is somewhat finicky. The biggest problem I found was the resolution. Especially on the stretcher.
The entire idea is also Position and World Normal map dependent, and whilst these don’t require a high poly bake they do require a bake.
Overall the idea is unwieldy and hard to work with; the projection being somewhat expensive performance wise. I believe, however, with more time and effort one might be able to produce a more well rounded 3D wood grain material.
Ideally one without 3D projection: if Substance had a 3D noise generator for tree rings and their resulting lines, this would be a base for any wood material and always produce a great result. In the end, the current workflow of 2D grain is simply put easier and with less hassle gets to a similar if not correct result.
Do let me know what you think of this. I always welcome a discussion. Maybe Designer does already have a better way of doing this, or maybe I was over thinking it? At any rate, please do feel free to reach out if you have thoughts. Twitter, Discord, all that other chat stuff.