/* attempt to deal with prototype, bootstrap, jquery conflicts */ /* for dropdown menus */

$8 ### Image of the Day Submit IOTD | Top Screenshots ### The latest, straight to your Inbox. Subscribe to GameDev.net's newsletters to receive the latest updates and exclusive content. Sign up now ## Anyone here a self-taught graphics programmer? 98 replies to this topic ### #1ISDCaptain01 Members Posted 31 January 2013 - 09:29 PM POPULAR Im talking about people with no cs degree or formal education in it. How were you able to pick up the material and what challeneges did you face? Do you do it as a living or just a hobby? ### #2L. Spiro Members Posted 31 January 2013 - 10:00 PM POPULAR I am. I started when I was late 13 or early 14 and used DirectX samples and online tutorials, but while struggling at the time with also learning C++ it was too overwhelming and I put it down for a few years, coming back to it at around 16 or 17. I just bought books, read online articles, and worked on it by myself until things clicked and fell into place. Repeat for many years until today. I do it as a living for tri-Ace, where I work on this engine, primarily on graphics and optimizations. http://www.youtube.com/watch?v=6cuXgRVMvZ0 [UPDATE] I now work at Square Enix on this engine: [/UPDATE] The main challenge I faced was at the start when I was overwhelmed by all the things I was trying to learn at once. After that, things were taken one step at a time and slowly. It isn’t too hard when you take it at a better pace. L. Spiro Edited by L. Spiro, 01 January 2016 - 12:21 AM. ### #3Hodgman Moderators Posted 31 January 2013 - 10:29 PM POPULAR I have pretty much the same story as L. Spiro. I'd started learning C++ as a teenager, and played around with OpenGL tutorials from time to time. The easiest way that I could make cool games was by modding existing ones, so I learned most of my 3D math by accident, as a result of playing around with other people's game code. When it came to high-school physics class, I realised I already knew about concepts like vectors and forces etc, except sometimes with the wrong terminology. I then did "IT" at university, but kept playing around with D3D and GL in my spare time, and tried to use it in university programming assignments whenever I could. I did manage to take one elective class which actually taught us basic fixed-function D3D, but I aced that class because I'd already taught myself the subject matter! Unfortunately I wasn't able to take the theoretical computer graphics classes at all. I just bought books, read online articles, and worked on it by myself until things clicked and fell into place. Repeat for many years until today. ^^ this... except I couldn't afford to buy books at all until I started working as a programmer In one of my early jobs, there was an opening in the engine department, for someone who knew shaders and graphics programming. I put my hand up based on my hobby work, and was more qualified than anyone else that went for it, so I got transferred into that department and got to start doing it professionally. At my next job I applied to be a graphics/special-effects specialist, and got the job (with the title of "junior effects programmer" to begin with ) and I was paired up with a guy who'd been doing it for years, whom I learned a lot from, just by sitting next to him. I also learned a lot by being exposed to the low level APIs on the consoles, and their spec documents. After that, I got a job as the main graphics programmer at a different company in their engine team, and was thrown in the deep end along with the specifications for all the consoles and the responsibility of making a new renderer from scratch ### #4ISDCaptain01 Members Posted 31 January 2013 - 10:30 PM wow that blew me away lol. Id be happy if i could program N64ish graphics haha ### #5zacaj Members Posted 31 January 2013 - 10:43 PM POPULAR When I was fourteen I spent a year and a half writing my own software renderer from random tidbits of information I found around the internet, a lot of trial and error, and plenty of working out how different math worked on post it notes. Once you've written a software renderer regular graphics programming is a lot easier to understand. ### #6slicer4ever GDNet+ Posted 31 January 2013 - 11:05 PM i truly started graphics programming at 15 or 16, when i was doing homebrew for the psp, and learned the gu, thus began my journey on learning how to program a graphical game(although it was still pretty heavy fixed pipeline, so i knew nothing of shaders). than i used xna with the 360 for a bit, learned a bit about shaders, but it didn't click for awhile on what i was truly doing. then i decided to work with openGL and learned shaders far more in-depth. i don't feel anywhere near finished, i've seen tons of people producing far better than I. but i have learned plenty enough that i can get something up and running in openGL fairly quickly. Check out https://www.facebook.com/LiquidGames for some great games made by me on the Playstation Mobile market. ### #7carangil Members Posted 01 February 2013 - 12:40 AM POPULAR My first hardware accelerated application was a MS Word document! No kidding! Before I get to that, let me tell the story of learning to use opengl in basic, assembly and then C, and yes in that order. In early high school I played around a lot with qbasic and was writing simple wireframe 3d mazes with horrible performance. I didn't have a C compiler, so I started playing around with debug.com, and started writing little assemly language routines to speed up certain slow things in basic. Debug sucks, it can't even do labels, you have to specify the exact jump address. You literally have to write JMP 0x322 and hope you put some code at 0x322. So I wrote a qbasic program that reads in assembly source with labels, strips them out, runs it through debug with dummy addresses (JMP 0x1234 or whatever). It looks at the redirected output of debug to see what address the assembler said it was using for each line, figured out the labels, and then reassembled it a second time. It was so cruddy. While I was doing this, I also got involved in a high school robotics program called Botball, where you programed lego robots in a language called Interactive C. Back to graphics. I wanted to try using GL, but like I said, I didn't have any compilers. MS Word 2000 had a built in version of VB, called VBA. It turns out VBA can load and run functions from DLLs (scary), so I wrote a word VBA macro that loaded system32.dll, and called the function to get the application's window handle. I played around with GDI, and got to draw dots and lines onto the word document window using only the win32 api. So then I loaded opengl32.dll. After crashing word several times, I managed to get a textured quad on the screen, put there by the video card! I then shortly discovered that the Windows DDK for Window 98 came with a FREE COPY of MASM. So I started writing programs in the psychotic mix of dll's written in MASM that were loaded into MS Word's Visual Basic. A teacher at high school saw what I was doing, and gave me a copy of Borland C++. I was able to apply what I learned about writing PC programs in MASM and Basic to what I learned in Botball's 'Interactive C' and from there everything took off. After I finished highschool, I did EECS at UC Berkeley, and now I do software for a living. I'm so glad visual studio has free editions. I would have free loved visual studio as a kid. Ubuntu would have also rocked. Kids today can access this stuff so easily now. ### #8Zido_Z Members Posted 01 February 2013 - 02:40 AM My first hardware accelerated application was a MS Word document! No kidding! Before I get to that, let me tell the story of learning to use opengl in basic, assembly and then C, and yes in that order. In early high school I played around a lot with qbasic and was writing simple wireframe 3d mazes with horrible performance. I didn't have a C compiler, so I started playing around with debug.com, and started writing little assemly language routines to speed up certain slow things in basic. Debug sucks, it can't even do labels, you have to specify the exact jump address. You literally have to write JMP 0x322 and hope you put some code at 0x322. So I wrote a qbasic program that reads in assembly source with labels, strips them out, runs it through debug with dummy addresses (JMP 0x1234 or whatever). It looks at the redirected output of debug to see what address the assembler said it was using for each line, figured out the labels, and then reassembled it a second time. It was so cruddy. While I was doing this, I also got involved in a high school robotics program called Botball, where you programed lego robots in a language called Interactive C. Back to graphics. I wanted to try using GL, but like I said, I didn't have any compilers. MS Word 2000 had a built in version of VB, called VBA. It turns out VBA can load and run functions from DLLs (scary), so I wrote a word VBA macro that loaded system32.dll, and called the function to get the application's window handle. I played around with GDI, and got to draw dots and lines onto the word document window using only the win32 api. So then I loaded opengl32.dll. After crashing word several times, I managed to get a textured quad on the screen, put there by the video card! I then shortly discovered that the Windows DDK for Window 98 came with a FREE COPY of MASM. So I started writing programs in the psychotic mix of dll's written in MASM that were loaded into MS Word's Visual Basic. A teacher at high school saw what I was doing, and gave me a copy of Borland C++. I was able to apply what I learned about writing PC programs in MASM and Basic to what I learned in Botball's 'Interactive C' and from there everything took off. After I finished highschool, I did EECS at UC Berkeley, and now I do software for a living. I'm so glad visual studio has free editions. I would have free loved visual studio as a kid. Ubuntu would have also rocked. Kids today can access this stuff so easily now. That's the difference between you and me: I learned programming to let me make video games so I can put my ideas in an interactive media. You learned it simply for the joy of discovery and making software work. As a byproduct, I've learned that, too, but I don't know if I will ever get into as deep passionate as programmers like yourself. It's just funny that I'm learning the same stuff that others in the game industry take paths in learning, anyway, so I suppose I may be as passionate as people like yourself. I sometimes think I'm just a man using programming as a tool to get something done, and I believe that to be the case as it's a means to an end. ### #9Ashaman73 Members Posted 01 February 2013 - 03:22 AM just a hobby? Thought I have a degree in CS and got in touch with OGL there, I really do only learn the basics of graphics programming at university. Never got the chance to learn it as teen (amiga wasn't the 3d work horse), but later on loved graphics programming and learn it by internet research and reading lot of articles. I do it as a living for tri-Ace, where I work on this engine, primarily on graphics and optimizations. Really great work ! Ashaman ### #10L. Spiro Members Posted 01 February 2013 - 04:20 AM POPULAR wow that blew me away lol. Id be happy if i could program N64ish graphics haha I do it as a living for tri-Ace, where I work on this engine, primarily on graphics and optimizations. Really great work ! Thank you. And going off Hodgman’s experience, I want to point out that I was less fortunate as I never had any kind of mentor figure or anyone close-by from whom I could learn a lot until I started at tri-Ace. At tri-Ace there are definitely geniuses in the rendering department and I greatly appreciate the chance to now be working directly with Yoshiharu Gotanda, Mr. Shoji, Mr. Nagano, and the rest of the people in our department who are not related to graphics. Before tri-Ace people had always gone to me to solve a lot of problems, graphical or otherwise, and while that is nice in its own right, the fact is that having had no superior was stunting to my growth. Frankly, I grow at tri-Ace at double (or more) the growth I had ever experienced before while trying to learn it all on my own. The best thing you can do for your own growth is to be surrounded by people who are much better than you. That is often a matter of luck, but if you have a chance to make it happen, definitely do. L. Spiro ### #11RobMaddison Members Posted 01 February 2013 - 06:22 AM POPULAR I wrote my first game on the ZX Spectrum some 29 years ago. My friends were busy swapping cassette games to try and beat each others' scores and I would borrow them to amaze myself at how they programmed it. I then went on to write my first "3d game" on the Sinclair QL which was a copy of a golf game called Leaderboard - didn't get past the 1st hole but it taught me all about trigonometry, no graphics libraries in those days - sin/cos tables were better as lookup tables back then rather than calculated (if u had the spare memory), I then wrote several games on the Amiga, even publishing one on licenseware which had great magazine write ups (still got the Amiga Format mag somewhere). Then onto PCs with a very early version of DirectX, which was mind-blowing compared to what I'd used before. Always self-taught in the early days, but now I just seek the assistance of the friendly experts on here. I work in an investment bank for my day job and it's nowhere near as much fun. 41 now and still tinkering with my engine and enjoying it as much, if not more, than when I was burying my head in the Amiga Hardware Reference manual trying to get a sideways scroller working in DevPac assembly in the early nineties. For those younguns among you who think it's just a phase you'll grow out of.... It ain't! ### #12/ conq Members Posted 01 February 2013 - 07:03 AM LONG time lurker, just figured I'd post here to say that I am/was. I actually learned quite a bit online, especially from people's forum responses and guides (Even from L. Spiro, really). I started making a pretty neat engine that incorporated actual 2d and 3d technology (think a mix of raycaster that swapped out to a voxel-like engine), and then I was offered a job doing high load database transactions for a backend payment processing company (Services ADP, Wells fargo, Etrade, Bank of america to name a few), working on extremely high performance databases in the performance lab, and took that. Now I'm a Chief technical lead for a multi-million dollar piece of software, and I'm only 24. I guess what I'm saying is, don't try to just be a graphics programmer, try to get your feet wet with general programming concepts, because quite frankly, working as a non-game programmer is going to pay much more, and give you much better hours. As for a degree, I got a BS in CS, which helps getting an entry level job a LOT. But if you're good at what you do, then it doesn't really matter. Also, as soon as you get 1/2 a year of experience under your belt, no one cares about your degree. My boss (The CEO) has a Masters in business from Harvard, and he didn't care at all that I have a B.A in computer science from Devry. He cares that I can get the job done well, and direct the development team. ### #13Tasaq Members Posted 01 February 2013 - 07:06 AM I am kinda both, since I am finishing my degree next year, but in "Computer systems and programming", and I am starting graphics programming courses in two weeks from now. But everything related to graphics programming I learned on my own. And it's fun, I don't do it for money, but I want to soon (i am worried about this idea since it's hard to find a job dealing with graphics programming in my region :< ). About picking the material, first I decided what I want to do. After that I used google. I found simple tutorials (just to get the idea). Then I found about GameDev, whenever I am stuck or confused, people here always help me, they are very kind and understanding. Will even give you interesting pointers and new ideas Remember that with programing, arts or any other field you need patience, it's key to everything ### #14Schrompf Prime Members Posted 01 February 2013 - 07:24 AM POPULAR Wow, Rob! That is an inspiring story! I, too, grew the most when I was thrown into an experienced team as a youngster. But let's start at the beginning: It's 1985, East Germany is still strongly separated from West Germany, and it's still some sort of self-proclaimed democracy with nothing but the best in mind for its people. But some of its ideas were indeed genuinely well-minded - it mass-produced a little hardware board called the Z1013 - an 8bit processor with 16kb of RAM - with the intent to make its people comfortable with the technology and to grow a new generation of technic affine people for its economy. The state didn't last long enough to reap the fruits of this endeavour, but the idea was surprisingly smart and long-term. I was 6 years old at this time, my dad brought home one of these computers, and simply left his twin sons alone with it. We played on it, we watched our father code for it, and soon we picked up coding for ourselves. After all, getting new programs for that hardware was a matter of knowing the right people and copying their tapes, so we were stuck with the boxed software for a long time. There came a BASIC with it, and we did put it to use. In school we just started learning the first letters, at home we wrote the first simple programs. Without knowing a word of english, that also came along with the years. When BASIC wasn't interesting enough anymore, I even picked up machine code, writing my programs by putting hex bytes directly into memory and then losing it all at the next crash. I knew the meaning of the Carry and Overflow flags in my sleep, without knowing what the words mean. Then we switched to a 4Mhz IBM compatible PC that the GDR cloned from some west technology, only to be overtaken by the turning of seasons and the fall of the eastern countries, where this precious technology suddenly turned into outdated trash. And we manipulated its character set to get some crude version of per-pixel graphics :-) But the times were new, everyone was excited to live in a new bright feature, only to learn that the humans on the other side of the fence were just humans, too, and with a surprisingly large amount of condescending assholes. There seems to be a constant percentage of these in any human society, but at times of the Cold War both sides at least tried to hide those, to give a better image to the opponent :-) Sorry for the derail. Then we got an Amiga. Or better: our family bought one, but soon the only two people using it were my twin brother and me. We sure played at lot, but we also started coding with the Amiga BASIC that came with it. Side note: Amiga Basic was developed by Microsoft. We soon hit the limits of this programming language, and via some strange channels found AMOS, a basic dialect specifically for games. What an enlightment it was! We coded a lot of crude games for it, one of it we even tried to sell as Shareware, only to upload it for free after a few months and <10 units sold. Does that make me indie? At some point we visited an exhibition for which our hardware dealer organized a trip, only to come back with StormC for ~300$. An C++ compiler and an IDE, so incredibly simple when compared to even the most basic text editor today. But to us it again marked the beginning of a new era. No more Copper List hacking in asm code fragments because that new shiny C language thing was so incredibly fast! It's a good thing that we didn't knew any coder forum back in 1997, or else there would be public witnesses for our method of learning. E.g. randomly trying both . and -> until everything clicked into place over the years. Then we also coded a successor to our shareware game, sporting a single player campaign and local multiplayer coop and deathmatch, which took us 4 years and finally reached the light in 2002. We sold an incredible amount of ~800 units, which was indeed a success when taking into account the devastating state of the Amiga at that time. Even today I still earn ~50\$ per year from it :-)

And gradually we faded over to the PC. For example, somewhere in 1999 I started assembling my helper classes into a cross platform game framework that works both on Amiga and PC/Windows, and it still serves me well in 2013. That Amiga game we published got me an internship in a professional game development studio, where I arrived feeling like a veteran and left feeling like a rookie, but yet I grew tenfold smarter than before.  And even today, after two other jobs in software engineering and 10 years more, I'm still learning new things every day. I love my profession.

To stay at the thread topic: I wrote my first racing game using line shaped height maps in AMOS in 1995, I wrote a few software voxel renderers in 2001 or something, and I grew with the PC hardware from S3 Virge upto shader-based everything today. It's a beatiful place to be in today, as long as you have the time to bury yourself in front of your computer. Everything else comes freely and abundantly to you.

Yet I don't envy the young people today - the inspiration to take up coding of today comes in masses of shiny trailers with orchestral soundtrack made by dozens of highly qualified people. It must be hard to keep your faith against this. Back in my time I was excited by a few flat shaded polygons, and my only thought was "I can do that, too".

----------

### #15RobTheBloke  Members

Posted 01 February 2013 - 07:44 AM

Another Rob with a very similar story to Rob....

I started out in the 80's with BASIC on the speccy, progressed to z80 asm, transitioned to C and the Amiga, then had a brief hiatus when I went a bit nuts for fine art, and then went to uni to train to become an animator. After graduation I moved into the games industry, and then quickly moved back to programming (mainly because the artists tools were crap, and I kinda needed what needed to be fixed and had enough programming knowledge to be able to do it). Spent 10 or so years in the games industry focussed mainly on animation and rendering engines, with a splattering of art tools here and there. These days I'm doing R&D on visual FX within the film industry....

Most of what I've learned has either been self taught, or just simply by picking up fellow co-workers tricks and tips. Read anything and everything. Talk to as many people as possible (including artists!). Try out as many techniques as you can, and don't forget to have fun whilst you're doing it!

Posted 01 February 2013 - 08:19 AM

We soon hit the limits of this programming language, and via some strange channels found AMOS, a basic dialect specifically for games. What an enlightment it was! We coded a lot of crude games for it, one of it we even tried to sell as Shareware, only to upload it for free after a few months and <10 units sold. Does that make me indie?

And if anyone wants to see what AMOS could do back then, here was my licenseware release (someone somewhere obviously liked it enough to post a video of it on youtube!):

People have stated that I sampled the yelps and shrieks from IK+, cheeky gits, it was actually from a famous film, no prizes for guessing which one..... Am I allowed to divulge that now??

### #17richardjdare  Members

Posted 01 February 2013 - 08:25 AM

POPULAR

Warning: Life story coming up:

I am completely self taught. I come from a British working class background where university wasn't even mentioned to me when I was at school. I had a bad time at school thanks to bullying and undiagnosed dyspraxia, which makes me clumsy and gives me poor handwriting. Most of the time at school my teachers fixated on my writing and awkwardness rather than the contents of my work.

I was pretty depressed during all this, and developed a kind of prison mentality towards school, where my only goal was to get through the day without trouble. Learning became something I did for myself at home, according to my interests. So I developed the self-taught attitude early on.

After I left in 1993 ( I am 36), I ended up in horrible, soul destroying menial work while I struggled to teach myself to code. I always knew I was a creative, intelligent person despite everyone around me who seemed to think that working my way up at mcDonalds was my best hope.
I struggled massively with confidence issues surrounding maths in particular, but the hardest thing was getting hold of programming information and keeping my computer up to date. In the 90's most of my knowledge came from programming articles in magazines.
I still think that if I had better access to tools and books I could have got a game development job in the Amiga era, instead of struggling to learn how the blitter worked by reverse engineering the Blitz basic compiler using a demo version of a disassembler off a coverdisk!

Maths was always a problem for me. I have no native ability at all, but by just grinding away and finding the right books I have made enough progress to convince people around me that I am good at it!

I work in business web app development at the moment coding in Java on Linux servers. Before that I was a director and lead developer of an early mobile gaming company I started with two friends. We were ahead of our time really. Our games were good, but we didn't make any money.
In my spare time I am working on an iPhone game, and I am planning a 3d PC/Mac game after. I also have a lot of writing on game design that I am working on.

My goals are either to make it as an indy or for my work to get me a job making games. I want to work for a smaller studio ideally. My background isn't really compatible with the machinations of corporate HR.

So , some advice from a loser

If you can go to university, do it. I hugely regret that I was unable to do so. I really feel that I missed out by not being able to come of age in a university. Honestly, sometimes I feel like my whole youth was just worthless struggle. Its not just about knowledge which you can pick up anywhere. The opportunities are here too. You are unlikely to hook up with people with relevant interests or tech venture capital on a f*cking housing estate.

Try and find mentors, people who are better than you who are willing to teach you and help you out. This was something I really craved when I was younger.

Cultivate an entrepreneurial spirit regarding getting things done, learning etc. always keep what you want to do in mind and don't get sidetracked by bullshit beliefs regarding what kind of person is supposed to do a thing. Your desire is your permission! If you can't do the above two things, then this is essential!

Study the lives of cool people from different eras. I find its easier to relate to Leonardo or Plato than modern success stories since their backgrounds are so alien they never become an issue.

I studied a lot of philosophy over the years, western and eastern, and I practice meditation in a secular context. This has helped me by enabling me to really get to the root of confidence issues and all manner of harmful beliefs surrounding intelligence, social background etc.

If you are studying maths, get many books on the same subject. Maths books are often really really bad and make all kinds of poor assumptions about what you should already know.

If you get stuck, be analytical about it. Dont tell yourself "I am stupid, this is a sign I'm not meant to be doing this" etc. etc. Thats all crap and it will derail you. Slow down, break things up and try and pinpoint the moment difficulty and unknowingness appears in the train of thought.

Edited by richardjdare, 01 February 2013 - 08:34 AM.

Just finished work on Antigen for iPhone and iPod Touch - www.richardjdare.com

Posted 01 February 2013 - 08:27 AM

Yes and no.

I've got a formal mathematics education (and degree to prove it) but I've never had any formal programming/computer science training.

To be honest, the maths is the tricky part, you don't need to be able to do it, you just need to understand the concepts, once you've got that down the code itself (excluding optimisation) is relatively easy.

### #19Ingenu  Members

Posted 01 February 2013 - 08:40 AM

POPULAR

I started programming when I was a teen, but it's only when 3D accelerators (PowerVR, 3Dfx Voodoo, Rendition Verite, S3 Savage, nVidia TNT...) became widely available  that I made my dive into 3D, and only because I wanted to make a breath-taking, living environment, and there was no freely available engine that could match what I wanted.

Took me years to learn by myself, today it's much better with the internet and a lot of literature available, but at first I was almost drowning in the middle of an incredible lot of things (algorithms, API, GPU, CPU, cache, memory allocation/management, BRDF, BSSRDF, photons...) to be learnt. At some point though a few things started to make sense and things went into forming a picture becoming clearer and clearer. [Although, in truth, the more you know the more you realize how little you do.]

I also got the chance to work in a very talented team at Funcom, and it was a blast, in the short time I spent there I tremendously improved. Working with great people has an amazing impact, it's like your brain is blooming ; It's an experience I sincerely wish to everyone. (There's a downside though, working in  team of average people feels like suffocating to some extent. )

I'm currently working on algorithms for upcoming hardware in a GPU company.

I think it would be great to make a list of books we think are really good in our area of expertise including a note about why and which level of expertise is required to read them.

Edited by Ingenu, 01 February 2013 - 08:42 AM.

-* So many things to do, so little time to spend. *-

### #20metsfan  Members

Posted 01 February 2013 - 12:09 PM

I am self taught as well when it comes to graphics.  I started about 2 years ago learning OpenGL, just by reading books.  Books and experience are really the best ways to get into graphics programming.  I'd say the hardest part for me was the mathematics.  I hadn't used linear algebra or calculus in years, and all of the sudden, it's taken for granted that I know how to solve a system of linear equations or integrate a function across a hemisphere.  So it takes some time to get back into that mindset, but once you do, it all starts flowing back.

I am now in the process of creating a vector-based map application for my job using OpenGL ES on the iPhone, and I am developing a game and a level editor in my spare time using DirectX.

Some of my favorite books are: