## 1 Introduction
### Mesh Optimization and Texture Mapping  
Highly detailed and realistic 3D models, produced from photogrammetry, commonly contain a large polygon count which is difficult to manage in a real-time rendering environment. A large number of polygons of such files make it difficult to import and handle in the game-engines intended for creating VR due to the file size. Thus, the high-poly 3D model has to be reduced to the low-poly mesh. On the other hand, for the successful user experience in VR, it is important to maintain the realism of an object 3D reconstruction. It is important to preserve the texture resolution as much as possible. Therefore, mesh optimization is closely related to texture optimization. The most commonly used approach to reduce the polygon count without losing the visual quality of the 3D reconstructed model generally follows the three-step pipeline [19; 21; 33; 34]:  
* Decimating mesh or/and mesh retopology
* Unwrapping
* Baking mesh maps  
Both techniques, mesh decimationand retopology, have the same main goal: to decrease the number of polygons while conserving as much of the surface detail as possible. Retopology is a transformation of a mesh from a system of triangles to a system of spatial quadrilaterals [35]. There are several software solutions for the cleaning model from redundant geometry, mesh optimization, ettopology and repairing the texture such as ZBrush, Blender, 3 ds Max, Wrap 3d, Mudbox, MeshLab, Substance Painter, etc.  
Retopology is usually performed in ZBrush [19; 21; 34], using the ZRemesher tool. In addition, MeshLab [19; 36], can be also used for both the decimation and the retopology, as it presents an open-source 3D mesh processing software that provides a set of tools for editing, cleaning, inspecting, rendering, and converting unstructured large meshes. In some cases, the CAD software 3 ds Max [33] can be used for mesh decimation, but dealing with the high-poly 3D models such as photogrammetric SfM models, automatic decimation in 3 ds Max very often crashes or causes geometric errors like self-intersections, holes, and flipped normals [33].  
As it has been already mentioned above, mesh optimization is followed by texture optimization. Texture optimization consists of two main complementary steps: mesh unwrapping (UV mapping) and maps baking. Both techniques can be performed by any 3D application that supports unwrapping and texture baking.  
Mesh unwrapping is a key process for adding textures appropriately on top of a 3D mesh. In a general workflow, a low-poly model is unwrapped by generating UV coordinates for each vertex in the mesh, thus flatting out the three-dimensional mesh on a map.  
Baking textures implies creating maps from the high-poly model and projecting them to the low-poly one, in order to simulate the original high-resolution geometric details on the optimized mesh [19; 21]. It is a technique that makes it possible to transfer the characteristics of 3D geometry into a 2D texture. The main characteristics that can be baked are the ones from the isolated attributes, such as normal, vertex colors, ambient occlusion [37], which adds to the realism in terms of details, as well as ambient lighting and shading of the low-poly mesh. The normal, albedo or diffuse map, ambient occlusion map are most commonly used inside a real-time engine, together with the roughness map, and the metallic map [19], all of which keep high realistic details of the high-poly object geometry on the low-poly one. In addition, it is possible to bake multiple, combined characteristics including materials, textures, and lighting all baked into a single texture [37]. This way, the low-poly 3D model and the high-resolution texture maps, separately imported into a real-time game engine can be easily handled for creating a fully performative VR experience.