Почему Unreal Engine 5 - это технологический тупик
Навеяно срачами в коментах и бесконечными оправданиями инди разработчиков, которые пытаются объяснить, почему их пет проект выдает 40 FPS на RTX 5090. Как фанату Ваномаса уже более 15 лет, мне физически больно смотреть, как маркетинговая машина Epic Games промывает мозги как геймерам, так и начинающим девелоперам.
Nanite
Маркетинг нам говорит: Забудьте о полигональном бюджете! Импортируйте исходники из ZBrush!
Реальность говорит: CPU Draw Calls bottleneck.
Давайте разберем, как Nanite работает под капотом. Да, virtualized geometry - это круто на бумаге. Кластерный куллинг (Cluster Culling) действительно позволяет отсекать невидимую геометрию с фантастической точностью. Но вы забываете о фундаментальной проблеме растеризации микрополигонов.
Когда Nanite пытается отрисовать треугольники размером в пиксель (или меньше), мы сталкиваемся с чудовищным оверхедом. GPU обожает жирные, большие треугольники. GPU ненавидит микрогеометрию. Почему? Потому что Quad Overdraw. Видеокарта обрабатывает пиксели блоками 2x2 (квадами) для вычисления производных (derivatives) при текстурировании. Если ваш треугольник меньше пикселя, GPU все равно обрабатывает квад. Это приводит к колоссальной трате ресурсов на вычисления, которые потом просто выбрасываются.
Более того, вся эта магия Nanite требует постоянного стриминга данных. Вы видели графики PCI-E bus saturation в тяжелых сценах? Мы упираемся не в чип GPU, а в пропускную способность шины и скорость VRAM. И это мы еще не говорили про Software Rasterizer, который Nanite использует для совсем мелких деталей, перекладывая нагрузку на compute shaders, отжирая ресурсы у того же Lumen.
Это технология для статики. Как только вы пытаетесь деформировать меш (WPO - World Position Offset) или использовать сложные материалы с прозрачностью, пайплайн Nanite начинает захлебываться, вызывая просадки frame time, которые невозможно пофиксить оптимизацией. Это архитектурный тупик.
Lumen
Полное динамическое глобальное освещение в реальном времени! - кричали они.
Артефакты темпоральной аккумуляции и гостинг - ответила реальность.
Lumen - это гибридный рейтрейсинг. В большинстве случаев (если вы не включили Hardware Ray Tracing, который положит вашу карту на лопатки) он использует Software Ray Tracing через Signed Distance Fields (SDF).
Проблема SDF и Surface Cache Чтобы Lumen работал быстро, он упрощает вашу сцену до набора вокселей и полей расстояний. Если ваша геометрия слишком тонкая, сложная или (не дай бог) не имеет корректных Distance Fields - вы получаете light leaking (протекание света).
Но главная проблема даже не в этом. Главная проблема - Temporal Accumulation. Чтобы рейтрейсинг работал в 60 FPS, Lumen пускает ничтожно малое количество лучей (SPP - Samples Per Pixel). Полученный результат - это шумный мусор. Чтобы превратить этот мусор в картинку, движок берет данные из предыдущих кадров и размазывает их во времени.
Результат? Гостинг - Любой движущийся объект оставляет за собой шлейф света или тени. Latency - Изменения освещения происходят с задержкой в несколько кадров. Мыло - Денойзеры агрессивно убивают детализацию в тенях.
Когда вы видите в игре на UE5 кинематографичную картинку, вы видите результат работы апскейлеров и денойзеров, которые пытаются собрать кашу из шумных семплов. Это нейросетевая галлюцинация на основе скудных данных.
Ложь
Сектанты часто приводят в пример Мандалорца. Мол, вот там используют UE5, и это круто.
Давайте сравним пайплайны. Virtual Production - это кластер рендер-нод, каждая из которых стоит как квартира в Москве. Синхронизация через nDisplay. Заранее запеченный и прекэшированный контент. Задача - выдать картинку на LED стену. Камеры двигаются по предсказуемым траекториям. Ваш ПК - это одинокая RTX 3060 (в лучшем случае), забитая VRAM, фоновые процессы Windows, Max и майнер, который вы скачали с репаком.
В продакшене никто не считает миллисекунды инпут-лага. В продакшене память измеряется терабайтами. Переносить практики VP в gamedev - это техническая безграмотность. В кино можно позволить себе 100ms frame time на ноде, если это синхронизировано. В шутере это неиграбельно.
Поэтому, когда очередной девелопер говорит: Но ведь в кино это работает!, он расписывается в полном непонимании разницы между Offline/Cluster Rendering и Real-time Consumer Rendering.
PSO
Самая страшная болезнь UE5, которую Epic Games не могут вылечить годами - это статтеры компиляции шейдеров (Shader Compilation Stuttering).
Unreal Engine генерирует тысячи пермутаций шейдеров. Под DirectX 12 (который обязателен для Nanite/Lumen) драйвер должен скомпилировать Pipeline State Object (PSO) до того, как отрисовать объект. Если PSO нет в кэше - игра фризит.
Автоматическая оптимизация, говорите? В UE5 нет никакой магии, которая решит это за вас. Вам нужно вручную собирать PSO кэш, прогоняя бота по всем уровням, стреляя из всех пушек во все стены. И даже это не гарантирует плавности, потому что малейшее обновление драйвера или патч игры инвалидирует кэш.
Именно поэтому 90% релизов на UE5 в Steam имеют смешанные отзывы в первый день. Разработчики просто забивают на ручной сбор кэша, надеясь на авось и на мощные CPU игроков.
Оправдание лени
Мы пришли к эре, когда нативные 1080p считается роскошью. Весь пайплайн UE5, включая TSR (Temporal Super Resolution), заточен под то, чтобы рендерить картинку в 720p (или даже ниже) и апскейлить её до 4K.
Это деградация. Вместо оптимизации шейдерной сложности (shader complexity) и уменьшения овердро, разработчики просто включают DLSS Quality и говорят: И так сойдет. Но апскейл не бесплатен. Он добавляет инпут-лаг, он создает артефакты на мелких сетках (привет, заборы и провода), и он абсолютно убивает четкость в движении.
Если ваш движок не может выдать 60 FPS в нативном разрешении на High-End железе без костылей в виде генерации кадров (Frame Gen) - это плохой движок. Точка.
Мы получили поколение разработчиков, которые не знают, что такое Texture Atlas, зачем нужен LOD (ведь есть Nanite!), и как профайлить GPU тайминги. Вместо этого они уповают на автоматическую оптимизацию от Epic, которой не существует.
Пока индустрия не перестанет молиться на Lumen и не вернется к пониманию базовых принципов компьютерной графики (Forward+, Baked Lighting там, где это уместно, оптимизация геометрии), мы так и будем играть в симуляторы статтеров с мыльной картинкой.