MSFS normal maps, how are you making them from height maps?

I’m having trouble writing out proper normal maps for MSFS? Every tool I try outputs maps with the purple look and all the maps I’m hoping to replace are the green and red on black style? What is the usual, proper procedure for turning a grey scale height map into the green and red maps? Ideally without having to involve baking them on the model? The flat areas need to be black in MSFS, if it’s a purple color the shading/lighting is all messed up. I have tried making the blue channel black, but still the shading is very wrong with the normals for areas I want to be flat being skewed by the mid range colors GIMP and Nvidia Texture Tools are giving me? These maps assume flat is a middle grey value in both red and green channels. MSFS seems to need black in both the red and green channels to not perturb the normal? MSFS normal maps are pretty odd to me, because they will be the same value in the red channel for both directions of normal deflection on either X side of a vertical groove. But all the tools I have tired have dark values in the red channel deflecting on one side of the groove and light values on the other? And a middle grey in a channel is flat, not black as in MSFS normal maps? Several people suggested they use the “purple style” in MSFS just fine? Why are the maps I’m finding in add ons the black with green and red?

What am I missing here? I suspect I could use a compositing app like Nuke and do the right processing to get the correct end result, but surely there’s an easy way I’m just not getting? I see nothing specific about this in the SDK docs, and searching for the answer is only finding other people asking the same question I have? No answers?!

Anyone know of a doc/tutorial/howto or can just give me a few hints or clues?

Substance painter can do that for you automagically.


Substance is another app I have installed and need to spend some time learning. Thing is I’m just making these maps from a paint kit. I’d like to not involve any 3D apps. And getting a model extracted from the add on aircraft with proper UVs is proving a little challenging. I think I need a slightly older version of Blender, because I have not gotten the MSFS3Blender to import anything successfully yet. Been using ModelConverterX as an intermediary and while it brings the geo in OK, the UVs seem to get mangled and the maps won’t apply as they do in MSFS.

I guess my query boiled down is two fold.
A: Why is there these two styles of normal maps I’m seeing, and it sound like both are being used? Are they interchangeable or does the material using them need parameters changed depending on the one used? If I’m replacing green/red style normal maps with custom versions, can they be the purple style? I need to check my work and try a few more things with the purple maps I’m getting. But my first try last night the purple maps gave very wrong shading.

B: How are these green/red style normal maps being generated? Every single app or mention of making normal maps, be it MSFS specific or in general uses the purple style. Yet, every add on I’ve gone and examined so far, 3 or 4 aircraft, all have the red/green style normal maps.

25 years doing CG, I’ve only ever used grey scale height maps. Because before now I’ve never done anything with real time graphics and traditional software renderers compute what they need to for bump or displacement from simple, easy to understand height maps. Well, I wanted a learning experience and I’ve got one!!! :slight_smile:

If anyone is scratching their head and has no idea what I’m talking about when I say there’s two style normals maps, “red/green” and “purple”, here’s a topic with image examples of both.

I guess you can make your red/green map by removing the blue channel from your normal texture. That’s not going to solve your problems because they may arise out of your mesh/UV unwrap rather than anything else. All my normal maps are purple and I don’t have any issues with them whatsoever.

“All my normal maps are purple and I don’t have any issues with them whatsoever.” Yeah, seems they are widely used, I just haven’t seen one yet! But I’ve only looked at a few aircraft so far to see what’s typical for normals maps.

I did try to make a purple map conform to the the maps I’m trying to replace by making the blue channel all black. Maybe that’s my problem! I had made several variations, inverted height maps, processed various ways. But, it was late, I was tired, I may not have tried any of the non processed purple versions??!! Anyways, more experiments once I’m home tonight. Thanks for adding to the discussion, it helps.

Maybe a couple of screenshots would better describe what you are after?

I’m at my day job doing non interactive 3D graphics, so I can’t show you what I’m working on specifically at the moment. But the thread/topic I referenced above has images of both the red/green and purple style normals maps. That guy had the same question I did more or less. But looks like he came to the question because of a non related UV problem? Not sure. But he illustrates the two different map styles reasonably well.

Here’s links from that topic showing both styles. But of two different things.

I am mostly interested in what you are trying to achieve with using the normal maps and fail.

The default maps are not especially high res and the details like panel line are pretty rough up close. I’ve painted much cleaner, sharper panel lines black lines on white), so I need those applied correctly to get the bump effect.

Best I’ve done so far did give the panel lines, to some degree, but it also dramatically changed the way the parts with the new map were shaded, basically “bent” the lighting directly due to distorted normals across the object.

Painting normals by hand is not a very good idea imo. You would be much better off with baking hi-res normals from geometry. Just model your panels and bake, two minutes job :). In my scenery I even went as far as leaving the panels all 3D. This sim chews meshes like crazy, it’s not FSX in this regard by far.

Oh, no, I am certainly trying to avoid painting the normal maps by hand, there’s no way you’d ever get them entirely correct. Thus my question here about making normal maps from height maps I’ve painted. If I was doing this for something I was also modeling, I’d want to set up and define, paint the material and maps in Blender. Sure. But in this case I am stuck using the geometry the aircraft comes with. This is basically a livery kit that’s of higher resolution than the one the aircraft comes with and I want to go beyond color/albedo and also make much higher resolution normals maps. Because sharp panel lines in the color, while leaving jagged, low res normals maps isn’t going to give the much improved details I want.

In this case the substance painter is probably an ideal choice. You can’t make a good normal map with just height data because it doesn’t contain any info on how light should interact with it. Try loading your hand-painted height map into height channel there and then export textures with FS2020 preset. SP will convert your height information into a proper useable normal map during export process. I know this sounds too simplified, but it’s too long to describe in writing, there are good tutorials in the internet on how to do that.

I don’t have a model with proper UVs. So doing ANYTHING that requires the model to make the maps is off the table until I can find a way to import that model into Blender without changing the UVs.

There are many different applications that make normal maps from simple height maps, it’s a pretty simple process in theory. The problem is this aircraft expects normal maps in a format I can not produce. I suspect the maps the aircraft comes with have a negative/postive bit and when I read in the .dds files all pixels are considered positive. I may try converting a map to a standard image then back to .dds just to test my process. There must be some settings in a config file specifying the type of map. Because others are using the “purple” type. But this aircraft will not shade correctly with those. It requires the “red/green on black” style maps.

The more I look into this more the more I realize a .dds file can be written in a huge variety of bit formats. So reverse engineering these maps may be one serious pain in the rear.

Apparantly .DDS supports data written in ALL these formats?!

Send me your original gltf, I will try to find a way to give you a blender file with the original UVs.

That’s a generous offer, appreciated. But I did spend some time looking closer at the UVs once the model has gotten into Blender via ModelConverterX. (Never have gotten MSFS2Blender to import any aircraft I’ve tried, fails every time.) And the problem I thought was UVs was simply the maps needing a Y flip. So, I’ll be trying to get the maps on the model in Blender and see where that goes. I’ll want to be able to work in Blender anyway, so I need to find a good work flow. I’m starting to have the suspicion FSPackageTool may generate the maps in the “red/green” format when it creates the .dds files. I’m still feeling my way around in the dark. I’m an experienced 3D artist, but not with Blender, 3Ds or any real time games/applications. I think I know just enough to make dumb assumptions and my curiosity takes me off on tangents. I need to learn more of the basics of the SDK and it’s processes.

It looks like you are on the right track and already know how to generate normal maps from height maps. In the normal map, only the red and green channels are relevant, the blue channel doesn’t matter, so I think the purple vs. red/green is not part of the actual issue.

From your last post, I think you’re getting closer to the solution which is the DDS format for MSFS. You can use modelconverterX to convert the textures to the correct DDS format.

If you were working with the Blender to gltf workflow, the SDK build tool converts png textures (and normal maps) to the correct DDS format automatically, so it doesn’t have the same issues.

The other type of texture is the COMP textures which are for the PBR materials. To me, these tend to look like the red/green mess that you are describing. But these are just three grayscale textures combined into one file and are not intended to be viewed as a color image.