Vall Engine

Vall Engine is a simple 3D graphical engine that has functionality to import and view fully textured 3D models. The lighting can be adjusted and changed, and the models can be moved and scaled in 3D space. The main use for Vall Engine is to view your models in different lighting with different environments. The camera can be moved freely in the scene, which allows the user to view the models from different angles and lighting positions. The imported model details can also be viewed in Vall Engine's user interface.

Image of Vall Engine where the objects in the scene are arranged in such a way to mimic a video game level
A sample scene with imported objects and textures
Image of a dramatic scene in the 3D engine
Project Objectives

The main objective of this project was to explore two avenues I was always interested in; software engineering and 3D rendering.

Creating 3D worlds has always been an interest of mine, from making models on Blender to working on game in Unity and Godot. I was always fascinated by these engines and how they display 3D space, so I wanted to learn these concepts and try my hand at making my own 3D software.

The main goal of this project was to create a very simple engine that can import 3D models and textures, transform them in 3D space, and change the lighting in the scene. I also wanted to create an intuitive camera that can move around the scene freely. These concepts were researched in detail during the writing of my thesis, which helped me progress my knowledge in the field of 3D rendering.

Project Outcomes

I started this project knowing little to nothing about the techniques, theories and workflows involved in creating 3D software, or even standalone software in general. I learned a lot about the concepts of creating 3D software during the development of Vall Engine. The intricacies of developing a 3D rendering engine have given me a greater interest in 3D software development, and I would like to pursue this area of research further.
The process of developing this software was extremely difficult and time consuming, as every new little echancement to the codebase required hours upon hours of research, considering the complexity of 3D rendering. This project was originally meant to be a game engine project, but it quickly dawned on me how complicated it is to create any 3D software functionality. The project had to be scaled down to only include 3D rendering and some basic functionality, which by itself was still a complicated process.
The final project is not as feature-rich as I would like it to be, but I think its a good representation of the full range of research I did during the development process.

Thesis: A Study on the Development of 3D Graphical Software

The thesis is structured around one research question; How does 3D rendering actually work?

There are a few key questions this thesis poses and then answers with detail.
1. How do you program a window?
2. How does 2D rendering work?
3. How do you move up to 3D rendering?
4. How are objects represented in 3D space?
5. How does a camera work?
6. How is a graphical user interface created in C++?
7. How are 3D models imported into the software?
8. How does basic lighting work in a 3D environment?

These questions lead into core concepts that are key to the research undertaken in this project. These core concepts involve graphics workflows, rendering pipelines, 3D mathematics, engine systems engineering and so on, which are discussed at length in the paper. These concepts are directly used in the programming and development of the thesis project.

The main conclusions of this thesis revolve around very specific programming practices for 3D software and shader code. One of the main conclusion is also that 3D software engineering is extremely difficult and time consuming.

Image of Jan Pantic standing next to two paintings
Jan Pantic
BSc (Hons) Creative Computing

My name is Jan Pantic and I'm an aspiring software engineer and game developer from Croatia. I also draw and paint, and I enjoy creating 3D worlds for people to explore digitally. My goal is to improve my skills in both art and programming so I can create more interactive, interesting video games and digital experiences, such as adventure games, art exhibits and so on. I like to work on difficult problems and always try to gain a deep understanding of the concepts I deal with in programming and game design.

BSc (Hons) Creative Computing