So I will be buying Unreal Engine 4 in coulpe of weeks so I thought it would be good to spend some time on learning PBR. I read documentation on Marmosets site and couple other sites just to get general knowledge on it.
Since there are no tutorials (Correct me if I am from) from getting PBR textures from photos I have developed my own technique.
1. I get some texture from internet. (In most cases CG Textures)
2. Take it in Photoshop, tile it and fix any other crap.
Now this is crucial.
3. Since those textures are in most cases not polarized I do the following.
- Duplicate the image.
- Saturate it
- Apply Gaussian Blur
- Invert the color
- Set that layer into overlay mode
By doing that I can equalize lighting in the photo and get rid of unwanted light sources.
4. I go into CrazyBump and generate normals from polarized photo.
5. I also go in the Diffuse Options where I remove all shading from it and save it as Albedo Map.
6. For the gloss and metalic I generate them in Photoshop.
So is this good or bad or completely wrong?
Replies
- Albedo should contain no lighting information, no AO, no edge highlights, and should be based off real world measure values. For metals this is almost black.
gloss/microsurface/roughness
- This is typically the most detailed and has the most contrast, put stratches and wear here. This value can be inverted depending on your engine. It should be based off real world measure values.
Reflectivity
- This is typically pretty flat and undetailed. It should be based off real world measure values.
If you aren't basing the textures off real world values you are doing it wrong.
Macbeth Chart
"Remember Me" has a great overview of PBR a lot can be gleamed from this.
PBR workflow for Remember Me
Here is a shot of the passes. The guys that made Remember Me admit that too much micro detailing was added to the Albedo it was a learning process for them too, so you still get very dark textures with some shadow information but in general all textures are pretty clean. In general I would go cleaner than some of these below to be safe and add more Albedo color information if needed later.
How to Author Textures Workflow
Normal and Roughness
The normal is usually authored in Zbrush, NDO, Crazybump, Substance Designer, or many more. Roughness usually authored when creating your material masks either in Photoshop or my case Substance Designer using real life reference first and also trying to stick close to the real life measurements.
a. Normals - represents the surface forms and many cases the larger roughness scale of the objects.
b. Roughness - Roughness is really how smooth or rough a material is, it is usually described by micro facets on the surface the more rough the less reflective and less rough more reflective.
c. by combining these two in harmony the Diffuse and other passes will just work.
(From my own experience making normals that have too much micro detail will only hurt your end result also be aware that both normal and roughness help in creating the illusion of a material.)
Albedo
Albedo is your color or diffuse map. The only big difference for game artists is that we no longer represent shadow or AO information baked into the Albedo. Usually authored in photoshop, Substance Designer, or any 3D painting program.
a. No AO or very little AO baked into maps. (stick with no AO to be safe)
b. Color values should be checked with real life measurements using the Macbeth chart as a guide.
C. You can and should have freedom to control colors if it fits the style of your game this is not barrier... Charts and Data do not make balanced composition the artist eye does.
All other maps are Engine specific
Those are authored in any paint program usually Photoshop.
I will stress though the maps you do not want to screw around with is Roughness and Normals. These two will give you the best material results in the end. Albedo it just has to be a good enough close to the color of the material as possible and all other maps are important just from my experience so far Roughness and Normals are far more important everything else just kind of drops in to place as you do the process of creating the textures.
Now to finally answer your question cromadbomber
The steps your taking are really bad. Hope it does not sound rude by saying it straight up like that... This will only get fast and messy results that will just not really work all that well in the end, of course I could be wrong but in general the steps your taking are pretty much backwards to get a solid result you are putting the normal as a process since you start with a photo ref texture from cg textures and than expect it to get a good normal out of it especially after doing and invert blur overlay function to your texture to take shadows away. I can not see how this will end up getting good results. Crazybump kind of works with some of the shadow information to guide it in finding the Normal and height information so taking that off and expecting Crazybump to get a good normal just will not cut it.
Here is my problems with Crazybump and how people use it. People expect Crazybump to get nice results from the get go and think this makes a great normal. This is not how it is done even using Crazybump or NDO for the matter. You have to know how to layer Normals to get good results from both mentioned tools. And even if you know how to work layering normal mojo nothing will be better than just sculpting your textures either by hand or procedurally.
So to be short and clear. IMO... of course.
Start like this...
-Create your Normal (Hopefully sculpted or baked from higher poly for best results)
-Bake out passes like Curvature, AO, Height, and IDs.
-Make your Albedo using Curvature, AO, and Height using balanced values for the material being made.
1. AO - Can be used to add dirt in crevices not as a lighting technique.
2. Curvature - Same you can use it with level adjustments in Photoshop for the curvature to get your peaks and valleys to get wear and dirt masks.
3. Using the passes for your albedo will start to create masks for you which you can use for Roughness and other passes used for BRDF.
-Create your roughness passes with masks baked out or made.
-Set your Albedo, Roughness, Normal, Specular, Metallic, and AO into your shader.
Just remember Roughness and Normal are very important and others can become very important depending on the material you are trying to mimic especially when you go into metals and such.
In general my best advice is keep it simple and clean. Do not over complicate things. PBR in theory is much easier for texturing than the old school way.
Many studios still use photo sourcing but the ones that are successful understand how to construct the Normals via layering and editing using NDO, Crazybump or others.
So nothing wrong with using NDO or Crazybump as long as it get the job done and looks good and balanced.
Well all the different terminology isn't helping and a lot of the slides/info are all programmer orientated.
Would be good to have a stickied post about it.
Great info rogellio! In what way is it easier? The results are really good but the process seems more complicated to me.
Because so much work is done for you - PBR shaders have far fewer inputs.
For example, if you wanted to have correct energy conservation with your specular highlights with a shader that didn't have energy conserving specular - you'd have to do it by hand in your Specular Level and Glossiness textures. Now it's just done for you depending on what your Gloss/Roughness value is.
The only complicated part is making sure your Specular Level/Intensity is a reasonable value - which a bunch of studios have a reference chart for (eg DontNod's example one for Remember Me).
People have known not to put lighting information into diffuse textures for ages now when using engines which use a lot of dynamic per-pixel lighting. Normalmaps and Gloss/Roughness textures are the same as they always were, it's just that Gloss textures are a bit more important now...
It just sounds more complicated to me. PBR workflow, 4 textures to create, less manual control over specular and gloss because they have to be physically accurate and a less artistic more scientific workflow involving charts and data and heavy emphasis of trying not to include lighting or highlights or shadows. We would often include a bit of highlights and shadows and ao in the past in our assets so that even when we swap to lower quality shaders(eg on LODs) the assets still read well.
Im not complaining though, I love the results, the techniques used to create the results are my concern, especially physically accurate diffuse/albedo...thats just a wierd concept.
I'm not entirely convinced that having no baked AO/Cavity is the way to go. Most engines still don't render SSAO at full resolution.
Maybe using Cavity with a small distance is the way to go to shade areas were SSAO isn't accurate enough.
Yep
Before I would have to hand tweak my specular, env maps, put a falloff and all kinds of hack stuff just to get a simple puddle of water... A lot of stuff is done for you now it is just inputting stuff as said.
After a while you do not need the charts I only uses the charts when I am tightly trying to debug my level. The eye is a wonderful thing and can hone into very close to real values even without reference. And also what may be accurate in real world measurements does not look 100% good in game you will see you have some artistic judgements to make still.
I did not find the change that drastic or even the wording. With better lighting engines textures were leaning towards less and less AO and general light information it was just natrual that it went that way. I find it more artistic actually since I can focus on getting a balanced scene and not focus on getting one material that works only on 70% of the view angles in the scene.
I agree also AO and Cavity are important, but think about it as Dirt layers. Dirt, dust, grim goes into all kinds of crevices put that stuff into where it should be and you will end up more happy than having an AO multiplied or cavity overlay.
You still can use them, and you should. Just, not baked into the diffuse. Toolbag 2 for example has slots for AO. In direct lighting, there shouldn't be any AO. AO is reserved for ambient light, not direct.
UE4's shader also has an AO input which works great.