Roman Kuznetsov, PhD

Experienced Software Engineer in C++ and Rendering.

Career

Meta

London, United Kingdom

Software Engineer

Dec, 2020
Dec, 2020 - Present
  • Developing rendering technologies for Meta Reality Labs.

Mapbox

Minsk, Belarus

Senior Software Engineer

Nov, 2019
Nov, 2019 - Nov, 2020
  • Designed and developed rendering engine for Mapbox Vision SDK (OpenGL ES3, Metal);
  • Developed rendering algorithms for AR, patented “Rendering Augmented Reality with Occlusion”;
  • Developed mapbox-gl-native rendering engine for maps (3D terrain rendering and other features).

VK (former Mail.Ru Group)

Moscow, Russia

Senior Software Engineer / Tech Lead

Mar, 2015
Mar, 2015 - Nov, 2019
  • Developed rendering engine (OpenGL ES2, OpenGL ES3, Metal, Vulkan) in C++ for MAPS.ME project, offline maps for iOS and Android;
  • Was a tech lead in MAPS.ME product team, was responsible for rendering and core C++ libraries, set up technical direction for product in collaboration with iOS and Android tech leads;
  • Implemented multiple systems for client-server communication (bookmarks cloud backup, real time analytics, travel guides synchronization);
  • Profiled and optimized performance of MAPS.ME that was able to fully work on low-capable devices.

Alawar

Novosibirsk, Russia

Senior Software Engineer / Technical Producer

Nov, 2012
Nov, 2012 - Sep, 2014
  • Developed internal tools in C++ and C# to support game publishing business of Alawar;
  • Developed common game libraries for game studios publishing games in Alawar;
  • Developed games for iOS and Android in internal studios of Alawar (Montezuma Blitz, Farm Frenzy and Friends, Epic Forces and others);
  • Technically produced games of external and internal game studios working with Alawar (audit, code review, consultations).

Forward Development (former Multisoft)

Novosibirsk, Russia

Junior/Middle Software Engineer

Nov, 2007
Nov, 2007 - Nov, 2012
  • Improved, maintained and optimized rendering engine (based on Nebula 2 Engine);
  • Implemented rendering algorithms (soft shadows, postprocessing, sky rendering, rain and snow rendering, realtime reflections and others);
  • Integrated Direct3D 11 renderer and multi-screen rendering;
  • Developed new world editor on C# and Ogre3D.

Projects

All
OpenGL
Metal
Vulkan
DirectX
Unity
CUDA

Skills

Programming Languages

C++

Expert

Java

Advanced

Objective-C

Advanced

C#

Intermediate

Swift

Intermediate

Python

Basic

TypeScript

Basic

Kotlin

Basic

Graphics API

OpenGL

Expert

Metal

Advanced

DirectX

Advanced

Vulkan

Intermediate

SPIR-V

Intermediate

CUDA

Intermediate

Engines

Unity

Intermediate

Ogre3D

Intermediate

Unreal Engine

Intermediate

Others

CMake

Advanced

React

Basic

PostgreSQL

Basic

MongoDB

Basic

OpenCV

Basic

Academic

Doctor of Philosophy in Computer Science

Novosibirsk State Technical University
Degree
Thesis: "Digital holography in industrial non-destructive measurement systems"
Digital HolographyImage ProcessingParallel Computing

Engineer in Computer Systems and Networks

Novosibirsk State Technical University
Degree
Thesis: "Realistic 3D rendering of natural effects in real time"
Computer GraphicsImage ProcessingParallel Computing

Bachelor of Engineering in Computer Science

Novosibirsk State Technical University
Degree
Thesis: "Educational framework WebTransLab for compiler development"
CompilersAlgorithmsData StructuresSystem ProgrammingMicroprocessorsNetworks

Algorithmic Toolbox Course

University of California San Diego
Certificate
The course covers algorithmic techniques for computational problems arising frequently in practical applications: sorting and searching, divide and conquer, greedy algorithms, dynamic programming.
AlgorithmsData Structures

Assistant lecturer

Novosibirsk State Technical University
Teaching
"Java Programming" course

Visiting professor

Moscow Engineering Physics Institute
Teaching
"С++ Programming" course
Download lectures (in Russian)

Publications

United States Patent

RENDERING AUGMENTED REALITY WITH OCCLUSION

Patent
Abstract
AR elements are occluded in video image frames. A depth map is determined for an image frame of a video received from a video capture device. An AR graphical element for overlaying over the image frame is received. An element distance for AR graphical elements relative to a position of a user of the video capture device (e.g., the geographic position of the video capture device) is also received. Based on the depth map for the image frame, a pixel distance is determined for each pixel in the image frame. The pixel distances of the pixels in the image frame are compared to the element distance, and in response to a pixel distance for a given pixel being less than the element distance, the pixel of the image frame is displayed rather than a corresponding pixel of the AR graphical element.
Publication language: EN
habr.com

Apple Metal in MAPS.ME

Article
Abstract
In the article, the integration of Apple Metal into the MAPS.ME project is described. The difference between Metal and OpenGL ES and their place in the MAPS.ME rendering engine Drape is considered. The results of frame rate and power consumption analysis for Metal in comparison with OpenGL ES are given.
Publication language: RU
habr.com

Traffic congestion rendering evolution in MAPS.ME

Article
Abstract
The traffic congestion visualization on the map is a complex engineering task including data collection, aggregation, compression and rendering. In the article, the rendering of the traffic congestion over the map in the MAPS.ME project is considered. The rendering technique is described, tradeoffs between frame rate and memory consumption are presented, the key metrics and results are given.
Publication language: RU
habr.com

Navigation data rendering in MAPS.ME

Article
Abstract
In the article, the navigation data rendering over the map in the MAPS.ME project is considered. The rendering techniques for route, maneuvers directions, route clipping in OpenGL ES are presented.
Publication language: RU
habr.com

Global Illumination in custom shaders in Unity 5

Article
Abstract
In the article, the Global Illumination integration into custom shaders in Unity 5 game engine is considered. At first, the process of creating a custom surface shader is given, a custom PBR shader using Cook-Torrance lighting model is introduced. Then integration with the Unity Global Illumination system is presented. In conclusion, rendering results are demonstrated.
Publication language: RU
habr.com

Rendering engine architecture in MAPS.ME

Article
Abstract
In the article, the architecture of the rendering engine Drape in the MAPS.ME project is presented. The following features are covered: multi-context OpenGL ES rendering on Android and iOS; asynchronous geometry preparation; K-d tree application; SDF text rendering.
Publication language: RU
habr.com

Rendering in Apple Metal: Basics

Article
Abstract
In the article, the basics of rendering using Apple Metal are given. Initialization of an application, creation of Metal Device, interaction with Core Animation framework, basic rendering API, synchronization and multi-threaded rendering are considered.
Publication language: RU
habr.com

Fur rendering using Shells and Fins algorithm

Article
Abstract
In the article, fur rendering using Shells and Fins algorithm is described. At first, the algorithm using geometry shaders is presented. Then the difference between DirectX 11 and OpenGL 4.3 implementations is considered. In conclusion the results of frame rate in DirectX 11 in comparison with OpenGL 4.3 are given.
Publication language: RU
habr.com

Rendering shadows using Parallel-Split Shadow Mapping algorithm

Article
Abstract
In the article, Parallel-Split Shadow Mapping (PSSM) algorithm is described. At first, the basic shadow mapping approach is reviewed. Then PSSM is presented; the difference between DirectX 11 and OpenGL 4.3 implementations is considered. After that issues and limitations of the algorithm are discussed. In conclusion the results of frame rate in DirectX 11 in comparison with OpenGL 4.3 are given.
Publication language: RU
habr.com

Order-Independent Transparency using linked lists in Direct3D 11 and OpenGL 4

Article
Abstract
In the article, Order-Independent Transparency using linked lists algorithm is described. At first, Order-Independent Transparency algorithms are reviewed. Then the linked lists approach is presented; the difference between DirectX 11 and OpenGL 4.3 implementations is considered. After that issues and limitations of the algorithm are discussed. In conclusion the results of frame rate in DirectX 11 in comparison with OpenGL 4.3 are given.
Publication language: RU
habr.com

Facebook SDK for mobile free-to-play games on iOS

Article
Abstract
In the article, the integration of Facebook SDK to mobile free-to-play games on iOS is considered. The following technical details and the corresponding Objective-C code are presented: reaching out player’s friends from the game, posting to the timeline.
Publication language: RU
habr.com

5 problems in development of mobile free-to-play games

Article
Abstract
In the article, 5 main problems in the development of mobile free-to-play games are considered. They are cross-platform work, package binary size, RAM usage, client-server interaction, performance. Some piece of advice and experience of Alawar is given.
Publication language: RU
Academpark Summer School

Game Development in C++: theory and practice

Conference
Abstract
In this lecture, game development in C++ is considered. Firstly, the architecture of a game is presented. Then the organization of C++ code, inheritance, polymorphism, templates, memory allocation, error handling and most useful design patterns are discussed. Some causes for the code overcomplication are given as well as practical recipes for avoiding it.
Publication language: RU