1 Introduction

Computational fluid dynamics (CFD) simulations are becoming increasingly applied in the study of sports aerodynamics. A crucial aspect of CFD simulations is the accurate representation of the geometries involved. For the analysis of athlete postures, 3D scanning is often used as it can give an accurate representation of the body shapes of individual athletes [1,2,3]. Other methods in use are simplified CAD geometries [4,5,6] and digital reconstruction from images [7, 8].

To analyze multiple postures, or posture changes, typically either multiple scans are taken [1, 9,10,11], or CAD models are generated from the 3D-scanned point clouds using reverse-engineering software [12, 13]. Some studies do not mention the method used to modify postures [14, 15].

There are challenges and limitations to 3D scanning. It is time-consuming to scan multiple positions, making large parameter studies infeasible. In addition, if the scanning is performed in a calm environment, the position might be different from the real position during a race. For instance a skier in a wind tunnel will lean against the wind to maintain their balance, which will lead to a different position compared to a calm environment. When changing position, there is also a risk that the athlete moves other parts of the body, leading to unintended postural changes. Finally, some positions are physically challenging for an athlete to maintain for a longer period of time. A full body scan with a handheld 3D scanner can take several minutes, and requires the athlete to be as still as possible during this time. By only scanning one position we can reduce both the physical effort and the time needed by the athletes.

This work presents an approach to modifying a single geometry for posture analysis using a technique from digital computer animation. Skeletal animation uses a virtual skeleton made up of interconnected joints and bones, which serves as the underlying framework for the 3D model of a person’s anatomy. This technique often employs a process called rigging, where each bone in the virtual skeleton is associated with specific vertices of the 3D mesh, enabling the mesh to deform and move as the skeleton is animated.

Skeletal animation has been widely utilized in sports science and biomechanics research [16, 17], and even in some CFD studies [18], but its use for aerodynamic posture analysis has not been thoroughly analyzed. The method could ensure more efficient use of the athletes’ time, as well as allowing larger parameter studies to be performed. In this work we apply the method to two different cases: aerodynamic investigation of the time trial arm position for a road bicycle racer and modification of a downhill skier from a standing position into a tucked position. We compare the resulting positions to scanned geometries, and perform CFD simulations to determine if similar results are obtained with scanned and digitally modified geometry models.

2 Methods

2.1 3D scanning

We performed the 3D scanning using the Eva handheld structured light 3D scanner (Artec3D, Luxembourg). The resulting meshes were detailed models with approximately 200 000 triangles. The athletes gave informed consent to participate in the study, and the study was conducted in accordance with the ethical standards of the University of Stavanger and the Declaration of Helsinki [19].

2.2 Virtual skeleton methodology

The virtual skeleton methodology relies on practices and algorithms from the computer animation industry. Here we are not concerned about the animation part, but use the same techniques as a way to adjust the position of an athlete in a structured way that allows for parametric study and optimization of their posture with respect to aerodynamic drag force.

In skeletal animation, the body is represented by two parts; a surface representation, which represents the physical representation of the body, and a bone representation, which is analogous to the human skeleton. The surface is typically a 3D triangular or quadrilateral mesh. The bones are organized in a tree-structure to allow interconnected motion.

Using a virtual skeleton to drive human body deformation was first introduced in Ref. [20] and Ref. [21]. In Ref. [21], they used Bézier surfaces to modify the surface mesh. Most commercial applications today can use any type of surface mesh and instead rely on variants of the skeletal subspace deformation technique to perform the transformation [22,23,24]. In this technique, a vertex in the surface mesh can be associated with multiple bones. This allows for instance joints to behave in a more natural manner, as the deformation of a vertex will be a weighted combination of the deformation of each connected bone. As part of this process, a set of weights is defined, \(w_{ij}\), that determines how much vertex i should be moved with bone j. A vertex, \(\varvec{p}\), is then moved according to the linear sum of all individual transformations:

$$\begin{aligned} \bar{ \varvec{p}_i} = \sum _{j=1}^{n} w_{ij}\varvec{T}_j \varvec{p}_i, \end{aligned}$$
(1)

where \(\varvec{T}_j\) is the \(4\times 4\) rotation matrix associated with each bone. The weights were calculated using a heat equation analogy [25], which ensures a smooth distribution of weights and properly accounts for the geometry of the surface mesh. A surface heat equation for the weights is solved for each bone:

$$\begin{aligned} -\Delta \varvec{w} + \varvec{H}\varvec{w} = \varvec{H}\varvec{v}. \end{aligned}$$
(2)

Here, \(\varvec{v}=1\) if the bone is the closest bone to the vertex, and 0 otherwise. The coefficient matrix, \(\varvec{H}\), is populated by the squared inverse distance to the nearest bone, \(\varvec{H}_{jj}=1/d(j)^2\), and 0 elsewhere. This leads to a sparse linear equation system that is solved using sparse LU factorization from the Eigen library [26]. Similar variants of the above method are available in most 3D design and animation software packages, such as Maya (Autodesk, San Rafael, California, United States), Cinema 4D (Maxon Computer, Bad Homburg, Germany), Blender (Blender Foundation, Amsterdam, Netherlands) and Houdini (SideFX, Toronto, Canada).

The above procedure was applied to the 3D-scanned athlete geometries to enable virtual modification of the posture. To compare the digitally altered positions against 3D-scanned target positions, we used the so-called Hausdorff distance between the two meshes. Given two meshes A and B with points given by a and b, the Hausdorff distance is defined as

$$\begin{aligned} H(A,B) = \max (h(A,B),h(B,A)), \end{aligned}$$
(3)

where h is the one-sided distance between points in mesh A and mesh B,

$$\begin{aligned} h(A,B) = \max _{a\in A}\min _{b\in B}||a-b|| \end{aligned}$$
(4)

In other words, the Hausdorff distance is the shortest distance from a vertex on mesh A to a vertex on mesh B. We used the utility from Ref. [27] to calculate this distance. Each vertex of the target mesh is used as input to the algorithm.

2.3 Computational fluid dynamics

Simulations were performed using the AeroCloud online platform for aerodynamic CFD simulations [28]. This platform uses OpenFOAM [29, 30] to perform simulations, but automates the generation of the mesh, numerical setup and post processing. The CFD setup was based on previous works on cycling [15] and downhill skiing [31, 32]. We give a short overview of the setup here, and refer to those studies for mesh sensitivity analyses and comparison to wind tunnel experiments.

Turbulence was modelled with the k-omega shear stress transport (SST) model [33], and with the SIMPLE method for pressure–velocity coupling. Second-order discretization schemes were applied for all variables. The size of the computational domain was \(20L\times 10L \times 10L\), where the reference length L was taken as the diagonal of the bounding box of the athlete geometry. This size of domain gave a blockage ratio lower than 3.0% for all geometries considered here.

Two cases were considered in this work, (i) a cyclist and (ii) a downhill skier. For the cyclist, the geometry was placed in the center of the domain, 5L from the inlet. We considered the geometry as static, and the bicycle was also removed from the simulation to save simulation time. However, the proposed methodology can also be applied with handlebars and bicycle included, by also adding virtual bones to these geometries. For the skier, the geometry was placed on the ground plane.

The inlet boundary used a uniform, constant velocity, with a zero pressure gradient. The velocity for the cyclist was 15 ms\(^{-1}\) and for the skier it was 25 ms\(^{-1}\). Low turbulence levels were assumed, with a turbulent intensity of 0.5 %. At the outlet, a fixed pressure was set, with zero gradient for any remaining variables. The domain’s sides utilize a slip boundary condition. As for the athlete, the body had a no-slip boundary condition, zero roughness, and a blending wall function. In the downhill skier simulations, the ground plane was treated as a solid surface with no slip and zero roughness.

For the numerical grids, a total of seven 2:1 refinement levels were employed near the athlete’s surface, resulting in a 0.3 mm cell size in the athlete’s vicinity. Moreover, 15 prism layers were added near the surface to resolve the boundary layer, featuring a minimum size of 20\(\upmu\)m and an expansion ratio of 1.2. This grid ensured a maximum \(y^+\) value of less than 2 and a mean \(y^+\) value of less than 0.5 across all cases. The total grid sizes consisted of about 25 million cells. The simulations ran for 6000 iterations, with the drag values determined by averaging the final 1000 iterations.

3 Results

3.1 Time trial arm position of a road bicycle racer

As an example of the application of the virtual skeleton methodology, we analyzed the arm position of the road bicycle racer for a time trial race. This example features relatively small modifications of the source position, where only the angle of the arms were changed. Figure 1 shows the two positions. For the first position (source position), the lower arms were slightly separated and parallel with the ground. For the second position (target position), the lower arms were held together and rotated slightly at the elbow so that the hands were closer to the face of the athlete.

Fig. 1
figure 1

Top: the source position (left) and the target position (right) for the time trial arm position analysis. Bottom: the right-arm virtual skeleton for the time trial arm position analysis

Since we focused on the upper body and the arms, we digitally added the hips and legs from the source position onto the target position to exclude any differences in the 3D scans for that part of the body. In addition to the change in arm position between the two 3D scans, we also observed some differences in the upper body and head position. This discrepancy occurred because it was challenging for the rider to maintain the exact same position between two 3D scans.

Next, we used the proposed methodology to adjust the source position to match the second position. The purpose was to see if we can get a position with the same order of magnitude difference as the naturally occurring differences, using as few virtual bones as possible and adjusting as few parameters as possible. The virtual skeleton for the right arm is shown in the bottom part of Fig. 1. For this case we added only one bone for the upper arm and one bone for the lower arm.

To modify the source position into the target position we adjusted one rotation value of the quaternion rotation vector for each bone. An animation showing the transition of the athlete geometry from the source position to the modified position is made available as Online Resource 1.

Figure 2 shows the resulting Hausdorff distances on the modified source mesh. We see that the distances for the modified arm position are of the same order of magnitude as the distances for the upper body and head. This finding implies that the errors made by scanning multiple times were similar to the errors introduced by using the virtual skeleton to modify the posture for this particular case. The maximum distance between the models was 22 mm and the mean distance was 2.5 mm.

Fig. 2
figure 2

Hausdorff distance for the modified source position compared to the target position (left), and the target position with the modified source position overlaid in blue (right)

Next, we performed CFD simulations to evaluate the aerodynamic drag of the positions. The calculated drag area for the source position was 0.157 m\(^{2}\), while the drag area for the target position was 0.143 m\(^{2}\). For the position modified from the source position using the virtual skeleton, the calculated drag area was 0.144 m\(^{2}\), i.e. a relative difference of 0.67% compared to the scanned position. This was considered good agreement, especially considering we only used two virtual bones and two angles per arm to adjust the position.

It should also be noted that according to the CFD simulations, the target position gives a 9 % improvement in aerodynamic drag force compared to the source position. This finding is consistent with previous findings [15], that keeping the forearms together and hands closer to the head yields a reduction in drag force.

3.2 Full-body posture variation for a downhill skier

In this section, we consider a case with larger postural changes. A downhill skier was scanned in an upright T-position (source position), and then modified into a fully tucked downhill position (target position). Figure 3 shows the scanned source and target positions.

The virtual skeleton applied to the source position is showed in the bottom part of Fig. 3, along with an example of the bone weights for the upper right arm. This is a more complex skeleton than the cyclist, with a total of 35 bones, to allow for complete control of the athlete’s posture. The bone weights illustrate how the modification of the upper arm also changes part of the shoulder and chest, to make the transition smoother. Online Resource 2 gives an animation of the transition from the upright T-position to the tucked position.

Figure 4 shows the Hausdorrf distance to the target position after modifying the source position. The maximum distance between the models was 22 mm and the mean distance was 3.9 mm. The errors are larger than for the cyclist position, which is expected since the modification here is larger. Most of the difference is found near joints, such as the neck, elbow, shoulder and hip.

Fig. 3
figure 3

Top: the source position (left) and the target position (right) for the skier position analysis. Bottom: the virtual skeleton (left) and example of bone weight (right) for the skier position analysis

Fig. 4
figure 4

Hausdorff distance for the modified source position (left) and the target position with the modified source position overlaid in blue (right) for the skier. View from front (top) and side (bottom)

The simulated drag area for the target position was 0.152 m\(^{2}\), while the modified position gave a drag area of 0.155 m\(^{2}\), i.e., a relative difference of 1.3%. This is a higher discrepancy than for the cyclist, but can still be considered acceptable, depending on the required accuracy and intended use of the results.

For posture analysis, it is important that not only the forces are accurately represented, but also that the actual flow phenomena are captured in a similar way. Figure 5 shows the cumulative drag area as it develops along the athlete’s body in the flow direction (See Online Resource 3 for a comparison of the overall flow features). In Sect. 1, there is an initial rise as the air hits the athlete’s hands and head. This is followed by a small reduction as the flow accelerates around the body. Next, the air separates from the underarms and the head causing the drag area to rise. Here, the two simulations follow each other closely. In Sect. 2, the air separates from the overarms and hits the front of the legs. There is some deviation here caused by the differences in geometry, as seen in the Hausdorff distance plot the largest variation in the models is in the elbow and shoulder region. However, the overall trend is similar. Next, the drag area reaches a plateau, as the legs are tilted slightly forwards the drag increase from air hitting the bottom of the leg is balanced by the acceleration of air around the top of the leg. The upper body does not contribute to the drag in this region as the air remains attached to the body. In Sect. 3, the air separates from the back of the legs, yielding a sharp increase in drag area for both geometries. In Sect. 4, this is followed by another increase as the air separates from the remainder of the body. The increase starts earlier for the modified geometry as the curvature of the back is slightly different in the two geometries, but again the overall flow behavior is similar. The root mean square error of the non-cumulative drag along the body for the modified geometry was \(5.1\times 10^{-4}\,\textrm{m}^{2}\). This example shows how the proposed methodology can capture the main flow features, even for the large postural changes applied here.

Fig. 5
figure 5

Cumulative drag area along the athlete’s body for the modified source position compared with the target position

4 Discussion

Table 1 Summary of mean Hausdorff distances and drag area values for target positions and positions modified using the virtual skeleton methodology

Table 1 gives a summary of the Hausdorff distances and the CFD simulation results for the 3D scanned target models and the models modified by the proposed methodology to match the target position. The differences in drag area are small, albeit larger for the skier, which represents a bigger positional change. Although no comparisons against experiments are included in this work, given the emphasis on the posture modification, the simulated values are in line with values reported elsewhere for similar positions [1, 15, 31].

The method has two main benefits. First of all, it is easier to isolate parameters in a posture. With 3D scanned models, the athlete may also modify other parts of the body when changing posture. This was seen with the cyclist model, where the head and shoulders also changed when the second scan with the modified underarm position was taken. Secondly, the method gives a way to automate changes in the posture. This allows large parameter studies to be performed to map the influence of postural changes. This also allows the method to be coupled to optimization methods, so that with the proper constraints optimum postures can be found.

There are limitations of the proposed methodology. Muscles are not represented, so that for instance bending an arm will not lead to a contraction of the biceps muscle. Hence, some of the geometry of a modified position will not necessarily be physically accurate. It is also easy to create positions which are not physically possible from a biomechanical perspective, for instance overlapping or overextending joints. The majority of the variation in the modified model was observed around joints, including areas like the neck, elbow, shoulder, and hip. This is mainly due to a well-known limitation of the skeletal subspace technique, that bulges and creases are created for large changes in joints. There are corrective techniques for these, such as dual quaternion skinning [34] or the use of additional joints and helper bones [35]. These techniques can be considered for future work if more accurate results are required. The limitations of CFD methods in general also apply. Although several validation studies exist in the literature, there are still notable uncertainties related to for instance turbulence modelling and the treatment of roughness on solid boundaries. There is a continuing need for more model development and validation across multiple sports.

5 Conclusion

This work analyzed the use of a virtual skeleton to adjust the posture of a 3D-scanned athlete geometry for aerodynamic CFD simulation studies. The method was applied to two test cases;adjusting the arm position for a cyclist, and modifying a downhill skier from an upright position to a tucked position. When comparing the resulting models to 3D scanned models, the differences were found to be small, with variation in drag values of less than 1% for the cyclist and less than 2% for the skier. The overall flow features were also found to be similar. The method allows for simple and efficient variations of postures for aerodynamic analysis in any sport where the athlete’s position is important for aerodynamic drag. The method is most accurate if the scanned position is close to the actual posture, but large postural changes are also feasible.