Реальная компьютерная графика или рендеринг в реальном времени — это подраздел компьютерной графики, ориентированный на создание и анализ изображений в реальном времени . Термин может относиться к чему угодно, от рендеринга графического пользовательского интерфейса приложения ( GUI ) до анализа изображений в реальном времени , но чаще всего используется в отношении интерактивной 3D-компьютерной графики , как правило, с использованием графического процессора (GPU). Одним из примеров этой концепции является видеоигра , которая быстро рендерит изменяющиеся 3D-среды для создания иллюзии движения.
Компьютеры способны генерировать 2D-изображения, такие как простые линии, изображения и многоугольники в реальном времени с момента их изобретения. Однако быстрая визуализация детализированных 3D-объектов является сложной задачей для традиционных систем на основе архитектуры фон Неймана . Ранним решением этой проблемы было использование спрайтов , 2D-изображений , которые могли имитировать 3D-графику.
Сейчас существуют различные методы рендеринга , такие как трассировка лучей и растеризация . Используя эти методы и передовое оборудование, компьютеры теперь могут рендерить изображения достаточно быстро, чтобы создать иллюзию движения, одновременно принимая пользовательский ввод. Это означает, что пользователь может реагировать на рендеринг изображений в реальном времени, создавая интерактивный опыт.
Целью компьютерной графики является создание компьютерных изображений или кадров с использованием определенных желаемых метрик. Одной из таких метрик является количество кадров, сгенерированных за заданную секунду. Системы компьютерной графики в реальном времени отличаются от традиционных (т. е. не в реальном времени) систем рендеринга тем, что не в реальном времени графика обычно полагается на трассировку лучей . В этом процессе миллионы или миллиарды лучей трассируются от камеры к миру для детального рендеринга — эта дорогостоящая операция может занять часы или дни для рендеринга одного кадра.
Системы графики в реальном времени должны визуализировать каждое изображение менее чем за 1/30 секунды. Трассировка лучей слишком медленная для этих систем; вместо этого они используют технику растеризации треугольников z-буфера . В этой технике каждый объект разлагается на отдельные примитивы, обычно треугольники. Каждый треугольник позиционируется , поворачивается и масштабируется на экране, а аппаратное обеспечение растеризатора (или программный эмулятор) генерирует пиксели внутри каждого треугольника. Затем эти треугольники разлагаются на атомарные единицы, называемые фрагментами , которые подходят для отображения на экране дисплея . Фрагменты рисуются на экране с использованием цвета, который вычисляется в несколько этапов. Например, текстуру можно использовать для «рисования» треугольника на основе сохраненного изображения, а затем теневое отображение может изменить цвета этого треугольника на основе линии прямой видимости до источников света.
Графика в реальном времени оптимизирует качество изображения с учетом временных и аппаратных ограничений. Графические процессоры и другие достижения повысили качество изображения, которое может создавать графика в реальном времени. Графические процессоры способны обрабатывать миллионы треугольников на кадр, а современное оборудование класса DirectX / OpenGL способно генерировать сложные эффекты, такие как теневые объемы , размытие движения и генерация треугольников , в реальном времени. Развитие графики в реальном времени подтверждается прогрессивными улучшениями между фактической графикой игрового процесса и предварительно отрендеренными катсценами, традиционно встречающимися в видеоиграх. [1] Катсцены обычно отрисовываются в реальном времени и могут быть интерактивными . [2] Хотя разрыв в качестве между графикой в реальном времени и традиционной офлайн-графикой сокращается, офлайн-рендеринг остается гораздо более точным.
Графика в реальном времени обычно используется, когда интерактивность (например, обратная связь с игроком) имеет решающее значение. Когда в фильмах используется графика в реальном времени, режиссер полностью контролирует то, что должно быть нарисовано в каждом кадре, что иногда может потребовать длительного принятия решений. В принятии этих решений обычно участвуют команды людей.
В компьютерной графике реального времени пользователь обычно управляет устройством ввода, чтобы повлиять на то, что будет нарисовано на дисплее. Например, когда пользователь хочет переместить персонажа на экране, система обновляет положение персонажа перед рисованием следующего кадра. Обычно время отклика дисплея намного медленнее, чем у устройства ввода — это оправдано огромной разницей между (быстрым) временем отклика движения человека и (медленной) перспективной скоростью зрительной системы человека . Эта разница имеет и другие эффекты: поскольку устройства ввода должны быть очень быстрыми, чтобы успевать за реакцией человека на движение, достижения в устройствах ввода (например, текущий [ когда? ] пульт Wii) обычно требуют гораздо больше времени для достижения, чем сопоставимые достижения в устройствах отображения.
Другим важным фактором, контролирующим компьютерную графику в реальном времени, является сочетание физики и анимации . Эти методы в значительной степени диктуют, что должно быть нарисовано на экране, особенно где рисовать объекты на сцене. Эти методы помогают реалистично имитировать поведение реального мира ( временное измерение , а не пространственные измерения ), добавляя компьютерной графике степени реализма.
Предварительный просмотр в реальном времени с помощью графического программного обеспечения , особенно при настройке эффектов освещения , может увеличить скорость работы. [3] Некоторые настройки параметров в программном обеспечении для генерации фракталов могут быть выполнены во время просмотра изменений изображения в реальном времени.
Конвейер рендеринга графики («конвейер рендеринга» или просто «конвейер») является основой графики в реальном времени. [4] Его основная функция — рендеринг двухмерного изображения относительно виртуальной камеры, трехмерных объектов (объекта, имеющего ширину, длину и глубину), источников света, моделей освещения, текстур и многого другого.
Архитектуру конвейера рендеринга в реальном времени можно разделить на концептуальные этапы: приложение, геометрия и растеризация .
Этап приложения отвечает за генерацию «сцен» или 3D-настроек, которые отображаются на 2D-дисплее. Этот этап реализован в программном обеспечении, которое разработчики оптимизируют для производительности. Этот этап может выполнять обработку, такую как обнаружение столкновений , методы ускорения, анимацию и силовую обратную связь, в дополнение к обработке пользовательского ввода.
Обнаружение столкновений — пример операции, которая будет выполняться на этапе приложения. Обнаружение столкновений использует алгоритмы для обнаружения и реагирования на столкновения между (виртуальными) объектами. Например, приложение может вычислять новые позиции для сталкивающихся объектов и предоставлять обратную связь через устройство обратной связи по силе, такое как вибрирующий игровой контроллер.
Этап приложения также подготавливает графические данные для следующего этапа. Это включает анимацию текстур, анимацию 3D-моделей, анимацию с помощью преобразований и морфинг геометрии. Наконец, он создает примитивы (точки, линии и треугольники) на основе информации о сцене и передает эти примитивы на этап геометрии конвейера.
Стадия геометрии манипулирует полигонами и вершинами, чтобы вычислить, что рисовать, как рисовать и где рисовать. Обычно эти операции выполняются специализированным оборудованием или графическими процессорами. [5] Различия в графическом оборудовании означают, что «стадия геометрии» может быть фактически реализована как несколько последовательных стадий.
Перед тем, как окончательная модель будет отображена на устройстве вывода, она преобразуется в несколько пространств или систем координат . Преобразования перемещают и манипулируют объектами, изменяя их вершины. Трансформация — это общий термин для четырех конкретных способов, которые манипулируют формой или положением точки, линии или фигуры.
Чтобы придать модели более реалистичный вид, во время преобразования обычно устанавливаются один или несколько источников света. Однако этот этап не может быть достигнут без предварительного преобразования 3D-сцены в пространство вида. В пространстве вида наблюдатель (камера) обычно располагается в начале координат. При использовании правосторонней системы координат (которая считается стандартной) наблюдатель смотрит в направлении отрицательной оси z, при этом ось y направлена вверх, а ось x — вправо.
Проекция — это преобразование, используемое для представления трехмерной модели в двухмерном пространстве. Два основных типа проекции — ортографическая проекция (также называемая параллельной) и перспективная проекция . Основной характеристикой ортографической проекции является то, что параллельные линии остаются параллельными после преобразования. Перспективная проекция использует концепцию, согласно которой при увеличении расстояния между наблюдателем и моделью модель кажется меньше, чем раньше. По сути, перспективная проекция имитирует человеческое зрение.
Отсечение — это процесс удаления примитивов, которые находятся за пределами области просмотра, чтобы облегчить этап растеризации. После удаления этих примитивов оставшиеся примитивы будут нарисованы в новые треугольники, которые достигнут следующего этапа.
Целью отображения экрана является определение координат примитивов на этапе отсечения.
На этапе растеризации применяется цвет и графические элементы преобразуются в пиксели или элементы изображения.