Как создать качественный и быстрый эффект портала?

9

РЕДАКТИРОВАТЬ: Таким образом, я получил визуальный эффект портала, работающий без снижения производительности, и я получил физическую настройку объектов с твердыми телами, плавно перемещающимися через порталы, и объектов с контроллерами персонажей, проходящими сквозь него. Единственное, что я сейчас пытаюсь выяснить - это смешать два вида камеры, чтобы получить правильный эффект перехода от первого лица. Есть идеи, как бы я смешал эти два? Я думаю о чем-то, используя шейдер только глубины или нормализованный прямоугольник области просмотра. Моя главная проблема - это вычисление в реальном времени и с углами.

Поэтому я работаю над созданием эффекта портала в Unity3D. Очевидно, я использовал Портал Valve как большое влияние на программирование этого. В настоящее время я просто использую текстуру рендеринга камеры, чтобы передать графический эффект, а затем немного кода, чтобы сделать все остальное. Проблема в том, что при разрешении 2048x2048 он выглядит так же качественно, как и у Portal, но вызывает большие потери FPS. Чтобы решить эту проблему, мне нужно либо снизить качество текстуры, либо количество раз, когда я обновляю текстуру.

Valve добилась высокого качества портального эффекта без потери частоты кадров. Как я могу сделать то же самое? У кого-нибудь есть какие-нибудь хорошие идеи для рендеринга с текстурой высокого разрешения без потери кадров?

Я подумываю сделать свой собственный код для рендеринга в текстуры, а не использовать встроенную систему Unity, это выполнимо, но определенно будет хлопотно. Поэтому любые мысли, идеи или предложения высоко ценятся.

Тимоти Уильямс
источник
3
Я не могу найти ссылку, но я помню, как кто-то говорил, что Portal не использовал визуализацию для текстуры.
msell
1
Проверьте Pseudo Form , игру в стиле Portal-esque (исходный код находится в основной загрузке). В Интернете есть и другие «реализации портала», но я думаю, что это наиболее известный. Также играйте в портал с комментариями разработчиков. В некоторых из них они рассказывают о проблемах внедрения порталов.
Васко Коррейя
7
Я не могу понять, почему вам понадобится текстура 2028x2048, чтобы портал отображался с разрешением менее 1080p. Вы не должны определенно превышать разрешение экрана, которое вы используете для своей игры в целом. Я бы сказал, что вам следует выяснить размер портала на экране и использовать его для выбора рендеринга текстуры соответствующего размера (что делает его очень эффективным вдали и «тяжелее», поскольку портал становится больше экрана). -пространство.
Стиг-Руне Скансгард
1
Для визуального эффекта какой подход вы выбрали? Вы выяснили, как визуализировать только то, что было видно через портал?
Джоккинг
1
Вы должны оставить исходный вопрос таким, каким он был, и задать новый вопрос о новой проблеме.
msell

Ответы:

5

После нескольких часов исследований и программирования я понял, как правильно получить визуальный эффект для этого. Если вы хотите просто купить систему портала, которая работает для визуальных элементов и почти все остальное, что вам нужно, ознакомьтесь с пакетом Portalizer Unity.

Я программирую на C #, а этот пакет на JS, но логика, лежащая в его основе, невероятно полезна и хорошо продумана. В общем, я следовал его логическому мышлению с некоторыми настройками для моей игры и контроллера от первого лица.

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

Я могу создать более подробный учебник с картинками и источником, когда выясню, как правильно смешать камеры для телепортации FPS. Сейчас я слишком утомлен и занят, чтобы написать полное руководство, и этого должно быть достаточно, потому что он дает вам большую часть необходимого кода.

Тимоти Уильямс
источник
Не могли бы вы опубликовать ссылку на репо?
Рома Федор