Maxim Kamalov
Unity programmer
Uralsk, Kazakhstan
28/10/1990
https://github.com/dogfuntom/
Russian-Kazakh
Male
https://dogfuntom.github.io
https://stackoverflow.com/users/776442/maxim-kamalov
EDUCATION
Specialist degree (5 years)
Volgograd State University
Mathematician-programmer
2011
Volgograd, Russia
PROFESSIONAL EXPERIENCE
Programmer
“long term” freelancing
Programming multiple projects for the same client: WorldKraft, LOCO, REEE, NewsRoom.
(See Projects section.) Arguably, it was more of a “usual” remote part-time job than
freelancing. It's quite likely that we'll work again together in the future.
02/2015 – 09/2022
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/2009
Volgograd, 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 nonorganic objects, etc.
- less “creative” parts of creating and polishing animation.
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.
Shader developer
Making shaders in Shader Graph or writing them in ShaderLab+Cg.
My most notable experience is in pebble generator (see Projects section).
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
by touch. This Unity scene is integrated into a React Native application on iOS.
11/2022 – 03/2023
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.
I did the rest of the (programming and administration) work:
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).
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.
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.
09/2018 – 09/2021
Solo programming and technical artistry paid hourly, approx- 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.
City 2048 and Evolution 2048
a couple of nearly identical isometric mobile games in 2048 genre
Unity, Android
Solo programming (with the exception of a pair of scripts reused from the client's previous
projects, probably written by himself).
03/2017 – 03/2018
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.
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).
•
02/2015 – 02/2016
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.
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 – present
Russia
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