Как современные игровые движки достигают рендеринга в реальном времени по сравнению с «медленным» рендерингом Blender?

90

Я новичок и в gamedev, и в Blender, и есть кое-что, что я не могу поколебать:

В Blender один рендер (даже с использованием более продвинутого рендера Cycles) может занять до 45 секунд на моей машине. Но очевидно, что в игре у вас может быть потрясающая графика, и поэтому рендеринг, очевидно, происходит непрерывно, несколько раз в секунду в режиме реального времени.

Так что мне также интересно, что это за несоответствие, относительно того, насколько «медленным» рендерингом кажется Blender, по сравнению с тем, как игровые движки достигают рендеринга в реальном времени (или почти в реальном времени).

smeeb
источник
3
Рендеринг в реальном времени - огромная тема сама по себе, о ней написано много книг (включая «Рендеринг в реальном времени»). И рендеры, такие как Cycles, работают совершенно иначе, чем 3D-рендеры в игровых движках - вы не можете их реально сравнить
UnholySheep
42
@UnholySheep Конечно, вы можете сравнить их. Как еще можно объяснить разницу, чтобы ответить на вопрос?
user985366
2
@ 10Replies Но этот вопрос не будет актуальным на этом сайте.
GiantCowFilms
3
@ 10Replies: Хотя в OP упоминается Blender, вопрос сводится к тому, почему игровые движки реального времени, по-видимому, визуализируют 3D-сцены быстрее, чем приблизительно-реалистичные 3D-рендереры (такие как Blender, но также и многие другие). Обратите внимание, что это также вопрос, на который отвечает принятый ответ. Имея это в виду, я согласен, что вопрос здесь более актуален в отношении разработки игр , где можно задавать вопросы об общей технологии разработки игр, а не о Blender , где вопросы более специфичны для Blender в частности.
ИЛИ Mapper
3
Думаю, секрет в том, что удивительный не должен быть точным. Существуют быстрые приближения для математики, используемые в 3D-рендеринге, например, InvSqrt
Дмитрий Григорьев,

Ответы:

115

Рендеринг в реальном времени, даже современный рендеринг в реальном времени, - это набор хитростей, ярлыков, хаков и приближений.

Возьмите тени, например.

У нас до сих пор нет полностью точного и надежного механизма рендеринга теней в реальном времени от произвольного числа источников света и произвольно сложных объектов. У нас есть несколько вариантов методов теневого отображения, но все они страдают от хорошо известных проблем с теневыми картами, и даже «исправления» для них на самом деле являются просто набором обходных путей и компромиссов (как правило, если Вы видите термины «смещение глубины» или «смещение многоугольника» в чем-либо, тогда это не надежный метод).

Другим примером метода, используемого рендерами в реальном времени, является предварительный расчет. Если что-то (например, освещение) слишком медленно для расчета в режиме реального времени (и это может зависеть от используемой вами системы освещения), мы можем предварительно рассчитать и сохранить это, тогда мы можем использовать предварительно рассчитанные данные в реальном времени. время для повышения производительности, что часто происходит за счет динамических эффектов. Это прямая память против компромисса между вычислениями: память часто дешева и обильна, вычисления часто нет, поэтому мы используем дополнительную память в обмен на экономию на вычислениях.

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

Максимус Минимус
источник
14
Еще один момент, который следует упомянуть, заключается в том, что объем вычислений, используемых для генерации всех данных, которые понадобятся игре для быстрой визуализации представлений области, может быть на порядки больше, чем объем вычислений, который потребуется для визуализации одного вида. Если рендеринг представлений области займет одну секунду без какого-либо предварительного расчета, но некоторые предварительно рассчитанные данные могут сократить это до 1/100 секунды, то потратить 20 минут на предварительные вычисления может быть полезно, если представления потребуются в игре в реальном времени, но если просто хочется десятисекундный фильм со скоростью 24 кадра в секунду, было бы намного быстрее потратить четыре минуты ...
суперкат
9
... создание 240 требуемых просмотров со скоростью один в секунду.
суперкат
@supercat и из-за этого ваши рендеры в значительной степени свободны от суеты, и вы получаете большой контроль над процессом. Вы можете использовать игровой движок для рендеринга ... если вы готовы пожертвовать функциями. Но, как вы сказали, это того не стоит.
joojaa
Один яркий пример этого, который я могу вспомнить, - это оригинальный движок Quake (~ 1996 г.), который смог добиться относительно потрясающей трехмерной графики в реальном времени на очень ограниченных машинах, используя комбинации чрезвычайно трудоемких методов предварительного расчета. Деревья BSP и предварительно визуализированные световые эффекты были созданы заранее; разработка уровня для этого движка обычно занимала часы (обычно в течение ночи) ожидания, пока не завершатся инструменты компиляции карты. Компромисс был, по существу, уменьшен время рендеринга за счет времени разработки.
Джейсон C
(У оригинального движка Doom [1993] были аналогичные предварительные вычисления. Марафон, возможно, тоже имел, но я не помню, я помню, как строил уровни Марафона, но я не могу вспомнить, что там было).
Джейсон
109

Текущий ответ отлично справился с объяснением общих проблем, но я чувствую, что он упускает важную техническую деталь: движок рендеринга "Cycles" в Blender - это движок, отличающийся от того, что используется в большинстве игр.

Как правило, игры воспроизводятся путем итерации по всем многоугольникам в сцене и отрисовки их по отдельности. Это делается путем «проецирования» координат многоугольника через виртуальную камеру для получения плоского изображения. Причина, по которой этот метод используется для игр, заключается в том, что современное оборудование разработано на основе этого метода, и его можно выполнять в реальном времени с относительно высоким уровнем детализации. Из интереса, это также метод, который использовался предыдущим движком рендеринга Blender до того, как Blender Foundation отказался от старого движка в пользу движка Cycles.

Рендеринг полигонов

Циклы с другой стороны - это то, что известно как движок трассировки лучей. Вместо того, чтобы смотреть на полигоны и визуализировать их по отдельности, он направляет виртуальные лучи света в сцену (по одному на каждый пиксель в конечном изображении), отбрасывает этот луч света с нескольких поверхностей и затем использует эти данные, чтобы определить, какой цвет у пикселя. должно быть. Raytracing - очень дорогая вычислительная техника, которая делает его непрактичным для рендеринга в реальном времени, но он используется для рендеринга изображений и видео, потому что он обеспечивает дополнительные уровни детализации и реалистичности.

Raytracing Rendering


Обратите внимание, что для краткости мои краткие описания трассировки лучей и рендеринга многоугольников сильно урезаны. Если вы хотите узнать больше о методах, я рекомендую вам найти подробное руководство или книгу, так как я подозреваю, что есть очень много людей, которые написали лучшие объяснения, чем я мог бы собрать.

Также обратите внимание, что в 3D-рендеринге используются различные методы, и некоторые игры действительно используют вариации трассировки лучей для определенных целей.

Pharap
источник
3
+1 за очень хороший балл; Я сознательно не спускался в кроличью нору трассировки лучей по сравнению с растеризацией, поэтому здорово иметь это в качестве дополнения.
Максимус
16
Этот ответ становится ближе к сути разницы. Игровые движки выполняют растеризацию (прямую или отложенную), в то время как автономные рендеры (такие как Blender, Renderman и т. Д.) Выполняют трассировку лучей. Два совершенно разных подхода к рисованию изображения.
ssell
4
@ LeComteduMerde-fou Поскольку gamedev нацелен на разработчиков игр, я чувствовал, что дополнительное техническое объяснение будет полезно для более технически склонного читателя.
Pharap
1
@ssell Верно, но речь идет не только о трассировке лучей - даже без трассировки лучей, даже при рендеринге с помощью графического процессора, рендеринг в Blender обычно гораздо более детальный и медленный. Это главным образом связано с акцентом на корректность - лучшая фильтрация и разрешение текстур, сглаживание, освещение, отображение теней, Z-точность, квадраторы, двунаправленные поверхности, большое количество полигонов, выход с более высоким разрешением, точное рельефное отображение отсутствие заранее рассчитанных карт, морфинг, точная кинематика ... это длинный список функций, которые отсутствуют или имитируются игровыми движками.
Луана
1
@ Чии я ошибаюсь. Я думал об ART VPS , это было просто ускорение, а не в реальном времени.
Джейсон С