Чому деякі ігри показують, що вогники просвічують крізь стіни?


28

У деяких іграх я бачу світло, яке просвічується крізь стіни, навіть якщо я встановлюю якість відео на високому рівні.

Кілька прикладів ігор, в які я нещодавно грав, - це Borderlands 2 (вибухи ракет) і Call of Cthulhu (ліхтарі; гра навіть використовує Unreal Engine 4).

Це помилка чи є причини ефективності?

Приклад Borderlands 2: https://youtu.be/9bV83qA6_mU?t=419 (кілька разів, але швидко)

Питання про бонус: в останньому випадку, чи є якийсь спосіб відстеження променів можна дешево використати для вирішення проблеми? Я здогадуюсь, що дорогий RT однозначно вирішив проблему, але мені цікаво, чи можна його використовувати і в «дешевій» формі для вирішення цієї конкретної проблеми.


21
Малюнок вартує 1000 слів.
Еворлор

8
Мені доведеться грати на тестування, але чи насправді протікає світло , чи це може бути ефект світиться частинок? Зокрема, на вашому прикладі вибуху ракети, я міг би уявити додатковий ефект "вогневої" частинки, який, імовірно, ігнорує зіткнення. Ліхтарики також може зробити те ж саме , щоб створити видимий німб, я вважаю ...
AC

@Evorlor додав один приклад.
Маркус

Відповіді:


43

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

Світло в іграх насправді не «подорожує» від джерела, на поверхню, до камери, заважаючи по дорозі.

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

Отже, за замовчуванням жодні ігрові світильники не кидають тіні. Напрямок до світла залишається однаковим, навіть якщо на шляху є тіньовий каскад, тому математика дає нам те саме значення яскравості.

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

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

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

Тому що для цього потрібне повторне відображення всієї сцени з точки зору кожного світла - до шести разів, якщо це точкове світло, яке світить у всі боки {північ, південь, схід, захід, вгору, вниз}, і нам потрібно повторно -видання тіньової карти в будь-який час, коли щось рухається, це може стати дуже дорогим.

Тому ігри часто зосереджують свій бюджет відтворення на найважливіших вогнях сцени - на зразок спрямованого сонячного світла - для того, щоб вони мали гарні тіні. Маленькі, короткочасні, незначні вогні, як спалах вибуху, часто прощаються, якщо вони трохи просочуються повз окклюдерів. Часто це є більш приємним для гравців, ніж замикання в кадрі через різке збільшення вартості візуалізації з усієї додаткової подачі та розрахунку тіньової карти. Особливо, якщо це насичена сцена дій, де плинність має значення більше ніж досконалість пікселів.


3
Ще одна зморшка полягає в тому, що хоч і неприємно з’ясувати, чи знаходиться джерело світла перед поверхнею або позаду, запобігаючи, щоб поверхні світилися, коли світиться ззаду, часто дають дивні результати.
supercat

Особливо це стосується ефектів частинок (що, мабуть, вибух є, принаймні частково), оскільки частинки повинні бути особливо дешевими в обробці, щоб бути дуже корисними.
Луань

2
Світло і частинки - це дві різні речі. Частинка також може «просочитися» через перешкоду, але з зовсім інших причин. Іноді в систему частинок також буде включено світло, яке допоможе продати ефект (подумайте про багаття або рій світлячків), але світло всередині ефекту частинок все ще є лише світлом, як правило, не будь-яким спеціальним варіантом.
DMGregory

2
Альтернативний підхід до тіньових карт - це тіньові об'єми , які виправляють проблему згладжування, але є дорожчою: вимагає надання додаткової геометрії (новий багатокутник на край силуету кожного об'єкта для кожного джерела світла), а також додаткові пропуски візуалізації. Я б очікував, що підхід до картографування досить хороший для більшості ситуацій.
DarthFennec

22

Якщо коротко розповісти, це відбувається з міркувань продуктивності.

Коли на екрані з’являється світло, воно за замовчуванням світить на всі об’єкти (перешкоджає чи ні), тож грі потрібно буде робити додаткові розрахунки, щоб побачити, на який об’єкт впливає.

Це простіше вирішити на статичних об'єктах, використовуючи статичне та запечене освітлення, але це не те саме для динамічних вогнів, як вибухи, як ви зазначили.

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


6
Тож, промінь відстежує більше, ніж для фільмів CGI, ніж для ігор у режимі реального часу?
Нагромадження

21
@ Накопичення Це правильно. Один кадр фільму може зайняти кілька годин, а гра - лише мілісекунди.
NobodyNada

16
Однак, ігри все частіше досліджують, використовуючи просвічування або ремаршинг в тандемі з технікою растризації, дозволяючи растерізатору робити те, що в ньому добре, і промені роблять те, в чому вони хороші. Це не повне проміння кожного пікселя, але ви все одно можете отримати чудові ефекти таким чином.
DMGregory

2
@DMGregory Дійсно, такі ігри, як Duke Nukem 3D, вже використовували дуже спрощений варіант прослуховування - хоча він не використовувався для динамічного освітлення, і він точно не простежував кожен піксель на екрані (зазвичай це робилося для кожного стовпця пікселів), а відображення та прозорість все ще були особливим випадком, а не типовим. Програми 3D-рендерінгу завжди грали з подібними підходами, саме апаратний 3D-апарат закрив цю дорогу (дотепер).
Луань

@ Акумуляція Raytracing відбувається на різних рівнях, тому, хоча ігри можуть на вершині лінійки обладнання знімати первинні промені, вони все ще не роблять достатньо вторинних відмов або декількох відмов на піксель. Тож навіть якщо ви хочете прослідкувати, ви все одно матимете подібні результати. Таким чином, простеження основних світильників все ще не означає, що ви можете дозволити рендеривати всі вторинні світильники.
joojaa
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.