Разбираемся с шейдерами в Unity. D на конкретном примере / Хабрахабр. Немного теории. Для понимания работы шейдеров, нужно хорошо ориентироваться в том, как видеокарта строит изображение. Общая структура визуализации 3. D объекта на экране изображена на рисунке ниже. Для начала разберемся в таком понятии, как Graphics Rendering Pipeline. Это конвейер, этапы которого проходит видеокарта для построения финального изображения. Окунемся немного в историю. Первые компьютеры использовали программный рендеринг. Всеми просчетами занимался центральный процессор. И конвейер выглядел следующим образом. Самые первые 3. D- ускорители использовали так называемый Fixed- Function Pipeline. Из названия следует, что он был фиксированным и строго последовательным. Вмешаться в построение картинки было невозможно. Сейчас мы рассмотрим все этапы этого конвейера. В Outline3D заложены все комплекты и аксессуары, имеющиеся на сайте. А потом - 'бродить' по получившейся квартире в режиме 3D - открывая двери, окна, стеллажи, шкафы и даже духовку плиты. В Outline3D есть функции вставки уже готовых элементов декора, как, мебель, отделочные материалы(обои, ковры, плитки и т.д. В Outline3D вы можете создать галерею готовых интерьеров, демонстрирующих наиболее удачные варианты расстановки мебели и сочетания покрытий. Outline3D – это мощный инструмент для трехмерного моделирования интерьеров. Программа Outline3D позволяет интегрировать готовые интерьеры в свой сайт таким образом. Уникальные 3D-решения в области дизайна интерьеров, торговли недвижимостью, мебелью и отделочными материалами для Internet и Intranet. Обзор программы 'Outline3D'. Онлайн, офис, программа, outline3d, outline3d скачать, outline3d 5.0, outline3d offline, outline3d торрент, outline3d 6.0, outline3d скачать бесплатно. В дальнейшем нам это пригодится. В качестве входных параметров видеокарта получает объект в виде отдельных вершин с множеством атрибутов. Например положение вершины в пространстве, её цвет, нормаль, текстурные координаты и другие. Трансформации и освещение. На этом этапе над объектом производятся геометрические операции (перемещение, вращение, масштаб). Здесь же производится расчет освещенности сцены. Для каждой вершины вычисляются значения освещенности исходя из расположения и типа источников света, а также параметров, характеризующих поверхность объекта (отражения, поглощения). Триангуляция. На этом этапе вертексы объединяются в треугольники. Растеризация. Цель этого этапа рассчитать цвет пикселей на основе тех данных, которые были уже подготовлены. Так как мы имеем информацию только о цвете вершин, то для получения цвета пикселя мы линейно интерполируем значение между значениями цветов соответствующих вершин. Попиксельная обработка. Planoplan - бесплатный планировщик помещений в режиме онлайн. Недавно выпущенная компанией Parallel Graphics. На этом этапе происходит раскраска пикселей. Входными данными являются данные предыдущего уровня. Также здесь мы можем применять дополнительные эффекты к пикселам. Например текстурирование. Формирование готового изображения. Теперь мы должны построить финальный кадр. На этом этапе учитываются данные Z- буфера для того, чтобы определить какой объект находится ближе к камере. Также здесь производится альфа- тест. Слой за слоем объекты «наносятся» на финальное изображение. Так же здесь же могут быть применены пост- эффекты. После чего готовый кадр помещается в Frame Buffer. Как мы видим повлиять на финальное изображение мы можем лишь выбрав определенные опции определенных этапов, но написать, например, свою модель освещения мы не можем. В те времена приходилось довольствоваться тем, что поддерживал конкретный видеоадаптер. Так было до появления первых видеокарт с аппаратной поддержкой Direct. X 8. 0 – 8. 1. Начиная с этого момента можно было писать программы для обработки вертексов и пикселей. Конвейер для такой модели показан на рисунке ниже. В будущем планируется сделать все этапы конвейера программируемыми. Теперь, зная как видеокарта строит изображение, стоит немного рассказать о 3. D- объектах. Модель это совокупность вершин, связей между ними, а также материалов, анимаций и пр. У вершин есть атрибуты. Например, UV- координаты. Они показывают где расположена эта вершина на текстурной развертке. Материал определяет внешний вид объекта и включает ссылку на шейдер, используемый для визуализации геометрии или частиц. Таким образом эти компоненты без материала отображаться не будут. Шейдер – это программа для одной из ступеней графического конвейера. Все шейдеры можно разделить на две группы: вершинные и фрагментарные (пиксельные). В Unity. 3D есть упрощенный подход к написанию шейдеров – Surface Shader. Это просто более высокий уровень абстракции. При компиляции Surface шейдера компилятор создаст шейдер, состоящий из вершинного и пиксельного. Он поддерживает вставки на CG и HLSL. Практика. В качестве примера рассмотрим написание шейдера, который накладывает на объект diffuse текстуру, карту нормалей, карту отражений (опираясь на Cubemap), и производит отсечение пикселей по альфа- каналу в diffuse текстуре. Даже если мы пишем шейдер на CG или HLSL, нам все равно нужно знать синтаксис Shader. Lab, для того, чтобы мы могли устанавливать параметры нашего шейдера в инспекторе. Shader . После него в кавычках указывается имя шейдера. Причем можно указать через . После этого идет описание параметров Properties . Когда необходимо отобразить геометрию, движок ищет необходимый шейдер и использует первый Subshader из списка, который может обработать видеокарта. Это сделано для того, чтобы один и тот же шейдер мог корректно отображаться на различных видеокартах, поддерживающих разные шейдерные модели. Шейдер может содержать от одного до нескольких проходов. Использование нескольких проходов может быть полезно например в случае оптимизации шейдеров для старого железа или для достижения особых эффектов (outline, toon shading и др). В примере выше будет использован Diffuse шейдер, если видеокарта не сможет корректно отобразить текущий. Теперь рассмотрим конкретный пример. Shader . Это влияет на очередь отрисовки. Cull Off указывает, что в шейдере не будет производится отсечения по направлениям нормалей. Существуют три варианта отсечение полигонов: нормали которых направлены от камеры, в камеру, и без отсечения. Последний вариант означает то, что мы будем видеть полигон с двух сторон. При написании кода мы будем использовать вставку на языке CG. Вставка обрамляется двумя ключевыми словами: CGPROGRAM, ENDCG.#pragma surface surf Lambert – объявление функции surface- шейдера и дополнительные параметры. В данном случае функция называется surf, а в качестве дополнительных параметров указана модель освещения по Ламберту. Теперь рассмотрим входную структуру. Все возможные переменные входной структуры можно посмотреть в справке. Мы же рассмотрим только те, что использовали. Эти переменные обязательно должны называться так же, как и названия переменных текстур с префиксом uv. Переменная tex будет хранить информацию о нем. После чего функцией clip мы указываем, какие пиксели мы пропускаем при рендеринге. Все её поля можно посмотреть в справке по Surface.
0 Comments
Leave a Reply. |
Details
AuthorWrite something about yourself. No need to be fancy, just an overview. ArchivesCategories |