Почему современные игры используют подход рендеринга к текстуре для зеркал?

Когда вы смотрите на старые игры, такие как Mario64 или DukeNukem3D, все зеркала в игре - это просто отверстия в стене с зеркальной копией геометрии перед зеркалом, стоящим за ними. В случае DukeNukem3D можно даже активировать без клипа и ходить в эту зеркальную комнату.

В отличие от современных игр для зеркал используется подход рендеринга к текстуре. Это приводит к тому, что зеркала становятся заметно неровными при приближении к ним. Одна из первых игр, которые я заметил, это подход Луиджи, но он, кажется, используется почти во всех современных играх.

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

40 голосов | спросил Grumbel 25 J000000Monday16 2016, 10:55:15

4 ответа


37
  1. Использование RTT (рендеринг для текстуры) позволяет легко масштабировать качество изображения (разрешение, LOD, сложность освещения) для регулируемой производительности. RTT также упрощает замену поверхности на кубическую карту на определенном расстоянии, где трудно точно видеть отражение.
  2. Поскольку выход представляет собой текстуру, есть больше вариантов того, что можно сделать с ним после (освещение, затенение, смешение, искажение и т. д.).
  3. Если в сцену помещена зеркальная версия геометрии, для ее пересечения с реальной геометрией потребуется более сложная отбраковка, и ее можно будет увидеть за углом. В старых играх уровни были разработаны, чтобы избежать этого. Не говоря уже о том, что кто-то должен делать фактическое зеркалирование.
  4. Если геометрия не зеркально отражена вручную, рендеринг должен выполняться путем изменения матрицы представления и режима отбраковки (для компенсации инверсии пространства в матрице) и использования буфера трафарета для вырезания зеркала. Современные двигатели предпочитают создавать все состояния визуализации заранее, поэтому возникла бы небольшая проблема с созданием копий каждого состояния рендеринга сцены с необходимыми изменениями для зеркального рендеринга.

Таким образом, в основном использование RTT дает больше свободы каждому.

ответил snake5 25 J000000Monday16 2016, 11:28:43
29

Нет, вы ошибаетесь - зеркала Duke Nukem 3D вообще не работали.

DN3D использовал движок портала . Соединение между любыми двумя секторами было произвольным до некоторой степени, и когда движок рендеринга пришел на портал, он знал, что он должен начать рендеринг другого сектора. Сектор, стоящий за зеркалом, был в основном владельцем места, чтобы иметь дело с причудой в двигателе - единственная точка сектора должна была быть больше, чем все, что вам нужно «отражено». Он не содержал реальной геометрии. Фактически, он работал практически так же, как «порталы» работают в Portal - за исключением того, что Portal (сам основанный на движке портала) создает порталы во время выполнения и имеет ограничение на то, сколько раз порталы могут рекурсировать (то есть A -> B -> A -> B -> A ...), в то время как Build (DN3D) просто сбой, поскольку его стек переполнен, если вы указали зеркало на другое зеркало.

Очевидно, насколько просто реализовать зеркало с этим - сделать портал, который указывает назад в комнату. Это означало, что рендеринг зеркала стоил бы ровно столько же, сколько и рендеринг самой комнаты, обеспечивающий отличную производительность и согласованность. Пока вы не указывали зеркало на другое зеркало, то есть. Если вы посмотрите на исходный код сборки Build, вы увидите, что нет зеркал обработки кода вообще - их не должно быть, потому что именно так работают порталы ПРИМЕЧАНИЕ: на самом деле, есть код для переворота визуализированных пикселей - он просто не переворачивает геометрию и все различные спрайты и эффекты . Редактор должен был иметь возможность делать эти «поддельные» порталы, хотя - оглядываясь на себя. Если вы хотите узнать больше об очень умном модуле Build, то в Fabie Sanglard есть отличный анализ в Встроенный механизм движка . Весь двигатель был открыт и портирован на современные платформы, хотя старый по-прежнему работает безупречно на Windows 10 (проверен для вас: P). Многие из игр, основанных на сборке, также были открыты и /или переделаны.

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

Самое главное, зеркала усложнились. Они могут иметь сложные формы, текстуры, они могут быть на земле (также известными как «вода») и т. Д. Хотя все эти проблемы разрешимы в движке портала, RTT становится более простым выбором в какой-то момент, а графические процессоры достаточно быстры для его обработки.

Однако даже при всем этом существует множество игр с аппаратным 3D-ускорением, которые делают вещи «реальными». Из старых игр Quake 3 или Alien vs. Predator, например. Насколько я знаю, исходные движковые игры по-прежнему используют «настоящие» зеркала. Если вы ожидаете, что люди приблизится к зеркалу, и вы можете гарантировать, что одновременно не слишком много отражающих поверхностей (например, через дизайн уровня), портальные зеркала по-прежнему очень привлекательны.

ответил Luaan 25 J000000Monday16 2016, 15:44:44
3

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

Старое оборудование также имело ограничения, которые мешали отображать текстуру. Запись в ОЗУ означает, что он не может быть прочитан одновременно. Чтобы улучшить производительность рендеринга, буфер назначения был заблокирован только для записи, но только аппаратное обеспечение дисплея могло читать его. Вы можете запросить чтение, но это заблокировало ОЗУ, и рендер должен был дождаться, когда блокировка будет очищена, прежде чем он сможет запустить следующий кадр. RTT может стать основным узким местом для трубопровода, и, таким образом, были использованы другие решения.

Вы обнаружите, что befor Hardware рендеринг конвейеры были нормой RTT была использована, поскольку она предоставила способ уменьшить нагрузку рендеринга. 3D, созданный для спрайтов, для обеспечения псевдо 3D-контента. В то время рендеринг текстур был слишком дорогостоящим (ЦП), за исключением специализированных машин, которые находились за пределами общего потребительского рынка.

ответил Blindman67 25 J000000Monday16 2016, 15:07:11
1

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

поскольку theres 'отмеченная вами область не помещает случайно какую-либо геометрию там.

ответил GameDeveloper 27 J000000Wednesday16 2016, 14:07:57

Похожие вопросы

Популярные теги

security × 330linux × 316macos × 2827 × 268performance × 244command-line × 241sql-server × 235joomla-3.x × 222java × 189c++ × 186windows × 180cisco × 168bash × 158c# × 142gmail × 139arduino-uno × 139javascript × 134ssh × 133seo × 132mysql × 132