# Введение

<canvas id="custom" class="canvas" data-fragment-url="cmyk-halftone.frag" data-textures="vangogh.jpg" width="700px" height="320px"></canvas>

Изображения выше были получены двумя различными способами. Первое Ван Гог написал вручную, нанося краску слой за слоем. Он потратил на это несколько часов. Второе было получено за секунды смешиванием четырёх наборов пикселей: сине-зелёного, пурпурного, жёлтого и чёрного. Ключевое отличие в том, что второе изображение получено непоследовательным способом, то есть не шаг за шагом, а всё за раз.

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

![Печатный станок Гутенберга](gutenpress.jpg)

Фрагментные шейдеры дают вам полный контроль над пикселями на экране на сверхбыстрой скорости. Поэтому они используются повсеместно, от фильтров для видео на телефоне до современнейших 3D-игр.

![Игра Journey от That Game Company](journey.jpg)

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

## Для кого эта книга?

Эта книга написана для творческих программистов, разработчиков игр и инженеров с опытом программирования, базовыми знаниями линейной алгебры и тригонометрии, а так же желающих вывести свою работу на качественно новый уровень графических эффектов. Если вы ещё только хотите научиться программировать, я бы рекомендовал вам начать с сайта [Processing](https://processing.org/), и вернуться позже, когда освоитесь.

Эта книга научит вас использовать шейдеры и встраивать их ваши проекты, повышать их производительность и качество получаемой картинки. Поскольку шейдеры на GLSL (языке шейдеров OpenGL) компилируются и запускаются на самых разных платформах, вы сможете применять полученные знания в любой среде, где есть OpenGL, OpenGL ES или WebGL. Другими словами, вы сможете применить эти умения в скетчах на [Processing](https://processing.org/), приложениях на [openFrameworks](http://openframeworks.cc/), интерактивных инсталляциях [Cinder](http://libcinder.org/), сайтах на [Three.js](http://threejs.org/) или мобильных iOS/Android-играх.

## Какие темы освещает эта книга?

Эта книга уделяет основное внимание пиксельным шейдерам на GLSL. Сначала мы изучим что такое шейдеры, а затем научимся создавать с их помощью процедурные геометрические фигуры, узоры, текстуры и анимации. Вы изучите основы языка шейдеров и примените их к задачам, возникающим на практике: обработке изображений (логические операции над изображениями, размытие, свёртки с ядром, цветовые фильтры, таблицы значений и другие эффекты) и созданию симуляций (игра «Жизнь» Конвея, модель Грея-Скотта для реакции-диффузии, рябь на поверхности воды, акварельные эффекты, диаграммы Вороного и т.п.). Ближе к концу книги будут изложены продвинутые методы на основе алгоритмов трассировки лучей.

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

Чего нет в этой книге:

* Эта книга не об OpenGL или WebGL. OpenGL/WebGL - боле обширная тема, чем GLSL и фрагментные шейдеры. Для изучения OpenGL/WebGL я бы рекомендовал [ведение в OpenGL](https://open.gl/introduction), [8 издание руководства по программированию на OpenGL](http://www.amazon.com/OpenGL-Programming-Guide-Official-Learning/dp/0321773039/ref=sr_1_1?s=books&ie=UTF8&qid=1424007417&sr=1-1&keywords=open+gl+programming+guide) (она же красная книга) или [WebGL: Up and Running](http://www.amazon.com/WebGL-Up-Running-Tony-Parisi/dp/144932357X/ref=sr_1_4?s=books&ie=UTF8&qid=1425147254&sr=1-4&keywords=webgl)

* Это *не* учебник по математике. Мы изложим некоторые методы, основанные на алгебре и тригонометрии, но мы не будем углубляться в детали. По математическим вопросам я бы рекомендовал обратиться к следующим книгам: [третье издание «математики для 3D-программирования и компьютерной графики»](http://www.amazon.com/Mathematics-Programming-Computer-Graphics-Third/dp/1435458869/ref=sr_1_1?ie=UTF8&qid=1424007839&sr=8-1&keywords=mathematics+for+games) или [второе издание «математики для игр и интерактивных приложений»](http://www.amazon.com/Essential-Mathematics-Games-Interactive-Applications/dp/0123742978/ref=sr_1_1?ie=UTF8&qid=1424007889&sr=8-1&keywords=essentials+mathematics+for+developers)

## Что нужно чтобы начать?

Не многое! Если у вас есть современный браузер с поддержкой WebGL (Chrome, Firefox или Safari) и подключение к Интернету, нажмите кнопку «Next» внизу страницы.

Так же вы можете:

- [Сделать оффлайн-версию книги](https://thebookofshaders.com/appendix/00/?lan=ru)

- [Запустить примеры на Raspberry Pi без браузера](https://thebookofshaders.com/appendix/01/?lan=ru)

- [Собрать PDF-версию для печати](https://thebookofshaders.com/appendix/02/?lan=ru)

- Изучить [репозиторий книги на GitHub](https://github.com/patriciogonzalezvivo/thebookofshaders) и помочь исправлением ошибок или предоставлением кода.
