### Godot version

4.0 beta 10

### System information

Windows 10, Vulkan Renderer

### Issue description

In 2D scenes with sprites, when the sprite's `flip_h` and/or `flip_v` property is enabled, the normal map is flipped with the image, causing lighting to be reversed. While this does technically make sense, in a game where You have a bunch of sprites that flip and use normal maps, the only solution is to generate normal maps for both facing directions.
![image](https://user-images.githubusercontent.com/47702559/209426338-6257d66c-a965-4793-a7bb-5a635a136267.png)

Ultimately the fix is simple: Invert the red channel in normal maps on horizontally flipped sprites, and invert the green channel on vertically flipped sprites.

### Steps to reproduce

1) Create a Sprite2D
2) Add a Diffuse Texture and Normal Map 
3) Add a 2D Light to the scene
4) Enable `flip_h` and/or `flip_v` on the Sprite2D

### Minimal reproduction project

[Normal not flipped.zip](https://github.com/godotengine/godot/files/10298203/Normal.not.flipped.zip)

}
				RenderingServerDefault::redraw_request(); 
				int dpc = particles_storage->particles_get_draw_passes(particles);
				if (dpc == 0) {
					break; 
				}
				instance_count = particles_storage->particles_get_amount(particles);
				instance_buffer = particles_storage->particles_get_gl_buffer(particles);
				instance_stride = 12; 
				instance_color_offset = 8; 
				instance_uses_color = true;
				instance_uses_custom_data = true;
			}
			ERR_FAIL_COND(mesh.is_null());
			uint32_t surf_count = mesh_storage->mesh_get_surface_count(mesh);
			for (uint32_t j = 0; j < surf_count; j++) {
				void *surface = mesh_storage->mesh_get_surface(mesh, j);
				RS::PrimitiveType primitive = mesh_storage->mesh_surface_get_primitive(surface);
				ERR_CONTINUE(primitive < 0 || primitive >= RS::PRIMITIVE_MAX);
				GLuint vertex_array_gl = 0;
				GLuint index_array_gl = 0;
				uint32_t input_mask = 0; 
				if (mesh_instance.is_valid()) {
					mesh_storage->mesh_instance_surface_get_vertex_arrays_and_format(mesh_instance, j, input_mask, vertex_array_gl);
				} else {
					mesh_storage->mesh_surface_get_vertex_arrays_and_format(surface, input_mask, vertex_array_gl);
				}
				index_array_gl = mesh_storage->mesh_surface_get_index_buffer(surface, 0);
				bool use_index_buffer = false;
				glBindVertexArray(vertex_array_gl);