Всем привет. Меня зовут Григорий Дядиченко. Сегодня хочется составить некий список литературы, который как мне кажется было бы полезно почитать каждому, кто решает задачи рендера и занимается графикой в Unity. Разные книжки (и часть лекций) рассчитаны на понимание разных частей областей полезных рендер разработчику.

Для начала хочется взять некий набор книг с которых я бы начал погружение в мир рендера и графики. При разных степенях погружения в графику нужны разные знания и начинать всего проще с простых практических примеров разбирая базовые концепции.

Building Quality Shaders for Unity®: Using Shader Graphs and HLSL Shaders 1st ed. Edition @ Daniel Ilett

https://www.amazon.com/Building-Quality-Shaders-Unity®-Shader/dp/1484286510

Отличная книжка с кучей примеров разбирающая базовые концепции, математику и как писать шейдеры в контексте Unity. Для начального изучения и получения какой-то базы по написанию шейдеров подходит отлично. Книжка довольно подробно разбирает примеры и на мой взгляд для "не новичков в ней мало интересного", но какие-то базовые шейдеры разобраны чуть ли не построчно.

Cat Like Coding Rendering Tutorials

https://catlikecoding.com/unity/tutorials/rendering/

У Cat Like Coding очень много прикольных туториалов. С точки зрения кода и его организации мне они конечно не нравятся (в отличии от книги выше), но тем не менее они тоже отлично подходят для разбора базовых концепций начинающим и при этом там много довольно полезных туториалов и для не совсем новичков. Так как многие скажем не так хорошо разбираются в том, как делается GPU Instancing в своих шейдерах и т.п.

Начало положено. Что дальше?

Когда уже рука немного набита и в целом вид hlsl не вызывает хтонического ужаса — можно начинать погружаться дальше. И первое во что имеет смысл погрузится — это математика.

3D Math Primer for Graphics and Game Development @ Fletcher Dunn & Ian Parbery

https://gamemath.com/

Конечно проще книжку воспринимать обладая некоторой базой по математике. Но она предполагается и в первой книге, хотя в ней главу про матрицы и т.п. на начальных этапах можно пропустить ровно так же, как в Рихтере информацию про блоки индексов синхронизации. А так отличная книга, чтобы освежить знания и узнать что-то новое.

Но помимо математики уже можно узнать, что не существует "шейдеров Unity", а есть hlsl и glsl шейдеры (и другие). Поэтому можно изучить шейдерный язык HLSL кроме части с компиляцией (она в Unity не особо важна). Так же можно поковырять ShaderToy и посмотреть этот репозиторий, что он и как генерирует, что меняет и как переносятся glsl шейдеры в Unity. Для обучения очень полезно разбирать чужие решения.

Кроме того посмотреть туториалы по базовым шейдерным эффектам:

Дело в том, что большинство крутых визуальных эффектов — это творческое применение базовых эффектов и концепций, а не какая-то сложная высшая математика. Вообще большая часть VFX строится на масках и uv distortion.

Хочется углубится

Когда уже простые вещи абсолютно понятны и хочется чего-то поглубже, то на мой взгляд имеет смысл начинать изучать вот эти материалы.

Real-Time Rendering, Fourth Edition 4th Edition @ Eric Haines & Naty Hoffman & Tomas Akenine-Mo¨ller

https://www.amazon.com/Real-Time-Rendering-Fourth-Tomas-Akenine-Möller/dp/1138627003

Эта книжка будет повторять в своём начале базовую (но написанную посложнее и без контекста Unity). Но в ней разбирается очень много более глубоких концепций. BRDF, Microfacet Theory и разные довольно сложные техники которые используются в реалтайм рендере. Но эту книгу я считаю чуть ли не настолько книгой каждого, кто работает с рендером.

GPU Gems

https://developer.nvidia.com/gpugems/gpugems/contributors

Ещё один сборник техник в графике в трёх частях. Эти книги, как и прошлая уже требуют хорошего знания математики, чтобы их понимать. В ней собрано много крутых и интересных техник, подходов, разборов различных эффектов. И очень много прикольных трюков.

Есть в разы больше материалов для глубокого изучения. Полный список можно найти тут. Две книги выше я бы назвал стартом глубокого погружения в мир реалтаймовой компьютерной графики.

А как оно всё-таки работает?

Это всё были техники или же что-то что относится к программированию. Но для глубокого понимания работы ваших эффектов лучше знать "а как работает видеокарта". Что по железу? Тут есть нюанс, что эта информация быстрее может устаревать и прям для совсем хорошего понимания лучше читать мануалы видеокарт или рекомендации от производителей. Например вот это. Но так же есть что почитать для общего понимания.

Render Hell 2.0

https://simonschreibt.de/gat/renderhell/

Рендер хелл отлично, хотя и поверхностно (ко многому можно докопаться в стиле "вообще-то в таком-то случае это не совсем там") описывает логику работы гпу. Конечно не все гпу так работают и есть нюансы, но для какого-то базового представления очень полезно.

В том же Render Hell есть ссылки на лекции по параллельным вычислениям, которые объясняют работу GPU той же NVidia и принцип работы архитектуры Maxwell в подробнее и сложнее. Это такое знание которое нет необходимости знать прям конкретно вплоть до нюансов конкретной видеокарты, но поможет лучше оптимизировать или понимать проблемы в ваших эффектах. Оно, так же как и знание о существовании Cache Line Split у CPU полезно на уровне "понимания концепции". Знание деталей конкретной видеокарты особенно Unity разработчику может быть полезно крайне редко

В заключении

Я наверняка охватил не всё и не все книги, но выбрал те, которые я прочитал и мне они показались интересными. Если есть какие-то книги о которых я забыл или не знаю, которые стоит прочесть, пишите в комментариях. И так как я не придумал куда поставить эту информацию, то напишу в конце, что ещё каждый кто хочет работать с рендером должен знать про Khronos и читать стандарты. Спасибо за внимание!

Комментарии (1)


  1. Brightori
    25.10.2022 04:44

    =) отличные тред, надо для чатиков в телеге больше таких обобщающих штук )