W niektórych grach widzę światła świecące przez ściany, nawet jeśli ustawię jakość wideo na wysokich poziomach.
Kilka przykładów gier, w które ostatnio grałem, to Borderlands 2 (wybuchy pocisków) i Call of Cthulhu (latarnie; gra korzysta nawet z silnika Unreal Engine 4).
Czy to błąd, czy istnieją przyczyny związane z wydajnością?
Przykład Borderlands 2: https://youtu.be/9bV83qA6_mU?t=419 (kilka razy, ale szybko)
Pytanie dodatkowe: w tym drugim przypadku, czy istnieje jakiś sposób, by ray tracing mógł być tanio wykorzystany do rozwiązania problemu? Myślę, że drogi RT zdecydowanie rozwiązał problem, ale zastanawiam się, czy można go również użyć w „taniej” formie, aby rozwiązać ten konkretny problem.
lighting
shadows
raytracing
Marcus
źródło
źródło
Odpowiedzi:
Rozwijając poprawną odpowiedź TomTsagk, pomyślałem, że może pomóc trochę lepiej opisać, dlaczego gry działają w ten sposób.
Światło w grach tak naprawdę nie „przemieszcza się” ze źródła, na powierzchnię, do kamery, przeszkadzając po drodze.
Aby dowiedzieć się, jak jasno rysować każdy piksel powierzchni w oparciu o dane światło, używamy (lub w przybliżeniu) wzoru matematycznego, który wykorzystuje skierowany w kierunku powierzchni i kierunek od tego punktu na powierzchni do źródła światła. To wszystko, tylko kierunek, z którego świeci - zwykle nie rzucamy promienia, aby sprawdzić, czy światło rzeczywiście dociera do tego piksela, ponieważ robienie tego dla każdego piksela na ekranie i sprawdzanie promienia względem całej szczegółowej geometrii w scenie jest zwykle wciąż zbyt drogie dla gier w czasie rzeczywistym.
Domyślnie żadne światła gry nie rzucają cieni. Kierunek do światła pozostaje taki sam, nawet jeśli przeszkadza mu cień, więc matematyka daje nam tę samą wartość jasności.
Jeśli chcemy symulować cienie, musimy to zrobić osobno. Jednym z powszechnych sposobów jest tak zwana mapa cieni. W tej wersji, zanim zaciemnimy naszą scenę, najpierw renderujemy scenę z perspektywy każdego światła, tak jakby to światło było kamerą, przechowującą głębokość każdego piksela, który widzi, w teksturę poza ekranem.
Następnie, kiedy cieniujemy scenę, możemy porównać matematyczną odległość tego piksela od źródła światła z głębokością zarejestrowaną dla odpowiedniego piksela na mapie cienia. Jeśli głębokość mapy cienia jest mniejsza, oznacza to, że jest tu inna powierzchnia między światłem a światłem, a my piksel ten rysujemy w cieniu.
Istnieje wiele fajnych technik, dzięki którym te cienie oparte na mapie wyglądają ładniej, z mniejszą liczbą artefaktów / aliasingu, ale na razie ich pomaluję. Wystarczy powiedzieć, że na ogół też nie są wolne.
Ponieważ wymaga to renderowania (maksymalnie) całej sceny z perspektywy każdego światła - nawet sześć razy, jeśli jest to światło punktowe, które świeci we wszystkich kierunkach {północ, południe, wschód, zachód, góra, dół}, i musimy ponownie -renderuj mapę cienia za każdym razem, gdy coś się porusza, może to być bardzo kosztowne.
Dlatego gry często koncentrują swój budżet renderowania na najważniejszych światłach na scenie - takich jak kierunkowe światło słoneczne - aby zapewnić dobrze wyglądające cienie. Małe, krótkotrwałe, niewielkie światła, takie jak błysk eksplozji, są często wybaczalne, jeśli trochę przeciekają obok okluderów. Często jest to bardziej smaczne dla graczy niż problem z szybkością klatek na sekundę ze względu na nagły wzrost kosztów renderowania w wyniku dodatkowego renderowania mapy cieni i obliczeń. Zwłaszcza jeśli jest to ruchliwa scena akcji, w której płynność jest ważniejsza niż perfekcja pikseli.
źródło
Krótko mówiąc, dzieje się tak ze względu na wydajność.
Gdy na ekranie jest światło, domyślnie świeci ono na wszystkie obiekty (zasłonięte lub nie), więc gra musiałaby wykonać dodatkowe obliczenia, aby zobaczyć, na który obiekt ma wpływ.
Łatwiej jest to rozwiązać na obiektach statycznych za pomocą statycznego i wypalonego oświetlenia, ale nie jest to takie samo na dynamicznych światłach, takich jak wybuchy, jak zauważyłeś.
W przypadku pytania bonusowego ray tracing i tanie nie idą w parze w tym samym zdaniu. Jedynym powodem, dla którego ray tracing nie był do tej pory głównym nurtem, jest wydajność. Zakładając, że wszystkie światła używają śledzenia promieni, problem ten zostałby „rozwiązany”, ale kosztem wydajności.
źródło