Tuesday, August 25, 2015

Deferred renderer

Language: C++
APIs: DirectX 11, Win32

Description:

- Phong lighting
- Texture rendering
- Forward rendering
- Dynamic lighting calculations
















Video: https://www.youtube.com/watch?v=i3zYelGMcDA
Ray tracer

Languages: C++
Libraries: SFML, Boost

Description:

- Hard shadows, soft shadows (Monte Carlo ray tracing)
- Anti-aliasing SSAA
- Procedural chequered texturing
- Reflection / Refraction
- Point, directional and area lights
- Phong / Blinn-Phong lighting models
- UI to adjust the settings in real-time or per frame basis
- Multithreaded implementation


Rendering framework 

Languages: C++, GLSL
Libraries: GLEW, GLFW 
API: OpenGL

Description:

-          Phong lighting, supporting directional and point lights
-          .obj model loader and texture rendering
-          Normal mapping
-          Parallax mapping
-          HDR and tone mapping


Displacement scale 0.1
Exposure 0.1
HDR on
Gamma 2.2









Displacement scale 0.05
Exposure 0.1
HDR on
Gamma 2.2
Displacement scale 0.05
Exposure 0.2
HDR on
Gamma 2.2
Displacement scale 0.1
Exposure 0.1
HDR off
Gamma 2.2
Displacement scale 0.1
Exposure 0.1
HDR on
Gamma 10.0
Displacement scale 0.1
Exposure 0.8
HDR on
Gamma 2.2
Displacement scale 0.2
Exposure 0.1
HDR on
Gamma 2.2
Real-time interaction of fluids with deformable surfaces

Language: C++
Libraries: SFML, Boost
Undergraduate dissertation

Description:

This application represents a fully unified particle based framework for simulating real-time interactions between fluids and soft-bodies. The implementation is based on position based dynamics and incorporates two constraints for simulating the phenomena mentioned above: density constraint to satisfy the incompressibility for the fluid simulation and shape matching constraint to simulate large deformations. The two simulations present a full two-way coupling method which is based on the recent research in the area of physically based animation. The focus of the implementation is on speed and stability, the intended use of the framework being real-time simulations.


Video: https://www.youtube.com/watch?v=0D94Ul6HmPU



Language: C++
Tools: Unreal 4, Oculus Rift
Team Project: 6 artists and 5 programmers

Description:

Cerberus Novem is a two player, horror survival game based on the backseat player concept. One player plays from a first person perspective and is responsible to get to the A.I. room to retrieve the A.I. of the space station. To enhance the experience and help implementing the backseat player concept, the player will use the Oculus Rift and will be guided through the space station by the backseat player.
The backseat player plays the role of the space station’s A.I. and is presented with a top-down perspective, this allowing him to build a short term strategy for helping the oculus player to avoid the space station treats and navigate to the A.I. room.
To add depth and replayability, there are two unpredictable elements (the random blockades and the invisible A.I.s) and a treat in form of radiation which constantly goes up and increases its rate depending on how close the A.I. characters are to the main player. 

Responsibilities:

-  Core gameplay mechanics – CCTV camera system, sliding doors, random path generation (random blockade positioning)
-  Material creation – fog of war to hide the contents of the rooms
-  UI – dynamically scaled icons for the top-down perspective based on the horizontal distance to the camera
-  Configuration files – custom dictionary loaded at runtime and accessible from anywhere within the game

Video preview: Cerberus Novem

Sunday, May 26, 2013

The Exciting Adventures of Fred Herring

Language: C#
Tools and resources: XNA, Photoshop, TortoiseSVN
Requirements: .NET Framework 4, XNA Framework Redistributable 4.0
Team Project: 6 programmers and 6 artists

Description:

"The Exciting Adventures of Fred Herring" is counter-intuitive puzzle game with RPG elements which plays with player's expectations. The game is built upon a very strange but unique idea. It features pixel graphics and has a very simple gameplay style while putting the player in very difficult situations. As soon as you discover its flavor it shows a contrast between its appearance and its gameplay. The game illustrates an excellent balance between its rewarding side and the difficulty of the puzzles by letting the player to succeed even when they don't expect that. The game puts the player in control of Fred Herring who suffers from insomnia. The ultimate goal is to explore the house, collect the sleeping pills and find the mystery behind the character.The game does not have a predefined gameplay path, the player being able to solve tasks in almost any order. The search for the sleeping pills will take the player through different environments ranging from TV world, to Food land, Space and Dream world. 

The game is free and available for download from:  The Exciting Adventures of Fred Herring

Data Visualization Web Site – World Population

Languages and tools: PHP, JavaScript, Ajax, HTML
API: Google Maps API

Location of the country abbreviation data: http://161.111.170.202/herb/countrycodes.html


Description:

- The purpose of this web application is to provide a quick overview of the population distribution within a country and if taking into consideration the size of circles in the heatmap, an overview of the population density.

- The application is built using the Google Maps API and uses their visualization library in addition to the default functionality provided by the API.

- The application needs to pieces of information as input: the name of the country and the population limit. The population limit is very important since it is the decisive factor when creating the visualization. The application will consider when building the visualization only the cities in the chosen country which have a population above the population limit.

- For a very detailed representation, it is necessary to use a low limit, which means the application will consider more cities when building the heatmap.


Data manipulation:

- The application uses the MySQL database provided by Windows Azure which is automatically linked to the web-site. It contains two tables, one which was populated with data from the original data source using Navicat and one additional table which contains a match between the country abbreviation and the name of the country. The second table was needed because I wanted to give the user the possibility of searching a country by its name instead of its abbreviation.

- Once the country value was entered, and the user hits “Search”, the application will use the second table to find the corresponding abbreviation for the input country.

- Then, using that abbreviation, it queries the original data for different information like name of the city, latitude, longitude and population which are then used to implement the actual visualization.

- In order to create the tables in my database and fill in the data, I set up the connection to my database using Navicat and then using the built-in Import Wizard, I parsed the input data source and I populated both tables.


Features:

- The application uses the latitude, longitude and the population value for each city from the database to build a heatmap layer which illustrates the population density. Google Maps API builds the visualization considering the weight of each point which in my case is the population and the location of the point. 

- The main web page provides three different settings which can be used to customize and enhance the visualization depending on the input used. The first two offers two sliders for the user to change the radius scale of the circles which are used in the representation and a slider which changes the opacity of the visualization. The third setting is the Dissipation which, if it is checked it will adjust the represented data depending on the zoom level.

- To obtain a much better representation of the data, the application maps the population values to a custom interval which depends on the extreme population values. Each population value will be mapped to the interval [0, maxPopulation/minPopulation].