Куток

Обкладинка для допису Про оптимізацію простими словами
IceBang
IceBang

Додано

Про оптимізацію простими словами

Потрібно відразу наголосити, що я не програміст графіки та не експерт з оптимізації, я хочу розібратися в причинах поганої оптимізації, та взагалі методах оптимізації.

Чесно кажучи, мене здивував огляд Avowed від Digital Foundry. Ми всі маємо поганий досвід з іграми на Unreal Engine 5 (Remannt 2, Stalker 2, Immortals of Aveum, Silent Hill 2). Зазвичай це класичні статери та низький FPS не залежно від системи. Тому він мене і здивував, ці проблеми були зовсім незначні, відносно мала кількість статерів та правильне застосування технологій.

Оптимізація 3D моделей

Почнемо з основ, знову ж таки простими словами. Полігон — трикутник на 3D моделі. Менша кількість полігонів — менше навантаження на GPU під час рендерингу цієї моделі. Це так і називається оптимізація полігонів. Зазвичай немає сенсу для надмірної кількості полігонів на моделях, це невиправдане навантаження системи.
Тому я дивлюся зі скепсисом на той мод для GTA 5 де автор використовує кількість полігонів як основну метрику.

Приклад полігонів

Але в іграх потрібно використовувати різні види моделей, наприклад ми не будемо завантажувати систему високо деталізованою моделлю дерева, коли саме дерево на великій відстані від гравця. Для цього робить декілька моделей дерева з різною деталізацією, це називається Levels of Detail (LOD, або лоди). Тут виникає логічне питання: "а скільки лодів для однієї моделі нам потрібно?" це залежить від самої моделі, якщо це щось маленьке і таке що не попаде у камеру близько то можна і менше, а у загальному краще тримати планку на 6 лодів.

Приклад лодів

Інші технології

Для спрощення процесу створення лодів є технологія Nanite. Простіше кажучи nanite розв'язує дві проблеми: створення лодів, та рендеринг об'єктів які не бачить глядач (Occlusion Culling).
Також, якщо ви грали або не змогли пограти в Allan Wake 2, ви точно чули про меш шейдери (Mesh Shading). Не заглиблюючись у технічні деталі то це шейдери які вже мають трикутники у своєму коді та не вимагають створення лодів. Проблема меш шейдерів утому, що доволі невелика кількість GPU має їх підтримку, поки що.
Якщо вам цікаво, то звичайний шейдер це код, який описує основні властивості об'єкта, текстура, віддзеркалення, заломлення світла та інше.

Світло

У більшості ігор ви побачите "запечене" світло. Тобто світло яке було розставлене на етапі моделювання ландшафту, яке рендериться на етапі завантаження локації. З часом відеокарти змогли симулювати промені світла у реальному часі, та виникла можливість використовувати Ray Tracing. Для спрощення створення освітлення за допомогою RT була створена технологія Lumen.

Lumen

Lumen — система динамічного глобального освітлення, яка використовує RT, та допомагає уникнути запікання світла. На жаль технологія є вимогливою до твого ПК, тому завжди потрібно думати чи вона тобі потрібна.
На мою думку, творці Silent Hill 2 Remake могли просто запекти світло, бо гра є однокористувацькою та у якій не має динамічної зміни дня і ночі.

Візуалізація відбиттів з Lumen

Чому так погано?

Ми всі були у ситуації коли гра зупинялася на пів секунди, а далі наче нічого не сталося. Це називається статер, виникає він через те що під час компіляції шейдера, гра повинна виконати ще один процес, але через те що гра зайнята компіляцією, потрібно зупинитися. Особисто для мене це маркер ги на UE5.
Як завжди, не все так просто: інколи розробники просто ліниві, як у випадку Remannt 2, Immortals of Aveum. Які просто забили та вирішили що всі їх проблеми вирішить DLSS, ставка не спрацювала.
Проте у розробників може просто не бути часу, STALKER 2, наприклад, коли вони просто не встигли ознайомитися із технологіями та навчитися користуватися доволі непростим рушієм (кажу як людина що намагалася його зрозуміти), рушій який дає хорошу базу для початку роботи, неймовірні можливості для професіоналів, але перехід між якими просто кошмар.

Blueprints в Unreal Engine

Я вже описав був основні способи оптимізації, так я не залазив у технічні деталі, бо мало кому цікаво читати про те скільки разів потрібно викликати функцію GetPlayerInventoryItemsCount(), так логіку гри також потрібно оптимізувати.

Оптимізація ігор — це складний і багатогранний процес, який потребує балансу між продуктивністю та якістю графіки. Сучасні рушії, такі як Unreal Engine 5, пропонують потужні інструменти (Nanite, Lumen, меш шейдери), але їх використання вимагає не тільки знань, а й часу на налаштування.

Розробникам потрібно знаходити компроміс: або вкладати більше ресурсів у ретельну оптимізацію, або покладатися на нові технології, які, хоч і спрощують процес, можуть виявитися надто вимогливими для гравців. Ігри, які вдало реалізують ці технології (як-от Avowed), доводять, що проблеми UE5 — це не вирок, а наслідок помилок у розробці.

Зрештою, якість оптимізації залежить не від рушія, а від підходу розробників. Якщо вони готові витратити більше часу на правильну роботу з LOD, шейдерами, освітленням та іншим, гра може бути не тільки гарною, а й добре оптимізованою.

Буду радий почитати коментарі від людей що краще розуміють цей процес, особливо від експертів по UE, бо сам знаю лише поверхнево та наразі вивчаю Unity. За бажання можете виправити мої помилки.

Топ коментарі (2)

Звернути
 
marchosv_8d50faf2a83320ac profile image
marchosv

Ніби все зрозуміло, але висновок якийсь не чіткий.
Можливо розробники розуміють скільки можуть заробити з гри і тому намагаються не вийти за рамки фінансування, від того менше уваги на оптимізацію.

Звернути
 
icebang profile image
IceBang

Не зовсім, якщо ми говоримо про ААА, то більшість розробників (програмісти графіки, геймплею, художники) там "на зарплаті", тобто вони мають фіксовану ЗП протягом місяця.
Але на мою думку, то все це через те що багато розробників не встигають вивчити певну технологію. Тобто одна проблема випливає з іншої, хтось хоче зекономити, та не хоче давати на розробку зайвий місяць, а комусь не вистачає часу, щоб навчитися

Куток

Підписуйтеся на наші соціальні мережі:
Telegram
Twitter
Facebook


Тепер у нас також є Youtube канал!