What did I tell you

… I made it! I got my first full time job on Computer Graphics! What did I tell you then? Man, what a rollercoaster it’s been and what it’s about to become…!

Oh, hello there people!

This is yet another update on the status of an aspiring person to learn more and contribute to the world as he can.

As you’ve already read, I got my first job as a Graphics Software Developer. What does this mean? If you thought that it might have something to do with Photoshop or Blender, then… you are a bit off. But no worries, because I was about to explain anyway!

I will explain what the position is by starting from the artists (and not) that use an image processing editor such as Photoshop or Gimp. I will move down the hierarchy of work until the graphics card in order to have “complete” view of what people find to spend their work hours on.

So, first of all, it’s the artist, the one that sees the fancy Graphical User Interface (GUI) with all the buttons and the screen where he is previewing his work in progress. At the top of the product development hierarchy, then, are the people who create the GUI so that the user can easily and intuitively use the functionality the program has to offer. Since I don’t like to refer to them as “GUI guys” I will pick one of them and call them by name, let’s say Mary. Mary is the GUI developer from now on!

All these buttons are doing something when they are pressed, either opening new windows or applying a change to the working image, say a filter or converting it to grayscale. In the context of opening a new window, this is done again by Mary but the actual mathematical image processing is done by a Software Developer specialized on this, enter Chris. Chris writes code that processes the image. Mary’s job can be brought down to ‘putting the buttons where it’s best to be’ but in order for a button to apply a certain filter, Mary needs to communicate with Chris so that she can use his code. Mary doesn’t need to know what mathematical equations Chris is applying, but she needs to know how to use it in order to apply in the working image! You can see that we already have a layer of abstraction where two things work together but they don’t necessarily know how each other works. They just need a way to communicate.

A more simplified paradigm would be a cafeteria and the interaction between a bartender and the waiter. The waiter gives the order to the bartender and waits for it to be ready for serving. The waiter doesn’t need to know how the bartender made the coffee, just to have it ready. The bartender doesn’t need to know where the waiter is serving the drinks (or how he will carry them); just what the orders are. These two people are working together but don’t have knowledge of how the other operates. They need a way to communicate and that could be a paper with the orders written on it. The bartender takes the paper and notifies the waiter when everything is ready. In a real world scenario they would know what each other does because they can see each other but, hopefully, you got the point I want to make with ‘abstraction’.

Back to programs. Chris is working on images and that’s his thing, he can convert them and change their size, colors, apply some blur here and there or maybe a depth of field to make it more realistic or professional. What is the next layer after Chris? Since he is working ON images, then maybe he needs a way to load them. So, a reasonable next layer would be someone who provides him with code that loads the images. Since loading images is trivial nowadays, we are gonna leave Chris as the bottom of his “branch” of the hierarchy and move again at the top with Mary.

Mary has a window in the application that displays the images and the effects of the filters on them. This window contains dynamic graphical information, the image in particular. This window is created and developed by whom? You guessed it and you are right, the Graphics Developer! That’s me, Ilias. I am the one that will display our custom graphics on our screen; I am going to get the result of the processing from Chris, throw it at the graphics card and render this result! Now, this is a simple abstraction and seems like I will not be doing anything at all. Truth is, I oversimplified my role but the requirements of the program are not that huge.

If I were to be a developer for a big studio that produces CGI movies (Computer Generated Imagery) like Pixar or ILM, oh boy, then I would have work to do! Then the process would be split even more for the graphics pipeline. See, the graphics vendors (NVIDIA, AMD, Intel etc.) provide a way to ‘talk’ with the graphics card in the manner of sending data to it and doing the processing you want, then displaying the results. In the movie industry, the working space is not just an image – it consists of hundreds of thousands of 3D models that have to be displayed on the screen in a very realistic way. So this can quickly become unmanageable and we have to introduce abstraction layers to have better organization.

From the bottom up we can start from the graphics card and the developers that are responsible for the smooth and flawless communication with it. These people are using a graphics framework, e.g. OpenGL, and are writing code so that the people on the next layer don’t have to think how the data are stored or sent. The name of one of them is Nick! If an environment artist, whose name is Ifi, wants to build their 3D scene with their tree models and mountains and rivers, houses etc., it is tedious to have them code for the graphics card. That will reduce their productivity at their primary role as an artist and that’s a nono. This is the reason we have Nick! To provide her an easy way to send her complex models to the graphics card for rendering without worrying much about the details.

Whew that’s getting overwhelming so fast and I don’t know why I explained all these with such a long text. I could do that with fewer words, but where is the fun in that?

To close my open question of what my position is roughly going to be: creating easy to use code that speaks with the graphics card so that the artists can easily implement their ideas.

My next posts will probably be less artistic and more about mathematics and programming but don’t rely on it. We will see!

A closing note to all of you that made it here and read my previous previous post.

Some are born talented on doing something. That means they can understand faster how something works. Talent alone will not get you anywhere; it’s the hours that you put into something to make it yours that truly count. I am not talented to have made it. I worked and studied my ass off and this is the reward. A reward that came 2,5 years after I decided that I wanted to work hard for something I love.

Believe in the work you do and strive to improve it.

These 2,5 years have been a rollercoaster and now I am about to delve into deeper matters that require even more studying. And that’s why I love what I am doing!

Stay positive and look after yourself!