일부 게임에서 벽을 통해 빛이 비추는 이유는 무엇입니까?


28

일부 게임에서는 비디오 품질을 높은 수준으로 설정하더라도 벽을 통해 빛이 비치는 것을 볼 수 있습니다.

내가 최근에 한 게임의 예는 Borderlands 2 (미사일 폭발)와 Call of Cthulhu (랜턴; 게임은 심지어 Unreal Engine 4를 사용합니다)입니다.

버그입니까, 아니면 성능상의 이유가 있습니까?

Borderlands 2 : https://youtu.be/9bV83qA6_mU?t=419 (몇 번이지만 빠르게)

보너스 질문 : 후자의 경우 광선 추적을 사용하여 문제를 해결할 수있는 방법이 있습니까? 비싼 RT가 문제를 확실히 해결했다고 생각하지만이 특정 문제를 해결하기 위해 "저렴한"형식으로도 사용할 수 있을지 궁금합니다.


21
그림은 1000 단어의 가치가 있습니다.
Evorlor

8
나는 테스트를 위해 놀러 가야하지만 실제로 누출되는 입니까, 아니면 빛나는 입자 효과 일 수 있습니까? 특히 당신의 미사일 폭발 사례는 충돌을 무시할 가능성이 큰 추가 "화재"입자 효과를 상상할 수 있습니다. 랜턴도 눈에 띄는 후광을 만들기 위해 동일한 작업을 수행 할 수 있습니다.
AC

@Evorlor는 한 가지 예를 추가했습니다.
마커스

답변:


43

TomTsagk의 정답을 확장하면서 게임이 왜 이런 식으로 작동하는지에 대해 조금 더 설명하는 것이 도움이 될 것이라고 생각했습니다.

게임의 빛은 소스, 표면, 카메라로 이동하는 데 방해가되지 않습니다.

주어진 빛을 기준으로 표면의 각 픽셀을 얼마나 밝게 그리는지 알아 내기 위해 표면의 마주 보는 방향과 표면의이 점에서 광원까지의 방향을 사용하는 수학 공식을 사용합니다. 그것이 바로 그 방향입니다. 빛이 실제로이 픽셀에 도달하는지 확인하기 위해 광선을 캐스트하지는 않습니다. 왜냐하면 화면의 모든 픽셀에 대해 그렇게하고 장면의 모든 상세한 지오메트리에 대해 광선을 확인하기 때문입니다. 일반적으로 실시간 게임에는 여전히 너무 비쌉니다.

따라서 기본적으로 게임 라이트는 그림자를 드리 우지 않습니다. 그림자 캐스터가 있어도 빛의 방향은 동일하게 유지되므로 수학은 동일한 밝기 값을 제공합니다.

그림자를 시뮬레이트하려면 별도로 수행해야합니다. 한 가지 일반적인 방법은 그림자 맵이라고하는 것입니다. 이 버전에서는 장면을 가리기 전에 먼저 조명이 카메라 인 것처럼 각 조명의 관점에서 장면을 렌더링합니다. 각 픽셀의 깊이는 화면 외부 텍스처에 저장됩니다.

그런 다음 장면을 가리면 광원에서이 픽셀의 수학적 거리와 그림자 맵의 해당 픽셀에서 기록한 깊이를 비교할 수 있습니다. 그림자 맵 깊이가 더 작 으면 여기와 빛 사이에 다른 표면이 있음을 의미하고 대신이 픽셀을 그림자로 그립니다.

아티팩트 / 앨리어싱을 줄이면서 이러한 맵 기반 그림자를 더 멋지게 보이게하는 멋진 기술이 많이 있지만 지금은 그에 대해 설명하겠습니다. 말하기에는 충분하지만 일반적으로 무료가 아닙니다.

각 라이트의 관점에서 다시 전체 장면을 렌더링 (최대)해야합니다. 모든 방향 (북쪽, 남쪽, 동쪽, 서쪽, 위, 아래)으로 비춰지는 포인트 라이트 인 경우 최대 6 배이므로 다시 사용해야합니다. -무언가가 움직일 때마다 그림자 맵을 렌더링하면 매우 비쌀 수 있습니다.

따라서 게임은 종종 그림자가 잘 보이도록 방향성 태양 광과 같이 장면에서 가장 중요한 조명에 렌더링 예산을 집중시킵니다. 폭발의 섬광과 같은 작고 수명이 짧은 작은 조명은 폐쇄 장치를 약간 지나서 누출되는 경우 종종 용서할 수 있습니다. 모든 추가 그림자 맵 렌더링 및 계산으로 인해 렌더링 비용이 갑자기 증가하여 프레임 속도의 장애보다 플레이어에게 더 입맛을 잡는 경우가 많습니다. 특히 유동성이 픽셀 완성보다 중요한 바쁜 액션 장면이라면.


3
또 다른 주름은 광원이 표면의 앞 또는 뒤에 있는지 알아내는 것이 사소한 일이지만 뒤에서 조명을받을 때 표면이 빛나지 않도록 방지하는 경우가 종종 이상하게 보입니다.
슈퍼 캣

그리고 입자가 매우 유용하기 위해서는 특히 저렴해야하기 때문에 입자 효과 (폭발이 아마도 부분적으로 일어날 수 있음)에서 특히 그렇습니다.
루안

2
빛과 입자는 서로 다른 두 가지입니다. 입자는 장애물을 통해 "누설"될 수 있지만 완전히 다른 이유로 인해 발생합니다. 때때로 파티클 시스템에는 효과를 판매하는 데 도움이되는 조명 (캠프 파이어 또는 반딧불 떼 생각)도 포함되지만, 파티클 이펙트 내부의 조명은 여전히 ​​빛일 뿐이며 일반적으로 특별한 변형은 아닙니다.
DMGregory

2
쉐도우 맵에 대한 다른 접근 방식 은 쉐도우 볼륨 ( alias volume )으로 앨리어싱 문제를 해결하지만 비용이 많이 듭니다. 추가 렌더링 패스와 함께 추가 지오메트리 렌더링 (각 광원의 각 객체의 실루엣 모서리 당 새로운 다각형)이 필요합니다. 그래도 매핑 접근법이 대부분의 상황에 충분할 것으로 기대합니다.
DarthFennec

22

간단히 말해서, 이것은 성능상의 이유로 발생합니다.

화면에 빛이 있으면 기본적으로 모든 물체에 빛이 비춰 지므로 (폐쇄되어 있든 없든) 게임은 어떤 물체가 무엇에 의해 영향을 받는지 확인하기 위해 추가 계산을해야합니다.

정적 조명과 구운 조명을 사용하여 정적 오브젝트를 해결하는 것이 더 쉽지만 폭발과 같은 동적 조명에서는 동일하지 않습니다.

보너스 질문의 경우 레이 트레이싱과 싸구려가 같은 문장으로 함께 가지 않습니다. 지금까지 광선 추적이 주류가되지 못한 유일한 이유는 성능입니다. 모든 조명이 광선 추적을 사용한다고 가정하면이 문제는 "해결"되지만 성능이 저하됩니다.


6
그렇다면 레이 트레이싱은 실시간 게임보다 CGI 영화에 더 많은 것입니까?
누적

21
@Acccumulation 맞습니다. 영화의 단일 프레임은 렌더링하는 데 몇 시간이 걸릴 수 있지만 게임에는 밀리 초 만 있습니다.
NobodyNada-

16
즉, 게임은 래스터 화 기술과 연계하여 레이트 레이싱 또는 레이 마칭을 사용하여 점점 더 많이 탐색하고 있으며, 래스터 라이저가 잘하는 것을 수행하고 광선이 잘하는 것을 수행하게합니다. 모든 픽셀을 완전히 레이트 레이싱하는 것은 아니지만 그래도 훌륭한 효과를 얻을 수 있습니다.
DMGregory

2
이 동적 조명에 사용되지 않았다하더라도, 그것은 - @DMGregory 사실, 듀크 뉴켐 3D 같은 게임은 이미 레이트 레이싱의 매우 단순화 된 변형을 사용 확실히 일반적으로, 그것은 각 열에 대해 이루어졌다 화면 (에 모든 단일 픽셀을 추적하지 않았다 픽셀 수), 반사 및 투명도는 여전히 기본값이 아닌 특별한 경우입니다. 소프트웨어 3D 렌더링은 항상 유사한 접근 방식으로 진행되어 왔으며 지금까지는 그 길을 막는 것이 하드웨어 3D였습니다.
루안

@Acccumulation Raytracing은 다양한 수준으로 제공되므로 게임에서 라인 하드웨어를 통해 기본 광선을 촬영할 수는 있지만 픽셀 당 충분한 2 차 바운스 또는 여러 바운스를 수행 할 수는 없습니다. 따라서 광선 추적을 수행하더라도 여전히 이와 같은 성능 균형을 유지해야합니다. 따라서 주 조명 추적 기능이 여전히 모든 보조 조명을 렌더링 할 여유가있는 것은 아닙니다.
joojaa
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.