Monday, August 14, 2017

Developing a Rendering Engine for Desktop, Mixed Reality Simulations, and Training

3D Graphics and Geometry

This small section is representative of me working in a multi-operating system (Linux and Windows) environment and gaining an understanding of the GPU, 3D geometry creation, OpenGL, C++, and the usage of other libraries and APIs to eventually generate a mixed reality environment for training.  As shown in the images below models were built vertex by vertex as well as efficiently managing GPU memory usage due to many of these models containing millions and millions of vertices within their geometrical structure.  

It served as a basis for me to develop my own rendering engine using OpenGL to support training and simulation.  Understanding GPU operations, Model-Based System Engineering (MBSE) architectures, OpenGL, C++, agile methodologies, and object-oriented programming (OOP) approaches allowed for me to develop an engine that could take (import) in both simple and complex geometrical model data of multiple formats.  I was also able to incorporate subsystems such as sound, texturing/materials, lighting, and events.  That led to the development of my interdisciplinary dissertation research topic the Construction of 3D cardiopulmonary resuscitation emergency scenarios for first responder pre-nursing training on stereoscopic display systems


That allowed me to start developing various environment configurations to decide on the first steps to testing and later deploying my training simulation to enhance and reinforce the user's capabilities for specific tasks or objectives.  Please see the images below that help demonstrate me gaining an understanding of developing a rendering engine as well as understanding virtual and mixed reality development, 3D geometrical structures, MBSE, system of system integration, GPUs, memory management, architecture development, software management and deployment, and the OpenGL rendering pipeline.


Note: It is important to note that although these skills focused on software engineering and visualization they are easily transferrable to different use cases outside of those expressed here.  Also the developed engine can be expanded to support various use cases, graphical environments, or functionality.

Visualization of Basic Geometrical Shapes Using a CAVE System

The below image shows a 4 walled CAVE system using two projectors per wall to represent stereoscopic depth when using polarized glasses and a tracking system to visualize geometrical objects in a three-dimensional capacity simulating virtual reality.


3D Models Fully Rendered by the Newly Developed Rendering Engine

As a good testing medium models from the The Stanford 3D Scanning Repository where used to test in developing a system capable of rendering heavy geometrical data of scanned models.  At the time these models served as great models for testing and ensuring that the engine and code were developed efficiently due to their level of complexity.  This also assisted me in generating functionality that guaranteed that I incorporated the ability to visualize both simple and complex geometry to configure mixed reality stimulation environments.  The engine could also be used to visualize environments as a desktop application, which I used to initially build simulation environments to better understand the configurations needed for my future research projects.


icon

Armadillo
Source: Stanford University Computer Graphics Laboratory
Scanner: Cyberware 3030 MS
Number of scans: 114 (but only 60-70 were used in vripped model)
Total size of scans: 3,390,515 points (about 7,500,000 triangles)

Armadillo Geometrical Reconstruction within the Engine


Testing Visualizing Every Vertices of Complex Models using The Stanford Bunny

icon icon
Stanford Bunny
Source: Stanford University Computer Graphics Laboratory
Scanner: Cyberware 3030 MS
Number of scans: 10
Total size of scans: 362,272 points (about 725,000 triangles)
This was one of the first big test that led to the development of material and lighting systems, as well as properly storing and managing memory after importing geometry.  As you can see though each image below, I rendered specific amounts of vertices to start incorporating code to support storing the entire model and defining a proper structure to import the geometrical data.  

Testing, Capturing, and Visualizing Model Data Vertex by Vertex




Visualizing Geometrical Data Output to Monitor Incoming Data


Generating the final Geometrical Data Structure Model






No comments:

Post a Comment