## 4 Results  
We performed experiments on two types of generated toy data: a 3D point cloud with hotspots and a simulated 2D laser Doppler vibrometry example. All experiments were run in the editor of the Unity game engine [44] version 2019.2.17f1. All code was written in C#, which automatically gets recompiled to C++. For mathematical functionality, we imported the open source library Math.NET Numerics [45]. We used a laptop with an i7 9 th Gen Intel processor, a GTX 2080 graphics card and 32 GB RAM. This setup is not the most performant. It does, however, facilitate the visualization of the different models and allows us to assess whether or not these techniques could be used in practical virtual or augmented reality applications for which Unity is currently a widely used development tool. We investigated GPR by sequentially adding training points. Each step is called an iteration. To make the comparison between the naive GP and the kd-tree implementation fair, we always started both runs at the same initial training point. The point with the highest posterior uncertainty was chosen as the next new training point. This is the point where the least is known about the underlying function. This is the fastest way to reduce the total uncertainty with every new data point. To assess the merit of the kd-tree, we logged two values. First, we calculated the normalized root mean square error (NRMSE) between the ground truth and the posterior mean via  
\[\text{NRMSE}=\frac{\sqrt{\frac{\sum_{i=1}^{n}\left(y_{i}-\hat{y}_{i}\right)^{2 }}{n}}}{\hat{y}} \tag{15}\]  
Figure 1: Three examples of a constructed kd-tree on a point cloud consisting of 9261 points in a cubic grid. Every point is visualized by a small transparent sphere and all points in a retained node have the same random colour. The blue dot in the lower right corner represents the location of a single training point. (**a**) \(s=5\), \(m=0.9\), 52 retained nodes; (**b**) \(s=5\), \(m=0.75\), 315 retained nodes; (**c**) \(s=10\), \(m=0.75\), 798 retained nodes. Figure 2: Three examples of a constructed kd-tree on the mesh of car side panel. It has 2296 vertices. Every node is visualized by a random colour. The blue dot represents the location of a single training point. (**a**) \(s=3\), \(m=0.5\), 118 retained nodes; (**b**) \(s=8\), \(m=0.5\), 125 retained nodes; (**c**) \(s=8\), \(m=0.25\), 441 retained nodes. in which the root mean square error RMSE (between the ground truth values \(y\) and the predicted values \(\hat{y}\)) is normalized by the average ground truth value \(\hat{y}\). This is a measurement for how far the GPR prediction deviates from the ground truth. Second, we calculated the average \(2\sigma\) value for all points (both test and training). For a normal distribution, 95% of the samples lie within a band around the mean with a width of two standard deviations \(\sigma\). This is a measurement for how much uncertainty the posterior still has for our input domain and thus how much information could be gained by continuing the regression. When this value converges, there is little use in continuing. Hyperparameters were learned beforehand and not updated during inference. This strategy is explained in [46]. Updating between iterations while the dataset is small can lead to length-scales that are too big and predictions that are overconfident far from the data itself. Moreover, because learning the hyperparameters via BFGS depends on numerical convergences, this would result in varying iteration times, making a comparison between them futile. Instead, hyperparameters were learned on a portion of the data set. We took 100 evenly spread out training points and learned the hyperparameters on those. We then adjusted them to reasonable values' encapsulation prior belief. A kernel noise \(\epsilon\) of 0.005 was used throughout. In these experiments, we set \(\text{thres}_{\text{min,max}}\) to 0, meaning we allowed encapsulating cuboids to be of any size. The choice of \(s\) and \(m\) removed the need to impose a stricter threshold.