Diffuse, Normal, and colored Specular maps?

I downloaded some models ripped from old video games and they have maps for diffuse, specular, and normal.

Usually the specular map is a black and white image and I use it as a mask/mixing factor on a mix shader node to combine a diffuse shader using the diffuse map and a glossy shader using pure white color.

But sometimes the specular map is a full color image that does not make sense to use as the mask/mix factor. What am I supposed to do with those?

The best option is to look up the documentation for the game engine used and how maps are utilized. That said, the devs may have modified the engine to make it do what they need, but it’s a good starting point. How old is old? Pre PBR era? For PBR metallic workflow colored specular maps don’t exist. If it’s pre PBR era, then I would simply set it up with diffuse and glossy with the colored specular map in glossy. Maybe check the game assets in game if fresnel is used, and if rough fresnel (PBR) is used. I have no experience with PBR specular workflow, but I know it has been discussed here.

Thanks for the reply.

I have no idea what games most of these are from. I just grabbed random things I thought were cool from some free 3d website that is not online anymore.

Some of them are 3ds, DS, Wii, WiiU, PS2, PS3, and from various mobile games so maybe the game itself isn’t old but the engine uses old techniques for better performance on older phones.

Definitely pre PBR.

then I would simply set it up with diffuse and glossy with the colored specular map in glossy.

What about the mix factor between the 2? Just leave it at 50%

I have seen the phrase “rough fresnel” used a few times recently but I still have no idea what it is.

Another question, is there a way to know what strength a normal map should be set to? Sometimes when I’m certain the diffuse and greyscale specular maps are setup correctly I can set the normal to 100% strength and it looks right. Other times I have no clue where exactly I should set normal strength and sometimes the normal map seems to have no effect even though there are clearly visible details in the normal map itself. I am using “non-color data” setting.

There are no rules. The maps are there to create a variation, but without the source we don’t know if the maps have a base value or are scaled. Is diffuse and glossy mixed with a factor, in which case which factor, or some facing/fresnel value in the game material settings? There is no way of knowing for sure, and you’ve left experimenting until it looks good enough.
Same with normal maps, really. Do the game engine use the normal map at full strength, or does it have an effect slider like in Blender? Who knows? And old trick was to use a stronger amount of normal modification on the diffuse component - completely unrealistic but allowed i.e. fabrics to have bumps without adding a costly specular to it.
The maps are just data. There is no way of knowing for sure how that data is used at this point.

I suggest you checking images’ channels. Sometimes developers store maps in alpha channels for performance reasons, eg in Unity metallic or specular maps are stored in diffuse alpha channel

Are you sure those full color maps which don’t seem to make sense aren’t channel packed?

Channel packing is a way to reduce the number of textures by storing multiple grayscale maps into the RGB channels + occasionally alpha as well like @Vefery suggested. You get 3/4 maps for the cost of one. To access them you’ll need to set them as Non-Color and use a Separate RGB node.

Also, if a normal map seems off try to invert its Y channel.

1 Like

All this talk about things I know nothing about just makes my head swirl.

When will I feel like I’m no longer a Blender noob???

(sulks in his sleeve)

I have seen other people say to swap the red and green channels. Are you saying to use a separate xyz node on the normal map and then use a math node to multiple the Y value by -1? Or did you mean to say R or G or B instead of Y?

Y axis is the green channel. If I remember correctly the separate xyz and rgb nodes are pretty much same under the hood. For flipping channel easiest is to use the RGB curves node and just flip the channel you want from there, no separate and combine nodes needed.

If you use Eevee you have a Speculat BSDF where you can use older no PBR materials directly. Some tweaking is still to be expected.

Switching X and Y would just achieve that: mess them, not flip the Y.

This is a test you can easily do by yourself in Blender. Bake two normal maps, one with +Y, the other with -Y.

Create two meshes and plug one normal into the surface input of each mesh for comparison. Enable viewport shading to clearly see what’s happening then try out each method on the +Y version. You can try the XY mix, the curves method @0451 suggested, separating and multiplying or inverting the color… Nothing beats learning through experimentation.

Eevee sucks on my old mac so I mostly only use cycles.

So you’re saying to invert the color of the y/green channel, not plug green into red and red into green?

For converting directx and opengl normal maps I only have needed to invert green channel.

If your using ripped game assets you might stumble on to normal maps that don’t have a Z/blue channel to save memory and the engines reconstruct it in the shader. Unreal 4 does this automatically for example.

There was a thread about using specular maps in cycles sometime ago that might have some info on the most technically accurate method of using them. I can’t find it atm.

Both allegorithmic and marmoset have a lot of PBR related educational info and iirc they both touched on conversion between non pbr and pbr maps.

Thanks for the feedback everyone. This is what I’ve made so far that works fine for most situations so far:

I have encountered a few normal maps without a blue channel. I have this one normal map that has 3 channels but no combination of inverting channels or swapping channels or tangent/object/world space on the normal map node has given me a sensible result.