I worked in a small game development team for a year in 2018-2019. I worked on three small projects there, and fortunately, I was allowed to share some information about them, some challenges, solutions.
Project 1
I worked on this project with one artist, and two other programmers. My task was to implement the renderer and the terrain system. For rendering I used a simple image-based lighting, with precomputed radiance and irradiance maps. The water was rendered as a flat plane, using precomputed normal maps that I generated offline with another program I wrote which used FFT. I worked alone on the terrain, I implemented the height modification, painting, road and billboard placement, and tiling to avoid repetitiveness in the material of the terrain. Drawing the terrain from scratch in every frame turned out to be slow, so I cached the terrain textures by making a virtual texture system.
We used an in-house engine made by one of the other programmers earlier, but I did’t use most of its features. For graphics programming I used OpenGL directly without any abstraction layer. (It seemed unnecessary to write such an abstraction). Later, I got the task to make the game work with Metal instead of OpenGL, so I learned the basics of Metal and Swift, made a graphics interface, and implemented it with OpenGL in C and with Metal in Swift. This was successful, although the game (not surprisingly) ran pretty slow on an iPad Air 2.
In the video below a GeForce GTX 950m GPU was used.
Project 2
I worked on this project alone, for only 2 weeks. It was about experimenting with skin rendering by implementing this technique. The pictures below show some results. Around the seams, the dark blueness is caused by the fact that the blur used for subsurface scattering was done in texture space, so some of the red light (which travels further in the skin than the blue light) “flows out” of the relevant part of the texture. This issue was solved by using artist-made textures where the alpha channel indicated how close we are to the boundary. With this information I was able to use much simpler regular shading and turning off the skin shading around the seams.
Project 3
This project was about making a relatively simple multiplayer fighting game for ios using Unreal Engine 4. I worked on it with an artist. During this project I learned some features of Unreal, its architecture, multiplayer and dedicated server support. Also, I had to write a master server to this game using libwebsockets, which kept the connection with the active game servers, and provided valid game server ip addresses to the clients. Honestly, unlike the other two projects, I didn’t like to work on this, I spent most of the time fighting with the engine, trying to understand the (mostly non-existent) documentations, and waiting for the code to compile.



