От модели к пикселю
Привычные термины компьютерной графики легко пропустить мимо ушей, потому что у каждого из них есть и обычное бытовое значение. В этой области их смысл гораздо точнее.
Пиксель, примитив, изображение
В цифровой обработке изображений пиксель (от англ. picture element, элемент изображения) это одна точка растрового изображения. Пиксели расположены на регулярной двумерной сетке, и их часто изображают точками или квадратиками. Каждый пиксель это отсчёт, взятый из исходного изображения. Чем больше отсчётов, тем точнее обычно передан оригинал. Яркость пикселей бывает разной. В цветной системе у пикселя обычно три субпикселя: красный, зелёный и синий. Если достаточно сильно увеличить цифровую фотографию, квадраты перестанут изображать плавный переход тонов. Это не недостаток дисплея. Это само представление изображения, на которое смотрят с неподходящего расстояния.
Примитив это базовый элемент, из которого графическая система собирает более сложное изображение или модель. В двумерной игре примитивами могут быть спрайты и карты символов. В САПР это геометрические примитивы, которые предлагает программа моделирования. В трёхмерном рендеринге это полигоны, чаще всего треугольники. Оборудование может поддерживать примитив напрямую, потому что аппаратная отрисовка быстрее, чем каждый раз строить его программно. А может быть, примитив лишь удобство, которое даёт приложение, а оборудование работает с чем-то более простым.
Цифровое изображение бывает векторным или растровым. Растровые встречаются чаще. Изображение может быть получено с камеры, с оптического прибора или в результате расчёта, в котором объектив вообще не участвовал. Когда способ представления выбран, изображение ещё нужно превратить в свет на экране.
Рендеринг
Рендеринг это получение двумерного изображения из трёхмерной модели с помощью компьютерной программы. Файл сцены содержит объекты, описанные на определённом языке или в определённой структуре данных: геометрию, точку обзора, текстуры, освещение и затенение, то есть описание виртуальной сцены. Эти данные передают программе рендеринга, и на выходе получается цифровое изображение, растровый файл. Рендерер обычно встроен в графическую программу. Некоторые подключаются как плагины. Некоторые существуют как отдельные программы. Сам термин появился по аналогии с художественной «подачей» сцены (rendering), то есть изображением, сделанным по описанию, а не с натуры.
Технические методы различаются, но общая задача одна: есть трёхмерное описание, и нужна двумерная картинка. Шаги на этом пути, которые выполняет устройство вроде GPU, называют графическим конвейером. GPU это устройство, которое помогает центральному процессору с расчётами. Если сцена должна выглядеть достаточно реалистично и предсказуемо при виртуальном освещении, программа должна учитывать уравнение рендеринга. Это уравнение описывает не все световые явления. Это общая модель освещения для компьютерных изображений, а не полная теория оптики. «Рендерингом» также называют процесс, когда программа видеомонтажа просчитывает эффекты и записывает готовый файл. Слово то же, но задача уже: вместо геометрии там уже есть последовательность кадров, и программа их совмещает.
Проекция, лучи, затенение
Трёхмерная проекция переносит трёхмерные точки на двумерную плоскость. Большинство современных дисплеев плоские, так что такая проекция встречается повсюду. Приложения с трёхмерной графикой реального времени обычно выполняют её с помощью растеризации: спроецированный полигон покрывает какие-то пиксели, и эти пиксели закрашивают. Растеризация для каждого полигона выясняет, какие пиксели он покрывает. Трассировка лучей для каждого пикселя выясняет, какой путь проделал свет.
Трассировка лучей относится к алгоритмам, которые работают в порядке изображения (image-order). Она строит картинку, прослеживая путь света через пиксели плоскости изображения. С её помощью можно добиться высокого фотореализма, обычно более высокого, чем при обычном построчном рендеринге, но и обходится она дороже. Долгое время из-за этой цены её не использовали на интерактивных машинах. Цена изменилась. Идея осталась прежней.
Затенение это способ передать глубину за счёт разной степени темноты. Чертёжникам и рисовальщикам этот приём был известен давно: материал накладывают плотнее или более тёмным цветом там, где форма отворачивается от света, и легче там, где она обращена к свету. Один из способов это перекрёстная штриховка: перпендикулярные линии образуют сетку и ложатся гуще там, где участок должен казаться темнее. В компьютерной графике значение слова расширилось. Теперь оно означает ещё и применение шейдеров, небольших программ, которые определяют цвет каждого отсчёта. Шейдер может имитировать перекрёстную штриховку. А может и то, что не под силу никакому перу, потому что нормаль поверхности и источники света известны ему в виде чисел.
Текстура, алиасинг, объём
Наложение текстур добавляет созданной графике или трёхмерной модели детали, фактуру поверхности или цвет. Эдвин Кэтмелл применил его к трёхмерной графике в 1974 году. Текстуру накладывают на поверхность фигуры или полигона. Обычно это сравнивают с узорной бумагой, которой обёрнута простая белая коробка. Сравнение хорошее, но в одном месте оно не работает: бумага мнётся, а текстуре можно запретить сминаться. Мультитекстурирование накладывает на полигон сразу несколько текстур. Процедурные текстуры получают, настраивая параметры алгоритма. Растровые текстуры рисуют в графическом редакторе или получают с камеры. Чтобы наложить текстуру на поверхность полигона, обычно нужна UV-развёртка, то есть ручная раскладка текстурных координат. У поверхностей NURBS есть собственная параметризация, которая может служить такими координатами без отдельной развёртки.
Сюда же относятся карты нормалей и карты рельефа, которые имитируют высоту, карты бликов, которые имитируют блеск, и карты окружения, которые имитируют зеркало. Ни одна из них не отменяет того, что под ними может быть грубая сетка. Они меняют лишь то, что расчёт освещения «думает» об этой поверхности.
Когда объект, не зависящий от разрешения, например трёхмерную модель, выводят на растровое устройство вроде ЖК-экрана или кинескопа, возникает алиасинг. Искажения появляются в основном вдоль геометрических краёв и на границах мелких деталей текстуры. В обиходе их называют «лесенками». Методы сглаживания их уменьшают. Глазу становится легче, но расчёт требует ресурсов. Одно из семейств таких методов это суперсэмплинг. Выбирая настройку, художник выбирает компромисс между качеством и затратами. Растровая текстура, подготовленная в одном разрешении и показанная в другом, например на модели вдали от камеры, даст алиасинг. Процедурная текстура может давать алиасинг при любом разрешении, потому что у неё нет собственных пикселей, пока из неё не взяли отсчёты. Обычные средства в случае текстур это MIP-текстурирование и фильтрация текстур. Они не превращают задачу в философскую. Они просто подгоняют отсчёт под размер, в котором его выводят.
Объёмный рендеринг показывает двумерную проекцию трёхмерного набора отсчётов. Типичный пример это стопка срезов, полученных на компьютерном или магнитно-резонансном томографе с постоянным шагом, причём каждый срез сам по себе регулярная сетка пикселей. Каждый элемент объёма, или воксель, хранит одно значение, взятое из его ближайшей окрестности. Затем цвет можно назначить по типу ткани, чтобы кость, мышцы и сосуды выглядели на проекции по-разному. Это тоже рендеринг, но это не та же задача, что рендеринг смоделированного персонажа. В данных может вообще не быть поверхности, пока рендерер не решит, где она должна появиться.
Трёхмерная компьютерная графика начинается там, где примитивы становятся моделью твёрдого тела, а не плоским знаком. Словарь остаётся тем же. Меняется объём данных, который за ним стоит.
