Giter VIP home page Giter VIP logo

graphics-developer-roadmap's Introduction

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

graphics-developer-roadmap's People

Contributors

momodeve avatar columbusutrigas avatar alexanderveselov avatar ufna avatar xproger avatar munrocket avatar luridhound avatar eliasdaler avatar hochheilige avatar huntlier avatar scapior avatar skoptew avatar

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.