Чтобы устроиться графическим программистом, нужно разбираться сразу в двух вещах. Первая — CPU-сторона: современные «явные» API вроде DirectX12, Vulkan или Metal, плюс написание движка для загрузки ассетов. Вторая — GPU-сторона: математика освещения, рендеринг теней, ambient occlusion, пост-эффекты. И понимание, что на GPU быстро, а что — тормоз.
Одновременно учить и то, и другое тяжело. Если хочешь сосредоточиться на GPU, возьми для CPU что-то попроще: OpenGL, WebGL, DirectX11 или готовый движок. Если наоборот — доведи до ума вывод первого треугольника и меша на экран, о красоте пока не думай.
Важная часть GPU-стороны — написание path tracer'а. Именно так делают рендеринг в кино, а реальный тайм мы лишь приближаем. Отличная отправная точка — бесплатная книга «Ray Tracing in One Weekend». Она доступная и учит фотореалистичному рендерингу.
Вторая важная штука — PBR (Physically Based Rendering). Это принципиальный подход к освещению: если соблюдать правила, результат будет хорошим в любых условиях. До PBR люди пихали случайные формулы, и ассеты выглядели нормально только при одном освещении — при другом становились слишком тёмными или светящимися. Приходилось делать кучу версий. PBR избавил от этой боли. Хорошее введение — раздел про PBR на learnopengl.com. Для углубления — документация Filament от Google и культовая книга Physically Based Rendering: From Theory To Implementation (pbrt.org).
Из математики реально нужно только: линейная алгебра (матрицы, векторные произведения), базовая тригонометрия и чуть-чуть матанализа. Дальше можно использовать сколько угодно — ограничений нет. То же с алгоритмами: хватит связных списков, хеш-таблиц и сортировок. Часто простой массив быстрее связного списка.
Для CPU-программирования в геймдеве стандарт — C++. Кто-то использует Rust, но это не мейнстрим. WebGPU даёт возможности, которых не было в WebGL, но вакансий под него почти нет. Для шейдеров чаще всего берут HLSL, иногда GLSL — их транспилируют под разные платформы.
Автор также делится мыслями про ML (применительно к агентам): он не верит, что текущие технологии справляются с тем, что им продают. Сам использует Claude для разбора математики и статей — легко проверить, не галлюцинирует ли он. Для программирования ИИ бесполезен: код всё равно придётся разбирать самому, проще написать. Единственное исключение — проверка багов в файле: спросил, получил «да» или «нет», ничего не потерял. В целом автор считает, что человечество когда-нибудь сделает настоящий ИИ, но нынешняя эпоха LLM — просто репетиция перед этим.