1.76M
Category: informaticsinformatics

Рендеринг. Лекция 06

1.

Рендеринг
Айжулов Д.
[email protected]
Satbayev University

2.

• Рендеринг или синтез изображения - это процесс создания фотореалистичного или
нефотореалистичного изображения из 2D или 3D модели с помощью
компьютерной программы.
• Визуализация трехмерной сцены включает следующие основные шаги:
• Виртуальная сцена описывается обычно в виде трехмерных поверхностей, представленных
в некоторой математической форме.
• Виртуальная камера размещается и ориентируется так, чтобы обеспечить желаемый вид
сцены. Обычно камера моделируется как идеализированная фокусная точка с поверхностью
изображения, парящей на некотором небольшом расстоянии перед ней, состоящей из
виртуальных световых датчиков, соответствующих элементам изображения (пикселям)
целевого устройства отображения.
• Определяются различные источники света. Эти источники обеспечивают все световые
лучи, которые будут взаимодействовать с объектами окружающей среды и отражаться от
них и в конечном итоге попадать на воспринимающую изображение поверхность
виртуальной камеры.
• Описываются визуальные свойства поверхностей в сцене. Это определяет, как свет должен
взаимодействовать с каждой поверхностью.
• Для каждого пикселя в пределах прямоугольника изображения механизм рендеринга
вычисляет цвет и интенсивность светового луча, сходящегося в фокусе виртуальной камеры
через этот пиксель. Это известно как решение уравнения рендеринга (также называемого
уравнением затенения).

3.

• Для выполнения основных шагов рендеринга, можно использовать множество различных
технологий. Основная цель обычно - фотореализм, хотя некоторые игры стремятся к более
стилизованному виду (например, мультфильм, набросок углем, акварель и т. д.). Таким
образом, инженеры по рендерингу и художники обычно пытаются описать свойства своих
сцен как можно более реалистично и использовать модели транспорта света, которые
максимально соответствуют физической реальности. В этом контексте спектр технологий
рендеринга варьируется от методов, разработанных для работы в реальном времени за счет
визуальной точности, до тех, которые предназначены для фотореализма, но не
предназначены для работы в реальном времени.
Механизмы рендеринга в реальном времени многократно
выполняют перечисленные на предыдущем слайде шаги,
отображая визуализированные изображения со скоростью 30, 50
или 60 кадров в секунду, чтобы обеспечить иллюзию движения.
Это означает, что у механизма рендеринга в реальном времени
есть самое большее 33,3 мс для генерации каждого изображения
(для достижения частоты кадров 30 FPS). Обычно доступно гораздо
меньше времени, потому что полоса пропускания также
потребляется другими системами двигателя, такими как анимация,
искусственный интеллект, обнаружение столкновений, симуляция
физики, звук, механика игрока и другая логика игрового процесса.

4.

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

5.

Описание сцены
• Теоретически поверхность представляет собой двумерный лист, состоящий
из бесконечного числа точек в трехмерном пространстве. Однако такое
описание явно непрактично. Чтобы компьютер мог обрабатывать и
отображать произвольные поверхности, нам нужен компактный способ их
численного представления.
• Некоторые поверхности можно точно описать в аналитической форме с
помощью параметрического уравнения поверхности. Например, сфера с
центром в начале координат может быть представлена уравнением
x2+y2+z2=r2. Однако параметрические уравнения не особенно полезны для
моделирования произвольных форм.

6.

Описание сцены
• Разработчики игр традиционно моделируют свои поверхности с помощью
треугольных сеток. Треугольники служат кусочно-линейным приближением к
поверхности, так же как цепочка связанных отрезков прямых действует как кусочнолинейное приближение к функции или кривой.
• Треугольники - это предпочтительный многоугольник для рендеринга в реальном
времени, потому что они обладают следующими желательными свойствами:
• Треугольник - простейший тип многоугольника. Меньше трех вершин, и у нас вообще не
будет поверхности.
• Треугольник всегда плоский. Любой многоугольник с четырьмя или более вершинами не
обязательно должен иметь это свойство, потому что, хотя первые три вершины определяют
плоскость, четвертая вершина может лежать выше или ниже этой плоскости.
• Треугольники остаются треугольниками при большинстве преобразований, включая
аффинные преобразования и перспективные проекции. В худшем случае треугольник,
рассматриваемый с ребра, превратится в отрезок прямой. При любой другой ориентации он
остается треугольным.
• Практически все коммерческое оборудование для ускорения графики спроектировано на
основе трехугольной растеризации. Начиная с самых ранних ускорителей 3D-графики для
ПК, оборудование для рендеринга было разработано почти исключительно для треугольной
растеризации. Это решение можно проследить вплоть до первых программных
растеризаторов, которые использовались в самых ранних 3D-играх, таких как Castle
Wolfenstein 3D и Doom.

7.

Замощение
• Термин тесселяция описывает процесс разделения поверхности на набор дискретных многоугольников (которые
обычно представляют собой четырехугольники, также известные как четырехугольники, или треугольники).
Триангуляция - это разбиение поверхности на треугольники.
• Одна из проблем с типом треугольной сетки, используемой в играх, заключается в том, что ее уровень тесселяции
фиксируется дизайнером, когда он или она создает ее. При фиксированной тесселяции края силуэта объекта могут
выглядеть блочными, это особенно заметно, когда объект находится близко к камере.
• В идеале нам нужно решение, которое может произвольно увеличивать мозаику по мере приближения объекта к
виртуальной камере. Другими словами, нам нужна равномерная плотность треугольника к пикселю, независимо от
того, насколько близко или далеко находится объект. Подразделение поверхностей может достичь этого идеала поверхности могут быть мозаичными в зависимости от расстояния от камеры, так что каждый треугольник имеет
размер менее одного пикселя.
• Разработчики игр часто пытаются приблизить этот идеал однородной плотности треугольника к пикселю, создавая
цепочку альтернативных версий каждой треугольной сетки, каждая из которых известна как уровень детализации
(LOD). Первый уровень детализации, часто называемый уровнем детализации 0, представляет наивысший уровень
тесселяции; он используется, когда объект находится очень близко к камере. Последующие LOD мозаичны с
меньшим и меньшим разрешением. По мере того, как объект удаляется от камеры, движок переключается с LOD 0
на LOD 1 на LOD 2 и так далее. Это позволяет механизму рендеринга тратить большую часть своего времени на
преобразование и освещение вершин объектов, которые находятся ближе всего к камере (и, следовательно,
занимают наибольшее количество пикселей на экране).
• Некоторые игровые движки применяют методы динамической тесселяции к обширным сеткам, таким как вода или
ландшафт. В этом методе сетка обычно представлена полем высоты, определенным на каком-то регулярном сетке.
Область сетки, ближайшая к камере, тесселируется до полного разрешения сетки. Области, находящиеся дальше от
камеры, разбиваются на мозаику с использованием все меньшего количества точек сетки.
• Прогрессивные сетки - еще один метод динамической тесселяции и LOD. С помощью этой техники создается единая
сетка с высоким разрешением для отображения, когда объект находится очень близко к камере. Эта сетка
автоматически удаляется по мере того, как объект удаляется из-за сжатия определенных краев. Фактически, этот
процесс автоматически генерирует полунепрерывную цепочку LOD.

8.

Построение треугольных сеток
• Треугольник определяется позиционными векторами его трех вершин, которые мы
можем обозначить p1, p2 и p3. Ребра треугольника могут быть найдены простым
вычитанием векторов положения соседних вершин. Например,
• Нормализованное векторное произведение любых двух ребер определяет нормаль
N единичной грани:
• Чтобы узнать направление нормали к грани, нам нужно определить, какая сторона
треугольника должна считаться передней (то есть внешней поверхностью объекта),
а какая - задней (внутренней), можно, указать порядок определения - по часовой
или против часовой стрелки.
• Большинство низкоуровневых графических API-интерфейсов позволяют отсеивать
обратные треугольники в соответствии с порядком намотки. Например, если мы
установим для параметра режима отсечения в Direct3D (D3DRS_CULL) значение
D3DCULLMODE_CW, то любой треугольник, вершины которого закручиваются по
часовой стрелке в пространстве экрана, будет рассматриваться как треугольник,
обращенный назад, и не будет нарисован.
• Зачем необходимо понятие переда или обратной части поверхности?

9.

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

10.

Индексация треугольников
• Многие вершины в списке треугольников могут дублироваться, часто несколько раз. Мы
часто храним довольно много метаданных с каждой вершиной, поэтому повторение этих
данных в списке треугольников расходует память. Это также тратит впустую пропускную
способность графического процессора, потому что дублированная вершина будет
преобразована и освещена несколько раз.
• По этим причинам большинство механизмов рендеринга используют более эффективную
структуру данных, известную как список индексированных треугольников. Основная идея
состоит в том, чтобы перечислить вершины один раз без дублирования, а затем
использовать облегченные индексы вершин (обычно занимающие всего 16 бит каждый) для
определения троек вершин, составляющих треугольники. Вершины хранятся в массиве,
известном как буфер вершин (DirectX) или массив вершин (OpenGL). Индексы хранятся в
отдельном буфере, известном как индексный буфер или индексный массив.

11.

Strips, fans
• Специализированные структуры данных сетки, известные как полосы (strips)
треугольников и вееры (fans) треугольников, иногда используются для рендеринга
игр. Обе эти структуры данных устраняют необходимость в индексном буфере, в то
же время в некоторой степени уменьшая дублирование вершин. Они достигают
этого, предварительно определяя порядок, в котором должны появляться вершины,
и то, как они объединяются в треугольники. В полосе первые три вершины
определяют первый треугольник. Каждая последующая вершина образует
совершенно новый треугольник вместе со своими двумя предыдущими соседями.
Чтобы сохранить последовательность намотки полосы треугольников, предыдущие
две соседние вершины меняются местами после каждого нового треугольника. В
веере первые три вершины определяют первый треугольник, а каждая
последующая вершина определяет новый треугольник с предыдущей вершиной и
первой вершиной веера.

12.

Оптимизация кэша вершин
• Когда графический процессор обрабатывает список индексированных треугольников, каждый
треугольник может ссылаться на любую вершину в буфере вершин. Вершины должны
обрабатываться в том порядке, в котором они появляются внутри треугольников, потому что
целостность каждого треугольника должна поддерживаться на этапе растеризации. Поскольку
вершины обрабатываются вершинным шейдером, они кэшируются для повторного
использования. Если последующий примитив относится к вершине, которая уже находится в
кэше, его обработанные атрибуты используются вместо повторной обработки вершины.
• Strips-ы и fan-ы используются отчасти потому, что они потенциально могут сохранять память
(индексный буфер не требуется), а отчасти потому, что они имеют тенденцию улучшать
когерентность кеш-памяти при доступе графического процессора к видеопамяти. Более того, мы
можем использовать индексированную полосу или индексированный веер, чтобы практически
исключить дублирование вершин (что часто может сэкономить больше памяти, чем исключение
индексного буфера), при этом сохраняя преимущества когерентности кэша за счет упорядочения
полос или веерных вершин.
• Индексированные треугольные списки также могут быть оптимизированы для кеширования, не
ограничивая себя разделением или веерным порядком вершин. Оптимизатор кэша вершин - это
автономный инструмент обработки геометрии, который пытается составить список
треугольников в порядке, который оптимизирует повторное использование вершин в кэше.
Обычно он принимает во внимание такие факторы, как размер кеша (ов) вершин,
присутствующий на конкретном типе графического процессора, и алгоритмы, используемые
графическим процессором, чтобы решить, когда кэшировать вершины, а когда отбрасывать их.
Например, оптимизатор кэша вершин, включенный в библиотеку обработки геометрии Sony
Edge, может достичь производительности рендеринга, которая на 4% выше, чем та, которая
возможна при удалении треугольников.

13.

Модельное пространство
• Векторы положения вершин треугольной сетки обычно задаются
относительно удобной локальной системы координат, называемой
пространством модели, локальным пространством или пространством
объекта. Начало пространства модели обычно находится либо в центре
объекта, либо в другом удобном месте, например, на полу между ногами
персонажа или на земле в горизонтальном центре тяжести колес
транспортного средства.
• Ось пространства модели имеет произвольный смысл, но оси обычно
совпадают с естественными направлениями «вперед», «влево», «вправо» и
«вверх» на модели. Для небольшой математической строгости мы можем
определить три единичных вектора F, L (или R) и U и отобразить их по
желанию на единичные базисные векторы i, j и k (и, следовательно, на оси x,
y и z. соответственно) в пространстве модели. Например, обычным
отображением является L = i, U = j и F = k. Отображение абсолютно
произвольно, но важно, чтобы оно было согласованным для всех моделей
во всем движке.

14.

Мировое пространство и сетка
• Многие отдельные сетки объединяются в законченную сцену путем их расположения и
ориентации в общей системе координат, известной как мировое пространство. Любая одна
сетка может появляться в сцене много раз - примеры включают улицу с одинаковыми
фонарными столбами, безликую толпу солдат или рой пауков, атакующих игрока. Мы
называем каждый такой объект экземпляром сетки (меша).
• Экземпляр сетки содержит ссылку на общие данные сетки, а также включает матрицу
преобразования, которая преобразует вершины сетки из пространства модели в мировое
пространство в контексте этого конкретного экземпляра. Эта матрица называется матрицей
от модели к миру или иногда просто мировой матрицей. Матрицу можно записать так:
• где верхняя матрица 3 × 3 (RS)M → W вращает и масштабирует вершины пространства модели
в мировое пространство, а tM - это перемещение осей пространства модели, выраженное в
мировом пространстве. Если у нас есть базисные векторы единичного пространства модели
iM, jM и kM, выраженные в координатах мирового пространства, эту матрицу также можно
записать следующим образом:

15.

Мировое пространство и сетка
• Для данной вершины, выраженной в координатах пространства модели, механизм
визуализации вычисляет ее эквивалент в мировом пространстве следующим
образом:
• Мы можем думать о матрице MM → W как о описании положения и ориентации
самих осей модельного пространства, выраженных в координатах мирового
пространства. Или мы можем думать об этом как о матрице, которая преобразует
вершины из пространства модели в мировое пространство.
• При рендеринге сетки матрица «модель-мир» также применяется к нормальным
поверхностям сетки. Чтобы правильно преобразовать векторы нормалей, мы
должны умножить их на обратное транспонирование матрицы модели к миру. Если
наша матрица не содержит никакого масштаба или сдвига, мы можем правильно
преобразовать наши нормальные векторы, просто установив их w-компоненты в
ноль перед умножением на матрицу от модели к миру.
• Некоторые сетки, такие как здания, ландшафт и другие элементы фона, полностью
статичны и уникальны. Вершины этих сеток часто выражаются в мировом
пространстве, поэтому их матрицы от модели к миру идентичны и их можно
игнорировать.

16.

Описание визуальных свойств поверхностей
• Чтобы правильно визуализировать и осветить поверхность, нам нужно описание ее
визуальных свойств. Свойства поверхности включают геометрическую информацию,
такую ​как направление нормали к поверхности в различных точках на поверхности. Они
также включают описание того, как свет должен взаимодействовать с поверхностью. Сюда
входят диффузный цвет, блеск / отражательная способность, шероховатость или текстура,
степень непрозрачности или прозрачности, показатель преломления и другие оптические
свойства. Свойства поверхности могут также включать спецификацию того, как поверхность
должна меняться с течением времени (например, как кожа анимированного персонажа
должна отслеживать суставы его скелета или как должна двигаться поверхность водоема).
• Ключом к рендерингу фотореалистичных изображений является правильный учет
поведения света при его взаимодействии с объектами сцены. Следовательно, инженеры по
рендерингу должны хорошо понимать, как работает свет, как он переносится через среду и
как виртуальная камера «воспринимает» его и преобразует в цвета, хранящиеся в пикселях
на экране.
• Свет - это электромагнитное излучение; он действует как волна и частица в разных
ситуациях. Цвет света определяется его интенсивностью I и длиной волны λ (или частотой f,
где f = 1 / λ). Видимая гамма варьируется от длины волны 740 нм (или частоты 430 ТГц) до
длины волны 380 нм (750 ТГц). Луч света может содержать одну чистую длину волны (т. е.
цвета радуги, также известные как спектральные цвета), или он может содержать смесь
различных длин волн. Мы можем нарисовать график, показывающий, сколько каждой
частоты содержит данный луч света, называемый спектральным графиком. Белый свет
содержит немного волн всех длин, поэтому его спектральный график будет выглядеть
примерно как прямоугольник, простирающийся по всей видимой полосе. Чистый зеленый
свет содержит только одну длину волны, поэтому его спектральный график будет выглядеть
как один бесконечно узкий всплеск на частоте около 570 ТГц.

17.

Взаимодействие свет-объект
• Свет может иметь много сложных взаимодействий с материей. Его поведение частично определяется средой, через
которую он движется, а частично формой и свойствами границ раздела между различными типами сред (воздух-твердое
тело, воздух-вода, жидкое стекло и т. Д.). С технической точки зрения поверхность - это просто интерфейс между двумя
разными типами носителей.
• Фактически, свет может делать только четыре вещи:
Впитаться.
Отражаться.
Он может проходить через объект, обычно преломляясь в процессе.
Он может дифрагировать при прохождении через очень узкие отверстия.
• Большинство фотореалистичных движков рендеринга учитывают первые три из этих характеристик; дифракция обычно не
принимается во внимание, потому что ее эффекты редко заметны в большинстве сцен.
• Только определенные длины волн могут поглощаться поверхностью, в то время как другие отражаются. Это то, что дает
начало нашему восприятию цвета объекта. Например, когда белый свет падает на красный объект, все длины волн, кроме
красного, поглощаются, поэтому объект кажется красным. Тот же эффект восприятия достигается, когда красный свет
падает на белый объект - наши глаза не видят разницы.
• Отражения могут быть диффузными, что означает, что входящий луч равномерно рассеивается во всех направлениях.
Отражения также могут быть зеркальными, что означает, что падающий световой луч будет отражаться напрямую или
распространяться только в узкий конус. Отражения также могут быть анизотропными, что означает, что способ отражения
света от поверхности изменяется в зависимости от угла обзора поверхности.
• Когда свет проходит через объем, он может рассеиваться (как в случае с полупрозрачными объектами), частично
поглощаться (как в случае цветного стекла) или преломляться (как происходит, когда свет проходит через призму). Углы
преломления могут быть разными для разных длин волн, что приводит к расширению спектра. Вот почему мы видим
радугу, когда свет проходит через капли дождя и стеклянные призмы. Свет также может проникать в полутвердую
поверхность, отражаться и выходить из нее в точке, отличной от той, в которой он попал на поверхность. Мы называем это
подповерхностным рассеянием, и это один из эффектов, придающих коже, воску и мрамору характерный теплый вид.

18.

Цветовые пространства и цветовые модели
• Цветовая модель - это трехмерная система координат, которая измеряет цвета. Цветовое
пространство - это особый стандарт того, как числовые цвета в конкретной цветовой модели
должны отображаться на цвета, воспринимаемые людьми в реальном мире. Цветовые
модели обычно трехмерны из-за трех типов цветовых сенсоров (колбочек) в наших глазах,
которые чувствительны к разным длинам волн света.
• Наиболее часто используемой цветовой моделью в компьютерной графике является модель
RGB. В этой модели цветовое пространство представлено единичным кубом, по осям
которого измеряются относительные интенсивности красного, зеленого и синего света.
Красный, зеленый и синий компоненты называются цветовыми каналами. В канонической
цветовой модели RGB каждый канал находится в диапазоне от нуля до единицы. Таким
образом, цвет (0, 0, 0) представляет черный, а (1, 1, 1) - белый.
• Когда цвета хранятся в растровом изображении, могут использоваться различные цветовые
форматы. Формат цвета частично определяется количеством бит на пиксель, которое он
занимает, и, более конкретно, количеством битов, используемых для представления
каждого цветового канала. Формат RGB888 использует восемь бит на канал, что в сумме
составляет 24 бита на пиксель. В этом формате каждый канал находится в диапазоне от 0 до
255, а не от нуля до единицы. RGB565 использует пять бит для красного и синего и шесть для
зеленого, что в сумме составляет 16 бит на пиксель. Формат с палитрой может использовать
восемь бит на пиксель для хранения индексов в цветовой палитре из 256 элементов, каждая
запись которой может храниться в RGB888 или другом подходящем формате.
• В 3D-рендеринге также используется ряд других цветовых моделей, например модель logLUV используется для освещения с расширенным динамическим диапазоном (HDR).

19.

Прозрачность и альфа канал
• Четвертый канал, называемый альфа, часто добавляется к цветовым
векторам RGB. Альфа измеряет непрозрачность объекта. При хранении в
пикселе изображения альфа представляет непрозрачность пикселя.
• Цветовые форматы RGB могут быть расширены за счет включения альфаканала, и в этом случае они называются цветовыми форматами RGBA или
ARGB. Например, RGBA8888 - это 32-битный формат с восемью битами для
красного, зеленого, синего и альфа-канала. RGBA5551 - это формат 16 бит на
пиксель с однобитным альфа-каналом; в этом формате цвета могут быть
либо полностью непрозрачными, либо полностью прозрачными.

20.

Атрибуты вершин
• Самый простой способ описать визуальные свойства поверхности - указать их в дискретных точках на
поверхности. Вершины сетки - это удобное место для хранения свойств поверхности, и в этом случае они
называются атрибутами вершин.
• Типичная треугольная сетка включает некоторые или все следующие атрибуты в каждой вершине. Можно
определять любые дополнительные атрибуты, которые могут потребоваться для достижения желаемого
визуального эффекта на экране.
• Вектор положения (pi = [pix piy piz]). Это трехмерное положение i-й вершины в сетке. Обычно он задается в пространстве
координат, локальном для объекта, известном как пространство модели.
• Вершина нормальна (ni = [nix niy niz]). Этот вектор определяет нормаль единичной поверхности в позиции вершины i. Он
используется в расчетах динамического освещения для каждой вершины.
• Касательная к вершинам (ti = [tix tiy tiz]) и битангенс (bi = [bix biy biz]). Эти два единичных вектора лежат перпендикулярно друг
другу и нормали к вершине ni. Вместе три вектора ni, ti и bi определяют набор координатных осей, известный как
касательное пространство. Это пространство используется для различных вычислений освещения на каждый пиксель, таких
как отображение нормалей и отображение окружающей среды.
• Рассеянный цвет (di = [diR diG diB diA]). Этот четырехэлементный вектор описывает диффузный цвет поверхности, выраженный
в цветовом пространстве RGB. Обычно он также включает спецификацию непрозрачности альфа (A) поверхности в
положении вершины. Этот цвет можно рассчитать в автономном режиме (статическое освещение) или во время
выполнения (динамическое освещение).
• Цвет отражения (si = [siR siG siB siA]). Эта величина описывает цвет зеркального блика, который должен появиться, когда свет
отражается непосредственно от блестящей поверхности на плоскость изображения виртуальной камеры.
• Координаты текстуры (uij = [uij vij]). Координаты текстуры позволяют двухмерному растровому изображению быть «сжатым»
на поверхности сетки - процесс, известный как наложение текстуры. Координата текстуры (u, v) описывает положение
конкретной вершины в двумерном нормализованном координатном пространстве текстуры. Треугольник можно
сопоставить с более чем одной текстурой; следовательно, он может иметь более одного набора координат текстуры (индекс
j).
• Веса скиннинга (kij = [kij wij]). В скелетной анимации вершины сетки прикрепляются к отдельным суставам сочлененного
скелета. В этом случае каждая вершина должна указывать, к какому стыку она прикреплена с помощью индекса k. На
вершину могут влиять несколько суставов, и в этом случае окончательное положение вершины становится
средневзвешенным из этих влияний. Таким образом, вес влияния каждого сустава обозначается весовым коэффициентом w.
В общем, вершина i может иметь несколько совместных влияний j, каждое из которых обозначается парой чисел (kij, wij).

21.

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

22.

Нормали вершин и сглаживание
• Освещение - это процесс вычисления цвета объекта в различных точках на его
поверхности на основе визуальных свойств поверхности и свойств падающего на
нее света. Самый простой способ осветить сетку - это рассчитать цвет поверхности
для каждой вершины. Другими словами, мы используем свойства поверхности и
падающего света для вычисления диффузного цвета каждой вершины (di). Эти
цвета вершин затем интерполируются по треугольникам сетки с помощью
затенением Гуро.
• Чтобы определить, как луч света будет отражаться от точки на поверхности,
большинство моделей освещения используют вектор, перпендикулярный
поверхности в точке падения светового луча. Поскольку мы выполняем расчеты
освещения для каждой вершины, мы можем использовать для этой цели
вершинную нормаль ni. Следовательно, направление нормалей вершин сетки
может иметь значительное влияние на окончательный вид сетки.
• В качестве примера рассмотрим высокую тонкую четырехстороннюю коробку. Если
мы хотим, чтобы блок выглядел с острыми краями, мы можем указать нормали
вершин, перпендикулярные граням блока. Когда мы освещаем каждый
треугольник, мы встретим один и тот же вектор нормали во всех трех вершинах,
поэтому результирующее освещение будет выглядеть плоским и резко изменится в
углах прямоугольника, как это делают нормали вершин.
• Мы также можем сделать ту же сетку блока немного похожей на гладкий цилиндр,
указав нормали вершин, которые направлены радиально наружу от центральной
линии блока. В этом случае вершины каждого треугольника будут иметь разные
нормали вершин, что заставит нас вычислять разные цвета в каждой вершине.
Затенение по Гуро будет плавно интерполировать эти цвета вершин, в результате
чего освещение будет плавно меняться по поверхности.

23.

Текстуры
• Когда треугольники относительно большие, задание свойств поверхности
для каждой вершины может быть слишком грубым. Линейная интерполяция
атрибутов - это не всегда то, что мы хотим, и она может привести к
нежелательным визуальным аномалиям.
• В качестве примера рассмотрим проблему рендеринга ярких зеркальных
бликов, которые могут возникать, когда свет падает на глянцевый объект.
Если сетка сильно мозаична, освещение для каждой вершины в сочетании с
затенением по Гуро может дать достаточно хорошие результаты. Однако,
когда треугольники слишком большие, ошибки, возникающие из-за
линейной интерполяции бликов, могут стать очевидными.

24.

Текстуры
• Чтобы преодолеть ограничения атрибутов поверхности для каждой
вершины, используются растровые изображения, известные как карты
текстуры. Текстура часто содержит информацию о цвете и обычно
проецируется на треугольники сетки. Но текстура может содержать другие
типы визуальных свойств поверхности, а также цвета. При этом не нужно
проецировать текстуру на сетку - например, текстуру можно использовать
как отдельную таблицу данных. Отдельные элементы изображения текстуры
называются текселями, чтобы отличать их от пикселей на экране.
• На некотором графическом оборудовании размеры растрового изображения
текстуры ограничены степенью двойки. Типичные размеры текстур
включают 256 × 256, 512 × 512, 1024 × 1024 и 2048 × 2048, хотя текстуры
могут иметь любой размер на большинстве аппаратных средств при
условии, что текстура помещается в видеопамять. Некоторое графическое
оборудование накладывает дополнительные ограничения, например,
требует, чтобы текстуры были квадратными, или снимает некоторые
ограничения, такие как отсутствие ограничения размеров текстуры равными
степеням двойки.

25.

Виды и кординатытекстур
• Наиболее распространенный тип текстуры известен как диффузная карта или карта альбедо.
Он описывает диффузный цвет поверхности в каждом текселе на поверхности и действует
как краска на поверхности.
• Фактически мы можем использовать текстурные карты для хранения любой информации,
которая понадобится в расчетах освещения. Например, одномерная текстура может
использоваться для хранения выборочных значений сложной математической функции,
таблицы преобразования цвета в цвет или любой другой таблицы поиска (LUT).
• Рассмотрим, проецирование двухмерной текстуры на сетку. Для этого определяем
двумерную систему координат, известную как пространство текстуры. Координата текстуры
обычно представлена нормализованной парой чисел, обозначенной (u, v). Эти координаты
всегда находятся в диапазоне от (0, 0) в нижнем левом углу текстуры до (1, 1) в правом
верхнем углу. Использование таких нормализованных координат позволяет использовать
одну и ту же систему координат независимо от размеров текстуры.
• Чтобы отобразить треугольник на 2D-текстуру, указываем пару координат текстуры (ui, vi) в
каждой вершине i. Это эффективно отображает треугольник на плоскости изображения в
пространстве текстуры.

26.

Режимы адресации текстур
• Координатам текстуры разрешено выходить за пределы
диапазона [0, 1]. Графическое оборудование может
обрабатывать координаты текстуры, выходящие за
пределы допустимого диапазона, любым из следующих
способов. Они известны как режимы адресации текстуры;
какой режим используется, зависит от пользователя.
• Wrap. В этом режиме текстура повторяется снова и снова во
всех направлениях. Все координаты текстуры вида (ju, kv)
эквивалентны координате (u, v), где j и k - произвольные целые
числа.
• Mirroring. Этот режим действует как режим обтекания, за
исключением того, что текстура зеркально отражается вокруг
оси v для нечетных целых кратных u и вокруг оси u для
нечетных целых кратных v.
• Clamp (зажим). В этом режиме цвета текселей по внешнему
краю текстуры расширяются, когда координаты текстуры
выходят за пределы нормального диапазона.
• Цвет границы. В этом режиме для области за пределами
диапазона координат текстуры [0, 1] используется
произвольный заданный пользователем цвет.

27.

Фильтрация текстур
• При рендеринге пикселя текстурированного треугольника графическое оборудование
делает выборку карты текстуры, учитывая, где центр пикселя попадает в пространство
текстуры. Обычно нет четкого однозначного сопоставления между текселями и пикселями, а
центры пикселей могут попадать в любое место в пространстве текстуры, в том числе
непосредственно на границе между двумя или более текселями. Следовательно,
графическому оборудованию обычно приходится отбирать более одного текселя и
смешивать полученные цвета, чтобы получить фактический выбранный цвет текселя. Это
называется фильтрацией текстур.
• Большинство видеокарт поддерживают следующие виды фильтрации текстур:
• Ближайший сосед. В этом грубом подходе выбирается тексель, центр которого ближе всего к центру
пикселя. Когда включено MIP-отображение, выбирается уровень MIP, разрешение которого ближе
всего к идеальному теоретическому разрешению, которое необходимо для достижения плотности
текселей в пространстве экрана, равной единице, но выше его.
• Билинейный. В этом подходе производится выборка четырех текселей, окружающих центр пикселя, и
результирующий цвет является средневзвешенным их цветов (где веса основаны на расстояниях
центров текселей от центра пикселя). Когда MIP-отображение включено, выбирается ближайший
уровень MIP.
• Трехлинейный. В этом подходе билинейная фильтрация используется на каждом из двух ближайших
MIP-уровней (один с более высоким разрешением, чем идеальное, а другой с более низким
разрешением), а затем эти результаты линейно интерполируются. Это устраняет резкие визуальные
границы между уровнями MIP на экране.
• Анизотропный. И билинейная, и трилинейная фильтрующая выборка 2 × 2 квадратных блока текселей.
Это правильно, когда текстурированная поверхность просматривается в лоб, но неправильно, когда
поверхность находится под косым углом относительно плоскости виртуального экрана. Анизотропная
фильтрация сэмплирует тексели в трапециевидной области, соответствующей углу обзора, тем самым
повышая качество текстурированных поверхностей при просмотре под углом.

28.

Материалы
• Материал - это полное описание визуальных свойств сетки. Это включает в
себя спецификацию текстур, которые сопоставлены с его поверхностью, а
также различные свойства более высокого уровня, такие как программы
шейдеров, которые следует использовать при рендеринге сетки, входные
параметры для этих шейдеров и другие параметры, которые управляют
функциональностью само аппаратное ускорение графики.
• Хотя технически это часть описания свойств поверхности, атрибуты вершин не
считаются частью материала. Однако они идут вместе с сеткой, поэтому пара
сетка-материал содержит всю информацию, которая нужна для рендеринга
объекта. Пары сетка-материал иногда называют пакетами рендеринга, а
термин «геометрический примитив» иногда расширяется, чтобы охватить
также пары сетка-материал.
• В 3D-модели обычно используется более одного материала. Например,
модель человека будет иметь отдельные материалы для волос, кожи, глаз,
зубов и различных видов одежды. По этой причине сетка обычно делится на
подсетки, каждая из которых отображается на один материал.

29.

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

30.

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

31.

Модель освещения Фонга
• Наиболее распространенной моделью местного освещения, используемой
движками рендеринга игр, является модель отражения Фонга. Он моделирует свет,
отраженный от поверхности, как сумму трех различных членов:
• Окружающий (ambient) термин моделирует общий уровень освещения сцены. Это грубое
приближение количества отраженного света, присутствующего в сцене. Непрямые отскоки это то, что заставляет области в тени не казаться полностью черными.
• Термин «диффузный» (diffuse) учитывает свет, который равномерно отражается во всех
направлениях от каждого прямого источника света. Это хорошее приближение к тому, как
настоящий свет отражается от матовой поверхности, такой как деревянный брусок или кусок
ткани.
• Термин «зеркальное отражение» (specular) моделирует яркие блики, которые мы иногда
видим при просмотре глянцевой поверхности. Зеркальные блики возникают, когда угол
обзора близко совмещен с траекторией прямого отражения от источника света.

32.

Моделирование источников света
• Помимо моделирования взаимодействия света с поверхностями, нам нужно описать
источники света в сцене. Как и во всем, что происходит при визуализации в реальном
времени, мы аппроксимируем реальные источники света, используя различные
упрощенные модели.
• Статичное освещение. Самый быстрый расчет освещения - это тот, который вы вообще не
выполняете. Поэтому освещение по возможности выполняется в автономном режиме. Мы
можем предварительно рассчитать отражение Фонга в вершинах меша и сохранить
результаты как диффузные атрибуты цвета вершин. Мы также можем предварительно
рассчитать освещение для каждого пикселя и сохранить результаты в виде текстурной
карты, известной как карта освещения. Во время выполнения текстура карты освещения
проецируется на объекты сцены, чтобы определить влияние света на них.
• Освещение окружения. Окружающий свет соответствует термину в модели освещения
Фонга. Этот термин не зависит от угла обзора и не имеет определенного направления.
Таким образом, окружающий свет представлен одним цветом, соответствующим параметру
цвета A в уравнении Фонга (который масштабируется с помощью коэффициента отражения
поверхности kA во время работы). Интенсивность и цвет окружающего света могут
варьироваться от региона к региону в игровом мире.
• Направленный свет. Направленный свет моделирует источник света, который фактически
находится на бесконечном расстоянии от освещаемой поверхности - например, солнце.
Лучи, исходящие от направленного света, параллельны, а сам свет не имеет определенного
места в игровом мире. Поэтому направленный свет моделируется как светлый цвет C и
вектор направления L.

33.

Моделирование источников света
• Точечный свет (всенаправленный свет) з равномерно излучается во всех направлениях. Обычно
считается, что интенсивность света падает пропорционально квадрату расстояния от источника
света, а за пределами заранее определенного максимального радиуса его эффекты просто
ограничиваются нулем. Точечный свет моделируется как положение источника света P, цвет /
интенсивность источника C и максимальный радиус rmax. Механизм визуализации применяет
эффекты точечного света только к тем поверхностям, которые попадают в его сферу влияния
(значительная оптимизация).
• Точечный свет действует как точечный свет, лучи которого ограничиваются конусообразной
областью, как фонарик. Обычно указываются два конуса с внутренним и внешним углом. Внутри
внутреннего конуса считается, что свет имеет полную силу.
• Свет от площади. Настоящий источник света почти всегда имеет ненулевую площадь - это то, что
дает начало тени и полутени в тени, которую он отбрасывает. Вместо того, чтобы явно
моделировать освещение площади, часто используют различные «трюки» для описания
поведения. Например, чтобы имитировать полутень, можно отбросить несколько теней и
смешать результаты или каким-то образом размыть края резкой тени.
• Эмиссионные объекты. Некоторые поверхности в сцене сами являются источниками света.
Примеры включают фонари, светящиеся хрустальные шары, пламя ракетного двигателя и так
далее. Светящиеся поверхности можно моделировать с помощью карты излучающей текстуры,
цвета которой всегда имеют полную интенсивность, независимо от окружающего освещения.
Некоторые виды излучающих объектов визуализируются путем объединения нескольких
методов. Например, фонарик может быть визуализирован с использованием излучающей
текстуры, когда вы смотрите прямо на луч, расположенного в одном месте прожектора, который
излучает свет на сцену, желтой полупрозрачной сетки для имитации светового конуса, некоторой
части, обращенной к камере. прозрачные карты для имитации бликов линз (или эффекта
цветения, если освещение с расширенным динамическим диапазоном поддерживается
движком), и спроецированная текстура для создания каустического эффекта, который фонарик
оказывает на освещаемые им поверхности.

34.

Виртуальная камера
• В компьютерной графике виртуальная камера намного проще реальной
камеры или человеческого глаза. Мы рассматриваем камеру как
идеальную точку фокусировки с прямоугольной виртуальной
воспринимающей поверхностью, называемой прямоугольником
изображения, плавающей на некотором небольшом расстоянии перед
ней. Прямоугольник изображения состоит из сетки квадратных или
прямоугольных виртуальных световых датчиков, каждый из которых
соответствует одному пикселю на экране. Рендеринг можно
рассматривать как процесс определения того, какой цвет и интенсивность
света будут регистрироваться каждым из этих виртуальных датчиков.
• Чтобы визуализировать 3D-сцену на плоскости 2D-изображения, мы
используем специальный вид преобразования, известный как проекция.
Перспективная проекция является наиболее распространенной проекцией
в компьютерной графике, поскольку она имитирует виды изображений,
создаваемых обычной камерой. При такой проекции объекты кажутся тем
меньше, чем дальше они находятся от камеры - эффект, известный как
сокращение перспективы.
• Ортографическая проекция с сохранением длины также используется в
некоторых играх, в первую очередь для визуализации видов в плане
(например, спереди, сбоку и сверху) 3D-моделей или игровых уровней в
целях редактирования, а также для наложения 2D-графики на экран для
отображения на экране. и тому подобное.

35.

Буффер кадра
• Окончательное визуализированное изображение сохраняется в растровом цветовом буфере,
известном как буфер кадра. Цвета пикселей обычно хранятся в формате RGBA8888, хотя
другие форматы кадрового буфера также поддерживаются большинством видеокарт.
Некоторые распространенные форматы включают RGB565, RGB5551 и один или несколько
режимов палитры.
• Аппаратное обеспечение дисплея считывает содержимое буфера кадра с периодической
частотой 60 Гц для телевизоров NTSC, используемых в Северной Америке и Японии, или 50 Гц
для телевизоров PAL/SECAM, который используется в Европе и во многих других странах мира.
Механизмы рендеринга обычно поддерживают как минимум два буфера кадра. Пока один
сканируется дисплеем, другой может обновляться механизмом визуализации. Это известно
как двойная буферизация. Меняя местами или «переворачивая» два буфера в течение
интервала вертикального гашения, двойная буферизация гарантирует, что оборудование
дисплея всегда сканирует весь буфер кадра. Это позволяет избежать эффекта дрожания,
известного как разрыв, при котором в верхней части экрана отображается только что
отрендеренное изображение, а в нижней - остатки изображения из предыдущего кадра.
• Некоторые механизмы используют три буфера кадра - метод, хорошо известный как тройная
буферизация. Это сделано для того, чтобы механизм рендеринга мог начать работу над
следующим кадром, даже когда предыдущий кадр все еще сканируется аппаратным
обеспечением дисплея. Например, аппаратное обеспечение может по-прежнему сканировать
буфер A, когда движок завершает рисование буфера B. С тройной буферизацией он может
продолжить рендеринг нового кадра в буфер C, а не бездействовать, пока он ожидает, пока
аппаратное обеспечение дисплея завершит сканирование. буфер А.
English     Русский Rules