Как я переходил с Built-In на URP в Unity и обратно с помощью Chat GPT
Недавно я решил попробовать перейти с классического Built-In рендеринга на URP (Universal Render Pipeline) в Unity в своей игре "Подводная охота". Многие разработчики советуют URP за его продвинутую графику и возможности оптимизации для мобильных устройств. Я ожидал, что переход принесёт только улучшения, но в итоге столкнулся с массой проблем, которые побудили меня вернуться обратно на Built-In Pipeline. В этом процессе я активно использовал Chat GPT. Вот мой опыт и основные причины, которые привели меня к возврату на старую систему.

1. Падение производительности на старых устройствах
Одна из главных целей моего проекта — работа на широком спектре устройств, включая старые модели. Когда игра работала на Built-In, я видел стабильные 26 fps. После перехода на URP, производительность значительно снизилась до 18 fps. Несмотря на множество возможностей для оптимизации, таких как настройка уровней теней, освещения и использования лайтмапов, улучшить производительность на уровне Built-In мне так и не удалось.
С помощью Chat GPT я выбрал несколько стратегий по оптимизации, таких как использование URP Asset с минимальными настройками качества, отключение тяжелых эффектов и динамических теней. Несмотря на это, прироста fps я так и не увидел. На своем стареньком Honor 9 Lite, Built-In оказался более стабильным.
2. Проблемы с водой и ошибки шейдеров
Одной из самых больших проблем при переходе на URP стала вода. В проекте я использовал шейдер для воды FX/Water, и в Built-In всё работало как надо. Однако при переходе на URP начали появляться ошибки, например:
IsCameraProjectionMatrixFlipped is being called outside camera rendering scope.
UnityEngine.GUIUtility:ProcessEvent (int,intptr,bool&)
Я решил попробовать несколько популярных ассетов для воды, совместимых с URP, таких как:
Crest Water System URP Ocean Rivers Lakes
KWS Water System
Dragon Water URP
Stylized Water 2
Однако эти решения либо требовали слишком много ресурсов и ухудшали производительность, либо не достигали качества, которого я добивался в Built-In. Я пробовал переделать шейдер через GPT, переписывал скрипт воды, пытаясь адаптировать его к моей старой системе. Однако, несмотря на все попытки и советы GPT, я так и не смог исправить ошибку.
3. Проблемы с деревьями и билбордами
Третьей серьёзной проблемой стали деревья. В Built-In я использовал Nature/Tree Soft Occlusion Leaves (Bark) для деревьев, чтобы террайн автоматически делал биллборды. В URP я попробовал использовать SpeedTree шейдеры, но деревья выглядели криво — они были чересчур темными при ближнем рассмотрении. Также возникли проблемы с отображением билбордов (простых 2D-изображений деревьев на дальнем расстоянии), часть дерева полностью исчезала и биллборды были значительно выше detailed tree.
Решения через Chat GPT
В процессе работы с Chat GPT я получил множество полезных решений и подходов, которые облегчили процесс отладки и экспериментов:
Отладка шейдеров и проверка рендер-текстур — GPT помог настроить правильную проверку рендер-текстур для воды и объяснил, как их тестировать в реальном времени, помогая понять, почему вода не отображалась должным образом.
Создание инструмента для массовой конвертации материалов — Во время перехода на URP я использовал стандартный конвертер, а для перехода обратно на Built-In стандартных средств не было. С помощью Chat GPT я создал скрипт для автоматического поиска материалов с некорректными шейдерами и их массовой конвертации. Получился инструмент с возможностью выбора материалов для конвертации, что сэкономило кучу времени.
Перед откатом назад надо сначала сконвертить материалы из URP Шаги по оптимизации производительности — Вместе с GPT мы прошлись по шагам оптимизации: настройка освещения, теней, уровня детализации и другие элементы. Однако, даже с учетом этих оптимизаций, URP оставался слишком тяжелым для старых устройств.
Заключение
Переход на URP обещал множество преимуществ, но в моём случае он привёл к неожиданным проблемам, таким как падение производительности, ошибки с рендерингом воды и сложности с деревьями. С помощью Chat GPT я смог глубже понять работу URP, провести серьёзную отладку, создать инструменты для автоматизации процесса, но в итоге мне всё равно пришлось вернуться на Built-In, так как это был единственный способ достичь нужного уровня производительности и качества.
Мой вывод: URP — это мощный инструмент для современных проектов, но если вы работаете с кастомными решениями и старыми устройствами, то Built-In может оказаться более стабильным и производительным выбором.