Введение

Рендеринг или синтез изображений — это процесс генерации фотореалистичного или нефотореалистичного изображения из 2D или 3D модели с помощью компьютерной программы. Полученное изображение называется рендером. В файле сцены, содержащем объекты в строго определенном языке или структуре данных, могут быть определены несколько моделей. Файл сцены содержит геометрию, точку обзора, текстуры, освещение и информацию о затенении, описывающие виртуальную сцену. Данные, содержащиеся в файле сцены, затем передаются в программу рендеринга для обработки и вывода в цифровое изображение или растровый графический файл. Термин «рендеринг» аналогичен понятию художественной визуализации сцены. Термин «рендеринг» также используется для описания процесса вычисления эффектов в программе видеомонтажа для получения финального видеовывода. Программное приложение или компонент, выполняющий рендеринг, называется движком рендеринга, рендер-движком, системой рендеринга, графическим движком или просто рендером. Рендеринг является одной из основных подтем 3D-компьютерной графики и на практике всегда связан с другими ее аспектами. Это последний ключевой этап в графическом конвейере, придающий моделям и анимации окончательный вид. С ростом сложности компьютерной графики с 1970-х годов рендеринг стал более обособленной областью. Рендеринг применяется в архитектуре, видеоиграх, симуляторах, кино- и телевизионных визуальных эффектах, а также в визуализации дизайна, где в каждом случае используется свой баланс функций и техник. Существует большое разнообразие рендеров. Некоторые из них интегрированы в более крупные пакеты для моделирования и анимации, некоторые являются автономными, а некоторые — бесплатными проектами с открытым исходным кодом. Внутренне рендер — это тщательно разработанная программа, основанная на различных дисциплинах, включая физику света, зрительное восприятие, математику и разработку программного обеспечения. Хотя технические детали методов рендеринга различаются, общие задачи, которые необходимо решить для создания 2D-изображения на экране из 3D-представления, хранящегося в файле сцены, решаются графическим конвейером в устройстве рендеринга, таком как GPU. GPU — это специализированное устройство, которое помогает CPU выполнять сложные вычисления рендеринга. Если сцена должна выглядеть относительно реалистично и предсказуемо при виртуальном освещении, программное обеспечение для рендеринга должно решить уравнение рендеринга. Уравнение рендеринга не учитывает все явления освещения, но служит общей моделью освещения для компьютерной графики. В случае 3D-графики сцены могут быть предварительно отрендерены или сгенерированы в реальном времени. Предварительный рендеринг — это медленный, ресурсоемкий процесс, который обычно используется при создании фильмов, где сцены могут быть сгенерированы заранее, в то время как рендеринг в реальном времени часто применяется в 3D-видеоиграх и других приложениях, которым необходимо динамически создавать сцены. 3D-аппаратные ускорители могут повысить производительность рендеринга в реальном времени.

Использование

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

Активы

Библиотеки CAD могут содержать ресурсы, такие как 3D-модели, текстуры, карты рельефа, HDRИ и различные источники освещения для компьютерной графики, которые используются при рендеринге.

Рендеринг и растрирование с помощью линии сканирования

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

Лучевой отлив

При трассировке лучей геометрия моделируется путем последовательного анализа пиксель за пикселем, строка за строкой, от точки обзора наружу, как будто из точки обзора испускаются лучи. В месте пересечения с объектом, цветовое значение в этой точке может быть вычислено несколькими способами. В простейшем случае, цвет объекта в точке пересечения становится значением этого пикселя. Цвет может быть определен на основе текстурной карты. Более сложный метод заключается в изменении цветового значения с помощью коэффициента освещенности, но без вычисления зависимости от имитированного источника света. Для уменьшения артефактов можно усреднить несколько лучей, направленных в немного разных направлениях. Трассировка лучей включает в себя вычисление "направления взгляда" (от положения камеры) и последовательное прослеживание этого "луча" через "твердые 3D-объекты" в сцене, одновременно накапливая результирующее значение от каждой точки в 3D-пространстве. Это связано и аналогично "трассировке лучей", за исключением того, что луч обычно не "отражается" от поверхностей (в то время как "трассировка лучей" подразумевает отслеживание пути света, включая отражения). "Трассировка лучей" подразумевает, что световой луч следует по прямой траектории (которая может включать прохождение через полупрозрачные объекты). Луч – это вектор, который может исходить из камеры или из конечной точки сцены ("сзади-вперед" или "спереди-назад"). Иногда окончательное значение освещенности получается из "функции переноса", а иногда используется напрямую. Могут дополнительно применяться упрощенные моделирования оптических свойств: выполняется простой расчет луча от объекта до точки обзора. Также вычисляется угол падения световых лучей от источника(ов) света, и на основе этих данных, а также указанных интенсивностей источников света, вычисляется значение пикселя. Другая симуляция использует освещение, полученное из алгоритма радиозити, или комбинацию этих двух подходов.

Прослеживание лучей

Трассировка лучей направлена на имитацию естественного потока света, интерпретируемого как частицы. Часто методы трассировки лучей используются для приближенного решения уравнения рендеринга с помощью методов Монте-Карло. Некоторые из наиболее распространенных методов — это трассировка путей, двунаправленная трассировка путей или транспорт света Metropolis, но также используются и полуреалистичные методы, такие как трассировка лучей в стиле Whitted или гибридные подходы. В то время как в большинстве реализаций свет распространяется по прямым линиям, существуют приложения для моделирования релятивистских пространственно-временных эффектов. В финальной, качественной визуализации, полученной с помощью трассировки лучей, для каждого пикселя обычно генерируется несколько лучей, которые отслеживаются не только до первого объекта пересечения, но и через ряд последовательных «отражений», используя известные законы оптики, такие как «угол падения равен углу отражения», и более сложные законы, описывающие преломление и шероховатость поверхности. Как только луч достигает источника света или, что более вероятно, после оценки заданного максимального количества отражений, освещенность поверхности в этой конечной точке вычисляется с использованием описанных выше методов, а изменения, происходящие на пути через различные отражения, оцениваются для определения значения, наблюдаемого с точки зрения. Это повторяется для каждого сэмпла, для каждого пикселя. При распределенной трассировке лучей в каждой точке пересечения может быть сгенерировано несколько лучей. Однако при трассировке путей на каждом пересечении генерируется только один луч или ни одного, используя статистическую природу экспериментов Монте-Карло. В рамках подхода, известного как физически корректный рендеринг, трассировка путей стала доминирующей техникой для рендеринга реалистичных сцен, включая эффекты для кино. Например, популярное программное обеспечение с открытым исходным кодом Blender использует трассировку путей в своем рендере Cycles. Изображения, полученные с помощью трассировки путей для глобального освещения, как правило, более зашумлены, чем при использовании радиосити (основной конкурирующий алгоритм), но радиосити может быть сложно применить к сложным сценам и оно склонно к артефактам, возникающим при использовании тесселированного представления облучения. Относительная простота трассировки путей и ее природа как метода Монте-Карло (выборка сотен или тысяч путей на пиксель) делают ее привлекательной для реализации на графическом процессоре, особенно на современных графических процессорах, поддерживающих технологию ускорения трассировки лучей, такую как Nvidia RTX и OptiX. Было разработано множество методов для подавления шума в результатах трассировки путей, уменьшая количество путей, необходимых для достижения приемлемого качества, с риском потери некоторых деталей или появления мелких артефактов, которые более заметны, чем шум; нейронные сети в настоящее время широко используются для этой цели. Достижения в технологии графических процессоров сделали возможной трассировку лучей в реальном времени в играх, хотя в настоящее время она почти всегда используется в сочетании с растризацией. Это позволяет создавать визуальные эффекты, которые трудно получить только с помощью растризации, включая отражения от изогнутых поверхностей и взаимодействующих объектов, а также тени, точные на широком диапазоне расстояний и ориентации поверхности. Поддержка трассировки лучей включена в последние версии графических API, используемых в играх, таких как DirectX, Metal и Vulkan.

Нейронная рендеринг

Нейронный рендеринг — это метод рендеринга, использующий искусственные нейронные сети. Нейронный рендеринг включает в себя методы рендеринга на основе изображений, которые применяются для реконструкции 3D-моделей из двухмерных изображений (в отличие от более простых 3D-форматов файлов, таких как VRML, или API, таких как OpenGL и DirectX, предназначенных для 3D-аппаратных ускорителей). Другие рендереры (включая проприетарные) могут использоваться, и иногда используются, но большинство из них обычно не обладают одним или несколькими часто необходимыми функциями, такими как качественная фильтрация текстур, кэширование текстур, программируемые шейдеры, геометрия высокого уровня, например, волосы, подразделение поверхностей или NURBS-поверхности с тесселяцией по требованию, кэширование геометрии, трассировка лучей с кэшированием геометрии, высококачественное отображение теней, скорость или реализации, свободные от патентных ограничений. Другие востребованные функции в настоящее время включают интерактивный фотореалистичный рендеринг (IPR) и аппаратный рендеринг/затенение.