Final project for the master's degree in Computer Science A.Y. 2022/2023.
This thesis aims to empirically investigate the imaginable performance for data structures suitable for effectively representing extreme-resolution 3D polygonal surfaces designed for multi-resolution rendering on GPUs.
To this end, supporting algorithms will be designed, implemented, and tested that transform "traditional" (i.e., indexed) high-resolution triangular meshes into the analyzed data structures, and then measure the approximation errors introduced through appropriate geometric measurements.
Other alternative schemes will be studied, which are considered variants of the so-called "micro-meshes" scheme offered by the latest generation of vendor-specific GPU hardware. These data structures are characterized by the use of a semi-regular subdivision of a medium-resolution "base mesh," followed by displacement of the generated vertices. Variants introduced may include the adoption of an anisotropic subdivision step, the adoption of an irregular recursive subdivision scheme, or others.
- Qt
- OpenGL Mathematics
- The headers are placed in the directory
Dependencies\GLM
- The headers are placed in the directory
- PyMeshLab
As sample models in this repository, I've prepared different versions of Pallas Cat by printable_models
Executing this script will generate n samples for both subdivision schemes (current and variant). A table (as a text file) containing the face quality values (according to the inradius/circumradius metric) will be built for both batches of samples.
The table will be ordered by a factor F used, this will allow the comparison of one sample of a table with a sample of the other table, the factor modulates the intensity of subdivisions.
In the thesis, the comparison is also described using the face area coefficent of variation
The commands generate two batches of samples, and multiple executions of the commands are used for the analysis since multiple models are tested.
python face-stats.py --base-mesh=base.obj --target-mesh=target.obj
Default values if you omit some of the options:
--base-mesh = pallas_124.obj
--target-mesh = pallas_5000.obj
Exports the given base mesh's subdivided (not displaced) mesh.
anisotropic-micromesh.exe --base-mesh=base.obj --microfaces=100
In this example the base mesh is being subdivided by the amount of micro-faces passed (
F
can't be passed, since it works in function of the target mesh) using the current scheme ("isotropic" scheme).
Exports the subdivided and displaced mesh given the inputs
anisotropic_micromesh.exe gen-sample --base-mesh=base.obj --target=target.obj --scheme=aniso --factor=3.5
In this example the base mesh will be subdivided using the
anisotropic
subdivision scheme, with a factorF=3.5
(subdividing x3.5 times the faces of the target mesh).