Portfolio

NOTE: This section is in the process of being updated.

Here are some of the projects I'm working on on my own time. Most of the time, I've put the sources and an executable for you to try. I've also archived the oldest ones: Archives.

Index

Smoking Eyes - C++, Windows

Really fun project using OpenCV, an open-source computer vision library. I was surprised at how easy it was to use. The project basically detects the faces and eyes in a capture (avi video or camera input) and adds a smoking effect based on the Navier-Stokes algorithm on the eyes. Next step? I'll probably buy a depth camera (kinect?) and play with it. =)

Screenshots

Videos

https://youtu.be/kyMJ397qzyQ

Code and Executable

Project files

Project executable

ProDialog - C++, Windows

AI related project. I wanted to make a plugin for UE4 and Unity for better dialogs. The api lets the user define a series of rules and dialogs (database) and searches those based on current game states. For instance, a rule could be something like: say "This is quite the dangerous clown!" when "player is in the clown's house", "player has less than 25% health", "clown is attacking player for the first time". In other words, the api gives the designer an easy way to define contextual dialogs affected by previous events (memory), current states (character's health, etc), etc. This api is based on the technology behind valve games (Half Life 2, Team fortress, etc).

Screenshots

Code and Executable

Project files

Project executable

Component game engine - C++, Windows

This project is a game engine where every objects is made out of components. For instance, an objects adds a mesh component to render itself in the scene. The concept is quite similar as Unity's. The biggest difference will be the exclusive usage of c++ for everything, including "scripts". In other words, the user is able to modify the C++ code of an object real-time - while the game is running. The tool to reload the c++ code will use dll injection and a pdb reader to find function addresses (compared to dll getProcAddress in most similar systems).

Update 1: Easter w/e gave me the perfect opportunity to test the component design - I started integrating the most complicated effect I could think of ("Real-time Realistic Ocean Lighting using Seamless Transitions from Geometry to BRDF" (E. Bruneton, F. Neyret, N. Holzschuch, Eurographics 2010) with the FFT-based ocean synthesis method of "Simulating Ocean Water" - J. Tessendorf, Siggraph 2005 course notes). I learned a lot this weekend. For instance, the component system makes it real easy to design and add new features.. even complicated one. It's the first graphics engine I make or even work on that feels as easy to work with. It feels to me that components are similar to having localized and contextual singletons so it's super easy to use. The big downside is that the more components you have, the slower the app will be - so it explains why Unity is reknown for that exact issue. Since my engine is meant for small scale projects though, this is no problem at all. Sometimes though, it's hard to keep it component designed.. it's easy to revert to old design habits and realize some member variables should be made into components.

Screenshots

First version is quite simple indeed.

Update 1: Sky is done (clouds not done though)!

Code and Executable

Alternative_XXX.zip

Non blocking server - C++, Linux

I've made this server that doesn't block on any connection accept or data receive. I've included 2 versions, 1 that has the bare minimum and another one that uses the messaging system I've made in the free stuff section of this website.

Code and Executable

nonblocking_server_v1.zip

nonblocking_server_v2.zip

Voxel world - C++, Voxels, Software rendering

I'm not done with the graphics debugger, but I wanted to try my hands at a voxel engine. Not like minecraft though.. one what would be way more detailed and that could be destroyed real-time (see voxeltron for a good example). The biggest problem with that kind of design is the speed to modify a world that's composed of millions of voxels. The good thing is that in my case, I don't have to render more than 128X128X64 voxels... but it's still quite a lot. The best approach I've seen so far is to use a software renderer to render the cubes then send it to the GPU though opengl/directx.

I finally have a software renderer that can render the cubes. You can see that I've optimized it quite a lot... but it's still not enough unless I keep the scene to something similar to voxatron (the game). I'd like to push those limits so I'm still trying to optimize. Right now, it's possible to change any amount of voxels and the rendering changes on next frame without any lags.

Updates

- Custom Software renderer thread optimized gave me twice the speed!

- Added a really fast and optimized ray box calculation (mouse picking) to the renderer (for the editor).
Reference: "An Efficient and Robust Ray-Box Intersection Algorithm", "http://www.rastertek.com/dx11tut47.html"

Screenshots

FPS and amount of cubes (not triangles) is shown above. Note that each cube is composed of 3 faces (6 triangles).

Just added some new optimizations - I was able to double the fps with some threading!! I made sure not to use a z buffer but I have quite a few ideas if I need to optimize further. For now, that will do.. the second image should be near the normal amount of triangles in a normal game instance.

Adding voxels is now easy to do! Saving and loading is fast enough for now (load in place algorythm) but I can do better by encoding colors as a integer instead of 4 floats. I also simplified the rendering so I gained a little FPS there as well...

Can now save and load maps, select different colors for the voxels, etc. Still in the work but things are going well!

Tried to convert the application to flashcc - though I do have good performance in c++, seems like flashcc is a little too much.

Executable

MiniVoxelBin.zip

top

GfxDebugger - C++, Dll injection, Function hooking

The GfxDebugger is an application that connects to another one and provide meaningful information regarding testing for production use. For instance, upon connecting to the targeted application, GfxDebugger will start recording image data, audio data, statistics like fps or cpu usage, etc and will save those for debugging of the targeted application. GfxDebugger will also provide a way for the user to fill out a bug using Jira and/or Bugzilla from within the application and attach all the data to the bug report. Quite useful for Gfx bugs or even optimizations! In a way, GfxDebugger can also be used simply for recording videos of a game and so on (quite similar to fraps actually).

GfxDebugger is an application meant to be used by game developers. It uses different technologies I will be using on different projects as well like Dll injection, function hooking and graphics api like DirectX and Opengl. If you download the code, you'll see some nice class utilities that can be easily reused. I would appreciate that those are not misused (some people had to remove those kind of classes because some people would create viruses and stuff like that).

Interesting facts:

  • FrontEnd (retrieves running processes, etc) -> Dllnjector (32 bits or 64 bits injectors injects in the targeted app) -> TargetedApp (loads the injected dll through a thread started by windows function)
  • The FrontEnd and the TargetedApp communicate through shared memory (see boost interprocess communication) because the FrontEnd is 32 bits only and can inject in both 32 bits and 64 bits app. Shared mem is compatible with both and super fast.
  • DllInjection uses the LoadLibrarry method to inject itself.
  • Hooking is done by overwriting the overwritten functions Opcodes (either 32 bits or 64 bits opcodes).

Screenshots

Sources

Will soon be available - I have to think things through considering the availability of some "hacking" classes to inject code in a running application.

top

DuskLib - C++, Leadwerk engine, Opengl

This is a "game engine" I've been working on. It's currently being used in a few projects (wheelchair simulation for instance). The engine also contains tools like a scene editor and a GUI editor (C#).

Screenshots

Executable

Demo: contain a scene editor and gui editor. Logic done through lua scripting

Source

Source of a demoapp using the lib (does not contain the lib since it's quite big)

Example of what's inside the API: sound module.

top

Sofware renderer - C++, my own 3D API

This was a really fun project. I wanted to make sure I understood the graphics card properlly so I decided to create my own software renderer. It has all the basic stuff like fog, camera culling, gouraud shading, etc. All matrix/vector maths are done with my own code. I called the project 3DGDI since it uses Windows GDI's rendering function to render 3D objects.

Screenshots

Video

Executable

GDI3D_executable.zip

Sources

GDI3D_source.zip

top

Armageddon - C++, SDL/OpenGL

I've made this game with 5 other people in the latest Global Game Jam. We took less than 48 hours of our lives to create quite a fun game! =) I've cleaned the code of the biggest memory leaks and modified the AI a little to fit what was in the artist's mind (I prefer the previous AI) since then.

http://www.globalgamejam.org/2011/armageddon

You can also use the executable I've placed below (bugs, different AI, etc).

Screenshots

Video

Executable

Armageddon_executable.zip

top

Projet WheelDrive - C++/Java, Opengl

This project is a simulation for electric wheelchairs. The project was made together with Univertsite de Montreal and Ste-Justine Hospital.

Screenshots

top

Dobbball's - C++, DirectX

Little dodgeball game I made for fun. Made my own 2D physic engine and had all playtesting done by my little nephew... He played for quite some time so I assume this was a success!

Screenshots

Video

Executable

SuperDobbsBall_executable.zip

top

Totros - C++, PSP

I bought a Portable PlayStation for the sole purpose of creating games on it. The first game I made was this little "tetris" game.. The good thing about this one is that you can play on PC to test it out.

Screenshots

Video

Executable

Totros_WIN32_executable.zip

Totros_PSP_executable.zip

top

strrpg - C++, HGE, 2D

I wanted to try out rendering a 2d isometric game. It gives some nice screenshots considering the programmer arts in there. I've also used this project to test out some AI design and stuff like that. For instance, I added some lua scripting and A* pathfinding.

Screenshots

Executable

strrpg_executable.zip

top

Interview question: What motivates you?

I personally love ...

Read More

Interview question: Why should you be hired?

Until just a few minutes ago, I never realized that ...

Read More

Social

  • LinkedIn
  • adam _ galarneau (at) yahoo . com