Specialist degree (5 years)
Volgograd State UniversityMathematician-programmer
Programmer
“long term” freelancingProgramming multiple projects for a single client: WorldKraft, LOCO, REEE, NewsRoom. (See Projects section. Also, a few small prototypes.) Arguably, it was closer to a “usual” remote part-time job than freelancing.
Unity mobile games programmer
Nenoff (currently renamed to Undead Swarm Games)Programming two projects for the same client. (Through a freelancing escrow.) See “Amusement park” and “2048” in the Projects section.
Senior technician
Research Institute of Hydrocommunications "Shchitil"Fixed-term contract. Basically, paid internship without officially aknwnoldeging it as such. I did programming and technical writing related to internals tools. About 1/4 of the total time working was in pair programming. The language was C++.
Pebble generator
Unity, URP, C#, Shader Graph, PCG in runtime, iOS (Unity as a Library + React Native)
Procedural generation of 3D pebbles on mobile devices: their shapes, surface patterns, and other characteristics (like color of subsurface scattering). The result is random but deterministic. After a couple of seconds for generation, the resultant pebble can be rotated by touch. This Unity scene is integrated into a React Native application on iOS.
About 1/4 of the generation is done in the “plain old” CPU way. The result is a couple of 2D textures containing distance fields. The rest is done right in the shaders, basically via adding a deterministic noise to every possible “nook and cranny”.
195 hours and 41 minutes had to be spent on:
P.S.: If you're fine with using your favorite automatic translator, you can read a bit more on my website.
Newsroom
text-to-news-video appUnreal Engine, MetaHuman, Blueprint, C++, Movie Render Queue in Runtime, Building UE from Source
I did all the programming and technical artistry.
While Movie Render Queue in Runtime exists, it had bugs and limitations that are not "compatible" with this project. For example, there was no way to set the length of the resultant video in runtime. This is why we had to modify the source of UE (more accurately, the source of the Movie Render Queue subsystem but it's all the same when building).
We published our early builds on itch.io and the sample videos on YouTube. But we didn't see much interest from potential users, so the project had to be canceled.
REEE
REcommendation Engine ExtentionAnother programmer did the video recommendation engine itself.
I did the rest of the (programming and administration) work:
My work took approx. 150-200 hours.
To prove that our video recommendation extension is private and trustworthy, we made it mostly source available: the front-end and the smart contract are neither obfuscated nor minimized nor bundled, and the reward back-end is open-source.
We published our extension's “alpha” version for free and attempted to promote it on relevant social media groups/hashtags/subreddits. Of course, the aforementioned rewards were a part of our marketing strategy. After getting a disappointing number of users, we had to cancel the project.
LOCO Railroad Simulator
Game/app somewhere in between railroad simulator and model railroad simulator.Unity, HDRP, custom physics, technical artistry, and a bit of PCG.
Solo programming and technical artistry paid hourly, approx. 1000-1500 hours.
Key priorities:
We didn't have as many early-access sales as we hoped, so the project had to be canceled before achieving full release.
More information is on my website.
Virtual product placement
internal tool for Under Armour, Inc.Babylon.js, React.js
Internal React tool for Under Armour to plan the placement of clothes on hangers and shelves. It helps employees of specific stores quickly understand the desired arrangement of products visually.
My contribution: A 3D React component using Babylon.js. Its input is store models, coordinates for hanging items, models to be hung, and a list of coordinate-model pairs indicating the placements. And the output is:
Completed in 14 hours.
Blob&friends
a drawing app for kidsFurther development of a pre-existing mobile game prototype. My work consisted mostly in refactoring the prototype into a “proper” project with high maintainability and a low bus factor.
Solo programming with a fixed payment. It took me about 80-120 hours.
City 2048 and Evolution 2048
a couple of nearly identical isometric mobile games in 2048 genreUnity, Android
Solo programming (with the exception of a couple of small scripts reused from the client's previous projects, probably written by himself).
We used HOTween (currently named DOTween) for animations. We implemented powerups, and a tutorial; analytics, leaderboard, ads, rewards, notifications, etc. Some small parts had to be done in Java (i.e. directly using Android SDK, not only through Unity).
Amusement park builder clicker mobile game
An isometric (2D, grid) game prototype that combines two genres:
We intentionally didn't have much of plan. The idea was to build a prototype with only “unavoidable” game mechanics of said genres. Namely, placing buildings (attractions, stalls) and roads, and tapping on buildings to get money.
Then we prototyped further by trying multiple ideas, hoping to stumble upon unique and fun ideas for game mechanics, economics, or the rest of game design. However, no matter what we tried, we didn't manage to “find the fun” in this idea, so the project was canceled in favor of developing 2048 games instead.
WorldKraft
voxel editor appUnity, and a bit of ShaderLab, algorithms and data structures.
Solo programming (and a bit of technical artistry).
First, the player can build a model using cubic voxels (similar to Minecraft's). This model can be named and saved, and any number of models can be created. (Of course, previously saved models can be added.)
Second, unlike Minecraft, the “main” scene/world is not made from voxels (cubes). Instead, previously made models can be placed and rotated freely. It's also possible to draw splines and run models along them, which is intended for making basic train (railroad) animation.
Having millions of cubes in the same model (or scene) directly is too slow. Instead, completely obscured cubes (by the ones surrounding them) have to be detected and skipped, and the “exposed” remainder has to be combined into bigger models (known as “chunks”). Today, the most practical approach is probably using a third-party solution and/or using instancing and/or computing shaders. But at the time neither of those was a viable choice in Unity (or maybe in any engine). So, we made our own cubic voxel system, consisting of the aforementioned chunking, shader tweaks, and custom raycasting.
In order to speed up tedious parts of cubic voxel modeling we implemented a couple of types of “power tools”:
We promoted this game (or rather entertainment app) through a demo version (which is just an older build), devlog-like channel on YouTube, and a bit of basic SMM. Despite these measures, we had very few (early-access) sales, so the project had to be canceled after 399 hours of work.
Game theory
Coursera (Stanford University & The University of British Columbia)Image and video processing: From Mars to Hollywood with a stop at the hospital
Coursera (Duke University)Microeconomics Principles
Coursera (University of Illinois at Urbana-Champaign)Games without Chance: Combinatorial Game Theory
Coursera (Georgia Institute of Technology)Generative art Telegram group (Russian)
co-creator/organiser“Right hand” of the owner at the early stages (the first year or two of its existance).
Currently not very involved — only when there's something important that nobody else volunteers to do. For example, I maintain a wiki using fly.io.
Note that you're welcome to join without knowing Russian (or generative art) — everybody is ready to read and write in English. And there are plans to make an English-only topic if more English-speaking people join.
Note that hour estimations are extremely approximate. The main reason is relying on Upwork and Freelancer to “remember” this information, and ATM I have access to neither. Thus, I have to attempt to remember these numbers “from my head” and evidently I'm very bad at remembering the count of hours of work.