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 2 projects and 1 small prototype for the same client – via an escrow. See 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++.
Unity (incl. Shader Graph), Unreal, Blender
For example:
- setting up “global” scene configuration (skybox, sunlight, post-processing, terrain, etc.),
- optimizing 3D models for the needs of a particular project, fixing compatibility issues, introducing LOD to non-organic objects, etc.
- less “creative” parts of creating and polishing animation.
Making shaders in Shader Graph or writing them in ShaderLab+Cg.
My most notable experience is in pebble generator (see Projects section).
Hosting “low load” back-end on DigitalOcean or fly.io (or similar cloud), in Docker container or “bare”, with PostgreSQL (or similar) database.
I have mathematician-programmer education. Obviously, the latter part is my line of work but the former part also comes in handy from time to time. In projects, it opens paths that probably wouldn't even be taken into consideration otherwise. The most notable example is custom physics from scratch in the LOCO Railroad Simulator (see in the Projects section).
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 via touch screen. This Unity scene is integrated into a React Native application on iOS.
About ¼ of the generation uses “classic” CPU-only approaches. 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”.
Effort distribution:
Newsroom
text-to-news-video app | Unreal Engine, MetaHuman, Blueprint, C++, Movie Render Queue in Runtime, Building UE from SourceWhile 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.
I did all the programming and technical artistry. 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 cancelled.
REEE
REcommendation Engine ExtentionAnother programmer did the video recommendation engine itself. I did the rest of the programming and administration:
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 backend 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 PCGSolo programming and technical artistry paid hourly.
Key priorities:
We didn't have as many early-access sales as we hoped, so the project had to be cancelled before achieving full release.
virtual product placement
internal tool for Under Armour, Inc. | Babylon.js, React.jsInternal web-based 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 its output is:
Completed in 14 hours.
Blob&friends
a drawing app for kids | UnityFurther 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.
City 2048 and Evolution 2048
a couple of nearly identical isometric mobile games in 2048 genre | Unity, AndroidSolo programming – except for 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 – 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 “inescapable” 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 fun concepts for game mechanics, economics, or the rest of game design. However, no matter what we tried, we didn't manage to “find the fun”, so the project was cancelled in favour 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.
The game/app has two parts:
Having millions of cubes directly necessitates optimization. Completely obscured cubes have to be detected and skipped, and the “exposed” remainder has to be combined into bigger models – known as “chunks”. Today the most practical approaches are using a third-party solution and/or using instancing and/or computing shaders. But at the time neither was a viable choice in Unity – or likely 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 modelling we implemented a couple of sets 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 cancelled.
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.
fluent in writing, reading, listening; novice in talking orally
native