Digital artwork by BEEPLE was sold for around $6,000,000 recently.

We are about to enter the creator’s economy. We all saw travel bloggers, TikTok influences, or people who simply film their day-to-day life and are able to make a living from it. And it’s only a beginning of the new world in which most people provide products and services as independent creators. I believe our purpose as human beings is to create. Why most of us don’t do it? We were taught to be regular, be boring, find a “normal” job. And it’s all about to change.

Imaging AI is doing all the “plumbing” in any work, even creative work…


I got into development because it was fun. Only later, I had realized that more often than not, software development is a headache. Modern software practices focus on delivering functionality at all costs, sometimes with compromises to computational and cognitive complexity. The later contributes heavily to the level of depression and anxiety in life.

The older codebase becomes the more time we spend reading the code before adding something or fixing the issue. In extreme scenarios, days of debugging could lead to one line change. The easier the code, the less mental burden we have during our work. …


Let’s talk about the interviewing process. Through my career, I’ve been on both sides of the table. Some of the following “mistakes” I made myself, others were collected through many interviews as a potential contractor/employee.

  • Ask questions about API of the Engine/Framework — We are not testing the memory of a candidate. There are thousands of functions, and even for often used methods, I usually just open the Doc or use IntelliSense.
  • Have a tough time pressure quiz — That one is quite often, however not always in the extreme form. It could be okay to give some entry-level questions…


I was surfing the web and found this wonderful ShaderToy Diamond. I’d immediately wanted to create something for conventional meshes and not analytical one. This “cheap” solution is still a bit heavy, up to 7 cubemap samples per pixel and yet it should be faster than raymarching/raytracing considering that we should calculate diamond SDF on each step and then 4 more SDFs to get a normal on hit. BTW, my method is not a physically correct rendering, but with a help of the Local Cubemaps it can be though.

What is the deal with diamonds and where all this…


The short answer — in case of thermal throttling. I’ll be focusing on mobile devices in this article. Most of the mobile devices can work not so long on maximum capacity before they hit throttling. After throttling, CPU & GPU clock speed can be cut in half to prevent device overheating. This makes profiling and optimization extremely hard since you can’t see the same outcome during tests.

Thermal Throttling in Action (image form Qualcomm site)

BTW this is why you should not trust mobile benchmarks a lot. Most of the times, games will not utilize full CPU/GPU potential 😰

Most of the times I have problems with mid-range…


Image Based Lighting used in movies and video games for ages. In most engines, it’s available by default in form of Light & Reflection Probes. IBL gives us the ability to imitate complex lighting setup and reflection in the cost of couple texture samples. In fact, using Light Maps is not always possible. This could be the case when huge locations used or location generated procedurally. Usually, we have lighting information in form of an omni-directional image(cube map).

By sampling form different mip levels we can adjust glossiness of textured material

In this article, I want to focus on slightly different kind of IBL technique — MatCap.


Well, not in all cases, but you definitely need to think twice when using them in production.

Event driven architecture has become extremely popular in Unity because it eases communication between components. Modern UI is probably unthinkable without events as well. Events in C# is backed by delegates and in this write-up I’m focusing on multicast delegates.

So let’s check what’s wrong with delegates by example. I have instantiated ~1000 objects which are all subscribed to one delegate

Manager.OnSomethingHappend += Callback;

In the following screenshot, we can see what is happening when we add one more object which subscribes to…

Viktor Zatorskyi

Software Development Consultant

Get the Medium app

A button that says 'Download on the App Store', and if clicked it will lead you to the iOS App store
A button that says 'Get it on, Google Play', and if clicked it will lead you to the Google Play store