Ahila Paati, Etyadi.

Ahila Paati, Etyadi.

a collection of simpool interviews.

Krishnashish Gogoi

cookie turned grumpy developer. 🍪

Note: This article is also available in Assamese. Thanks to Monali Barman for the help in translation. We sadly could not translate everything :(

Note from Editor: This is one of the few interviews on this site where I had to add a TOC because the length of the post but super interesting, nonetheless! ✨

Who are you, and what do you do?

My parents named me Krishnashish Gogoi. A name that most people, including me, have some trouble pronouncing. Most people I hang with have dubbed me ‘doom’, because I often go by the username ‘doomkookie’ in many games and forums. It’s convenient for them and cringe for me. I have 24 summers behind me, closing in on my 25th annual trip around the Sun. I spent the first 18 summers (and 17 winters) in Guwahati. I’m currently based out of Bengaluru.

I primarily work as a freelance game developer by day, and do anything from web development to deep learning projects to other people’s programming homework by night.

I started out as a ‘fullstack developer’ in 2014, like most people at the time, with the advent of node.js and all the libraries that came out daily. I still do a bit of web development as a side-hustle, but I’m hardly a fullstack developer right now. Then again, with the arrival of DevOps and the growing complexity of the JS ecosystem, is anyone a fullstack developer anymore?

Currently, I work on video games, as a gameplay and AI programmer. I also do a lot of work on VFX (for video games only) and writing shaders, creating textures (when the texture artist goes missing for more than 48 hours). On top of that, you could also find me working on lighting, color grading, and even a bit of cinematography at times. Though I have to admit I’m mostly winging it on the creative side of things.

Since video games are like a converging point for technology, art and creativity. The tools used for it lend themselves well for other similar pursuits. In my case, that takes the form of architectural visualization. An example could be giving interior designers a better way to flesh out their ideas.

What hardware do you use?

I have two laptops that I use when I’m traveling or when I’m forced to do client demos anywhere outside the comforts of my room. They’re pretty old laptops, bought around 2014. The specs are pretty bad on them and long years of work, abuse and Dota 2 have taken its toll on it. One of them is due for some repairs as well.

My primary work (as well as gaming) system is quite decent - AMD Ryzen 5 (processor), 16GB RAM, Gigabyte GeForce GTX 1080 WF OC (GPU), Corsair 200R (case), Asus PRIME B350+ (motherboard).

I use a Zebronics MAX Plus mechanical keyboard; it’s pretty cheap for a mechanical keyboard, and comes with RGB(!). Proving to be quite durable so far, as I use it for both work as well as gaming, so it gets bashed all day. It doesn’t come with Cherry MX keys. The ones on it are called Oetemu Blue, which are supposedly Cherry MX knockoffs, but pretty damn good knockoffs in my experience. I love the clackity-clack sounds it makes when I type. Besides, it has a nice tactile response when typing, so I’m quite happy with it.

My mouse is a Steelseries Rival 110, along with a Steelseries Qck Heavy mousepad.

I also upgraded to dual monitors recently. My primary monitor is an Acer Nitro VG240YP - 1920 x 1080, 144hz, IPS panel, super budget. Very hard to complain about it as it has everything I want in a monitor at almost 15k INR. My secondary monitor is a HP 24es, nothing too hot - 1920 x 1080, 60hz, IPS panel. It served as my primary monitor for a while, and it’s quite nice on its own if you don’t need the higher refresh rate for gaming.

I obviously use the 144hz monitor for gaming, but as far as work is concerned, the dual monitors just give me more room. I typically have my work window (which is Unreal Engine/Unity plus an Editor) in the primary monitor and use the secondary for previews and such. It saves quite a bit of key presses that would otherwise go towards spamming Alt-Tab back and forth.

I also have a few Raspberry Pi 2 B+ boards, that I use for a bunch of toy projects, though lately they haven’t seen much use. I also have an old Beaglebone Black board, which currently suffers the same fate as the Raspberry Pi boards.

You can find my full hardware list for the setup here

And what software?

This is a bit of a black hole in my case, so I’ll try to limit it to the important ones. But I can already see myself rambling away.

Operating system

Windows 10 and Debian Testing.

During my teenage and extremely early adult years, I was a free and open source software extremist. Now, I’m perhaps a bit wiser and slightly less obnoxious than those days, so I’ve made my peace and use both as needed and necessary. I still have the same copy of Debian Testing running on one of my laptops that I installed somewhere around 2013.

My Windows setup is pretty default, except for using Wallpaper Engine to set up nice animated wallpapers on my monitors. For Debian, I used xmonad as the window manager and it was like my foray into a proper Haskell application and got me into the whole “do everything from the terminal” phase. Never got around to changing it because I got too comfy with it.

Code Editors

Atom, Emacs and Visual Studio Code.

For the record, I hate Atom. Maybe it’s because I never got around to learning it properly, maybe it’s because the plugins that I used last time were half-baked. Not to mention the fact it feels like a browser disguised as a code editor. But everything said, it’s the one I remember when I move to a new machine. Perhaps I remember it because I don’t like it. I use it mostly for web development, so Javascript and friends, and Python if necessary.

Emacs has been my editor of choice for everything that isn’t related to Unreal Engine’s flavor of C++. I know I just accused Atom of being a browser disguised as a code editor, when emacs is literally an operating system disguised as a code editor. But it really is quite amazing. I’ve been using it since I was 14, so needless to say, the keybinds are muscle memory at this point. I’ve been laughed at before for using it, but the laughs don’t last long as they see me switching Spotify playlists from within this beast. Some day we’ll wake up to find out that Skynet is an Emacs mode.

Visual Studio Code is a new addition to my belt. New is quite relative, since it’s been a staple for me since 2016. I use it primarily for writing C# when I’m working on Unity, and C++ when I’m using Unreal Engine. Unreal Engine has its own flavor of C++, and a plugin for VS Code called Visual Assist makes a few things such as looking up class/method definitions, or looking for instances of a particular symbol across files much easier. It’s no emacs, but for what I use it for, it’s quite good.

Game Engines

Unity, Unreal Engine, Phaser

Unity was my primary game engine of choice till a year ago. It’s free, decently easy to learn, quite powerful and has a large community for support. Most of my clients typically need their games done in Unity, so I use it quite frequently, even though it isn’t personally my first choice for a game engine. It deploys to a lot of platforms, probably the only game engine out there that supports so many deployment options. It’s also pretty much the premiere option for making mobile games. All in all, a great game engine, and should be in every game developer’s kit.

Unreal Engine is what I personally prefer. At this point, feature-wise, one could argue that Unity has pretty much caught up to Unreal. A few years ago Unreal was quite ahead of most other engines in terms of the level of visual fidelity that could be achieved. Today, I personally feel Unity is quite close, if not even. But the reason I prefer Unreal to Unity is that Epic Games (the company behind Unreal) is a company that makes games with their engine, whereas Unity Technologies has so far only made tech demos (which are quite impressive nonetheless). It’s a minor nitpick, but I think it’s kind of reassuring to know that the features in your engine of choice have been battle-tested by people before you.

Aside on Unreal

Another reason is that Unity is like a blank slate most of the time. Now, this isn’t necessarily a bad thing. Good teams can do a lot of crazy stuff with a blank slate. But most of the time, I find myself working in groups of 2-5 people. And with a small team, I don’t wanna spend time writing boilerplate or figuring out simple things. Unreal has a “Unreal way to do this” thing going on, much like how code written in Python can be ‘pythonic’ or otherwise. I find it really helpful, and it gets work done faster. Not saying that you can’t do the same in Unity, it just lends itself easier in Unreal when you understand how the pieces fit together. Also, with a small team, I don’t want a blank slate, I want a template that’s as close to my first prototype as possible. And Unreal’s default templates have this covered pretty well (Unity is catching up in this regard). Truly unique games are a rarity, 90% of the time a template helps you get to the first prototype quicker, in my opinion. And because I’m in India, and my next client probably wants me to clone some popular game on the front page of the Play store, I might as well get a move on.

Coin never stinks no matter how rank the pouch. - Gascon Brossard

That being said, I use Unreal for my archviz work as well. It renders out really well, pretty quick to change stuff and easy to include any VR features when needed. I’ve been meaning to get to using Twinmotion but something or the other has managed to keep me away.

Phaser obviously doesn’t have much against the behemoths listed above, but it’s a fun and small Javascript engine that I’ve played with quite a lot. It supports 2D only, quite easy to learn and has tons of examples in their documentation. If you’re a web developer fluent in JS looking to get your feet wet in game development, Phaser might be a good way to get started. I started with Phaser as well, made a real crappy Flappy bird clone.

Communication

Discord, Slack

I wish I could say I still used IRC for communication, but sadly I don’t. I use Discord to stay in touch with most of my friends, or at least the ones who play games with me. We also use it when working on game jams or other personal projects, since most of the time everyone is in a different city. Slack is well, Slack. If the client I’m working with has one, I usually use it as my primary form of communication with them.

Technical Art

Blender, Substance Painter, Substance Designer, Houdini, SHADERed

Technical Art may not be the correct term but I’m not much of an artist, so calling it just art would be a travesty. Although this isn’t too far away from it either. I use Blender only when absolutely necessary. I understand the basics, I can write scripts and plugins, but in no way am I a 3D artist. I’ve worked with artists long enough to catch most mistakes that a junior artist might make on their first month, but that’s about it. I do write scripts and plugins for use whenever necessary. Occasionally, I make simple low-poly models if I’m working on a prototype and really want to go through the pain of following a tutorial on Youtube.

Substance Painter is what I use to create textures for 3D assets. Like I said, my art skills aren’t much to talk about, but thankfully texturing most things doesn’t require a whole lot of that. In fact, most of the time, I get away with doing things procedurally and then adding personal touches wherever necessary.

While Painter is for textures, Substance Designer is for making materials. In simple terms, the material determines how light interacts with the surface of an object, like say, steel is much more reflective than wood, so a steel material is set up to reflect more light. Textures can then be added on to the materials as well, to change or enhance its appearance.

Aside on Shaders

Behind the materials lie small programs called Shaders, that run in the GPU, parallelly for all the pixels on the screen. In simple terms, all a shader does is returns the color of a pixel on the screen. And the shaders behind the materials are doing exactly that while calculating how much light is to be reflected back or absorbed or what color it should be and so on. Sometimes it’s useful to be able to write out the code for a shader instead of simply creating a material, perhaps for something a bit more complex or customized or as is most of the time, your client doesn’t want to pay for Designer licenses at work.

In those truly terrifying cases, SHADERed comes in handy, for writing shader code and previewing as well as debugging it. You can test out your shaders independently, and then make whatever necessary changes needed for importing them into your game engine of choice. It doesn’t happen all that frequently, but any time I have to write a shader, I try getting it through SHADERed first.

Lastly, Houdini is for any VFX work I have to do outside of game engines. Typically, I use whatever VFX component/system the engine provides (like Niagara in UE4), but in some cases, I get the entire effect created in Houdini and then render out the frames to be used in the engine separately (not gonna lie, I’ve done this only for UE4 so far). Houdini can be used for a lot of other stuff, but most of the time, I don’t make the decisions, so this is the most mileage I unfortunately get from this absolute beauty of an application.

What would be your dream setup?

My current setup is pretty decent, but I guess I could use a few upgrades to make it the dream setup. I’ll probably end up getting most of these upgrades sooner than later. Firstly, I’d like to expand my RAM to at least 32GB, to help out with the VFX renders, and just Houdini stuff in general if I want to get into it a bit deeper. Then perhaps upgrade my GPU to a RTX 2080Ti. Maybe get a bigger SSD, upgrade my processor as well. Just linear upgrades to whatever I have right now.

One upgrade I definitely need is a bigger, better case. I originally planned on getting an NZXT case but my roommate at the time, Gods damn his soul, bamboozled me into getting the case that I have. It’s not a bad case by any means, it just doesn’t leave enough room for something like getting a larger cooling system and so on. And obviously a better case means any investment I make into RGB(!) for my system is instantly better than what I have right now. A super comfortable chair that I can sit on for hours without having to get up and stretch would be nice. A VR headset would also be super rad, but I have a hard time justifying the price tags that they come with.

How do you learn new things?

Depends on what I’m trying to learn, but for most things, I have a pretty formulaic approach. If it’s a library/framework/application, I try to go through the official tutorials and resources as much as possible. At the same time, I search Reddit/HN for books, courses and other such resources on the topic, prioritizing books primarily, unless the courses are taught by someone who’s really known for their trade and has a good method of teaching. After that, it’s just a matter of hosing down the resources you have gathered so far.

Typically, I find the official tutorials to be the most comprehensive as well as updated. For example, PyTorch’s official tutorials are really really good. Sometimes you’ll run into courses that are really good and worth spending extra time on, perhaps even better than a lot of books out there. Some examples that come to mind are - Jeremy Howard’s Practical Deep Learning for Coders and Tom Looman’s Unreal Engine C++ course on Udemy. It really depends on what resources are available for that particular topic and how fast changes are occurring within that field.

There’s also the issue that some things are learned better visually, as in by watching a video than by reading instructions. Things like texturing, modelling or sculpting 3D assets, making visual effects, animations and so on; they’re noticeably easier to grasp when you see it being done visually rather than reading the steps to recreate it. At least that’s how I’ve felt about it.

There’s of course always Youtube, but often it lacks structure. If you have a resource other than Youtube, like a course or a book, to give your learning journey some structure, then looking up lectures and tutorials on Youtube suddenly feels much more cohesive. Youtube nonetheless is pretty much a compulsory learning resource these days, especially if you’re into cooking. 🥘 👨‍🍳

And after getting a bit of a foothold with the topic in hand, I usually try to do a small toy project. Everything you learn means little if you don’t put it to practical use, and in my experience, the knowledge I get from lectures and books tends to stick better if I follow it up with a simple toy project. When I do these small projects, I inevitably run into certain walls and problems, solving which requires me to look up more specific things pertaining to the topic in question. These little obstacles make up a huge part of my learning experience. Books and lectures will tell you, most of the time, what or how to do something right. Committing to an actual project tells you what can go wrong.


Krishnashish’s Blog: http://fatpixels.me


Published: 22 Jun 2020