Введение
Объяснение основных принципов исполнения шейдеров и ссылка на скачивание проекта к уроку
Перед прохождением урока скачайте проект(создан в Unity 5.3.3).
При чтении данного урока некоторые моменты могут показаться запутанными, их следует просто прочитать не вдаваясь в подробности и вернуться к ним уже после прочтения всего урока. Шейдер это программа, написанная специально для исполнения на видеокарте. Типичный шейдер получает на вход набор текстур, несколько константных значений, несколько переменных, а на выходе отдаёт картинку объекта, чьи данные были на входе.
Любой 3D объект состоит из массива вершин, каждая вершина обладает следующими данными: позиция, нормаль, координаты развёртки и иногда цвет. Помимо этих данных почти всегда на объект накладывается текстура или совмещается несколько текстур.+
Всё описанное выше это входные данные. Чтобы превратить их в картинку на экране нужно пройти два этапа:
1) Обработать каждую вершину(как минимум преобразовать её мировую координату в экранную, путём умножения мировой координаты на матрицу вида камеры)
2) Обработать каждый видимый пиксель объекта.
Представить себе работу шейдера можно следующим псевдокодом:
Шейдеры, написанные для Unity, можно разделить грубо на две части. Одна часть surface, а вторая vertex/fragment. Surface шейдеры созданы для упрощения написания шейдеров и скрывают некоторые рутинные шаги. И в конечном итоге любой surface шейдер интерпретируется в vertex/fragment. vertex/fragment шейдер обязательно содержит две функции, одну vertex(вертексный или вершинный) шейдер, а вторую fragment(фрагментный или пиксельный) шейдер. Бывает так, что шейдер содержит описание только фрагментного шейдера, на самом деле он использует оба, но в качестве вертексного задаётся типичный вертексный шейдер, написанный командой Unity.+
Любой шейдер имеет примерно следующую структуру:
Last updated