Шейдер что это такое


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

«Что такое шейдеры?» — очень частый вопрос любопытных игроков и начинающих игровых разработчиков. В этой статье доходчиво и понятно об этих страшных шейдерах расскажу.

Двигателем прогресса в сторону фотореалистичности картинки в компьютерной графике я считаю именно компьютерные игры, поэтому давайте именно в разрезе видео-игр и поговорим о том, что такое «шейдеры».

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

Отрисовка кадра, довольно рутинная работа на самом деле: нужно взять «геометрию» — полигональные модели (мир, персонаж, оружие и т.д.) и растеризовать. Что такое растеризовать? Вся 3d модель состоит из мельчайших треугольников, которые растеризатор превращает в пиксели (то есть «растеризовать» значит превратить в пиксели). После растеризации взять текстурные данные, параметры освещенности, тумана и тп и рассчитать каждый результирующий пиксель игрового кадра, который будет выведен на экран игроку.

Так вот, центральный процессор (CPU — Central Processing Unit) слишком умный парень, чтобы заставлять его заниматься такой рутиной. Вместо этого логично выделить какой-то аппаратный модуль, который разгрузит CPU, чтобы тот смог заниматься более важным интеллектуальным трудом.

Таким аппаратным модулем стал — графический ускоритель или видеокарта (GPU — Graphics Processing Unit). Теперь CPU подготавливает данные и загружает рутинной работой коллегу. Учитывая, что GPU сейчас это не просто один коллега, это толпа миньонов-ядер, то он с такой работой справляется на раз.

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

Хорошая, интересная и близкая к фото-реализму графика, требовала от разработчиков видеокарт реализовывать многие алгоритмы на аппаратном уровне. Тени, свет, блики и так далее. Такой подход — с реализацией алгоритмов аппаратно называется «Фиксированный пайплайн или конвейер» и там где требуется качественная графика он теперь не встречается. Его место занял «Программируемый пайплайн».

Запросы игроков «давайте, завозите хороший графоний! удивляйте!», толкали разработчиков игр (и производителей видеокарт соответственно) все к более и более сложным алгоритмам. Пока в какой-то момент зашитых аппаратных алгоритмов им стало слишком мало.

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

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

«Что такое шейдеры?»

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

RenderMan

Все что мы обсудили выше относится к realtime графике. Но существуют non-realtime графика. В чем разница — realtime — реальное время, тоесть здесь и сейчас — давать 60 кадров в секунду в игре, это процесс реального времени. А вот рендерить комплексный кадр для ультрасовременной анимации по несколько минут это non-realtime. Суть во времени.

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

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

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

*Видео могут забанить на Youtube, если оно не открывается, погуглите pixar sandpiper — короткометражный мультфильм про храброго песочника очень милый и пушистый. Умилит и продемонстрирует насколько крутой может быть компьютерная графика.

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

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

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

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

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

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

Что такое шейдеры в видеокарте:их версии и как он влияют на работу?

Опубликовано 2.04.2020 автор — 0 комментариев

Всем привет! Сегодня разберем, что такое шейдеры в видеокарте, что дают, как влияют на обработку графики в играх и для чего используются, какие бывают версии и как узнать шейдеры своей платы. О том, что значит OC в наименовании видеокарты NVidia или AMD, можно почитать здесь.

Немного истории

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

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

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

Простыми словами я рассказываю именно об играх, так как это — прикладная область, которая в полной мере позволяет реализовать 3D технологии. Следующим этапом можно считать унификацию «полномочий» различных игровых компонентов. Так, в отдельный элемент «откололся» так называемый движок — структура, которая отвечает за взаимодействие всех игровых компонентов.

Если вы увлекаетесь видеоиграми, то, конечно же, слышали такие термины как Unity, Cry Engine или Creation Engine. Узкая специализация позволяет игроделам не «изобретать велосипед» каждый раз с нуля, сосредоточившись на главном — созданием непосредственно самой игры.

Любой 3D объект состоит из так называемых полигонов, которые имеют треугольную форму. Детализация объекта будет зависеть от количества таких полигонов: чем их больше, тем четче нарисована каждая мелочь. При выводе изображения на экран полигоны нужно растеризовать, то есть перевести их из трехмерного пространства на плоский экран с сохранением пропорций.Инженеры пришли к выводу, что это слишком рутинная задача, чтобы нагружать ею центральный процессор. В результате «эволюции» после ряда экспериментов появились видеокарты, которые мы видим сегодня: отдельный графический чип, который через специальную шину связывается с видеопамятью.

Что такое shedar

Shader переводится с английского как «оттеняющий». Это специальная программа, которая обрабатывает объекты, содержащиеся в игровом коде, и придает им окончательный вид.

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

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

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

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

  • Вершинные. Обрабатывает данные, которые привязаны к вершинам многогранника. Может использоваться для расчета освещения, текстурных координат, а также отрисовки персонажей и прочих игровых объектов — травы, деревьев, ряби на поверхности воды и т.д.
  • Геометрические. Умеют обрабатывать целые примитивы, то есть простейшие фигуры. Выполняется это «на лету» без участия центрального процессора.
  • Пиксельные. Обрабатывает изображения, состоящие из множества точек, а также текстуры. Используется на последней стадии для формирования изображения и вывода его на экран.

Все это относится к realtime графике, то есть обработке изображения в режиме реального времени (например, 60 кадров в секунду, как это бывает в играх). Для создания 3D мультфильмов используются совсем другие технологии: качество там такое, что для рендеринга видео нужны очень большие вычислительные мощности.

Как узнать какие шейдеры поддерживает моя видеокарта

Самый простой способ сделать это — установить бесплатную утилиту GPU‑Z. Нужная информация отображается в поле DirectX Support. Это будет число в поле SM — например 2.0 (более старая версия) или 3.0 (пригодна для современных игр). Последние модели графических адаптеров поддерживают уже четвертую версию шейдеров.

Также при покупке графической платы обратите внимание на количество шейдеров и их частоту. Принцип прост: чем выше эти параметры, тем лучше.

Для вас будут полезны публикации «Что такое в видеокарте HDCP?» и «Что означает Dual в маркировки видеокарты и что это дает покупателю». Буду признателен, если вы поделитесь этим постом в социальных сетях. До скорой встречи!

С уважением, автор блога Андрей Андреев.

Shader — это не магия. Написание шейдеров в Unity. Введение / Habr

Всем привет! Меня зовут Дядиченко Григорий, и я основатель и CTO студии Foxsys. Сегодня хочется поговорить про шейдеры. Умение писать шейдеры (и в целом работать с рендером) очень важно при разработке под мобильные платформы или AR/VR, если хочется добиться крутой графики. Многие разработчики считают, что шейдеры — это магия. Что по ним мало хорошей информации, и что чтобы их писать нужно иметь, как мимимум, звание кандидата наук. Да, разработка шейдеров по своим принципам сильно отличается от клиентской разработки. Но основное понимать базовые принципы работы шейдеров, а так же знать их суть, чтобы в этом не было ничего магического и поиск информации по этой теме был простой задачей. Данная серия статей рассчитана на новичков, так что если вы разбираетесь в программировании шейдеров, данная серия вам не будет интересна. Всем же кто хочет разобраться в этой теме — добро пожаловать под кат!



Это вводная статья в которой я расскажу общие принципы написания шейдеров. Если тема будет интересна, то мы разберём уже подробнее в отдельных статьях: вершинные шейдеры, геометрические шейдеры, фрагментные/пиксельные шейдеры, трипланарные шейдеры, скринспейс эффекты и компьют шейдеры (OpenCL, СUDA и т.п.). И в целом всю ту магию, которую можно делать на GPU. Разбираться это будет в контексте стандартного рендер пайплайна Unity. Так LWRP и HDRP мне пока кажутся немного сыроватыми.

Что такое шейдер?


Your browser does not support HTML5 video.


Источник: www.shadertoy.com/view/MsGSRd

По сути это программа выполняемая на гпу, выходными данными которых является разная информация. В вершинных шейдерах — это параметры вершин меша. Пиксельные шейдеры выполняются попиксельно.

Для понимания того, как работают шейдеры нужно рассказать, что такое графический конвейер (graphic pipeline). Очень часто про эту тему говорят довольно сложными словами, но мы это немного упростим для понимания. Возьмём на примере OpenGL. В этом плане мне очень нравится эта картинка.

Если опустить детали связанные с освещением и т.п. То в целом с точки написания тех же Unlit шейдеров на hlsl суть такова. У нас есть в шейдере

#pragma vertex vert #pragma fragment frag

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

Структуры которые мы описываем в шейдере определяют какие данные мы будем забирать из меша и после обработки вертексным шейдером, которые висят на нашем MeshRenderer и MeshFilter объекте.

 struct appdata { float4 vertex : POSITION; float2 uv : TEXCOORD0; }; struct v2f { float2 uv : TEXCOORD0; UNITY_FOG_COORDS(1) float4 vertex : SV_POSITION; }; 

Дальше вертексный шейдер вычисляет получив на вход данные appdata и отдаёт результат в виде структуры v2f, которая дальнейшем пойдёт в фрагментный шейдер. Который в свою очередь уже рассчитает цвет пикселя. Так как информация v2f пишется только в вершины (которых меньше, чем пикселей), данные в фрагментной части интерполируются. Всё это можно представить как то, что vert считается в каждом вертексе независимо. Потом результат передаётся в фрагментную часть, где frag для каждого пикселя считается так же независимо. Так как вычисления производятся параллельно, в данных частях нет никакой информации о соседях (если не передавать её как-то хитро).

Более детально все нюансы, а так же множество примеров описаны в документации Unity docs.unity3d.com/Manual/SL-Reference.html

Языки программирования шейдеров


Your browser does not support HTML5 video.


Источник: www.shadertoy.com/view/WsS3Dc

О чём ещё важно не забывать. О том, что шейдеры сейчас пишутся на трёх языках программирования, которые не имеют никакого отношения к юнити. CG, GLSL и HLSL. Самый простой способ писать шейдеры в юнити — это HLSL, так как именно на нём пишутся файлы шейдеров с разрешением .shader. И если по шейдерам в контексте юнити информации сравнительно мало, то информации отдельно по HLSL, GLSL и CG — просто тонны. В документации к шейдерам описано, каким образом написанное на этих языках перенести в Unity. Поэтому получается что почти вся информация в общем про эти языки программирования валидна. Все три языка очень сильно похожи на язык С, но у каждого свои особенности.

Дальше с точки зрения изучения шейдеров, когда эти языки уже не вызывают вопросов можно посмотреть какие возможности предоставляет сам по себе«UnityCG.cginc» и другие библиотеки написанные юнити, чтобы упростить себе работу.

Почему if в шейдерах — это плохо?


Your browser does not support HTML5 video.


Источник: www.shadertoy.com/view/Md3cWr

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

Основная идея графических процессоров — это максимальная параллельность вычислений. Тут нужно ввести такое понятие, как “волновой фронт”. По сути оно довольно простое, волновой фронт — это группа шейдеров выполняющая одну и туже последовательность операции. То есть с точки зрения гпу самый лучший вариант, когда в одно и тоже время выполняются одни и те же инструкции. Единственно различие в выполнении — это входные данные. Проблема ветвления в том, что может случиться ситуация, когда в одной группе шейдеров, шейдеры должны вызывать разные операции. Что в свою очередь приводит к созданию нового волнового фронта, копированию в него данных и т.п. А это очень дорого.

Там есть нюансы и исключения, но для того чтобы спокойно писать if, вы должны понимать, как он себя поведёт на целевой версии графического апи. Так как тот же самый OpenGL ES 2 или DX11 в этом плане сильно отличаются.

Зачем мне это знать, ведь есть нодовые редакторы?


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

Полезные ресурсы для изучения


Your browser does not support HTML5 video.


Источник: www.shadertoy.com/view/4tlcWj

С точки зрения изучения шейдерного программирования хорошим упражнением является переписывание шейдеров с www.shadertoy.com или glslsandbox.com. Кроме того существует крутой профиль специалиста из Unity, где можно посмотреть много интересного github.com/keijiro

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

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

Все эффекты в статье — это запись эффектов шейдеров с shadertoy.

Шейдер - это... Что такое Шейдер?

В этой статье не хватает ссылок на источники информации. Информация должна быть проверяема, иначе она может быть поставлена под сомнение и удалена.
Вы можете отредактировать эту статью, добавив ссылки на авторитетные источники.
Эта отметка установлена 15 мая 2011.

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

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

Потребность в шейдерах

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

  • Вода в Quake 2 на программном и на OpenGL-рендеринге. При всём качестве аппаратно ускоренной картинки, вода там — просто синий светофильтр, в то время как в программном есть эффект плеска воды.
  • В Counter-Strike 1.6 эффект ослепления от светошумовой гранаты на аппаратном рендеринге — белая вспышка, на программном — белая вспышка и пикселизированный экран.

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

Предшественниками шейдеров были процедурная генерация текстур (широко применявшаяся в Unreal для создания анимированных текстур воды и огня) и мультитекстурирование (на нём был основан язык шейдеров, применявшийся в Quake 3). Но и эти механизмы не обеспечивают такой гибкости, как шейдеры.

Типы шейдеров

В настоящее время шейдеры делятся на три типа: вершинные, геометрические и фрагментные (пиксельные).

Вершинные шейдеры (Vertex Shader)

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

Геометрические шейдеры (Geometry Shader)

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

Пиксельные шейдеры (Pixel Shader)

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

Шейдерные языки

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

Шейдерные языки обычно содержат специальные типы данных, такие как матрицы, семплеры, векторы, а также набор встроенных переменных и констант для удобной интеграции со стандартной функциональностью 3D API. Поскольку компьютерная графика имеет множество сфер приложения, для удовлетворения различных потребностей рынка было создано большое количество шейдерных языков.

Профессиональный рендеринг

Данные шейдерные языки ориентированы на достижение максимального качества визуализации. Описание свойств материалов сделано на максимально абстрактном уровне, для работы не требуется особых навыков программирования или знания аппаратной части. Такие шейдеры обычно создаются художниками с целью обеспечить «правильный вид», подобно наложению текстуры, источников света и другим аспектам их работы.

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

Шейдерный язык RenderMan

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

Шейдерный язык Gelato

NVIDIA Gelato представляет собой оригинальную гибридную систему рендеринга изображений и анимации трехмерных сцен и объектов, использующую для расчетов центральные процессоры и аппаратные возможности профессиональных видеокарт серии Quadro FX.

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

Рендеринг в реальном времени

Шейдерный язык OpenGL
Основная статья: GLSL

Шейдерный язык OpenGL носит название GLSL (The OpenGL Shading Language). GLSL основан на языке ANSI C. Большинство возможностей языка ANSI C сохранено, к ним добавлены векторные и матричные типы данных, часто применяющиеся при работе с трехмерной графикой. В контексте GLSL шейдером называется независимо компилируемая единица, написанная на этом языке. Программой называется набор откомпилированных шейдеров, связанных вместе.

Шейдерный язык Cg

Разработан nVidia совместно с Microsoft (такой же по сути язык от Microsoft называется HLSL, включён в DirectX 9). Cg расшифровывается как C for Graphics. Язык действительно очень похож на C, он использует схожие типы (int, float, а также специальный 16-битный тип с плавающей запятой — half). Поддерживаются функции и структуры. Язык обладает своеобразными оптимизациями в виде упакованных массивов (packed arrays) — объявления типа «float a[4]» и «float4 a» в нём соответствуют разным типам. Второе объявление и есть упакованный массив, операции с упакованным массивом выполняются быстрее, чем с обычными. Несмотря на то, что язык разработан nVidia, он без проблем работает и с видеокартами ATI. Однако следует учесть, что все шейдерные программы обладают своими особенностями, которые следует получить из специализированных источников.

Шейдерные языки DirectX
Низкоуровневый шейдерный язык DirectX (DirectX ASM)

По синтаксису сходен с Ассемблером. Существует несколько версий, различающихся по набору команд, а также по требуемому оборудованию. Существует разделение на вершинные (vertex) и пиксельные (pixel) шейдеры, которые различаются.

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

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

 vs.2.0 dcl_position v0 dcl_texcoord v3 m4x4 oPos, v0, c0 mov oT0, v3 
  • Пиксельный шейдер

Выполняет обработку цветовых данных, полученных при рисовании треугольника. Оперирует с текстурами и цветом. Количество инструкций значительно ограничено. Так, к примеру, в версии 1.4 оно не может быть больше 32-х. Пример фрагмента кода:

 ps.1.4 texld r0, t0 mul r0, r0, v0 
Высокоуровневый шейдерный язык DirectX (HLSL — High Level Shader Language)
Основная статья: HLSL

Является надстройкой над DirectX ASM. По синтаксису сходен с C, позволяет использовать структуры, процедуры и функции.

Литература

  • Боресков А.В. Расширения OpenGL. БХВ-Петербург, 2005 ISBN 5-94157-614-5
  • Алексей Боресков Разработка и отладка шейдеров (+ CD-ROM) Издательство: БХВ-Петербург, 2006 г. ISBN 5-94157-712-5
  • "Orange Book"

Ссылки

IDE

Что такое шейдеры в игре?

Весьма нередкий вопрос любознательных геймеров и новичков гейм создателей.

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

Шейдеры - это маленькие, так сказать, "скрипты для видеокарты". Разрешают достаточно просто воплотить такие различные спецэффекты и эффекты.


Случаются пиксельными (работают с изображениями - т. е. или с экраном полностью, или с текстурами) и вершинные (работают с 3Д объектами). примеру при помощи пиксельных шейдеров реализуются такие эффекты, как 3Д-текстуры (бамп) , параллакс-текстуры, лучи солнца (sunshafts) а-ля Кризис, размытие по дальности, попросту размытие при движении, анимированные текстуры (вода, лава,...) , HDR, сглаживание, тени (по технологические процессы ShadowMaps) и дофига всего такового. Вершинными шейдерами проделывают анимацию травки, героев, деревьев, делают волны на воде (типа большие) ну и т. д. Чем труднее (качественее, современнее) эффект - тем больше на него необходимо команд в коде шейдера. Но шейдеры различных версий (1.1 - 5.0) поддерживают различное число команд: чем повыше версия - тем больше команд можно применять. По этой причине некие технологические процессы Нереально воплотить на наиболее младших шейдерах. К примеру конкретно по этой причине новейший Dead Space 2 просит 3ю версию шейдеров (и пиксельных и вершинных) - так как у него таковая модель освещения, которую можно воплотить лишь на 3их и повыше версия шейдеров.

Варианты шейдеров

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

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

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

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

Итог: Шейдер - это различные эффекты на картинку, также как вы обрабатываете своё фото в телефоне в различных тонах или узорах.

Унифицированная шейдерная модель — Википедия

Материал из Википедии — свободной энциклопедии

Унифицированная шейдерная модель (англ. Unified shader model) — термин, который используется для описания двух подобных, но вместе с тем и отдельных понятий: унифицированная шейдерная архитектура (англ. Unified Shading Architecture), которая описывает аппаратный уровень, и унифицированная шейдерная модель, которая описывает программный уровень.

Унифицированная шейдерная модель, известная в Direct3D 10 как Shader Model 4.0, использует согласованный (схожий) набор команд для всех типов шейдеров.[1] Шейдеры всех типов имеют очень похожие возможности — они могут «читать» текстуры, буферы данных и выполнять тот же самый набор арифметических инструкций.

Однако, набор команд не полностью одинаковый во всех типах шейдеров; например, только пиксельный шейдер может читать текстуры с неявными координатными градиентами; и только геометрический шейдер может производить рендеринг дополнительных примитивов, и т.д.[1]

Ранние шейдерные модели (Shader Model 1.x) использовали очень разные наборы команд для вершинных и пиксельных шейдеров, где вершинные шейдеры имели намного более гибкий набор команд. Более поздние шейдерные модели (2.x и 3.0) всё более сокращали различия, что и привело к унифицированной шейдерной модели.

Унифицированная шейдерная архитектура[править | править код]

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

Аппаратное обеспечение не обязано иметь унифицированную шейдерную архитектуру для поддержки унифицированной шейдерной модели, и наоборот. Графические процессоры с поддержкой Direct3D 10 всё ещё могут иметь выделенные геометрические, вершинные и пиксельные процессоры. Технологически более ранние графические процессоры с поддержкой Shader Model 3.0 также могут частично выполнять унифицированную шейдерную модель, что видно на примере графического процессора Xenos для игровой консоли Xbox 360.

Унифицированная шейдерная архитектура позволяет более гибко использовать ресурсы графического процессора.[2] Например, в условиях с симуляцией тяжелой геометрии уровня унифицированная шейдерная архитектура может задействовать все блоки графического процессора для вычисления вершинных и геометрических шейдеров. И наоборот; когда геометрия не является сложной, а симулируется множество сложных пиксельных эффектов, таких как Parallax occlusion mapping, система частиц и т.д., все вычислительные блоки могут быть направлены на выполнение пиксельных шейдеров.

Унифицированную шейдерную архитектуру поддерживают графические процессоры начиная из таких серий:

Физически корректный рендеринг — Википедия

Текстура напольной пластины, отрисованная крупным планом с применением методов визуализации на основе физики. Микроскопические царапины покрывают материал, придавая ему грубый, реалистичный вид, даже если это металл. Зеркальные блики реалистично моделируются на соответствующем краю царапин при использовании карты нормалей. Отображение кирпичной кладки с использованием PBR. Даже если это шершавая, непрозрачная поверхность, рассеянный свет отражается от более яркой стороны материала, еще и создавая небольшие блики, потому что «всё блестит» в модели визуализации на основе физики реального мира. Замощение используется для создания полигональной сетки объекта с помощью карты высот и карты нормалей, обеспечивая большую подробность.

Физически корректный рендеринг (англ. Physically based rendering, PBR) — метод компьютерной графики, который позволяет отображать объекты более достоверно, моделируя поток света в реальном мире.

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

Начиная с 1980-х годов, ряд исследователей в области визуализации, работали над созданием фундаментальной теории визуализации, включая физическую точность. Большая часть этой работы была сделана в Лаборатории программирование компьютерной графики Корнеллского университета; в статье 1997 года описывается работа, проделанная в этой области к тому времени[1].

Фраза «Physically Based Rendering» была широко распространена Мэттом Фэрром (англ. Matt Pharr), Грегом Хампфрисом (англ. Greg Humphreys) и Пэтом Ханрахеном (англ. Pat Hanrahan) их одноименной книгой 2004 года, фундаментальной работой в современной компьютерной графике, принесшей её авторам премию «Оскар» за технические достижения в спецэффектах[2].

PBR это, по утверждению Джо Уилсона (англ. Joe Wilson), «больше идея, чем строгий набор правил»[3], — но идея содержит несколько характерных примечаний. Одна из них — это то, что в отличие от многих предыдущих моделей, которые пытались разделить поверхности на отражающие и не отражающие, PBR признает, что в реальном мире, как выразился Джон Хебл (англ. John Hable), «блестит всё»[4]. Даже плоские или матовые поверхности в реальном мире, такие как бетон, могут отражать небольшое количество света, а множество металлов и жидкостей отражают большую его часть. Ещё одна деталь, которую модели PBR пробуют реализовать — это интеграция фотограмметрии — замеры с фотографий реально существующих материалов для изучения и воспроизведения подлинных физических диапазонов значений для достоверной имитации альбедо, блеска, зеркальности и других физических свойств. В конечном счете, PBR придает большое значение микроповерхностям и зачастую использует вспомогательные текстуры и математические модели, предназначенные для расчёта мельчайших зеркальных бликов и вмятин, создаваемых гладкостью или шероховатостью в дополнение к традиционным картам отражений или зеркальности.

Поверхности[править | править код]

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

Как описано исследователем Джефом Расселом из компании Marmoset, поверхностно-ориентированный графический конвейер визуализации на основе физики, может также ориентироваться на следующие области исследований[5]:

Объёмы[править | править код]

PBR, также, часто расширяется до объемной визуализации в таких областях исследований, как:

Благодаря высокой производительности и низкой стоимости современного оборудования[6] стало возможным применение PBR не только для промышленных, но также, и в развлекательных целях, где бы то ни были востребованы фотореалистичные изображения, включая игры и создание видео[7]. С тех пор, как мобильные устройства для потребителей, такие как смартфоны, могут воспроизводить в реальном времени контент виртуальной реальности, PBR создал рынок для простых в использовании и бесплатных программ, которые определяют и отображают контент в реальном времени, где возможны компромиссы визуальной точности[8]:

Типичное приложение содержит интуитивный графический интерфейс пользователя, позволяющий художникам определять и наслаивать материалы с произвольными свойствами, и назначать их на заданный 2D или 3D объект для воспроизведения внешнего вида любого искусственного или натурального материала. Окружающая среда может быть описана процедурными шейдерами или текстурами, так же, как и процедурная геометрия или сетки, либо облака точек[9]. По возможности, все изменения отображаются в реальном времени и, таким образом, обеспечивают оперативность действий. Сложные приложения позволяют умелым пользователям писать собственные шейдеры на языке шейдеров.

  1. Greenberg, Donald P. A framework for realistic image synthesis (англ.) // Communications of the ACM : journal. — 1999. — 1 August (vol. 42, no. 8). — P. 44—53. — doi:10.1145/310930.310970. Архивировано 24 сентября 2018 года.
  2. ↑ Pharr, Matt, Humphreys, Greg, and Hanrahan, Pat. «Physically Based Rendering». Retrieved on 14 November 2016.
  3. ↑ Wilson, Joe. «Physically Based Rendering — And You Can Too!» Retrieved on 12 Jan 2017.
  4. ↑ Hable, John. «Everything Is Shiny» Архивная копия от 5 декабря 2016 на Wayback Machine
  5. ↑ Russell, Jeff, «PBR Theory». Retrieved on 20 August 2019.
  6. Kam, Ken. How Moore's Law Now Favors Nvidia Over Intel (англ.), Forbes.
  7. ↑ Physically Based Rendering: From Theory to Implementation (англ.). www.pbrt.org. Дата обращения 29 мая 2018.
  8. ↑ Physically Based Shading on Mobile (англ.), Unreal Engine.
  9. ↑ Point Clouds (англ.). Sketchfab Help Center. Дата обращения 29 мая 2018.

Шейдер — Вікіпедія

Шейдер (англ. Shader) — програма для одного із ступенів графічного конвеєра, що використовується в тривимірній графіці для визначення остаточних параметрів об'єкта чи зображення. Вона може включати в себе довільної складності опис поглинання та розсіювання світла, накладення текстури, віддзеркалення і заломлення, затінення, зміщення поверхні і ефекти пост-обробки.

Програмовані шейдери гнучкі та ефективні. Складні на вигляд поверхні можуть бути візуалізовані за допомогою простих геометричних форм. Наприклад, шейдери можуть бути використані для малювання поверхні із тривимірної керамічної плитки на абсолютно плоскій поверхні.

В програмних графічних рушіях весь ланцюжок рендерингу — від визначення видимих частин сцени до накладення текстури — створювався розробником ігор. У цей ланцюжок можна було включати власні нестандартні відеоефекти. З появою перших відеоакселераторів розробник виявився обмежений тим набором ефектів, який закладений в апаратне забезпечення. Ось два приклади.

  • Спробуйте пірнути під воду в Quake 2 на програмному і на OpenGL-рендерінгу. При апаратно прискореній картинці, вода там — просто синій світлофільтр, в той час як в програмному є реалістичніший ефект води.
  • В Counter-Strike ефект засліплення від світлошумової гранати на апаратному рендерінгу — білий спалах, на програмному — білий спалах і пікселізований екран.

Шейдери були розроблені для того, щоб мати змогу відтворювати складні відеоефекти з атомарних операцій. Попередниками шейдерів були процедурна генерація текстур (що широко застосовувалася в Unreal для створення анімованих текстур води і вогню) і мультитекстуровання (на ньому була заснована мова шейдерів, що застосовувався в Quake 3) . Але і ці механізми не забезпечують такої гнучкості, як шейдери.

В даний час шейдери поділяються на чотири типи: вершинні, геометричні, параллаксні і фрагментні (піксельні).

Вершинні шейдери (Vertex Shader)[ред. | ред. код]

Вершинний шейдер оперує даними вершин багатогранників. До таких даних, зокрема, належать координати вершини в просторі, текстурні координати, тангенс-вектор, вектор бінормалі, вектор нормалі. Вершинний шейдер може бути використаний для видового і перспективного перетворення вершин, генерації текстурних координат, розрахунку освітлення і т. д.

Геометричні шейдери (Geometry Shader)[ред. | ред. код]

Геометричний шейдер, на відміну від вершинного, здатний обробити не лише одну вершину, але і цілий примітив. Це може бути відрізок (дві вершини) і трикутник (три вершини), а за наявності інформації про суміжних вершинах (adjacency) може бути оброблено до шести вершин для трикутного примітиву. Крім того геометричний шейдер здатний генерувати примітиви «на льоту», не залучаючи при цьому центрального процесора. Вперше почав використовуватися на відеокартах Nvidia серії 8.

Фрагментні (піксельні) шейдери (Pixel Shader)[ред. | ред. код]

Фрагментний Шейдер працює з фрагментами зображення. Під фрагментом зображення в даному випадку розуміється піксель, якому поставлено у відповідність деякий набір атрибутів, таких як колір, глибина, текстурні координати. Фрагментний Шейдер використовується на останній стадії графічного конвеєра для формування фрагмента зображення.

Вперше використані в системі RenderMan компанії Pixar, шейдери набували все більшого поширення зі зниженням цін на комп'ютери. Основна перевага використання шейдерів — їх гнучкість, що спрощує і здешевлює цикл розробки програми, і при тому що підвищує складність і достовірність сцен, що візуалізуються.

Шейдерні мови зазвичай містять спеціальні типи даних, такі як колір або нормаль. Оскільки комп'ютерна графіка має безліч сфер застосування, для задоволення різних потреб ринку була створена велика кількість шейдерних мов.

Професійний рендерінг[ред. | ред. код]

Дані шейдерні мови орієнтовані на досягнення максимальної якості візуалізації. Опис властивостей матеріалів зроблено на максимально абстрактному рівні, для роботи не потрібно особливих навичок програмування або знання апаратної частини. Такі шейдери зазвичай створюються художниками з метою забезпечити «правильний вигляд», подібно до накладення текстури, джерел кольору та інших аспектів їхньої роботи.

Обробка таких шейдерів звичайно являє собою ресурсномісткі завдання. Сукупна обчислювальна потужність, необхідна для забезпечення їх роботи, може бути дуже велика, тому що використовується для створення фотореалістичних зображень. Основна частина обчислень при подібній візуалізації виконується потужними комп'ютерними кластерами.

Шейдерна мова RenderMan[ред. | ред. код]

Шейдерна мова RenderMan, описана в Специфікації інтерфейсу RenderMan, є фактичним стандартом для професійного рендерінгу. API RenderMan, розроблений Робом Куком, використовується у всіх роботах студії Pixar. Вона також є першою з реалізованих шейдерних мов.

У більшості випадків реалізація стандарту Renderman - це набір програм, що викликаються з командного рядка і відіграють важливу роль в процесі рендеринга. Стандарт розрізняє поняття файлів опису сцени та геометрії - RIB-файлів, і файлів опису матеріалів — SL-файлів, або шейдерів. Всі ці файли мають простий текстовий формат, описаний в специфікації. Файли шейдерів являють собою мініпрограми на сильно спрощеному діалекті мови C.

Шейдерна мова Gelato[ред. | ред. код]

NVIDIA Gelato є оригінальною гібридною системою рендерінгу зображень і анімації тривимірних сцен і об'єктів, що використовує для розрахунків центральні процесори і апаратні можливості професійних відеокарт серії Quadro FX.

Основним принципом, якого неухильно дотримуються розробники, є безкомпромісна якість фінального зображення, не обмежену нічим, у тому числі — сучасними можливостями відеокарт. Як виробничий інструмент, здатний створювати кінцевий продукт високої якості, Gelato призначений для професійного використання в таких галузях як кіно, телебачення, промисловий дизайн та архітектурні візуалізації.

Рендерінг в реальному часі[ред. | ред. код]

Шейдерна мова OpenGL: GLSL[ред. | ред. код]

Шейдерна мова OpenGL носить назву GLSL (The OpenGL Shading Language). GLSL заснована на мові ANSI C. Більшість можливостей мови ANSI C збережено, також до них додано векторні та матричні типи даних, що часто застосовуються при роботі з тривимірною графікою. У контексті GLSL шейдером називається незалежно компільована одиниця, написана цією мовою. Програмою називається набір шейдерів, пов'язаних разом. У версії OpenGL 4.3 додано шейдери обчислення (compute shader)  — які представляють собою спрощену форму ядер OpenCL і збільшують гнучкість графічного конвеєра, дозволяючи реалізувати динамічно модифіковані текстури, програмно-генеровану геометрію та інше.

Мова програмування Cg[ред. | ред. код]

Розроблена nVidia спільно з Microsoft (аналогічна (по суті) мова від Microsoft має назву 'HLSL' та додана до DirectX 9). 'Cg' розшифровується як C for Graphics. Мова дуже схожа на C, вона використовує схожі типи даних (int, float, а також спеціальний 16-бітний тип з плаваючою комою — half). Підтримуються функції і структури. Мова має своєрідні оптимізації у вигляді упакованих масивів — оголошення типу «float a [4]» і «float 4 a» відповідають різним типам. Друге оголошення - це й є упакований масив, операції з яким виконуються швидше, ніж із звичайними масивами. Попри те, що мова розроблена nVidia, вона вільно працює і з відеокартами інших виробників, таких як AMD/ATI. Однак слід враховувати, що всі шейдерні програми мають свої особливості, які слід отримувати з спеціалізованих джерел.

Шейдерні мови DirectX[ред. | ред. код]
Шейдерна мова низького рівня DirectX (DirectX ASM)[ред. | ред. код]

Синтаксично  — мова асемблера. Існує кілька версій, що розрізняються наборами команд, а також необхідним обладнанням. Існує поділ на вершинні (англ. vertex) і піксельні (англ. pixel) шейдери.

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

Виконує обробку геометрії — змінює атрибути вершин, розміщені у вхідних регістрах, такі як позиція, текстурні координати, колір вершини, нормаль та інші. Також може виконувати обчислення освітлення. Допустима кількість команд залежить від версії шейдера, яка задає вимоги до аппаратного забезпечення, і може досягати однієї-двох сотень і більше. Приклад фрагмента коду:

vs.2.0 dcl_position v0 dcl_texcoord v3 m4x4 oPos, v0, c0 mov oT0, v3 
  • Піксельний Шейдер

Виконує обробку даних забарвлення, отриманого при відображенні трикутника. Оперує з текстурами і кольором. Кількість інструкцій значно обмежена, так, наприклад, у версії 1.4 вона не може бути більше 32. Приклад фрагмента коду:

ps.1.4 texld r0, t0 mul r0, r0, v0 
Шейдерна мова високого рівня DirectX (HLSL — High Level Shader Language)[ред. | ред. код]

Є надбудовою над DirectX ASM. За синтаксисом подібна до C, дозволяє використовувати структури, процедури та функції.

Обсуждение:Шейдер — Википедия

Высокоуровневый шейдерный язык DirectX грязный пеар?

Где ты видишь пиар?
HLSL официально существует аж с 2002 года. И он сильно похож на С. В чем грязь?85.113.37.89 05:11, 6 июня 2009 (UTC)@!!ex

Судя по этой статье, видеокарты на компьютерах нужны только для просмотра чего либо, а шейдерами занимаются только разработчики этого контента. Всякие там GIS, CAD/CAM и прочее, видимо, тоже сочиняют исключительно разработчики контента в свободное от разработки контента. Видеокарты нужны не только для контента, а для отображения всего, что мы видим на экране. 178.218.203.124 03:02, 2 апреля 2016 (UTC)

Что за тип шейдера такой? Я лично впервые слышу. Никто не перепутал тип шейдера с шейдерным эффектом? --OneHalf 08:17, 1 сентября 2009 (UTC) Паралакс это как бы эфект выпоклости изображение особенно хорошо виден в Oblivion 95.153.164.113 10:26, 20 июля 2010 (UTC)

Где же примеры?? Нужны изображения. Предлагаю вам сделать их на примере игры Crysis на 4 настройках от минимума до максимума 95.153.164.113 10:22, 20 июля 2010 (UTC)

Хоть бы один скрин. Айтишникам статья до лампочки, а неспециалисту без визуальных примеров понять сложно. Вобщем скрины в студию! Otshelnik-YURIY 14:22, 27 августа 2010 (UTC)

Вызов шейдеров на выполнение[править код]

Как, чем и как часто вызываются шейдеры при отрисовке видео? --Nashev 21:47, 12 июля 2011 (UTC)

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

Унификация терминологии (шейдер или затенитель?)[править код]

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

И, соответственно, полный разнобой в самих статьях — «тонирование», «шейдинг», «затенение», кто-то даже предлагает вариант «закраска». Необходимо выяснить, какой из терминов наиболее корректен для перевода английского «shader/shading».

Позволю себе на правах зачинателя дискуссии изложить свою позицию и привести аргументы в ее пользу. По моему опыту (не очень большому, но все же), в разговорной речи абсолютного большинства людей, связанных с компьютерной графикой, программированием или просто играми, используется калька с английского: «шейдер», «шейдинг». Можно судить о том, хорошо это или плохо, но такая ситуация имеет место быть как факт. Такая же ситуация наблюдается и в интернете: «шейдер» — 25 700 000 результатов поиска в гугле, «затенитель» — 30 200 (учитывая, что большинство из них не относятся к КГ). Другое дело, что в среде людей, связанных с компьютером, львиную долю профессионального жаргона составляют англицизмы, и когда у человека возникает потребность написать книгу, он задумывается над тем, как изложить свою мысль не на профессиональном жаргоне, а на русском языке. Некоторые авторы употребляют слова, перевода которых они не нашли в словаре, прямо на английском, в скобках давая значение, а некоторые используют буквальный перевод или изобретают неологизмы. По сути, таким неологизмом стали слова «шейдер» и «шейдинг», активно использующиеся в литературе по программированию (цитат и ссылок не приведу, но для примера можно посмотреть любые статьи по теме, имеющие отношение к ПО или АО: OpenGL, DirectX, HLSL, Quadro и т. д.). Вариантами перевода являются экзотические «тонирование», «закраска» (практически никем не употребляющиеся) и «затенение»/«затенитель». Последний вариант можно назвать употребляемым — он встречается в переводных книгах и в книгах некоторых русскоязычных авторов, посвященных программам для работы с компьютерной графикой. Однако, если разобраться, этот перевод неправилен изначально: «Шейдер (от англ. shade — затемнять, здесь не путать shade с shadow — тень, шейдер затемняет, а не затеняет — для получения изображения теней от объектов в графике используются пока что не шейдеры, а другие средства) — это небольшая программа, которая содержит набор инструкций для расчета цветов пикселов объектов в ходе цикла визуализации» (Блинова Т. А., Порев В. Н. Компьютерная графика. К.: Юниор, 2006). Таким образом, получается, что использование терминов «затенитель» и «затенение» не только сужает доступность понимания смысла понятия, сводя его к какому-то образованию тени, но и не отражает изначальной сути действия, для которого когда-то разрабатывались эти программы. Исходя из этого, я считаю, что в Википедии нужно унифицировать все статьи, оставив в употреблении термины «шейдер» и «шейдинг» (тем, кто обвинит меня в англофильстве, сразу отвечу, что это не так, и бездумное употребление англицизмов, как в случае с рендерингом/визуализацией, я также нахожу порочным). PhilAnG 00:38, 4 ноября 2012 (UTC)

  • Звучит здраво, хотя я мало что в этом смыслю. ADDvokat 11:39, 4 ноября 2012 (UTC)
  • Поддерживаю PhilAnG. Добавлю только, что термин "затенение" стоит оставить как наиболее часто используемую замену. Flammable 21:12, 16 июня 2013 (UTC)
  • в профессиональных АИ по програмироавнию испольльзуется только слово "шейдер", тем более что шейдеры бывают и вершинные - связанные не с затенением, а с преобразованием вершин (Idot 02:18, 17 июня 2013 (UTC))
  • Интересно, ситуация как-то сдвинулась с места? Здесь и в статье Рельефное текстурирование нерусифицированные термины. Неужели за столько лет не издано ни одного авторитетного издания, в котором был бы сносный перевод? Одно ясно, что «шейдер» как термин прижился. РоманСузи 12:42, 3 января 2015 (UTC)

Это ж ужас какой-то, никакой последовательности в изложении не наблюдается! Мешанина из неоднократных повторений разных определений, общих утверждений и обрывочных фактов... --Nashev 18:08, 21 ноября 2012 (UTC)

Вот тут хоть и не много про шейдеры, но и то понятнее - http://habrahabr.ru/post/123194/ --Nashev 18:09, 21 ноября 2012 (UTC)

Нужно сначала отметить, что шейдеры — это, в первом случае, то, что относится к шейдингу, а во втором, более частном — программы, работающие с железом (собственно про эти шейдеры сейчас и написана статья). PhilAnG 19:22, 21 ноября 2012 (UTC)
Кстати, высказывайтесь по обсуждению терминологии (тема выше). PhilAnG 19:23, 21 ноября 2012 (UTC)
Въезд в шейдеры для новичка - дело, как правило, долгое и мучительное. Не хватает простых и очевидных примеров. Netherwire 17:05, 20 августа 2013 (UTC)

Энциклопедия шейдеров Cycles

Вам кажутся ноды в Cycles немного запутанным? Вы не одиноки. Несмотря на то, что они предоставляют практически безграничный контроль над материалами, многие пользователи с трудом понимаю, что делать с этим лабиринтом вариантов. Именно поэтому эта статья осмеливается сделать невозможное: объяснить действие каждого шейдера простым русским языком.

Наслаждайтесь! -Greg Zaal
Перевод урока с сайта BlenderGuru

Diffuse BSDF


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

Свойства

Шероховатость (Roughness)

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

Шероховатость добавляет очень тонкие, микроскопические уровни шероховатости поверхности. Где это использовать? Везде, где нужен очень мелкий уровень шероховатости, который едва виден на глаз. Это могут быть такие объекты как ткань, необработанные лесоматериалы или песок:

Glossy BSDF


Что он делает: Отражает свет и окружающюю среду.
Используйте его для: Добавления отражения к любому объекту.

Это очень распространенный шейдер, который часто используется в сочетании с диффузным шейдером (с использованием Mix Shader, обсудим позже), чтобы создать некоторые общие материалы, такие как пластик, металл, керамика и дерево:

Свойства

Функция распределения

Проще говоря, это математика. Это способ рассчета “размытости”. Какой Вы должны использовать? Ну, это зависит от ситуации, а также Ваших предпочтений. Я думаю, что Beckmann хорошо работает для металлов, а GGX хорош для всего остального. Ashikhmin-Shirley был добавлен сравнительно недавно и, кажется, это своего рода что-то среднее между ними. Стоит отметить, что Вы не увидите никаких изменений при значении шероховатости равным 0.

Шероховатость (Roughness)

Управляет тем, как размывается отражение, имитируя микроскопические неровности на поверхности:

Anisotropic BSDF


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

Свойства

Функция распределения

Тоже самое, что и для шейдера Glossy, только разница между ними в данном случае более заметна:

Анизотропия (Anisotropy)

Значение от -1,0 до 1,0 контролирует степень растяжения. Отрицательные значения растягивают отражения по горизонтали, а положительные по вертикали. При значении 0 результат будет таким же, как если бы Вы просто использовали шейдер Glossy.

Вращение (Rotation)

Используется для поворота направления отражений. Диапазаон от 0 до 1 вращает от 0 до 360 градусов. Обычно регулируют данный параметр в диапазоне от 0 до 0,5, потому как при значении 180 отражение такое же как и при 360.

Тангенс (Tangent)

Tangent контролирует в направлении какой из осей использовать искажение отражения.

Glass BSDF


Что он делает: Ведет себя как стекло. Искажает и отражает свет от поверхности в соответствии с индеком преломлления (IOR).
Используйте его для: Стекла, воды или любые другие отражающие и преломляющие свет материалы, такие как драгоценные камни.

Свойства

Функция распределения

Опять же, данная функция просто контролирует, какой алгоритм используется для вычисления внешнего вида отражений и преломлений, но в данном случае вариант Ashikhmin-Shirley недоступен.

Шероховатость (Roughness)

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

Шероховатость 0 Шероховатость 0.2
IOR

Индекс преломления света контролирует насколько свет преломляется, как он проходит через поверхность, а также, насколько хорошо видны отражения.

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

  • Вода: 1.33
  • Стекло: 1.5
  • Алмаз: 2.4

Refraction BSDF


Что он делает: Ведет себя точно так же, как шейдер Glass, но без компонента отражения.
Используйте его для: Особых случаев, когда Вам нужно преломлять свет, но не отражать его. Используется для создания тепловой деформации и черных дыр.

Transparent BSDF


Что он делает: Полностью прозрачный когда белый, окрашивает когда цветной.
Используйте его для: Сочетания с другими материалами, чтобы создать прозрачные части объекта.

Сам по себе он невидим и довольно бесполезен, но в сочетании с изображениями с альфа каналом он может быть использован для создания сложных объектов, таких как листья или волосы.

Translucent BSDF


Что он делает: Позволяет свету проходить сквозь объект.
Используйте его для: Создания тонких объектов, таких как трава или бумага. Смешивают его с шейдером Diffuse для достижения более реалистичного результата.

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

Обратите внимание на то, как плоскость светится только тогда, когда свет попадает на нее сзади. Что здесь действительно важно, так это количество отскоков света. После того как свет попадает внутрь и мы позволяем ему “скакать” внутри объекта, часть света в последствии покинет объект и подсветит его передние грани:

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

Только Diffuse Diffuse и Translucent Только Translucent

Не следует путать его с Sub-Surface Scatting (рассмотрим ниже).

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

Velvet BSDF


Что он делает: Изгибает свет вокруг объекта как настоящий бархат. Используйте для одежды и ткани.
Используйте его для: Одежды и ткани.
Вы можете думать о нем, как о шейдере Diffuse, но с большим темным пятном в середине:

Свойства

Сигма (Sigma)

Контролирует значение шероховатости, тем самым изменяя размер темного пятна. Чем выше значения, тем меньше черное пятно.

Toon BSDF


Что он делает: Создает мультяшное затенение.
Используйте его для: Особых случаев, когда Вам нужно создать что-либо в нефотореалистичном мультяшном стиле.

Свойства

Компонент

Выбор между Diffuse и Glossy – разница в том, что диффузный вид независимая состав

Искусство создания органических 3D-моделей: субдермальные шейдеры / Habr

Daniel Bauer рассказал о создании реалистичной модели зубов и субдермальных шейдеров в ZBrush, Toolbag и Substance Painter.


Ресурсы


Свой проект я начал со сбора референсов в Google, Pinterest и Youtube.

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


Совет: сохраните несколько «кроссполяризованных» фотографий. Вы можете многому научится, наблюдая за чистым цветом.

Скульптинг


Для скульптинга основных объёмов я использовал ZBrush. Я не строго придерживался формы, потому что хотел, чтобы образ хорошо читался на расстоянии. Очень часто я сильно отдалял модель, чтобы проверить её. Для получения удовлетворительного результата мешу пришлось претерпеть множество итераций. Кстати, можно воспользоваться режимом ZBrush «see-through» и сравнить свой скульптинг с 3D-сканами на Sketchfab.

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


Совет: используйте контурный шейдер или чёрный материал, чтобы постоянно проверять силуэты модели.

Я использовал transpose line ZBrush, чтобы измерить каждый зуб и привести их все к верному размеру. Многие люди испытывают трудности с единицами измерения ZBrush, поэтому дам совет:

  • Добавьте в сцену вспомогательный объект единичного размера, перенесите его с помощью GoZ в 3D-пакет, отмасштабируйте до 10мм и верните через GoZ обратно в ZBrush.
  • Теперь перетащите Transpose Line с одной стороны куба на другую и задайте масштаб в 1 Unit. Так вы сможете использовать Transpose Line, которая считывает точные значения.


Я скульптил каждый зуб по отдельности и это даёт мне полный контроль над запеканием в Toolbag или в Substance Painter. Если каждый инструмент (subtool) будет храниться отдельно, то это обеспечивает гибкость при необходимости модифицирования зуба. Когда я понял, насколько сложны на самом деле человеческие зубы, этот метод позволил мне прислушиваться к отзывам других художников и без проблем устранять недостатки форм. В первом проходе некоторые детали преувеличены, а другие отсутствуют:
Совет: из-за особенностей реализации подразделений (subdivisions, SD), при возврате к уровню 1 SD меш может сжаться. Это приводило к нежелательному эффекту, ведь мои зубы, дёсны и blend mesh должны идеально сочетаться. Я написал макрос, сохранявший morphtarget меша перед каждой командой subdivide и восстанавливающий его исходный объём.

Я использовал этот макрос как мою основную команду subdivide, привязанную к CTRL+D. Скрипт можно скачать отсюда.

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

Плавность расположения полигонов зубов и дёсен помогает blendmesh сохранить все сложные формы.

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


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

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

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

В ZBrush можно нарисовать тонкие трубочки в полостях, которые будут обозначать скопления слюны. Мы используем их только для запекания. Таким образом мы получим плотно прилегающий вогнутый blendmesh плюс нормальную карту, напоминающую выпуклую форму. Это пригодится в рендерере реального времени, потому что во впадинах мы получим красивые отражения, как показано на этом изображении:


UV-развёртка


Можно импортировать меши в 3ds Max или другое похожий пакет для создания развёртки и планировки текстуры. Мне хотелось сохранить UDIM-развёртку, чтобы иметь готовую к продакшену модель на разных платформах. Я перенёс через GoZ мои инструменты 3ds Max для указания швов разрезов, а затем выполнил «quick-Peel» и операцию упаковки. Затем вернул всё через GoZ обратно в ZBrush, чтобы воспользоваться его мощным инструментом создания развёрток («use existing seems»). Это очень важно, если вы хотите экспортировать карты смещений из ZBrush.
Совет: многое о развёртках можно узнать у Тима Бергхольца.

Раскрашивание текстур и смещение


После создания развёртки можно загрузить модель в Substance Painter, чтобы раскрасить её.
Для создания карт альбедо я люблю использовать процедурные и рисуемые вручную маски. Привлекательной кажется идея проецирования кроссполяризированных фотографий, но они ограничивают вас, если вы захотите изменить вены или кровеносные сосуды для другого проекта. Вы можете многому научиться о значениях цвета и слоях ткани, создавая всё вручную. Это может быть не идеальным альбедо, но в дальней перспективе эта работа вам воздастся.

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



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

Для большинства полостей я использовал чуть более сильное значение roughness, но исключил полости зубов, в которых значения шероховатости ниже. Я продолжал настраивать эту карту даже в процессе написания статьи, поэтому получил новые отзывы. Мне нравится завершать проекты, но для повышения своих навыков необходимо относиться к себе критически и быть открытым к новым идеям.


Совет: создайте тёмно-серый цвет во всех наборах текстур и переключайте режим смешивания на «replace», чтобы сразу же проверять поведение карты roughness при различных условиях освещения.
  • Непрозрачность для blendmesh

Сначала выберите для этого набора текстур отдельный шейдер. Идеальные результаты получаются с шейдером «metal/rough-with-alpha-test». К другим наборам текстур примените «skin-shader».

Добавьте в «Texture Set Settings» канал opacity и создайте fill layer внизу стека слоёв с нейтральными нормалями и обнулённой информацией об opacity.

Теперь можно начинать рисовать поверх маску непрозрачности (для наглядности я использовал красный цвет).

Для получения идеального результата пришлось потрудиться, но спешка на этом этапе очень снизит общее качество рендеринга.


Совет: экспортировать свою маску можно через меню набора текстур или просто нажав правую клавишу мыши на стеке маски и выбрав «Export mask to file».

Карты смещений я экспортировал из ZBrush.

В нём есть удобная функция, анализирующая инструменты и выравнивающая карту смещений, чтобы покрыть все высокие и низкие значения. Я использовал Multi Map Exporter, чтобы объединить отдельные инструменты с относящимися к ним тайлам UV, использовав следующие параметры:


Шейдер


Для каждого набора текстур я создал в Marmoset Toolbag свой шейдер. Это позволило мне использовать разные параметры шейдеров для языка, зубов и дёсен.

Перед настройкой шейдеров SSS и смещения важно правильно задать масштаб сцены. В Toolbag есть ползунки «Scale» и «Scale-Center», и я воспользовался ими, чтобы подчеркнуть эффект смещения:



В Toolbag есть хороший подповерхностный шейдер, который при наличии качественных карт может создавать отличные результаты. Чтобы добавить вариативности в запечённую карту нормалей, я использовал карту нормалей деталей. По своей природе зубы кажутся просвечивающими (translucent), и в достижении этого эффекта сильно помогает хорошая карта просвечиваемости (translucency map). Я запёк в Substance Painter карту толщины и изменил её в соответствии со своими потребностями.

Вот параметры моего шейдера для зубов:


Модель затенения


Я считаю, что самое важное в шейдере зубов — это модель отражения, для которой я выбрал параметр «Refractive». Индекс преломления определяет, насколько путь луча искажается или преломляется при попадании в материал. Очень важно придать материалам правильный внешний вид. Изучив вопрос, я узнал, что IOR дентина равен 1.540.

Чтобы подчеркнуть сниженные значения отражаемости во впадинах, я добавил в шейдер карту полостей и передвинул ползунок «specular cavity» на 0.4. Ползунок Diffuse Cavity я оставил на нуле, потому что моя Albedo map уже содержала заливку полостей красным цветом.

Вот сравнение между моделями преломлённого и зеркального отражения:


Совет: посмотрите объяснения модели зеркального отражения в видео Джо Уилсона и Ли Деновалда:




Физически верное значение зеркального отражения для кожи примерно равно 0.028. Это стало для меня хорошей опорной точкой.

Для дёсен я увеличил этот показатель до 0.07. Здесь нужно придерживаться низких значений, иначе шейдер может создать эффект металла. Придать результату убедительности может небольшой Fresnel.

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


Совет: здесь можно узнать о техниках реалистичного рендеринга кожи в реальном времени.
Для создания убедительной слюны в Toolbag можно использовать разные режимы прозрачности.

Для идеального смешения между зубами и дёснами я использовал метод Refraction with Dithering. Вот параметры шейдера:


Результат, полученный после использования описанных техник:

Заключение


  • Очень важно использовать ресурсы, которые поначалу кажутся неочевидными. Для изучения анатомии полезны данные сканирования.
  • Уделите достаточно времени этапу моделирования и убедитесь, что меш хорошо читается и имеет крепкую структуру в своей основе.
  • Подписывайтесь на блоги об интересующей вас области знаний. Находите единомышленников и общайтесь с ними!

Это был очень увлекательный проект. У него всё ещё есть «шероховатости», но он стал отличным обучающим процессом по анатомии и материалам.

Упрощённую модель для своих проектов можно скачать здесь.

Спасибо за чтение! Надеюсь, эта статья была вам полезна.

Об авторе


Меня зовут Дэниел Бауэр, я 3D-художник и специализируюсь на моделировании органики. Свою карьеру я начал в небольшой студии 2D-анимации, где и познакомился с магией 3D-моделирования. Карьерный путь привёл меня к решению таких задач, как затенение и моделирование для CGI в области автомобилестроения. В свободное время я полюбил заниматься моделированием органики и продолжаю это делать и по сей день.

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

Я писал эту статью, чтобы показать, каким образом я решал задачи проекта, а также чтобы поделиться полезными советами.


Смотрите также