Коли HUD раптом став догори дриґом у браузері 🙃
7 листопада 2026 р.
З версією 2026.10.10 ми зробили два великі кроки «під капотом»: гра тепер працює на Unity 6.6, а браузерна версія запускається на WebGPU, де його пропонує браузер, наприклад у сучасних Chrome і Edge. В інших випадках, як і раніше, працює WebGL 2. Обидва – способи, якими сайт розмовляє з відеокартою. WebGL існує багато років, WebGPU – його наступник, ближчий до того, як працюють сучасні відеокарти. Невдовзі після цього мій HUD став догори дриґом. 🙃
Побачили раз – і більше ніколи. Я відкрив гру в Chrome на ноутбуці, і HUD був перевернутий. Ми спробували відтворити це, але не вийшло. Я й сам більше цього не бачив. Тож поки що ми закрили питання.
Потім воно повернулося, і з фотодоказом. 19 жовтня це сталося знову, у свіжому світі. Цього разу я одразу надіслав звіт про помилку зі знімком екрана. Ось тільки зламаним виявився сам знімок: три копії поруч, повні смуг. Детективна робота за цим: картинка складається з пікселів, і кожен піксель зазвичай має три значення для червоного, зеленого й синього. Гра очікувала три значення на піксель, але WebGPU віддавав чотири, із додатковим значенням для прозорості. Прочитайте ті самі дані з чотирма значеннями на піксель – і картинка стає читабельною. Світ стоїть прямо, але весь HUD віддзеркалений: панель швидкого доступу прилипла до верху, а запитання VEGA «Показати тобі основи?» перевернуте. До того ж виявилося, що кожен знімок екрана з браузера був зламаний із моменту переходу на WebGPU. Ніхто не помітив, бо досі жоден звіт із браузера не надходив зі знімком. 🔍
Чому лише HUD? Починаючи з рівня графіки «Середній», із ввімкненим ефектом візора, окрема камера малює HUD у власну картинку в графічній пам'яті. Фахівці називають це render texture. Потім гра накладає цю картинку на світ з ефектом візора та його сяйвом. Підступ у тому, що графічні системи не погоджуються, де в такій картинці «верх». Одні рахують рядки згори, інші знизу. Зазвичай рушій гри це вирівнює. У браузері на WebGPU для картинки HUD це інколи йшло не так. Чому лише інколи, ми досі точно не знаємо.
Відтворити? Не пощастило. Щоб самим знаходити помилки браузера, ми збудували невеликий полігон. Ми завантажуємо готовий пакет гри певної версії й запускаємо на власному комп'ютері. Потім браузер із віддаленим керуванням і WebGPU клікає по меню, запускає світ і робить знімки екрана, на які дивиться наш ШІ. Ми так пробували тричі, з точно моїм посиланням і на тому самому графічному чипі, і тричі HUD стояв прямо. Помилку мав лише мій справжній Chrome.
Якщо не можна викликати помилку, її треба виявляти. Тож камера HUD тепер малює крихітну пурпурову крапку розміром у чотири пікселі в лівому верхньому куті своєї картинки. Перш ніж накласти HUD на світ, шейдер візора дивиться в обидва ліві кути, де опинилася крапка. (Шейдер – це невеличка програма, що працює безпосередньо на відеокарті.) Якщо крапка внизу, шейдер перевертає HUD. При цьому він маскує кути, тож крапки ви ніколи не бачите. Але поки помилка ховається, таке виправлення важко перевірити. Тому є тестовий перемикач, який навмисно ставить крапку не в той кут. Тоді HUD мусить стати догори дриґом, і саме це він і зробив, достоту як на моєму знімку. Це довело, що виявлення працює. ✅
Очевидне виправлення було б помилкою. «Тоді просто завжди перевертай на WebGPU!» Ми спробували це на полігоні, перш ніж вбудовувати. Це зламало б HUD усім, бо здебільшого він стояв прямо.
Три пастки по дорозі. WebGPU підкинув нам ще кілька витівок. По-перше, простий крок копіювання на WebGPU може сам собою віддзеркалити картинку. Тож відтворити помилку віддзеркаленою копією не вдалося. По-друге, новий перемикач, який ми хотіли передати шейдеру, просто ніколи не доходив у браузері. По-третє, ми зчитували пікселі, щоб перевірити порядок рядків, і отримували суперечливі відповіді. Тому тепер шейдер записує свій вердикт в один-єдиний піксель, і ми читаємо його. В одного пікселя немає ні верху, ні низу. 😄
Що ви від цього маєте. З версії 2026.10.24 HUD у браузері стоїть як слід, а знімки екрана з браузера знову справжні картинки. Звіти про помилки тепер містять і розділ про графіку, який, серед іншого, каже, як стояв HUD. Тож наступного разу ми дізнаємося й без картинки. У тому ж пакеті ми виправили ще й помилку зі звітів Lyxette: тварина більше не висить над викопаним вами ровом. 🐾
Якщо ви колись усе ж побачите HUD догори дриґом: у браузері F2 відкриває звіт про помилку. Ми подивимося. 🙏
Коментарі