Шейдер в 3д макс это

Обновлено: 06.07.2024

Сразу оговорюсь, что материал рассчитан на тех, кто никогда не работал с шейдерами или вообще не знаком с разработкой игр, то есть это в некотором смысле научпоп.

Слово «шейдер» в контексте разработки игр очень популярно, слышать его могли и те, кто игры не делает. Само слово изначально появилось от англ. shading (затенение) — первые шейдеры использовались, чтобы передавать глубину с помощью работы со светом, блеском, тенями и прочим. Со временем шейдеры стали использоваться для совершенно разного вида постобработки и вообще отрисовки примерно всего.

Говоря общими словами, шейдер — это просто программа для графической карты. То есть то, что пишется школьниками на паскале (хипстерами на пайтоне) — это программы для вашего центрального процессора (CPU), а шейдеры — для графического (GPU). Особенность же этих программ выходит из особенностей GPU — они работают параллельно на сотнях маленьких ядех вместо нескольких больших, преимущественно осуществляя математические операции.

Теперь разберемся, как это все работает.

В общем случае цель шейдера — отрисовать некоторый объект. Поэтому возьмем куб, распишем процесс его отрисовки и посмотрим, где используются шейдеры и зачем. Сначала опишем сам куб. Для графической карты это 8 точек, между некоторыми из которых есть плоскость. Каждая из точек описывается тремя числами (правильно сказать, что это вершины). Помимо этого у кубика есть цвет и положение внутри мира.

Процесс отрисовки, если его достаточно упростить (что я и сделаю в рамках этой статьи), можно поделить на несколько шагов:

1. Получение входных данных из памяти.
2. Выполнение шейдера вершин.
3. Растеризация.
4. Выполнение шейдера пикселей (фрагментов).
5. Проведение тестов «глубины».
6. Отрисовка на текстуру для экрана.

В первом шаге видеокарта каким-то образом получает данные (вершины, плоскости, текстуры) в свою видеопамять, для нас это сейчас не так важно. Далее происходит конвертация координат относительно объекта в координаты на экране относительно камеры. После происходит растеризация — высчитывается, в каких пикселях уже на экране находится объект. Такие пиксели называют фрагментами. Отличие от пикселей заключается в том, что фрагмент помимо информации о пикселе, содержит еще и некоторую побочную информацию, полученную после растеризации. Для упрощения будем считать, что это все просто пиксели на экране. Далее для каждого пикселя выполняется шейдер фрагмента. А затем проверяется, что расстояние от камеры до фрагмента соответствует высчитанному заранее в нужном направлении в буфере глубины. Проще говоря, проверяется, нет ли перед объектом чего-либо еще, и нужно ли его отрисовывать на итоговое изображение.

Как видите, в процессе отрисовки можно заметить два вида шейдера. На самом деле, сейчас есть чуть больше видов, но они не столь важны для разбора, так как имеют более специфичный характер использования, а мы рассказываем на пальцах. Но вот те два, что нас волнуют:

1. Шейдер вершин.
2. Шейдер фрагментов.

Как сказано было ранее, этот шейдер (или группа шейдеров по очереди) занимается переводом координат относительно объекта, в координаты на текстуре.

На картинке начало координат немного не соответствует реальным, что все так же не влияет на понимание процесса :)

Пройдемся по состояниям. В первом у нас, очевидно, входные координаты без излишков. На втором они были перенесены в координаты относительно начала «мира». Потом они переносятся в координаты относительно точки смотрящего (видно на второй картинке), но заметно, что картинка плоская. Их проекция происходит далее и мы получаем наши итоговые координаты. Все эти операции производятся шейдером. Помимо прочего, он позволяет не только отобразить реальные координаты, но и модифицировать их так, чтобы исказить объект для эффекта. Например, я недавно писал шейдер, который переворачивал спрайт, чтобы отрисовать его тень:

Из занимательного — итоговые вершины располагаются на так называемой плоскости Clip Space и находятся в диапазоне от -1.0 до 1.0. Именно с такими координатами потом и работает видеокарта.

После преобразований вершин и растеризации нужно высчитать цвет каждого фрагмента (помним, что для упрощения это пиксели). Для примера возьмём наш куб: мы помним, что он залит одним цветом. Просто сделаем так, чтобы цвет каждого фрагмента стал цвета куба и все:

Выглядит немного странно, да? Проблема в том, что мы не видим ни теней, ни текстур. Будь на кубе какая-либо текстура, мы бы заметили переход между гранями. Вот возьмем текстуру:

Теперь достаточно в каждом пикселе просто брать цвет из текстуры. Но чтобы это сделать, нужно добавить для каждой точки куба еще информацию: UV канал. Это координат вида (u, v). Отсюда и название, так как x и y были заняты. Она присваивается вершине объекта и обозначает точку на текстуре, которая ей соответствует. Чтобы было понятнее, если мы хотим на каждую грань куба нарисовать знакомое нам лицо, то UV координаты для каждой грани будут выглядеть предельно просто:

Модифицировать их никак не надо. Более того, считать координаты для каждой точки — тоже не нужно. Этим занимается GPU, самостоятельно интерполируя точки из вершин. Тогда достаточно просто сказать для каждой точки что-то вроде

Это очень условный пример, но примерно так в простейшем случае оно и работает:

Помимо натягивания текстур в пиксельном шейдере можно, например, получить информацию об освещенности и добавить к цвету черного пропорционально затемнению в этой точке, тогда объект будет менее плоским. Это, конечно, если просчет освещенности где-то написан, потому что сама по себе видеокарта о понятиях освещения и теней мало чего знает. Вообще делать с цветами можно что угодно, например подменять их в зависимости от игрока:

Помимо UV канала в шейдер в зависимости от его вида приходят разные данные. Они зависят от игрового движка и графической библиотеки. Обычно туда входят данные о местоположении точки, нормаль (вектор исходящий от поверхности в точке), UV канал. Но также шейдер вершин может передавать данные в пиксельный шейдер. Если это координата, то она будет проинтеполирована на основе положения фрагмента относительно вершин, между которыми он находится, как, например, UV данные.

Что такое шейдеры? Просто о сложном для начинающих

До того, как появились первые графические ускорители, всю работу по отрисовке кадров видеоигры выполнял бедняга центральный процессор.

Но мы пока не получили ответа на главный вопрос: Что такое шейдеры? Подождите, я подвожу к этому.

Наступило время видеокартам стать более интеллектуальными. Было принято решение позволить разработчикам программировать блоки графического процессора в произвольные конвейеры, реализующие разные алгоритмы. То есть разработчики игр, графические программисты отныне смогли писать программы для видеокарточек.

И вот, наконец, мы дошли до ответа на наш главный вопрос.

Ше́йдер (англ. shader — затеняющая программа) — это программа для видеокарточки, которая используется в трёхмерной графике для определения окончательных параметров объекта или изображения, может включать в себя описание поглощения и рассеяния света, наложения текстуры, отражения и преломление, затенение, смещение поверхности и множество других параметров.

Что такое шейдеры? Картинка с демонстрацией, того какие эффекты можно получить с помощью шейдеров.

Что такое шейдеры? Например, вот такой эффект можно получить, это шейдер воды примененный к сфере.

Графический пайплайн

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

Сначала видеокарты оснастили несколькими специализированными процессорами, поддерживающими разные наборы инструкций. Шейдеры делили на три типа в зависимости от того, какой процессор будет их исполнять. Но затем видеокарты стали оснащать универсальными процессорами, поддерживающими наборы инструкций всех трёх типов шейдеров. Деление шейдеров на типы сохранилось для описания назначения шейдера.

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

Впервые полноценная поддержка шейдеров появилась в видеокартах серии GeForce 3, но зачатки были реализованы ещё в GeForce256 (в виде Register Combiners).

Виды шейдеров

В зависимости от стадии конвейера шейдеры делятся на несколько типов: вершинный, фрагментный (пиксельный) и геометрический. А в новейших типах конвейеров есть еще шейдеры тесселяции. Подробно обсуждать графический конвейер мы не будем, я все думаю не написать ли об этом отдельную статью, для тех кто решит заняться изучением шейдеров и программирования графики. Напишите в комментариях если Вам интересно, я буду знать, стоит ли тратить время.

Вершинный шейдер

Вершинными шейдерами делают анимации персонажей, травы, деревьев, создают волны на воде и многие другие штуки. В вершинном шейдере программисту доступны данные, связанные с вершинами например: координаты вершины в пространстве, её текстурные координатами, её цвет и вектор нормали.

Геометрический шейдер

Геометрические шейдеры способны создавать новую геометрию, и могут использоваться для создания частиц, изменения детализации модели «на лету», создание силуэтов и т.п. В отличие от предыдущего вершинного, способны обработать не только одну вершину, но и целый примитив. Примитивом может быть отрезок (две вершины) и треугольник (три вершины), а при наличии информации о смежных вершинах (англ. adjacency) для треугольного примитива может быть обработано до шести вершин.

Пиксельный шейдер

Пиксельными шейдерами выполняют наложение текстур, освещение, и разные текстурные эффекты, такие как отражение, преломление, туман, Bump Mapping и пр. Пиксельные шейдеры также используются для пост-эффектов.

Пиксельный шейдер работает с фрагментами растрового изображения и с текстурами — обрабатывает данные, связанные с пикселями (например, цвет, глубина, текстурные координаты). Пиксельный шейдер используется на последней стадии графического конвейера для формирования фрагмента изображения.

На чем пишут шейдеры?

Изначально шейдеры можно было писать на assembler-like языке, но позже появились шейдерные языки высокого уровня, похожие на язык С, такие как: Cg, GLSL и HLSL.

Такие языки намного проще чем C, ведь задачи решаемые с их помощью, гораздо проще. Система типов в таких языках отражает нужды программистов графики. Поэтому они предоставляют программисту специальные типы данных: матрицы, семплеры, векторы и тп.

RenderMan

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

Супер-реалистичная графика в Sand piper

Например, посмотрите, на вот этот милый мультфильм, песчинки, перышки птички, волны, все выглядит невероятно реальным.

Так вот это RenderMan от фирмы Pixar. Он стал первым языком программирования шейдеров. API RenderMan является фактическим стандартом для профессионального рендеринга, используется во всех работах студии Pixar и не только их.

Полезная информация

Теперь Вы знаете что такое шейдеры, но помимо шейдеров, есть другие очень интересные темы в разработке игр и компьютерной графике, которые наверняка Вас заинтересуют:

Если остались вопросы

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

Создание шейдеров в 3DMax — дело не очень сложное, но непростое именно в освоении. Нужно суметь разобраться в общих принципах этой процедуры, после чего ее повторение при создании других шейдеров вызывать сложности уже не будет, чем бы вы не занимались, от визуализации экстерьера в 3DMax до разработки игровых персонажей.

В данной статье мы создадим металлический шейдер в 3dsMax, однако действовать по этому же принципу можно работая и в других программах. Для начала нужно понять, что применяющаяся при окрашивании авто краска придает объекту некую глубину, чтобы он не выглядел как плоскость, покрашенная самой дешевой глянцевой краской.

заказать визуализацию в 3D Max для автомобиля

Рассмотрим принципы применения шейдеров на примере визуализации металлической поверхности автомобиля

Этапы работы

  • Шаг 1. При покраске автомобилей последовательно наносится несколько слоев: Basecoat, Specular Coat и Gloss Coat. Этот же принцип нужно использовать и нам в V-ray.
  • Шаг 2. Нам потребуется шейдер VrayBlendMtl. Наложив краску по очереди, а последним слоем лак, мы сможем без малейших затруднений отрегулировать то, как одни слои влияют на другие. Благодаря этому довольно просто добиться правильного общего вида нашего покрытия.
  • Шаг 3. Создаем базовое покрытие. В указанном выше шейдере оно скрывается под названием Base Material. Там и находятся сведения об основном нашем цвете.
  • Шаг 4. Далее нам потребуется параметр Reflection Glossiness, посредством которого можно изменять размытость и четкость отражений. Это и есть четвертый этап — добиться их правильного отображения.
  • Шаг 5. Смешение настроек кривых. Если мы хотим добиться большего бликования материала, нужно сделать кривую более кривой.
  • Шаг 6. Далее нам нужно придать материалу характерный металлический блеск. Сделать это можно посредством перламутрового слоя. То, как они будет отражать, тоже можно отрегулировать в Reflection Glossiness.
  • Шаг 7. Нам потребуется применить noise-карту для bump. Это позволит определить, какие участки будут светлее, а какие темнее. Тут рекомендуем использовать небольшие значения.
  • Шаг 8. Приступаем к созданию слоя лака. Значения RGB нужно опустить до 0. Дело в том, что Diffuse вообще не нужен цвет. А вот с Reflection нужно поступить наоборот, установив там максимальные значения 255 везде. Это позволяет «включить» максимальный блеск. Позже можно отрегулировать отражения посредством fall-of. Пользователь сам решает, какие значения Reflection Glossiness подойдут в его случае, но мы рекомендуем сильно не отдаляться от значения 1.0. Однако если вы новичок, с этой настройкой нужно поиграться, чтобы добиться большего понимания шейдера.
  • Шаг 9. После того, как шейдер будет готов, нужно проверить, как он себя ведет при разном освещении. Например, при дневном свете и при искусственном освещении в студии.

Нужно заказать визуализацию в 3DMax?

3D-визуализация проектов — специализация нашей компании. Мы быстро и качественно справляемся с этой задачей благодаря команде опытных и умелых мастеров, знающих свое дело. У нас можно получить самый качественный результат, даже если ваш проект очень сложный и требует максимально быстрого результата!

СОГЛАСИЕ
на обработку персональных данных

Персональные данные будут обрабатываться Студии путем сбора Персональных данных, их записи, систематизации, накопления, хранения, уточнения (обновления, изменения), извлечения, использования, удаления и уничтожения (как с использованием средств автоматизации, так и без их использования).

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

Персональные данные будут обрабатываться Студией только для достижения целей обработки, указанных выше, как того требует применимое законодательство Российской Федерации.

Собсно уже спросил. Да-да, три года в 3д, а до сих пор это слово для меня звучит как ругательство. В отношении графики в играх вроде уже понял - это микропрограммы для описания поведения материала в определенном окружении. А в отношении визуализации? Так понял, шо шейдинг - это так же поведение материала под действием освещения и окружения, т.е. цвет, текстура - это не шейдеры, а отражение, преломление, бамп - это шейдеры? Или по другому - шейдеринг - это приобретение материалом всех указанных ранее свойств при рендеринге?
Короче, поясните кто-то, но не давайте ссылку на Википедию, два раза уже прочел, но там больше по играм ии вообще как-то слабо разжевано.

Не нужно заморачиваться, врядли ты найдешь абсолютно точное значение этому термину. Shading в играх отличается тем что он интерактивный, а в Максе или в Мае например, этим занимаются Shaders, специальные скрипты для материалов, которые в последствии рендерит, например Мental Ray. Надеюсь тебе стало легче

материал (напр, стекло, или кожа, или другое, что можно создать в материалэдиторе)

Спасибо за ответы!
Но тогда зачем материал называть шейдером? какая разница между этими двумя словами?
Ну же , народ. если никто не знает точно, то хоть теории высказывайте. Может ща породим научное описание непонятного термина )).
Вот мое мнение: шейдинг - это поведение материала под влиянием на него окружения и освещения. То-есть это отражение, рефлексия и рефракция света, реакция на освещение, изменение параметров какого-либо канала при изменении угла зрения. Т.е. шейдинг проявляется при рендере и зависит от выбранного рендера. Звучит.
Наиль, Мрак, Моцарт! Профи, вы где? ))

Вот маленько порылся и еще кое что разжевал. Вообще понятие шейдинга (переводится с англ. как затенение) произошло из рисунка. По сути это затенение белой бумаги в нужных местах. Проще говоря, рисуя сферу мы ее шейдим в с противоположной к свету стороны. Но рисунок ведь чб., и при введении цвета шейдинг принимает более широкое понимание: это поведение света, который отразился от материала или прошел сквозь него. Выходит, что, как я и говорил, шейдинг - это проявление всех свойств материала при просчете сцены.

Читайте также: