Below is a collection of some works I have created during my Bachelors degree. They were made around 2011-2013.
As a final-year graphics module at university, I had to work on exploring real-time translucency. The technique I ended up using is based upon Translucent Shadow Maps (TSM). I did, however, cite multiple papers, combining mathematical approaches to find one that works best for me. One paper that was rather useful was Image-Space Subsurface Scattering for Interactive Rendering of Deformable Translucent Objects, as it covered the Rd function rather well. Another that was helpful was Interactive Rendering of Translucent Objects; I think that this paper described the detailed math better than TSM. A Practical Model for Subsurface Light Transport is another essential reference that was used.
Below are a series of images of various models with and without translucency in a multi-light environment.
3D Shooting Range
For an assessment at university, we were tasked with creating a 3D game using Microsoft’s XNA framework (RIP). After many iterations of various games, I settled on creating a firing range shooter. The focus was mainly on the weapon handling (e.g. aim down sights, recoil). My experience working with XNA has taught me how easy it is to hypothetically shoot yourself in the foot when you start to rely upon frameworks that are designed to be highly abstracted. This project especially taught me how important planning is, as I went through roughly six plans (ranging from flight sims to a highly functional Minecraft Alpha clone) until I ended up with the final product.
This game has players complete increasingly difficult rounds in which they must reach a certain score by accurately shooting static and moving targets within a given timeframe. There are two weapons to choose from, each with their own pros and cons. Both weapons can be aimed down the sights or fired from the hip. The last bullet to bring the player up to or over the score limit enters a special follow camera which orbits the bullet in slow motion until it reaches the target. There was support for both Xbox 360 controllers and mouse.
For an assessment at university, we had to create a basic rigid body simulator consisting of various primitives. We were given the freedom to pick any framework to write the simulation in. I picked Unity because the rendering, of which we were not marked on, is already complete, allowing me to focus more so on the simulation side of things. Unity also provides quick and easy ways to visually debug elements, such as drawing vectors in 3D space, which helped during development astoundingly.
The simulation itself wasn’t the best, but I am happy with the results considering it was my first attempt at such a task. Although sleeping of bodies was implemented, waking was not. I looked in to many solutions to waking bodies, including cell-based waking, where the world is split into containers and all bodies within a container are awaken when a moving body enters that cell. Unfortunately, due to time constraints, I was unable to implement this feature.
The test scene was somewhat of a playground where the player could fly around at their leisure. Clicking and interacting with the mouse let the user throw around and manipulate objects. Primitives could be launched first-person from the camera on demand. Objects could be also selected for inspection of their physics values.