### 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)
}
	
	uint8_t value;
	for (int i = 0, x = 0; i < p_height; i++) {
		for (int j = 0; j < p_width; j++, x++) {
			if (max_val == min_val) {
				value = 0;
			} else {
				value = uint8_t(CLAMP((values[x] - min_val) / (max_val - min_val) * 255.f, 0, 255));
			}
			if (p_invert) {
				value = 255 - value;
			}
			wd8[x] = value;
		}
	}
	return memnew(Image(p_width, p_height, false, Image::FORMAT_L8, data));
}
void Noise::_bind_methods() {
	
	ClassDB::bind_method(D_METHOD("get_noise_1d", "x"), &Noise::get_noise_1d);
	ClassDB::bind_method(D_METHOD("get_noise_2d", "x", "y"), &Noise::get_noise_2d);
	ClassDB::bind_method(D_METHOD("get_noise_2dv", "v"), &Noise::get_noise_2dv);
	ClassDB::bind_method(D_METHOD("get_noise_3d", "x", "y", "z"), &Noise::get_noise_3d);
	ClassDB::bind_method(D_METHOD("get_noise_3dv", "v"), &Noise::get_noise_3dv);
	
	ClassDB::bind_method(D_METHOD("get_image", "width", "height", "invert", "in_3d_space"), &Noise::get_image, DEFVAL(false), DEFVAL(false));
	ClassDB::bind_method(D_METHOD("get_seamless_image", "width", "height", "invert", "in_3d_space", "skirt"), &Noise::get_seamless_image, DEFVAL(false), DEFVAL(false), DEFVAL(0.1));
}