├── images ├── opengl-logo.png ├── vulkan-logo.png ├── directx11-logo.png └── directx12-logo.png └── README.md /images/opengl-logo.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/prographon/graphics-developer-roadmap/HEAD/images/opengl-logo.png -------------------------------------------------------------------------------- /images/vulkan-logo.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/prographon/graphics-developer-roadmap/HEAD/images/vulkan-logo.png -------------------------------------------------------------------------------- /images/directx11-logo.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/prographon/graphics-developer-roadmap/HEAD/images/directx11-logo.png -------------------------------------------------------------------------------- /images/directx12-logo.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/prographon/graphics-developer-roadmap/HEAD/images/directx12-logo.png -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # graphics-developer-roadmap 2 | 3 | This repository contains different resources which may be helpful during your journey of becoming a graphics developer. The list is supported by [@prographon](https://github.com/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. 4 | 5 | ## How to start learning 6 | 7 | ### Required preparations 8 | 9 | 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. 10 | 11 | ### Starting point 12 | 13 | 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](https://github.com/ssloy/tinyrenderer/wiki) contain two very well written tutorials: [tinyraytracer](https://github.com/ssloy/tinyraytracer/wiki) and [tinyrenderer](https://github.com/ssloy/tinyrenderer/wiki/Lesson-0:-getting-started). 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. 14 | 15 | ### Parallel computing 16 | 17 | 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](https://docs.nvidia.com/cuda/cuda-c-programming-guide/index.html). 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. 18 | 19 | ### OpenGL as first graphic API 20 | 21 | 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](https://www.youtube.com/watch?v=W3gAzLwfIP0&list=PLlrATfBNZ98foTJPJ_Ev03o2oq3-GGOS2&ab_channel=TheCherno) and going through [LearnOpenGL turorials](https://learnopengl.com/). Your main goal at this stage is to understand how GPU rendering works, implement classic algorithms like [shadow mapping](https://learnopengl.com/Advanced-Lighting/Shadows/Shadow-Mapping) and [deferred rendering](https://learnopengl.com/Advanced-Lighting/Deferred-Shading), and create your own [physically based renderer](https://academy.substance3d.com/courses/the-pbr-guide-part-1). We believe that these are the topics which any graphic engineer should understand to be ready for real job in rendering team. 22 | 23 | ### Vulkan/DirectX12 24 | 25 | 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. 26 | 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](https://software.intel.com/content/www/us/en/develop/articles/api-without-secrets-introduction-to-vulkan-preface.html), with assist of some additional resources, like [`Vulkan Engine Guide`](https://vkguide.dev/) and [`Writing an efficient Vulkan renderer` by Zeux](https://zeux.io/2020/02/27/writing-an-efficient-vulkan-renderer/). 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](https://themaister.net/blog/2017/08/) and [hybrid rendering](https://media.contentapi.ea.com/content/dam/ea/seed/presentations/wihlidal-halcyonarchitecture-notes.pdf). 27 | 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. 28 | 29 | ## Graphic API 30 | 31 | ### OpenGL 32 | 33 | 34 | 35 | - [Learn OpenGL](https://learnopengl.com/) - modern (3.3+) OpenGL tutorial (phong lighting, shadow mapping, mesh loading, deferred rendering, PBR + IBL lighting) 36 | - [OpenGL step by step](http://ogldev.atspace.co.uk/) - modern (3.3+) OpenGL tutorial (phong lighting, shadow mapping, mesh loading, deferred rendering, skeletal animation) 37 | - [OpenGL tutorial](http://www.opengl-tutorial.org/) - modern (3.3+) OpenGL tutorial (phong lighting, shadow mapping, text rendering, mesh loading) 38 | - [OpenGL by The Cherno](https://www.youtube.com/watch?v=W3gAzLwfIP0&list=PLlrATfBNZ98foTJPJ_Ev03o2oq3-GGOS2&ab_channel=TheCherno) - step by step OpenGL course for beginners (basic 2D rendering, texturing, batching) 39 | 40 | ### Vulkan 41 | 42 | 43 | 44 | - [Vulkan 1.2 API Specifications](https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/index.html) - Official Vulkan specification by Khronos Group 45 | - [Vulkan Tutorial](https://vulkan-tutorial.com/) - Vulkan tutorial teaching basics of the API (initializing context, drawing triangle, texturing, mesh loading) 46 | - [API without Secrets: Introduction to Vulkan](https://software.intel.com/content/www/us/en/develop/articles/api-without-secrets-introduction-to-vulkan-preface.html) - in depth tutorial about Vulkan API (initializing context, swapchain, drawing triangle, descriptor sets) 47 | - [Vulkan Guide](https://github.com/KhronosGroup/Vulkan-Guide) - Vulkan guide by Khronos Group (graphic pipeline, layers, memory allocations, synchronization) 48 | - [niagara: Building a Vulkan renderer from scratch](https://www.youtube.com/playlist?list=PL0JVLUVCkk-l7CWCn3-cdftR0oajugYvd) - In-depth lessons series about how to use few modern Vulkan rendering techniques, such as GPU culling & scene submission, cone culling, automatic occlusion culling, task/mesh shading, and others 49 | - [Tips and Tricks: Vulkan Dos and Don’ts](https://developer.nvidia.com/blog/vulkan-dos-donts/) - Nvidia's tips for designing high performance Vulkan applications 50 | - [Vulkanised](https://www.youtube.com/watch?v=1rDCNknSb2s&list=PLYO7XTAX41FPMg41svrVJA9stwcYCvdW0) - Open webinars about Vulkan best practices and pitfalls by Khronos Group 51 | - [Writing an efficient Vulkan renderer](https://zeux.io/2020/02/27/writing-an-efficient-vulkan-renderer/) - Chapter about Vulkan renderer from GPU Zen 2 book in a form of the blogpost 52 | - [Vulkan Engine Guide](https://vkguide.dev/) - Vulkan game engine guide focuses around dynamic rendering. This tutorial use extra libraries like Vk Bootstrap and VMA to simplify boilerplate Vulkan code and memory allocation. 53 | - [Vulkan Game Engine by Brendan Galea](https://www.youtube.com/playlist?list=PL8327DO66nu9qYVKLDmdLW_84-yE4auCR) - Useful step by step tutorial on writing a game engine with a detailed illustrated description of how Vulkan works (not finished yet). 54 | - [Yet another blog explaining Vulkan synchronization](https://themaister.net/blog/2019/08/14/yet-another-blog-explaining-vulkan-synchronization/) - guide to Vulkan synchronization (barriers, semaphores, fences and etc.). Referenced by official Khronos blog. 55 | - [Render graphs and Vulkan - a deep dive](https://themaister.net/blog/2017/08/) - series of articles about implementation of render-graph based rendering in Vulkan 56 | 57 | 58 | ### DirectX 12 59 | 60 | 61 | 62 | - [Learning DirectX 12](https://www.3dgep.com/learning-directx-12-1/) - in depth tutorial about DirectX 12 API (graphic pipeline, command queues, descriptor sets, texturing) 63 | - [Official DirectX 12 Graphics samples by Microsoft](https://github.com/microsoft/DirectX-Graphics-Samples) 64 | - [Official DirectX documentation](https://docs.microsoft.com/en-us/windows/win32/directx) 65 | - [Official DXIL documentation](https://github.com/microsoft/DirectXShaderCompiler/blob/master/docs/DXIL.rst) 66 | - [DirectX supplementary specs (GitHub)](https://microsoft.github.io/DirectX-Specs/) 67 | - [DirectX 3D Series](https://wiki.planetchili.net/index.php/Hardware_3D_Series_(C%2B%2B_DirectX_Graphics)) 68 | - [Braynzar soft DirectX 12 tutorials](https://www.braynzarsoft.net/viewtutorial/q16390-04-directx-12-braynzar-soft-tutorials) 69 | 70 | ### WebGPU 71 | 72 | 73 | 74 | - [Explainer and FAQ](https://gpuweb.github.io/gpuweb/explainer/) - why proposed 75 | - [WebGPU Shading Language](https://www.w3.org/TR/WGSL/) - working draft 76 | - [webgpu.h](https://github.com/webgpu-native/webgpu-headers/blob/main/webgpu.h) - header as a platform-agnostic HAL between implementations 77 | - [dawn](https://dawn.googlesource.com/dawn) - C++ implementation from Google 78 | - [wgpu](https://github.com/gfx-rs/wgpu) - Rust implementation from Mozilla 79 | 80 | ## Software Rasterization 81 | - [demo.design 3D programming FAQ](https://www.enlight.ru/faq3d/content.htm) 82 | - [Fast affine texture mapping](http://ftp.lanet.lv/ftp/mirror/x2ftp/msdos/programming/theory/fatmap.txt) 83 | - [Ultimate /|\ ATARI 4nd d3m0 coding page !!!](https://mikro.naprvyraz.sk/docs/index.htm) 84 | - [Poor man's bilinear](https://www.hugi.scene.org/online/coding/hugi%2020%20-%20cobil.htm) 85 | - [Coding 3D Engines by Luki](http://www.luki.webzdarma.cz/luki_engine_en.htm) 86 | - [256-Color VGA Programming in C](http://www.brackeen.com/vga/index.html) 87 | - [PlayStation Ordering Table Tutorial](https://psx.arthus.net/sdk/Psy-Q/DOCS/TECHNOTE/ordtbl.pdf) 88 | - [The Coverage Buffer (C-Buffer)](https://www.flipcode.com/archives/The_Coverage_Buffer_C-Buffer.shtml) 89 | 90 | ## Books 91 | - [Realtime Rendering](https://www.amazon.com/Real-Time-Rendering-Fourth-Tomas-Akenine-M%C3%B6ller/dp/1138627003) (graphics hardware, shading & lighting algorithms, ray tracing) 92 | - [Physically Based Rendering: From Theory To Implementation](http://www.pbr-book.org/) (PBR, photorealistic rendering, sampling methods) 93 | - [Substance PBR Guide](https://academy.substance3d.com/courses/the-pbr-guide-part-1) 94 | - [Advanced Global Illumination](https://www.amazon.com/Advanced-Global-Illumination-Philip-Dutre/dp/1568813074) (global illumination algorithms, light transport theory, radiosity) 95 | - [GPU Gems](https://developer.nvidia.com/gpugems/gpugems/contributors) (collections of different 3D graphics algorithms) 96 | - [Ray Tracing in One Weekend Book Series](https://github.com/RayTracing/raytracing.github.io) (software ray tracing, BVH) 97 | - [Collection of PDF books about graphics and programming](https://drive.google.com/drive/folders/1D-M15SvPxF1JqmzRt1UenQ1x6Zp_Ebb9?usp=sharing) 98 | - [GPU Pro](https://www.amazon.com/GPU-Pro-Advanced-Rendering-Techniques/dp/1568814720) (like GPU Gems, but it's closer to state-of-art) 99 | - [Mathematics for 3D Game Programming and Computer Graphics](https://www.amazon.co.uk/Mathematics-Game-Programming-Computer-Graphics/dp/1435458869/ref=sr_1_1?keywords=mathematics+for+3d+game+programming+and+computer+graphics&qid=1680135551&sprefix=mathematics+for+3d+game+progra%2Caps%2C75&sr=8-1) (very useful book, covers almost everything needed for a start, pretty much a classic book) 100 | 101 | ## Graphics Labs Publications 102 | - [EPFL Realistic Graphics Lab](http://rgl.epfl.ch/publications) 103 | - [KIT Computer Graphics Group](https://cg.ivd.kit.edu/english/publikationen.php) 104 | - [Utah Graphics Lab](https://graphics.cs.utah.edu/research/publications) 105 | - [Cornell University](https://www.graphics.cornell.edu/resources/publications) 106 | - [NVIDIA](https://research.nvidia.com/publications) 107 | - [AMD](https://gpuopen.com/learn/publications) 108 | - [Valve](https://www.valvesoftware.com/en/publications) 109 | - [Unity](https://unity.com/publications) 110 | 111 | ## Articles 112 | - [Common Interview Questions for a Graphics Programmer](https://erkaman.github.io/posts/junior_graphics_programmer_interview.html) - checklist for a Junior Graphics Programmer 113 | - [Basic Theory of Physically-Based Rendering by Marmoset](https://marmoset.co/posts/basic-theory-of-physically-based-rendering/) 114 | - [Physically Based Rendering in Filament](https://google.github.io/filament/Filament.html) - equations and theory behind the material and lighting models used in Filament. 115 | 116 | ## Tutorials 117 | - [Ssloy's tutorials](https://github.com/ssloy/tinyrenderer/wiki) - tinyrenderer (software rasterizer), tinyraytacer (software ray-tracer) 118 | - [Common techniques to improve shadow maps](https://docs.microsoft.com/en-us/windows/win32/dxtecharts/common-techniques-to-improve-shadow-depth-maps) - antialiasing algorithm for shadows, cascaded shadow maps, solutions to common problems (with DirectX 11 code snippets) 119 | - [AMD RDNA2 Perfomance Guide](https://gpuopen.com/performance/) 120 | 121 | ## Courses 122 | - [Advances in Real-Time Rendering in 3D Graphics and Games](http://advances.realtimerendering.com/) 123 | - [GDC Vault](https://www.gdcvault.com/) 124 | - [Interactive 3D Graphics (Eric Haines)](https://www.udacity.com/course/interactive-3d-graphics--cs291) 125 | 126 | ## Video courses 127 | - [TU Wien Ray tracing course](https://www.youtube.com/playlist?list=PLujxSBD-JXgnGmsn7gEyN28P1DnRZG7qi) - A course on photorealistic rendering, ray tracing and global illumination at the TU Wien 128 | - [Cem Yuksel Intro to Graphics](https://www.youtube.com/playlist?list=PLplnkTzzqsZTfYh4UbhLGpI5kGd5oW_Hh) - A course explaining mostly theoretical part of computer graphics, global illumination and simulation 129 | - [Cem Yuksel Interactive Graphics](https://www.youtube.com/playlist?list=PLplnkTzzqsZS3R5DjmCQsqupu43oS9CFN) - A course mostly for practical real-time renderer implementation 130 | 131 | ## Digests 132 | - [Two Minute Papers](https://www.youtube.com/channel/UCbfYPyITQ-7l4upoX8nvctg) - summaries of modern articles on computer graphics 133 | - [Graphics Programming weekly](https://www.jendrikillner.com/tags/weekly/) - weekly newsletter with CG materials 134 | 135 | ## Blogs 136 | - [Self Shadow](https://blog.selfshadow.com/) - Stephen Hill, principal rendering engineer, Lucasfilm Advanced Development Group 137 | - [Wicked Engine Net](https://wickedengine.net/) - blog about computer graphics and game engine dev by graphics programmer at Sony 138 | - [Ray Tracey's blog](http://raytracey.blogspot.com/) - Sam Lapere, scientific visualization devtech at Nvidia 139 | - [Eric Heitz](https://eheitzresearch.wordpress.com/research/) - research scientist at Unity Technologies 140 | - [Wenzel Jakob](http://rgl.epfl.ch/people/wjakob) - assistant professor leading the Realistic Graphics Lab at EPFL's School of Computer and Communication Sciences 141 | - [Real-time rendering resources](https://www.realtimerendering.com/) - resources page for the book Real-Time Rendering and a lot of useful links 142 | - [Alian Galvan](https://alain.xyz/blog) - graphics programmer at Marmoset about engine development, samples with different graphics API 143 | - [Game Development by Sean](https://seanmiddleditch.com/) - game and engine development, common techniques 144 | - [CODE517E](https://c0de517e.blogspot.com/) - blog about graphics by graphics programmer at Altera 145 | - [Aras P](https://aras-p.info/blog/) - lead graphics programmer at Unity, contains many tricks and techniques 146 | - [Arseny Kapoulkine](https://zeux.io/) - technical fellow at Roblox, Vulkan-related and mobile stuff 147 | - [Adrian Courreges](http://www.adriancourreges.com/blog/) - collection of frame analysis during current decade of different games 148 | - [Matt Pettineo](https://therealmjp.github.io/posts/) - lead graphics/engine programmer at Ready At Dawn Studios, articles about Spherical Gaussians and GPU Barriers 149 | - [Emilio Lopez](http://www.elopezr.com/) - Senior Graphics Engineer at Playground Games. Previously making LEGO at Traveller's Tales. 150 | - [Simon Coenen](https://simoncoenen.com/blog) - Platform Engineer at Studio Gobo, Brighton. 151 | - [Inigo Quilez](https://iquilezles.org/articles/) - articles about sdf, raymarching, raytracing etc. 152 | - [Jasper St. Pierre](https://blog.mecheye.net/) - Creator of [noclip.website](https://noclip.website/) and [YouTube channel](https://www.youtube.com/user/DaysAreRare). Staff Graphics Engineer at Cryptic Studios. 153 | - [Maister's Graphics Adventures](https://themaister.net/blog/) - low level graphics programming from author of [Granite](https://github.com/Themaister/Granite) 154 | - [A trip through the Graphics Pipeline 2011](https://fgiesen.wordpress.com/2011/07/09/a-trip-through-the-graphics-pipeline-2011-index/) - Old but still up-to-date articles on GPU and driver internals. 155 | - [Krzysztof Narkowicz](https://knarkowicz.wordpress.com/) - Technical director of graphics at Epic Games. 156 | 157 | ## Useful sites 158 | - [Shader Playground](http://shader-playground.timjones.io/) - powerful online shader compiler 159 | - [Shadertoy](https://www.shadertoy.com/) - sandbox for fragment shaders 160 | - [compute.toys](https://compute.toys) - sandbox for compute shaders 161 | - [GPU info](https://gpuinfo.org/) - open database of Vulkan, GL and GLES devices, their capabilities and supported extensions 162 | - [HexEd](https://hexed.it/) - browser-based hex editor 163 | 164 | ## Tools 165 | - [RenderDoc](https://renderdoc.org/) - very powerful Vulkan, DirectX and OpenGL debugger with support of in-engine integration 166 | - [AMD CodeXL](https://github.com/GPUOpen-Archive/CodeXL) - CPU/GPU debugger and profiler 167 | - [AMD Compressonator](https://gpuopen.com/compressonator/) - tool for texture compression 168 | - [AMD GPU Profiler](https://gpuopen.com/rgp/) 169 | - [AMD Memory Visualizer](https://gpuopen.com/rmv/) 170 | - [AMD Developer Panel](https://gpuopen.com/rdp/) 171 | - [AMD GPU Analyzer](https://gpuopen.com/rga/) - offline compiling tool and ISA inspector 172 | - [NVidia NSight](https://developer.nvidia.com/nsight-graphics) - powerful profiling tool, support of ray-tracing debugging 173 | - [Intel GPA](https://software.intel.com/content/www/us/en/develop/tools/graphics-performance-analyzers.html) 174 | - [Apple Metal debugger](https://developer.apple.com/documentation/metal/basic_tasks_and_concepts/viewing_your_gpu_workload_with_the_metal_debugger) - powerful macOS and iOS graphics debugger, profiler with shader debugging 175 | - [ShaderED](https://shadered.org/) - shader IDE with lots of debugging utilities 176 | - [Microsoft PIX](https://devblogs.microsoft.com/pix/introduction/) - powerful Windows and XBOX debugger and profiler 177 | - [PowerVR SDK Tools](https://www.imaginationtech.com/developers/powervr-sdk-tools/) - collection of tools for graphics programming 178 | - [Naga](https://github.com/gfx-rs/naga) - convert from one shader format into another 179 | --------------------------------------------------------------------------------