Шэйдинг (Ozw;nui)
Эту статью предлагается удалить. |
Шэйдинг в компьютерной графике — изображение для восприятия глубины в трехмерных моделях или иллюстрациях с помощью различных уровней темноты[1].
Рисование
[править | править код]Шэйдинг используется при рисовании для отображения уровней темноты на бумаге путем нанесения красителя или карандаша более плотно или с более темным оттенком для темных областей и менее плотно или с более светлым оттенком для светлых областей. Существуют различные методы шэйдинга, включая штриховку, где перпендикулярные линии разной близости рисуются в виде сетки для затенения области. Чем ближе линии, тем темнее область. Аналогично, чем дальше друг от друга линии, тем светлее область.
Световые узоры, такие как объекты, имеющие светлые и затененные области, помогают при создании иллюзии глубины на бумаге.[2]
Компьютерная графика
[править | править код]В компьютерной графике шэйдинг относится к процессу изменения цвета объекта / поверхности / многоугольника в трехмерной сцене на основе таких факторов, как (но не ограничиваясь этим) угол поверхности к источникам света, расстояние от источников света, угол к камере и материал (например, функция распределения двунаправленного отражения) для создания фотореалистичного эффекта. Шэйдинг выполняется в процессе рендеринга программой, называемой шейдером.
Угол к источнику света
[править | править код]Шэйдинг изменяет цвета граней в 3D-модели в зависимости от угла поверхности источника света или источников света.
На первом изображении ниже изображены грани рамки, но все они одного цвета. Здесь также были нарисованы краевые линии, что облегчает просмотр изображения.
Второе изображение — та же модель, изображенная без линий края. Трудно сказать, где заканчивается одна грань фигуры и начинается другая.
На третьем изображении включена функция шэйдинга, что делает изображение более реалистичным и позволяет легче увидеть фигуру.
Освещение
[править | править код]Шэйдинг также зависит от используемого освещения. Обычно при рендеринге сцены используется несколько различных методов освещения, чтобы сделать рендеринг более реалистичным. Различные типы источников света используются для получения различных эффектов.
Окружающее освещение
[править | править код]Источник окружающего света представляет собой всенаправленный источник света с фиксированной интенсивностью и фиксированным цветом, который одинаково влияет на все объекты в сцене. При рендеринге все объекты на сцене становятся ярче с указанной интенсивностью и цветом. Этот тип источника света в основном используется, чтобы предоставить сцене базовый обзор различных объектов в ней. Это самый простой тип освещения, который можно реализовать, и он моделирует, как свет может рассеиваться или отражаться много раз, создавая равномерный эффект.
Окружающее освещение может быть объединено с окружающим окклюзией, чтобы показать, как экспонируется каждая точка сцены, влияя на количество окружающего света, который она может отражать. Это создает рассеянное ненаправленное освещение по всей сцене, не отбрасывая четких теней, но создавая затененные закрытые и защищенные области. Результат обычно визуально похож на пасмурный день.
Направленное освещение
[править | править код]Направленный источник света освещает все объекты одинаково с заданного направления, как свет области бесконечного размера и бесконечного расстояния от сцены.
Точечное освещение
[править | править код]Свет исходит из одной точки и распространяется во все стороны.
Прожекторное освещение
[править | править код]Модели Прожектора. Свет исходит из одной точки и распространяется в конусе наружу.
Освещение на плоскости
[править | править код]Свет исходит из небольшой области на одной плоскости. Более реалистичная модель, чем точечный источник света.
Объемное освещение
[править | править код]Свет, исходящий из небольшого объёма, закрытого пространства, освещающего объекты в этом пространстве.
Шэйдинг интерполируется на основании того, как угол этих источников света достигает объектов в сцене. Конечно, эти источники света могут быть и часто объединены в сцене. Затем средство рендеринга интерполирует, как эти источники света должны быть объединены, и создает 2-мерное изображение для соответствующего отображения на экране.
Уменьшение расстояния
[править | править код]Теоретически, две параллельные поверхности освещаются одинаковым количеством от удаленного источника света, такого как солнце. Несмотря на то, что одна поверхность находится дальше, ваш глаз видит больше в том же месте, поэтому освещение выглядит одинаково.
Левое изображение не использует уменьшение расстояния. Обратите внимание, что цвета на лицевых гранях двух коробок одинаковы. Похоже, есть небольшая разница в том, где встречаются две грани, но это оптический обман, вызванный вертикальным краем ниже, где встречаются две грани.
Правильное изображение использует уменьшение расстояния. Обратите внимание, что лицевая поверхность передней коробки ярче лицевой поверхности задней коробки. Кроме того, поверхность пола становится темнее, поскольку он отдаляется.
Этот эффект уменьшения расстояния создает изображения, которые кажутся более реалистичными.
Уменьшение расстояния можно рассчитать несколькими способами:
- Степень расстояния. Для данной точки на расстоянии от источника света интенсивность получаемого света пропорциональна .
- Нет (n = 0). Полученная интенсивность света одинакова независимо от расстояния между точкой и источником света.
- Линейный (n = 1). Для данной точки на расстоянии x от источника света интенсивность принимаемого света пропорциональна 1 / x.
- Квадратичный (n = 2) — это то, как интенсивность света в действительности уменьшается, если у света есть свободный путь (то есть нет тумана или любой других веществ в воздухе, которая может поглощать или рассеивать свет). Для данной точки на расстоянии х от источника света интенсивность принимаемого света пропорциональна .
- Можно также использовать любое количество других математических функций.
Методы интерполяции
[править | править код]При расчете яркости поверхности во время рендеринга модель освещения требует, чтобы мы знали нормаль поверхности. Однако 3D-модель обычно описывается полигональной сеткой, которая может хранить нормаль поверхности только в ограниченном количестве точек, обычно либо в вершинах, либо на гранях полигона, либо в обеих. Чтобы обойти эту проблему, можно использовать один из нескольких методов интерполяции.
Плоскостной шэйдинг
[править | править код]Здесь цвет рассчитывается для одной точки на каждом многоугольнике (обычно для первой вершины в многоугольнике, но иногда используется центроид для треугольных сеток) на основе нормальной поверхности многоугольника и предположения, что все многоугольники плоские. Затем в любом месте цвет интерполируется путем окрашивания всех точек на многоугольнике так же, как и точки, для которой был рассчитан цвет, что дает каждому многоугольнику однородный цвет (аналогично, интерполяции методом ближайшего соседа). Обычно эта техника используется для высокоскоростного рендеринга, где более продвинутые методы шэйдинга слишком дороги в вычислительном отношении. В результате плоскостного шэйдинга все вершины многоугольника окрашиваются в один цвет, что позволяет различать соседние многоугольники. Зеркальные блики плохо отображаются с плоскостным шэйдингом: если в репрезентативной вершине имеется большой зеркальный компонент, эта яркость равномерно рисуется по всей грани. Если зеркальная область не попадает в репрезентативную точку, оно полностью пропускается. Следовательно, компонент зеркального отражения обычно не включается в вычисление плоскостного шэйдинга.
Плавный шэйдинг
[править | править код]В отличие от плоскостного шэйдинга, когда цвета изменяются на границах многоугольника, при плавном шэйдинге цвет меняется от пикселя к пикселю, что приводит к плавному переходу цвета между двумя соседними многоугольниками. Обычно значения сначала вычисляются в вершинах, а затем используется билинейная интерполяция для вычисления значений пикселей между вершинами многоугольников.
Типы плавного шэйдинга включают в себя:
Гуро шэйдинг
[править | править код]- Определить нормаль в каждой вершине многоугольника.
- Применить модель освещения к каждой вершине, чтобы рассчитать интенсивность света по нормали вершины.
- Интерполировать интенсивность вершин, используя билинейную интерполяцию по поверхности многоугольника.
Структура данных
[править | править код]- Иногда нормали вершин можно вычислить напрямую (например, поле высоты с равномерной сеткой)
- В целом, нужна структура данных для сетки
- Ключ: какие многоугольники встречаются в каждой вершине.
Преимущества
[править | править код]Многоугольники, более сложные, чем треугольники, также могут иметь разные цвета, указанные для каждой вершины. В этих случаях базовая логика шэйдинга может стать более сложной.
Проблемы
[править | править код]- Даже гладкость, обеспечиваемая Гуро шэйдингом, не может предотвратить появление различий между смежными многоугольниками.
- Гуро шэйдинг требует больше ресурсов процессора и может стать проблемой при рендеринге сред в реальном времени со многими многоугольниками.
- Т-образные переходы с прилегающими многоугольниками могут иногда приводить к визуальным аномалиям, поэтому Т-образных соединений следует избегать.
Ссылки
[править | править код]- ↑ Graphics: Shading (англ.). hexianghu. Дата обращения: 27 мая 2021. Архивировано 28 апреля 2021 года.
- ↑ Shading Tutorial, How to Shade in Drawing . Dueysdrawings.com (21 июня 2007). Дата обращения: 18 июня 2019. Архивировано из оригинала 24 апреля 2017 года.
- ↑ Gouraud, Henri. Continuous shading of curved surfaces // IEEE Transactions on Computers.. — 1971. — № C-20 (6). — С. 623–629. — doi:10.1109/T-C.1971.223313..
- ↑ B. T. Phong,. Illumination for computer generated pictures, // Communications of ACM 18 (1975), no. 6. — С. 311–317.
Для улучшения этой статьи желательно:
|