Введение

Подполе компьютерной графики

Компьютерная графика в реальном времени, или рендеринг в реальном времени, – это подполе компьютерной графики, специализирующееся на создании и анализе изображений в реальном времени. Этот термин может относиться к чему угодно, от рендеринга графического пользовательского интерфейса приложения (GUI) до анализа изображений в режиме реального времени, но чаще всего он используется в контексте интерактивной 3D-компьютерной графики, как правило, с использованием графического процессора (GPU). Примером этой концепции является видеоигра, которая быстро отрисовывает изменяющиеся 3D-окружения, создавая иллюзию движения. Компьютеры способны генерировать 2D-изображения, такие как простые линии, изображения и полигоны, в реальном времени с момента своего изобретения. Однако быстрая отрисовка детализированных 3D-объектов представляет собой сложную задачу для традиционных систем, основанных на архитектуре фон Неймана. Одним из ранних решений этой проблемы было использование спрайтов – 2D-изображений, имитирующих 3D-графику. В настоящее время существуют различные методы рендеринга, такие как трассировка лучей и растрирование. Благодаря этим методам и современному оборудованию компьютеры теперь могут отрисовывать изображения достаточно быстро, чтобы создавать иллюзию движения, одновременно обрабатывая пользовательский ввод. Это позволяет пользователю взаимодействовать с отрисовываемыми изображениями в реальном времени, получая интерактивный опыт.

Принципы 3D-компьютерной графики в реальном времени

Цель компьютерной графики — генерировать компьютерные изображения, или кадры, используя определенные желаемые метрики. Одной из таких метрик является количество кадров, генерируемых в секунду. Компьютерные графические системы реального времени отличаются от традиционных (то есть, не работающих в реальном времени) систем рендеринга тем, что традиционные системы обычно используют трассировку лучей. В этом процессе миллионы или миллиарды лучей прослеживаются от камеры к сцене для детальной отрисовки — эта ресурсоемкая операция может занимать часы или дни на отрисовку одного кадра. Системы компьютерной графики реального времени должны отрисовывать каждое изображение менее чем за 1/30 секунды. Трассировка лучей слишком медленна для таких систем; вместо этого они используют технику растрирования треугольников с Z-буфером. В этой технике каждый объект разбивается на отдельные примитивы, как правило, треугольники. Каждый треугольник позиционируется, вращается и масштабируется на экране, а аппаратный растризатор (или программный эмулятор) генерирует пиксели внутри каждого треугольника. Затем эти треугольники разбиваются на атомарные единицы, называемые фрагментами, которые пригодны для отображения на экране. Фрагменты отрисовываются на экране с использованием цвета, который вычисляется в несколько этапов. Например, текстура может быть использована для "окрашивания" треугольника на основе сохраненного изображения, а затем карта теней может изменять цвета этого треугольника в зависимости от видимости источников света.

Графика видеоигр

Графика в реальном времени оптимизирует качество изображения с учетом временных и аппаратных ограничений. Графические процессоры (GPU) и другие достижения повысили качество изображения, которое может быть создано в режиме реального времени. GPU способны обрабатывать миллионы треугольников в кадре, а современное оборудование класса DirectX/OpenGL позволяет генерировать сложные эффекты, такие как объемные тени, размытие в движении и генерация треугольников, в реальном времени. Развитие графики в реальном времени проявляется в постепенном улучшении графики непосредственно в игровом процессе по сравнению с предварительно отрисованными роликами, традиционно используемыми в видеоиграх. Ролики обычно отрисовываются в реальном времени и могут быть интерактивными. Хотя разрыв в качестве между графикой в реальном времени и традиционной офлайн-графикой сокращается, офлайн-рендеринг остается значительно более точным.

Преимущества

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

Трубопровод рендеринга

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

Архитектура

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

Стадия применения

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

Геометрический этап

Этап геометрии обрабатывает многоугольники и вершины для вычисления того, что отрисовывать, как отрисовывать и где отрисовывать. Как правило, эти операции выполняются специализированным аппаратным обеспечением или графическими процессорами (GPU). Различия в графическом оборудовании означают, что "этап геометрии" может фактически быть реализован как несколько последовательных этапов.

Трансформация модели и изображения

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

Освещение

Для того, чтобы придать модели более реалистичный вид, во время преобразования обычно устанавливаются один или несколько источников света. Однако, этого этапа нельзя достичь без предварительного преобразования 3D-сцены в пространство обзора. В пространстве обзора наблюдатель (камера) обычно помещается в начало координат. Если используется правосторонняя система координат (которая считается стандартной), наблюдатель смотрит в направлении отрицательной оси Z, ось Y направлена вверх, а ось X – вправо.

Проекция

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

Отрезка

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

Картировка экрана

Целью преобразования сцены является определение координат примитивов на этапе отсечения.

Растеризация

Этап растеризации применяет цвет и преобразует графические элементы в пиксели или элементы изображения.