FlowCV Logo
Maxim KamalovUnity programmer
AddressUralsk, Kazakhstan
Birthday28/10/1990
Nationality Russian-Kazakh
GenderMale
Website https://dogfuntom.github.io
GitHubhttps://github.com/dogfuntom/
Stack Overflowhttps://stackoverflow.com/users/776442/maxim-kamalov
Education

Specialist degree (5 years)

Volgograd State University

Mathematician-programmer

2011Volgograd, Russia
Professional Experience

Programmer

“long term” freelancing

Programming 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.

02/2015 – 06/2023

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.

03/2016 – 03/2018

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++.

04/2009 – 12/2009Volgograd, Russia
Skills
Technical artistryUnity (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.
Shader developerMaking shaders in Shader Graph or writing them in ShaderLab+Cg. My most notable experience is in pebble generator (see Projects section).
IT AdminstrationHosting “low load” back-end on DigitalOcean or fly.io (or similar cloud), in Docker container or “bare”, with PostgreSQL (or similar) database.
Applied math (geometry, physics)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).
Projects

Pebble generator

Unity, URP, C#, Shader Graph, PCG in runtime, iOS (Unity as a Library + React Native)

11/2022 – 03/2023

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:

  • Approximately half — on the visual (directly visible) result.
  • Approximately half — "under the hood": integration into React Native, mobile optimization, addressing Unity bugs specific to phones, mobile input, and internal tools.
  • 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 app

    Unreal Engine, MetaHuman, Blueprint, C++, Movie Render Queue in Runtime, Building UE from Source

    01/2022 – 09/2022

    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 Extention

    Another programmer did the video recommendation engine itself.

    09/2021 – 01/2022

    I did the rest of the (programming and administration) work:

  • Front-end: Firefox and Chrome browser extensions. The format is WebExtension, basically identical to making a static HTML, CSS, JS website.
  • Cryptocurrency for rewards: a typical ERC20 (fungible token) smart contract in Ethereum (more accurately, in Binance).
  • The back-end for the reward system: REST server app (done via Express) and PostgreSQL database, both hosted on the DigitalOcean App Platform.
  • MetaMask integration (Ethereum JSON-RPC).
  • 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.

    09/2018 – 09/2021

    Solo programming and technical artistry paid hourly, approx. 1000-1500 hours.

    Key priorities:

  • Fusion of real railroad beauty and physics with model railroad convenience.
  • Modern rendering, realistic style.
  • Almost everything is editable: terrain, scenery, railroad, time/sun/fog, and even some post-processing.
  • Realistic physics (closer to real trains than to model trains).
  • 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

    06/2021 – 06/2021

    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:

  • A scene with models in their designated positions, simple lighting, and camera rotation capability.
  • Clicking on a clothing model in the scene displays information about the item in the surrounding UI.
  • Completed in 14 hours.

    Blob&friends

    a drawing app for kids

    Further 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.

    01/2018 – 08/2018

    Solo programming with a fixed payment. It took me about 80­-120 hours.

    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:

    03/2016 – 03/2017

  • Amusement park tycoon (similar genre to a city builder).
  • Clicker/incremental/idle game.
  • 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 app

    Unity, and a bit of ShaderLab, algorithms and data structures.

    02/2015 – 02/2016

    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”:

  • Selection-based. For example, select an area in a single “motion” and extrude it (similarly to extruding tool in Blender).
  • Convolution-based. Same principle as convolution (kernel) tools in 2D image processing but in 3D. More specifically, MM operators in 3D space: erosion and dilation, closing and opening.
  • 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.

    Courses

    Game theory

    Coursera (Stanford University & The University of British Columbia)
    2013

    Image and video processing: From Mars to Hollywood with a stop at the hospital

    Coursera (Duke University)
    2013

    Microeconomics Principles

    Coursera (University of Illinois at Urbana-Champaign)
    2013

    Games without Chance: Combinatorial Game Theory

    Coursera (Georgia Institute of Technology)
    2013
    Organizations

    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).

    10/2020 – presentRussia

    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.

    Disclaimers, notes, etc.

    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.

    Languages
    Englishfluent in writing, reading, listening; novice in talking orally
    Russiannative