Лопасти начинают раскручиваться. Вертолет поднимается в небо. Внизу ты видишь красивейший Los Santos. И даже не подозреваешь, что Rockstar вместо красиво проработанного города дают тебе жутко мыльную картинку с несколькими фильтрами. Как так? Сегодня поговорим с вами о системе LOD на примере GTA5. Накалывайте пельмень на вилку, с вами разработчик игр с восьмилетним стажем и мы начинаем.
Дальность прорисовки
Чуть ранее, в другой статье, мы говорили с вами как устроен рендеринг. Коротко говоря, камера по одному пикселю "точке" проецирует все объекты на карте выпуская лучи и считывая информацию, которую они вернут. Но в отличии от лучей в нашем понимании, рендеринг имеет придел. Этим пределом названа дальность прорисовки(или рендеринга). Разработчики решают какое количество объектов может быть на локации, и все остальные игра не будет отрисовать пока вы не подойдете к ним.
Хорошим примером будет игра Silent Hill . Напомню, что видеокарта консоли PSX была всего на 1Mb. Но нарисовать большей город разработчики хотели. Но чем больше объектов появлялось на карте, тем плачевнее был FPS (количество кадров в секунду). Тогда разработчики начали урезать дальность прорисовки. И дошли до того, что играбельный FPS был когда карта прогружалась в паре метров от игрока. В этот момент одна из самых больших проблем игры, стала её фишкой и разработчики обыграли сюжетно эту проблему создав густейший туман.
Система LOD и прорисовка
Но в каждую игру туман не всунешь. Лично я не представляю как можно было бы гонять в новенькой NFS, если бы было видно только 5 метров дороги.
Для этого игровые движки научили понимать "смотрит ли игрок сейчас на этот объект или нет". Если игрок повернут в сторону огромного города, но перед ним стоит стена из кирпича - нет смысла отрисовывать этот город. Ведь пока игрок не обойдёт стену, он ничего не увидит. Эта система называется Occlusion Culling. Вот как она выглядит в игровом движке:
Ну а теперь давайте поставим Майкла из GTA5 на какое-то здание чтоб ему было видно город, а сами при помощи замысловатых манипуляций отдалимся и посмотрим со стороны что он видит. Потом опустим его немного ниже, прямо возле кирпичной стены так, что большую часть города он не будет видеть и посмотрим что нам отрисует игра:
Но в начале мы говорили о вертолете, где ничего не мешает обзору целого города. Так как GTA 5 умудряется выдавать иногда FPS выше в небе при обзоре всего города, чем при отрисовке пару домов вблизи?
И тут на помощь пришла новая технология - LOD ( Levels Of Detail — уровни детализации). Думаю вы понимаете разницу между этими двумя картинками:
Если нет, у меня для вас плохие новости - вы плохая нейросеть. Идите обучайтесь еще :) Все мы хотим видеть в игре объекты с детализацией как на первой части фото или лучше. Но никак не как на второй. Однако эти две картинки - один и тот же объект.
Система LOD работает следующим образом:
1.) Разработчик помещает несколько одинаковых объектов разного качества.
2.) Процессор проверяет сколько процентов экранного места занимает объект.
3.) Если объект занимает больше 50% - рисуется его самая детализированная копия. Если 20% - чуть хуже. И так до самой “мыльной копии”.
Нет нужды отрисовывать мелкие камешки, трещины на домах, грязь на стёклах авто, ведь эти элементы займут чуть меньше 1% от всего места на экране. Такой подход к игре очень труден, так как по факту разработчикам нужно сделать минимум 3 копии игр разного уровня детализации. Но оно того стоило и GTA 5 2013 года долгое время была самой красивой игрой консолей двух поколений!
Но кто-то возразит: “неправда, я не видел чтоб объекты хоть как-то подменялись!”.
Если так - у вас очень хороший ПК. Ведь на слабых ПК такая подмена LOD может происходить в течении нескольких секунд. И игроки иногда видят вначале мыльное изображение. Потом картинка немного детализируется. И так до появления нормальной картинки. Так что теперь играя в игры и видя вдали красивые объекты, помните что они чаще всего “мыльные”. (Ну кроме PUBG. Там проблема с недостачей LOD была с самого начала игры :)
И эта система реализована почти во всех новых играх. Так что в следующий раз, видя как меняется качество объекта, если вы подходите и отходите от него, вы можете смело винить разработчиков в неграмотной работе с LOD!
Статья про рендеринг тут!
Статья про открытый мир в играх тут!