Skip to content

Huntlier/graphics-developer-roadmap

 
 

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

79 Commits
 
 
 
 

Repository files navigation

graphics-developer-roadmap

This repository contains different resources which may be helpful during your journey of becoming a graphics developer. The list is supported by @prographon community. Our current plans include finding more high-quality books, tutorials and articles, creating a step-by-step guide (roadmap) for becoming a graphics engineer and sharing knowledge about new edge-breaking technologies in Computer Graphics.

How to start learning

Required preparations

The first thing to note is that to become graphic/rendering developer you must really know a lot. Almost all engines are written in C++, so you must certainly learn it first before diving into rendering. Knowledge of computer architecture is also highly recommended, specifically GPU architecture. C++/other languages resources are not present in this roadmap, as they are not explicitly related to graphics. You can either learn these topics first and then return to graphics, or try learning everything in parallel - the choice is up to you. Also, it is required to understand at least basics of linear algebra and trigonometry.

Starting point

One of the easiest way to touch graphics programming without dealing with real graphic APIs is to write a software rasterizer/raytracer. Ssloy's tutorials contain two very well written tutorials: tinyraytracer and tinyrenderer. You can go through them first and get a good insight on how raytracing and graphic API implementation works, without even touching a real GPU.

Parallel computing

The best way to get insight of how GPU work is to try to adapt your code for parallel processing. If you followed the first step, at this point you have a nice looking path tracer / renderer, which now you can speed up by porting your rendering code to OpenCL or Cuda. These are the frameworks for general purpose GPU computing which are not yet graphic APIs, but introduce some new concepts with which you should become familiar. If you already tried to optimize your projects by utilizing multiple CPU cores, the process of porting should not be hard.

OpenGL as first graphic API

Now when you have a bit of understanding of how interact with GPU, you can finally dive into real graphic APIs. The opinions may vary, but the smoothest learning curve is achieved when you start from the simplest graphic APIs, such as OpenGL, and only after mastering it switching to more verbose, like DirectX 12 or Vulkan. Note that even with OpenGL you can write almost everything, including 2D renderer, first-person shooter game or general-purpose game engine. It is okay spending a year on a project which seemed simple at first glance, as long as it helps you to learn and give you a joy. For best start we suggest watching Cherno's OpenGL series and going through LearnOpenGL turorials. Your main goal at this stage is to understand how GPU rendering works, implement classic algorithms like shadow mapping and deferred rendering, and create your own physically based renderer. We believe that these are the topics which any graphic engineer should understand to be ready for real job in rendering team.

Vulkan/DirectX12

At this point you should be quite familiar with graphic API and can implement some basic algorithms in graphics. From here you can move forward to more advanced APIs, like Vulkan, DirectX12 or Metal, which are positioned as industry standard in most companies which focus on gamedev/CGI. It does not actually matter a lot which API from these three you choose, as they are all quite simular and it does not take much time to switch from one to another. In this guide we suggest to stick with Vulkan, because it is cross-platform, have lots of great tutorials and materials and introduce most of the graphic API concepts which you potentially may encounter while working with any other graphic API. As you already have an OpenGL renderer, a good idea will be to port it to Vulkan API (or maybe support both APis). To begin with, we suggest to follow Intel's Vulkan guide, with assist of some additional resources, like Vulkan Engine Guide and Writing an efficient Vulkan renderer by Zeux. During development you will definitely encounter some problems which may seem hard to deal with, such as barrier placement, descriptor allocation, render pass manegement. As they are quite common, people have already come up with some good solid solutions, like render-graph based rendering and hybrid rendering. So, all in all, the main goal for your at this stage is to create a high-performance, low overhead rendering framework with convinient to use interface. It will be both a good pet project for your graphics developer resume and an excellent sandbox with lots of opportunities for further experimentations.

Graphic API

OpenGL

  • Learn OpenGL - modern (3.3+) OpenGL tutorial (phong lighting, shadow mapping, mesh loading, deferred rendering, PBR + IBL lighting)
  • OpenGL step by step - modern (3.3+) OpenGL tutorial (phong lighting, shadow mapping, mesh loading, deferred rendering, skeletal animation)
  • OpenGL tutorial - modern (3.3+) OpenGL tutorial (phong lighting, shadow mapping, text rendering, mesh loading)
  • OpenGL by The Cherno - step by step OpenGL course for beginners (basic 2D rendering, texturing, batching)

Vulkan

DirectX 12

WebGPU

Software Rasterization

Books

Graphics Labs Publications

Articles

Tutorials

Courses

Video courses

Digests

Blogs

Useful sites

  • Shader Playground - powerful online shader compiler
  • Shadertoy - shader showcase sandbox
  • GPU info - open database of Vulkan, GL and GLES devices, their capabilities and supported extensions
  • HexEd - browser-based hex editor

Tools

About

roadmap to becoming a graphics developer

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published