Всем привет. Меня зовут Григорий Дядиченко. Сегодня хочется составить некий список литературы, который как мне кажется было бы полезно почитать каждому, кто решает задачи рендера и занимается графикой в 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
Конечно проще книжку воспринимать обладая некоторой базой по математике. Но она предполагается и в первой книге, хотя в ней главу про матрицы и т.п. на начальных этапах можно пропустить ровно так же, как в Рихтере информацию про блоки индексов синхронизации. А так отличная книга, чтобы освежить знания и узнать что-то новое.
Но помимо математики уже можно узнать, что не существует "шейдеров 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 и читать стандарты. Спасибо за внимание!
Brightori
=) отличные тред, надо для чатиков в телеге больше таких обобщающих штук )