실시간 그래픽은 간접 조명 시뮬레이션의 계산 비용을 처리하고 런타임 성능과 조명 충실도 간의 균형을 맞추기 위해 다양한 근사치를 배포합니다. 이것은 매년 새로운 기술이 등장하는 활발한 연구 분야입니다.
주변 조명
범위의 가장 간단한 끝에서 주변 조명을 사용할 수 있습니다 에서 실제 조명이나 로컬 가시성에 관계없이 장면의 모든 물체에 적용되는 전 방향 전 방향 광원 인 . 이것은 전혀 정확하지는 않지만 아티스트가 쉽게 조정할 수 있고 매우 저렴하며 장면과 원하는 비주얼 스타일에 따라 좋아 보일 수 있습니다.
기본 주변 조명에 대한 일반적인 확장은 다음과 같습니다.
- 구형 고조파 (SH) 또는 작은 큐브 맵 을 사용하고 각 정점 또는 픽셀의 법선 벡터를 기반으로 셰이더에서 색상을 찾는 등 주변 색상을 방향에 따라 변화 시킵니다. 이를 통해 직사광선이 도달하지 않는 경우에도 다른 방향의 표면을 시각적으로 구분할 수 있습니다.
- 사전 계산 된 정점 AO, AO 텍스처 맵, AO 필드 및 화면 공간 AO (SSAO)를 포함한 AOC (Ambient Oclusion) 기술을 적용 합니다. 이 모든 것은 간접 광이 반사 될 가능성이 적은 구멍이나 틈새와 같은 영역을 감지하고 주변 광을 어둡게함으로써 작동합니다.
- 주변 정반사를 제공하기 위해 환경 큐브 맵 을 추가하십시오 . 알맞은 해상도 (얼굴 당 128² 또는 256²)의 큐브 맵은 곡면 모양의 반짝이는 표면에 반사되는 데 매우 설득력이 있습니다.
구운 간접 조명
기술의 다음 "레벨" 은 장면에서 간접 조명의 일부 표현을 베이킹 (오프라인으로 사전 계산)하는 것입니다. 베이킹의 장점은 모든 어려운 부분이 베이크에서 이루어지기 때문에 실시간 계산 비용이 거의 들지 않고 고품질의 결과를 얻을 수 있다는 것입니다. 트레이드 오프는 베이킹 프로세스에 필요한 시간이 레벨 디자이너의 반복 속도에 해를 끼친다는 것입니다. 사전 계산 된 데이터를 저장하려면 더 많은 메모리와 디스크 공간이 필요합니다. 실시간으로 조명을 변경하는 기능은 매우 제한적입니다. 베이크 프로세스는 정적 레벨 지오메트리의 정보 만 사용할 수 있으므로 캐릭터와 같은 동적 객체의 간접 조명 효과가 누락됩니다. 여전히 구운 조명은 오늘날 AAA 게임에서 매우 널리 사용됩니다.
베이크 단계는 경로 추적, 라디오 시티 또는 게임 엔진 자체를 사용하여 큐브 맵 (또는 hemicube ) 을 렌더링하는 등 원하는 렌더링 알고리즘을 사용할 수 있습니다 .
결과는 레벨의 정적 지오메트리에 적용된 텍스처 ( 라이트 맵 )에 저장 될 수 있고 / 또는 SH로 변환되어 복사량 (각 텍셀이 SH 프로브를 저장하는 볼륨 텍스처) 과 같은 볼륨 데이터 구조에 저장 될 수도 있습니다. 또는 사면체 메쉬 . 그런 다음 셰이더를 사용하여 해당 데이터 구조에서 색상을 조회하고 보간하여 렌더링 된 형상에 적용 할 수 있습니다. 체적 접근 방식을 통해 구운 조명을 정적 객체뿐만 아니라 동적 객체에도 적용 할 수 있습니다.
라이트 맵 등의 공간 해상도는 메모리 및 기타 실제 제약 조건에 의해 제한되므로 구운 조명이 제공 할 수없는 고주파 세부 정보를 추가하고 동적 객체에 반응하기 위해 일부 AO 기술로 구운 조명을 보완 할 수 있습니다 (예 : 움직이는 캐릭터 나 차량에서 간접 조명을 어둡게하는 등).
또한 사전 계산 된 래디언스 전송 (PRT) 이라는 기술 이있어 더 역동적 인 조명 조건을 처리하기 위해 베이킹을 확장합니다. PRT에서는 간접 조명 자체를 굽는 대신 일부 광원 (일반적으로 하늘)에서 장면의 간접 조명으로 전달 기능 을 굽습니다 . 전달 함수는 각 베이크 샘플 포인트에서 소스에서 대상 SH 계수로 변환하는 매트릭스로 표시됩니다. 이를 통해 조명 환경을 변경할 수 있으며 장면의 간접 조명이 그에 맞게 반응합니다. Far Cry 3 및 4는이 기술 을 사용하여 하루 종일 연속적인 야간주기를 허용하며 간접 조명은 각 시간의 하늘 색상에 따라 달라집니다.
베이킹에 대한 또 다른 요점 : 확산 및 스페 큘러 간접 조명에 대해 별도의 베이킹 데이터를 갖는 것이 유용 할 수 있습니다. 큐브 맵은 스펙 큘러에 대해 SH보다 훨씬 잘 작동하지만 (큐브 맵에는 더 많은 각도 세부 정보를 가질 수 있기 때문에) 더 많은 메모리를 차지하므로 SH 샘플만큼 밀도를 높일 수 없습니다. 시차 보정 을 사용하여 큐브 맵을 경험적으로 변형시켜 반사가 주변 지오메트리에 더 잘 접지되도록 만듭니다.
완전 실시간 기술
마지막으로 GPU에서 완전 동적 간접 조명을 계산할 수 있습니다. 조명 또는 형상의 임의 변경에 실시간으로 응답 할 수 있습니다. 그러나 다시 런타임 성능, 조명 충실도 및 장면 크기간에 균형이 있습니다. 이러한 기술 중 일부는 작동하기 위해 강력한 GPU가 필요하며 제한된 장면 크기에서만 가능할 수 있습니다. 또한 일반적으로 한 번의 간접 광 바운스 만 지원합니다.
- 선택한 지점을 중심으로 클러스터 된 6 개의 카메라를 사용하여 큐브 맵의면이 각 프레임에 다시 렌더링되는 동적 환경 큐브 맵은 단일 오브젝트에 대해 적절한 주변 반사를 제공 할 수 있습니다. 예를 들어 레이싱 게임에서 플레이어 카에 자주 사용됩니다.
- 화면 공간 전역 조명 -사후 처리 단계에서 화면의 주변 픽셀에서 반사 조명을 수집하는 SSAO의 확장입니다.
- 화면 공간 광선 추적 반사 는 포스트 패스에서 깊이 버퍼를 통해 광선 마칭하여 작동합니다. 반사 된 물체가 화면에있는 한 상당히 높은 품질의 반사를 제공 할 수 있습니다.
- 즉석 라디오 시티 는 CPU를 사용하여 광선을 장면에 추적하고 각 광선 히트 포인트에 점 광선을 배치하여 광선에서 모든 방향으로 나가는 반사광을 대략적으로 나타냅니다. 그런 다음 가상 포인트 라이트 (VPL)로 알려진이 많은 라이트는 일반적인 방식으로 GPU에 의해 렌더링됩니다.
- 반사 그림자 맵 (RSM) 은 인스턴트 라디오 시티와 유사하지만 VPL은 그림자의 관점에서와 같이 빛의 관점에서 장면을 렌더링하고이 맵의 각 픽셀에 VPL을 배치하여 생성됩니다.
- 광 전파 량 은 장면 전체에 배치 된 SH 프로브의 3D 그리드로 구성됩니다. RSM은 반사 표면에 가장 가까운 SH 프로브에 빛을 "주사"하는 데 사용됩니다. 그런 다음 플러드 필 같은 프로세스는 각 SH 프로브에서 그리드의 주변 지점으로 빛을 전파하고 그 결과는 장면에 조명을 적용하는 데 사용됩니다. 이 기술 은 체적 산란 도 확장되었습니다 .
- 복셀 콘 추적 은 장면 형상을 복셀 화 (예 : 다양한 복셀 해상도 사용, 카메라 근처에서 더 미세하고 멀리 떨어져 있음) 한 다음 RSM의 빛을 복셀 그리드에 주입하여 작동합니다. 기본 장면을 렌더링 할 때 픽셀 셰이더는 복셀 그리드를 통해 점차적으로 증가하는 반경을 가진 광선 행진 인 "콘 트레이스"를 수행하여 확산 또는 정반사 음영을 위해 들어오는 빛을 수집합니다.
이러한 기술의 대부분은 실제 장면 크기 나 다른 제한으로 확장되는 문제로 인해 오늘날 게임에서 널리 사용되지 않습니다. 예외적으로 화면 공간 반사는 매우 인기가 있습니다 (화면 공간 부분이 실패하는 영역의 경우 대체로 큐브 맵과 함께 사용됨).
보시다시피, 실시간 간접 조명은 큰 주제이며, 심지어 (긴!) 대답조차도 10,000 피트의 개요와 추가 읽기를위한 컨텍스트 만 제공 할 수 있습니다. 어떤 응용 프로그램에 가장 적합한 방법은 특정 응용 프로그램의 세부 정보, 어떤 제약 조건을 수용 할 것인지, 얼마나 많은 시간을 투자해야하는지에 따라 크게 달라집니다.