Год назад пробовал перекинуть проект на URP, не понравилось, а вот сейчас уже вроде как лучше стало. Но вообще это решение связано с тем, что юнити сфокусируются на одном пайплайне. Если бы выпускал игру сейчас, то остался бы на HDRP, а так думаю можно и urp, тем более что у меня стилизация. Из фич сейчас не хватает блендинга каскадов теней и кэширования (это про 6.3 LTS). Из минусов только что мне придется получается со временем обновляться на новые версии, куда подвезут апдейты URP, но надеюсь ничего не сломается.
Когда попробовал сделать чистый билд мягко говоря был удивлен, что он занял вместо 30 минут 4 часа из-за компиляции шейдеров. Да, у меня пожилой i5, но это не дело все равно. Немного повозился и снизил до 20 минут.
• Отключил ненужные мне фичи в проекте
• Объединил дубликаты шейдеров по смыслу, а то наплодил всяких лишних на шейдерграфе типа (Shallow Water, Ocean Water) теперь это общий Water, для Foliage также, но еще не везде
• Убрал GPU Instancing на тех материалах, где он не нужен
• Убрал некоторые кейворды в шейдерах, у меня практически на всех ассетах есть и карта нормалей, и остальные карты упакованные, мне редко нужен вариант шейдера без этого, оставлю только кейворд для emission/tint map
• Вручную указал lightmap, fog modes в Settings -> Graphics -> Shader Stripping
• В Keyword Declaration Overrides еще дополнительно временно переключил _ FOG_LINEAR FOG_EXP FOG_EXP2 на dynamic_branch, просто насчет тумана еще буду думать, может у меня он вообще будет свой
• Убрал include terrain shaders, так как у меня все равно свой шейдер террейна (но юнити почему-то все равно их включает в билд, либо у меня где-то завалялся стандартный материал, либо оно так задумано)
• Включил strict shader variant matching чтобы в билде видеть ошибки и заглушку вместо шейдера, на случай если я вырежу что-то нужное
• Для промежуточных билдов можно вообще некоторые фичи еще отключать в теории, хотя уже и так норм
• Ну и главное, что дало ощутимый прирост: написал скрипт для ручного стриппинга ненужных вариантов (
https://docs.unity3d.com/6000.3/Documentation/ScriptReference/Build.IPreprocessShaders.OnProcessShader.html)
Например, буду использовать либо каскадные тени, либо 1 каскад, соответственно мне нужен только один вариант. Некоторые материалы никогда не будут юзать лайтмапы (типа одежды игрока/персонажей). Тут же удаление ненужных вариантов для стандартного террейна. Плюс еще оставил только те варианты, когда включен dir light и тени от него, поскольку у меня во всех локациях это именно так, но это пока временно и еще подумаю, может перебор (пасмурная погода и данжи какие-нибудь)
Полезное из доков по теме:
https://docs.unity3d.com/6000.3/Documentation/Manual/urp/shader-stripping-landing.htmlПока так, в билде вроде все ок, но буду еще дорабатывать все это.
#unity #gamedev #wip