Godot project used for our prototype.

It is compatible with Godot 4.4 LTS and Godot 4.5 LTS at least, tested on both Windows and Linux.

**How to use**
Import project.godot with your version of Godot to open the project.

**What to do**
You can fly the camera around using Godot's camera settings and look at the results. There should be a bunch of textured planes in the scene.
By default, PCA covariance exchange with tiling and blending for the filtering substitute is enabled, as we consider it the best variant of our method.
To change synthesis and filtering settings, there are two ways:
		
	-To change the settings of a single material, you can simply find it in the mesh's options and change them.
		
	-To change the setting of every material at once, go to project parameter -> General -> Global shader parameter.
	Here you can change:
		* recoloringMode (0 = PCA, 1 = ZCA)
		* substituteMode (0 = mean, 1 = periodic tiling, 2 = tiling and blending)
		* texturingMode (0 = mean exchange, 1 = covariance exchange, 2 = histogram exchange, 3 = periodic tiling, 4 = tiling and blending)
		* tilingAndBlendingScale (affects the size of the squares used in tiling and blending).
	Then, go in either or both the statsExchangeColor or statsExchangePBR shader, find the uniform variables with the same names, and put the keyword "global" in front of "uniform" so that the global values are used by the shader instead of the local ones.
		
Playing the scene saves a visual of every textured plane into the folder "CameraOutputs".
Avoid changing the ground truth mode. This will compute a ground truth of the filtering, which will significantly slow down your computer and likely freeze temporarily your GPU.

Of course, you can also simply yoink the shader and implement it in your own engine.
The code for precomputations can be found in: 
https://github.com/DrLutzi/lutzapp
