반사

실제 세계에서는 거의 모든 표면이 약간이라도 반사광 반사성을 보입니다. Stingray의 물리적 렌더링 시스템에서는 각 재질의 metallic 설정이 특정 시야각에서 재질이 어느 정도 반사광 반사성을 보이는지 결정하고, roughness 설정이 반사가 선명하거나 흐릿한 정도를 결정합니다.

하지만 반사 라이트가 필요한 경우 이 반사는 어디에서 이루어지는 것일까요?

정확히 말해, 그 자신도 장면의 다른 부분을 반사할 수 있는 장면 내 다른 오브젝트를 반사한다는 것은 여러 번의 바운스가 이루어지는 동안 장면을 가로지르는 광선의 경로를 추적한다는 것입니다. 포함되는 표면의 수, 그리고 반사의 상호작용이 얼마나 복잡할지 감안하면 이러한 종류의 시뮬레이션에 필요한 계산을 게임에서 실시간으로 수행하기에는 부담이 너무 큽니다.

하지만 수준 내 반사 라이트에 대한 최대한의 근사치에 도달할 수 있는 여러 방법이 있습니다. 자체 게임에 활용할 때에는 이 기술들을 서로 잘 접목해야 할 것입니다. 대개 재질이 더 부드럽고 평평할수록 충분히 정확한 반사가 이루어지도록 하기가 더 힘들다는 점을 염두에 두십시오.

비금속 표면은 반사광 라이트의 색상이 변하지 않는다는 점을 기억하십시오. 금속 표면은 반사하는 라이트를 재질 색상으로 물들입니다.

전역 반사광 라이트

음영처리 환경의 전역 라이트 설정에서 오브젝트가 어느 정도의 반사광 반사성을 보여야 하는 모든 경우에 기본적으로 사용할 텍스처를 지정할 수 있습니다. 이것이 일반적으로 수준 내 대표적인 위치에 반사 프로브를 배치하고, 이 반사 프로브를 텍스처로 베이킹하여 생성하는 단일 볼륨 맵입니다. 그 절차에 대한 자세한 내용은 전역 환경 조명을 참조하십시오.

이 방법을 사용하면 수준 내 모든 표면에 대한 기본 반사광 조명을 한 곳에서 쉽게 설정할 수 있습니다. 수준의 조명 조건이 비교적 일관되고, 표면이 심하게 부드럽고 반사적이지 않다면 이 정도만 해도 물리적 기반 재질에 알맞은 색상의 충분히 그럴듯해 보이는 반사 라이트를 표현할 수 있습니다.

예를 들어, 아래 장면에서는 전역 반사광 맵이 반사성이 매우 강한 얼음 지면을 강조 표시하고 있습니다.

이 전역 라이트 맵이 모든 곳에 적용된다는 사실은 이 방법의 단점이기도 합니다. 이 볼륨 맵을 사용하면 종종 수준 내 특정 위치에서 반사광 라이트의 색상 또는 수준이 부적합하게 나타나곤 합니다. 예를 들면, 전역 반사광 맵을 베이킹한 라이트 프로브에게 하늘이 보이는 경우 이 하늘이 표면(건물 내부 또는 다른 오브젝트 아래 있는 표면)으로부터 보이지 않게 가려져 있는 경우에도 반사되어 눈에 보입니다. 아래 이미지의 각도에서는 하늘이 벽과 천장에 가려져 있기 때문에 얼음에 하늘이 반사되면 안 됩니다.

반사 프로브 배치

전역 반사광 조명용으로 사용하는 것 외에 추가로 라이트 프로브를 장면에 배치할 수 있습니다.

수준에서 반사 프로브에 대해 설정되어 있는 경계 내에 반사 오브젝트가 있는 경우 이 오브젝트의 표면은 항상 전역 맵이 아닌 해당 프로브에 의해 베이킹된 반사 맵을 사용합니다. 보통 이렇게 지역화된 반사 맵이 프로브와 가까운 오브젝트에 대해서는 단일 전역 반사광 맵보다 더 정확합니다.

예를 들어, 이 이미지에서는 프로브가 구 위치에 배치되어 있습니다. 그 베이킹된 반사가 전역 반사광 맵을 오버라이드하면서 구의 관점에서 장면을 더 정확하게 보여줍니다.

또한, 여러 반사 프로브의 경계가 겹치면서 한 표면이 겹친 영역에 들어오는 경우 이 표면은 두 반사 맵을 모두 선택한 다음, 그 상대 위치를 기준으로 두 맵을 보간합니다. 덕분에 반사 표면을 지닌 움직이는 오브젝트가 여러 프로브에 의해 베이킹된 반사 사이를 전환하면서도 항상 그 반사가 최대한 사실적으로 유지될 수 있는 것입니다.

반사 프로브가 배치된 수준을 설정하는 방법은 베이킹된 반사 프로브 설정을 참조하십시오.

지역화된 반사 프로브는 대개 베이킹된 단일 전역 반사광 텍스처를 사용하는 것보다 향상된 결과를 보여줍니다. 하지만 전역 조명을 사용할 때 실제 도달할 수 있는 반사광 라이트가 없는 위치에 반사광 반사가 나타나거나 반사가 기대한 오브젝트와 일치하지 않는 현상이 발생하는 것처럼 전역 조명과 같은 종류의 아티팩트가 여전히 눈에 보일 수 있습니다.

예를 들어, 이 이미지에서 상자는 매우 금속성이 강하게 만들어졌기 때문에 프로브에 의해 베이킹된 반사광 반사를 받아들입니다. 여기에서는 반사가 잘못되었습니다. 키가 더 큰 상자가 빨간색 벽을 반사하고 있어야 합니다.

라이트 프로브를 사용하여 수준에 대한 반사를 베이킹하는 데 있어 가장 큰 단점이 바로 베이킹된 텍스처가 정적이라는 점입니다. 정적인 텍스처가 보여주는 반사에는 텍스처가 베이킹될 때 수준에 존재하고 있던 오브젝트만 포함될 수 있습니다. 게임이 진행되면서 동적으로 발생하는 일들은 전혀 반영되지 않습니다. 예를 들어, 게임에서 건물이 파괴된다고 해도 가까운 표면에는 이 건물이 계속 반사되어 나타납니다. 변화가 예측 가능하다면 하나는 건물이 존재하는 상태로 설정하고, 다른 하나는 건물이 없는 상태로 설정하는 식으로 여러 라이트 프로브 세트를 베이킹한 다음 흐름 또는 Lua 게임 플레이 코드에서 반사 프로브를 토글하는 식으로 이 문제를 해결할 수도 있을 것입니다. 하지만 이런 방식은 실현 가능성이 희박합니다.

화면 공간 반사

대부분의 게임 수준은 플레이어 캐릭터, NPC, 탈것이 돌아다니고, 입자 효과가 시작되고 중지되고, 오브젝트가 생성되고 파괴되는 등 시간이 지나면서 다양한 방식으로 변화합니다. 이러한 동적 오브젝트들이 반사 표면에 비춰지게 하려면 매 프레임을 렌더링한 후 동적 반사를 포스트 효과인 것처럼 "위조"하는 기법인 화면 공간 반사를 추가하면 됩니다.

Stingray는 프레임을 렌더링할 때 카메라에서 프레임 내 다양한 음영처리 표면까지의 거리에 대한 기록인 깊이 버퍼도 생성합니다. 이 깊이 정보를 사용하여 렌더러는 표면이 프레임에 이미 렌더링된 것이 아닌 다른 무언가를 반사할 때 이를 감지한 다음, 이 음영처리 오브젝트를 반사 표면에 반사시킬 수 있습니다.

여기에서는 반사되고 있는 정적 표적 및 경사로뿐 아니라 동적 캐릭터도 볼 수 있습니다.

화면 공간 반사는 동적으로 움직이는 오브젝트를 추가하고, 표면이 주변을 더 정확하게 반사하도록 함으로써 베이킹된 프로브를 보완합니다. 실제 눈에 보이는 요소에 따라 반사광 강조 표시를 밝게하거나 어둡게 함으로써 베이킹된 프로브를 보완할 수도 있습니다. 예를 들어, 위에 보이는 이미지 버전에서는 화면 공간 반사가 지면에 나타날 수 없는 반사광 강조 표시를 어둑하게 만들어주고 있습니다.

화면 공간 반사는 음영처리 환경에서 설정합니다. 자세한 내용은 음영처리 환경 특성을 참조하십시오.

하지만 화면 공간 반사가 완벽한 것은 아닙니다. 화면 공간 반사를 사용하면 매우 들쭉날쭉한 아티팩트가 생성되기 때문에 일반적으로 거칠기가 최소한으로 작은 표면에서 사용하는 것이 가장 좋습니다. 완전히 부드러운 금속은 보통 결점이 너무 뚜렷하게 보입니다.

또한, 화면 공간 반사는 태생적으로 프레임 내 어디에서도 아직 보이지 않는 표면은 반사할 수 없습니다. 즉, 오브젝트의 화면 밖 부분은 보이지 않고, 오브젝트의 카메라 반대편 방향의 모든 면도 보이지 않습니다. 렌더링된 오브젝트의 두께에 관한 정보도 보유하지 않습니다. 그러므로 때로는 반사 표면과 반사되어야 하는 오브젝트 간의 화면 공간을 가로지르는 전경 오브젝트가 있는 경우 배경 오브젝트를 언제 렌더링해야 하는지 파악할 수 없습니다. 음영처리 환경은 이 아티팩트를 최소화하기 위해 사용할 수 있는 몇 가지 매개변수를 제공합니다.

반사 소스 결합

위의 세 가지 방법은 게임에서 동시에 모두 사용할 수 있습니다. 렌더러는 각 픽셀에 그 효과를 다음과 같이 적용합니다.