Ютубер Next Level Game Art, ранее разбиравший, как Crimson Desert добивается реалистичных поверхностей стен и земли без потери производительности, выпустил новое видео – на этот раз посвящённое одной из самых обсуждаемых жалоб игроков.
У каждого, кто запускал Crimson Desert, возникал один и тот же вопрос: почему ветер в игре такой зверский? Даже в спокойный солнечный день трава и деревья мотаются так, будто по округе бродит перманентный ураган.
Ютубер сразу уточняет, что это не баг – точно такая же претензия звучала в адрес The Witcher 3 ещё в 2015 году, когда игроки шутили, что растения в Каэр Морхене переживают вечный тайфун.
Схожая картина наблюдалась и в Horizon Zero Dawn, где шикарная растительность порой изгибалась так, словно деревья вот-вот взорвутся. Речь о ставшем типичным явлении для больших открытых миров, у которого есть конкретные технические причины.
Под словом "растительность" (foliage) подразумеваются деревья, кусты, цветы, трава и мелкие объекты вроде опавших веток. Все эти ассеты очень затратны, и без оптимизации игра просто не поднимется выше 15 кадров в секунду.
Базовый инструмент оптимизации – LOD-система, подгружающая упрощённые версии моделей в зависимости от расстояния до камеры. Самый низкий LOD для растительности обычно реализуют через так называемые биллборды или октаэдрические импосторы – набор пересекающихся плоскостей, которые с разных ракурсов выглядят убедительно трёхмерными. Сами листья – уже оптимизированные ассеты по своей природе, так как это плоскости с текстурой на альфа-канале, и проблема только в высокой плотности растительности.
Фишка Crimson Desert в том, что разработчики осознанно отказались от системы импосторов для дальних деревьев. На горизонте видны полноценные деревья с корректными тенями и анимацией ветра – рендер растительности на огромных дистанциях был одной из главных визуальных фишек игры. Именно из этого решения и растут ноги у претензий к силе ветра.
Движок Black Space, как и Red Engine в The Witcher 3, прорисовывает растительность на колоссальных расстояниях с работающей анимацией. В реальной жизни ветер вдали едва заметен на экране, но девелоперы намеренно завышают амплитуду и скорость колебаний, чтобы движение считывалось как ветер даже в сотнях метров от игрока. Без такого преувеличения мир на дальних планах выглядел бы мёртвым и статичным.
Цель – не метеорологическая точность, а ощущение живого, дышащего мира. Pearl Abyss выбрала эпичность и драматизм, а не достоверность, и главная издержка такого подхода в том, что значение силы ветра нельзя зависеть от расстояния – оно единое для всей сцены.
Black Space использует процедурную GPU-систему ветра на основе векторного смещения вершин и ветровых векторов. Полноценная физика каждого отдельного листа обошлась бы слишком дорого для мира такого масштаба, поэтому разработчики выкручивают множители движения, чтобы дешёвая вершинная анимация не выглядела зажатой.
Результат работает отлично на дистанции и в масштабе, но вблизи смотрится перебором – особенно на фоне того, что волосы и одежда персонажа используют более затратную симуляцию и двигаются сдержаннее. Этот разрыв между бешено колышущейся травой и почти неподвижным плащом игрока – именно то, что люди замечают и критикуют.
Под капотом GPU-ветра лежит вершинное смещение в шейдере вершин: к позиции каждой вершины растительности каждый кадр добавляется небольшой сдвиг. Расчёт идёт на GPU с использованием глобального или локального ветрового вектора, времени для колебаний, атрибутов вершин вроде высоты от земли и жёсткости ветви, а также шумовых функций (Perlin или Simplex) для органичного неповторяющегося движения. Основное сгибание заставляет всё дерево наклоняться по направлению ветра – верхушка двигается сильнее, а основание остаётся на месте.
Дополнительное, вторичное сгибание отвечает за мелкие движения листьев и тонких веток с более высокочастотным шумом. Порывы реализованы слоистыми – это случайные усиления ветра, прокатывающиеся волнами по полям травы. Вся эта математика выполняется параллельно на миллионах вершин почти без нагрузки на процессор, и именно это делает такой подход идеальным для открытых миров с огромной дальностью прорисовки.
В Crimson Desert ветровые потоки ещё и взаимодействуют с игровыми способностями – например, огненная магия может поджечь траву и деревья. Симуляция естественно реагирует на направление, интенсивность и локальные силы, что выглядит действительно эффектно.
Ютубер вспоминает забавную историю с производства Zelda: Breath of the Wild, где один дизайнер поднял значение ветра для конкретного святилища и отправил апдейт. На следующий день большинство разрушаемых объектов по всему миру оказались разбиты о стены и другие препятствия, так как параметр был завязан на глобальное значение, влиявшее на всю физику.
Если вас смущает движение растительности, то есть возможность изменить настройки – в данном случае использовалась видеокарта Nvidia, но на AMD должен быть сопоставимый результат.
Рекомендуемые настройки:
- Режим апскейлинга: DLSS 4.5
- Разрешение апскейлинга: DLAA
- DLSS Frame Generation: можно оставить как есть, на эффект не влияет
- DLSS Ray Reconstruction: выключить
- Nvidia Reflex: включить
- Vertical Sync: выключить
- Качество моделей: High
- Качество текстур: Cinematic
- Качество теней: High
- Качество освещения: Ultra
- Качество отражений: Cinematic
- Продвинутые погодные эффекты: выключить
- Качество воды и растительности: Cinematic
- Качество объёмного тумана: High
- Остальные нижние опции: Cinematic
- Интенсивность размытия (вкладка доступности): 0
После настроек ветер остаётся, так как это часть замысла, но трава, цветы и деревья двигаются заметно спокойнее и выглядят менее карикатурно.