FlowCV Logo
Maxim KamalovUnity programmer, web programmer
Location
Uralsk, Kazakhstan
28/10/1990
Russian-Kazakh
Male
https://dogfuntom.github.io
GitHub
https://github.com/dogfuntom/
Stack Overflow
https://stackoverflow.com/users/776442/maxim-kamalov
Education

Specialist degree (5 years)

Volgograd State University

Mathematician-programmer

2007 – 2012Volgograd, Russia
Work 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 2 projects and 1 small prototype for the same client – via an escrow. See 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 artistry

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.

Shader developer

Making shaders in Shader Graph or writing them in ShaderLab+Cg.

My most notable experience is in pebble generator (see Projects section).

IT Adminstration

Hosting “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)

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.

11/2022 – 03/2023

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:

  • ≈½ – on the directly apparent visual result
  • ≈½ – “behind the scenes”: integration into React Native, mobile optimization, addressing Unity bugs reproducible only directly on the phones, mobile input, and internal tools
  • Newsroom

    text-to-news-video app | Unreal Engine, MetaHuman, Blueprint, C++, Movie Render Queue in Runtime, Building UE from Source

    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.

    01/2022 – 09/2022

    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 Extention

    Another programmer did the video recommendation engine itself. I did the rest of the programming and administration:

    09/2021 – 01/2022

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

    Key priorities:

  • fusion beauty and physics of real railroad with convenience of model railroad
  • 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 cancelled before achieving full release.

    virtual product placement

    internal tool for Under Armour, Inc. | Babylon.js, React.js

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

    06/2021 – 06/2021

    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:

  • 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 | Unity

    Further development of a pre-existing mobile game prototype.

    01/2018 – 08/2018

    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, Android

    Solo programming – except for a couple of small scripts reused from the client's previous projects (probably written by himself).

    03/2017 – 03/2018

    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:

    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 “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 app

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

    02/2015 – 02/2016

    Solo programming – and a bit of technical artistry.

    The game/app has two parts:

  • model: 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
  • scene: 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 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”:

  • 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 kernel tools in 2D image processing but in 3D – i.e. mathematical morphology operators in 3D space: erosion / dilation, closing / 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 cancelled.

    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
    English

    fluent in writing, reading, listening; novice in talking orally

    Russian

    native