Введение

Создание изображений с помощью компьютерного программного обеспечения

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

Рендаринг программного обеспечения в реальном времени

Для рендеринга в реальном времени основной упор делается на производительность. Самые ранние программные рендереры в реальном времени для ПК использовали множество ухищрений для создания иллюзии 3D-геометрии (настоящий 3D был ограничен плоскими или затененными полигонами Горо, используемыми в основном в авиасимуляторах). Например, Ultima Underworld позволяла ограниченный вид сверху и снизу, наклонные полы и комнаты над комнатами, но прибегала к спрайтам для всех детализированных объектов. Технология, использованная в этих играх, в настоящее время классифицируется как 2.5D. Одной из первых игр, архитектурно схожих с современными 3D-играми и позволяющих полное 6DoF, была Descent, в которой использовались 3D-модели, полностью состоящие из треугольных полигонов с текстурами. Графика на основе вокселей также приобрела популярность для быстрого и относительно детализированного рендеринга местности, как в Delta Force, но популярное фиксированное аппаратное обеспечение в конечном итоге сделало ее использование невозможным. Quake отличается эффективным программным рендерером, разработанным Майклом Абрашем и Джоном Кармаком. Благодаря своей популярности Quake и другие полигональные 3D-игры того времени способствовали продажам графических карт, и все больше игр начали использовать аппаратные API, такие как DirectX и OpenGL. Хотя программный рендеринг перестал быть основной технологией рендеринга, многие игры вплоть до 2000-х годов все еще имели программный рендерер в качестве резервного варианта; например, Unreal и Unreal Tournament имели программные рендереры, способные обеспечивать приемлемое качество и производительность на процессорах того периода. Одной из последних AAA-игр без аппаратного рендеринга была Outcast, в которой использовались передовые воксельные технологии, а также фильтрация текстур и bump mapping, как на графических картах. На рынках видеоигр и аркадных игр эволюция 3D была более резкой, поскольку они всегда в значительной степени полагались на специализированные чипсеты. 16-битные консоли получили RISC-ускорительные картриджи в таких играх, как StarFox и Virtua Racing, которые реализовывали программный рендеринг с помощью специализированных наборов инструкций. Jaguar и 3DO были первыми консолями, поставляемыми с 3D-аппаратным обеспечением, но только PlayStation получила широкое распространение функций 3D-графики в большинстве игр. Игры для детей и казуальных игроков (использующих устаревшие системы или системы, предназначенные в основном для офисных приложений) в конце 1990-х – начале 2000-х годов обычно использовали программный рендерер в качестве резервного варианта. Например, в Toy Story 2: Buzz Lightyear to the Rescue есть возможность выбора аппаратного или программного рендеринга перед началом игры, в то время как другие, такие как Half-Life, по умолчанию используют программный режим и могут быть настроены на использование OpenGL или DirectX в меню настроек. Некоторые программы для 3D-моделирования также имеют программные рендереры для визуализации. И, наконец, эмуляция и верификация аппаратного обеспечения также требует программного рендеринга. Примером последнего является Direct3D reference rasterizer. Но даже для высококачественной графики «искусство» программного рендеринга не полностью исчезло. Хотя ранние графические карты были намного быстрее программных рендереров и изначально имели лучшее качество и больше функций, они ограничивали разработчика обработкой пикселей с «фиксированной функцией». Вскоре возникла потребность в разнообразии визуального оформления игр. Программный рендеринг не имеет ограничений, поскольку выполняется произвольная программа. Поэтому графические карты вновь ввели программируемость, выполняя небольшие программы для каждой вершины и для каждого пикселя/фрагмента, также известные как шейдеры. Языки шейдеров, такие как High Level Shader Language (HLSL) для DirectX или OpenGL Shading Language (GLSL), являются языками программирования, похожими на C, для шейдеров и начинают проявлять некоторое сходство с программным рендерингом (произвольной функции). С момента принятия графического оборудования в качестве основного средства для рендеринга в реальном времени производительность процессоров неуклонно росла. Это позволило появиться новым технологиям программного рендеринга. Хотя в значительной степени затмеваемый производительностью аппаратного рендеринга, некоторые современные программные рендереры в реальном времени способны объединить широкий набор функций и приемлемую производительность (для программного рендерера) за счет использования специализированной динамической компиляции и расширенных наборов инструкций, таких как SSE. Хотя в настоящее время доминирование аппаратного рендеринга над программным рендерингом неоспоримо из-за непревзойденной производительности, функций и постоянных инноваций, некоторые считают, что процессоры и графические процессоры сойдутся тем или иным образом, и грань между программным и аппаратным рендерингом исчезнет.

Предварительный рендеринг

В отличие от рендеринга в реальном времени, производительность при предварительном рендеринге является лишь второстепенной задачей. Он используется главным образом в киноиндустрии для создания высококачественных изображений реалистичных сцен. Многие спецэффекты в современных фильмах создаются полностью или частично с помощью компьютерной графики. Например, персонаж Голлума в фильмах Питера Джексона "Властелин колец" полностью создан с использованием компьютерной графики (CGI). Также CGI приобретает популярность в анимационных фильмах. Особенно заметны работы Pixar, таких как "История игрушек" и "В поисках Немо", а также первый в мире открытый фильм Blender Foundation – "Сон слонов". Из-за необходимости в очень высоком качестве и разнообразии эффектов, оффлайн-рендеринг требует значительной гибкости. Несмотря на то, что коммерческое графическое оборудование для рендеринга в реальном времени с каждым днем становится более качественным и программируемым, для большинства фотореалистичных изображений, созданных с помощью CGI, по-прежнему требуется программный рендеринг. Например, RenderMan от Pixar позволяет создавать шейдеры неограниченной длины и сложности, что требует использования процессора общего назначения. Методы достижения высокого реализма, такие как трассировка лучей и глобальное освещение, также по своей природе не подходят для аппаратной реализации и в большинстве случаев реализуются исключительно программно.