### Godot version

v4.0.beta.custom_build [2afa17519]

### System information

Windows 10, Forward+, NVIDIA GeForce GTX 1050 Ti (31.0.15.1694)

### Issue description

Attempting to tile multiple noise textures with the same settings will create visible seams between them.

Image of 4 noise textures creating seams between them
![noise_seam](https://user-images.githubusercontent.com/10490534/215283424-5dcd06ca-32be-4bf1-827d-654e3f640e8e.png)

It seems to be due to the values being normalized, as can be seen here:
https://github.com/godotengine/godot/blob/218bef90af2091afde3b1be816c87286c194a2a8/modules/noise/noise.cpp#L87

It would be nice if this could be an option instead of hard coded into the noise texture.

### Steps to reproduce

- Create two Sprite2D
- Give them a noise texture
- Make sure both the texture and the noise object of the two sprites are unique
- Reposition the sprites so their edges connect
- Set the noise offsets to the sprite's position
- Observe the textures seemingly tile well with the exception of a visible seam

### Minimal reproduction project

This test project uses a \@tool script for the `noise` scene to duplicate the texture and noise object on `_ready`.
Reopen the `main` scene to refresh textures.
[noise_seam.zip](https://github.com/godotengine/godot/files/10527941/noise_seam.zip)
uint16_t alpha = p_alpha + 1;
	uint16_t inv_alpha = 256 - p_alpha;
	return (uint8_t)((alpha * p_fg + inv_alpha * p_bg) >> 8);
}
Ref<Image> Noise::get_image(int p_width, int p_height, bool p_invert, bool p_in_3d_space) const {
	ERR_FAIL_COND_V(p_width <= 0 || p_height <= 0, Ref<Image>());
	Vector<uint8_t> data;
	data.resize(p_width * p_height);
	uint8_t *wd8 = data.ptrw();
	
	Vector<real_t> values;
	values.resize(p_width * p_height);
	real_t min_val = FLT_MAX;
	real_t max_val = -FLT_MAX;
	for (int y = 0, i = 0; y < p_height; y++) {
		for (int x = 0; x < p_width; x++, i++) {
			values.set(i, p_in_3d_space ? get_noise_3d(x, y, 0.0) : get_noise_2d(x, y));
			if (values[i] > max_val) {
				max_val = values[i];
			}
			if (values[i] < min_val) {
				min_val = values[i];
			}
		}