물리 기반 음영-주변 / 간접 조명


15

M. Pharr과 G. Humphreys가 PBRT를 공부 한 후 물리 기반 경로 추적기를 구현했습니다. 이제 iPhone 응용 프로그램에서 OpenGL ES를 사용하여 실제 그래픽을 실시간 그래픽에 적용하려고합니다.

Oren-Nayar와 Cook-Torrance를 확산 및 반사 BRDF로 사용하고 싶지만 간접 조명을 어떻게 모델링합니까?

pbrt에 포함 된 것과 같은 경로 추적기에서 간접 / 주변 광은 직접 및 간접 조명을 고려한 광선의 경로를 따르기 때문에 경로 추적 알고리즘에서 "자동으로"제공됩니다.

실시간 컴퓨터 그래픽을 사용하여 OpenGL ES로 작성된 물리적 기반 렌더에서 간접 조명을 어떻게 모델링합니까?

답변:


39

실시간 그래픽은 간접 조명 시뮬레이션의 계산 비용을 처리하고 런타임 성능과 조명 충실도 간의 균형을 맞추기 위해 다양한 근사치를 배포합니다. 이것은 매년 새로운 기술이 등장하는 활발한 연구 분야입니다.

주변 조명

범위의 가장 간단한 끝에서 주변 조명을 사용할 수 있습니다 에서 실제 조명이나 로컬 가시성에 관계없이 장면의 모든 물체에 적용되는 전 방향 전 방향 광원 인 . 이것은 전혀 정확하지는 않지만 아티스트가 쉽게 조정할 수 있고 매우 저렴하며 장면과 원하는 비주얼 스타일에 따라 좋아 보일 수 있습니다.

기본 주변 조명에 대한 일반적인 확장은 다음과 같습니다.

  • 구형 고조파 (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 피트의 개요와 추가 읽기를위한 컨텍스트 만 제공 할 수 있습니다. 어떤 응용 프로그램에 가장 적합한 방법은 특정 응용 프로그램의 세부 정보, 어떤 제약 조건을 수용 할 것인지, 얼마나 많은 시간을 투자해야하는지에 따라 크게 달라집니다.


안녕하세요 @Nathan, 자세한 답변 주셔서 감사합니다. 나는 이것이 큰 주제 (그리고 큰 연구 주제)라는 것을 알고 있습니다. 가장 큰 문제는 온라인 설명서가 조각화되어 있으며 좋은 접근 방법을 찾기가 어렵다는 것입니다. 내 프로젝트는이 goo.gl/Fgo21x : 가장 일반적인 경험적 및 물리적 기반의 BRDF 모델을 표시하고 3 자극 값인 스펙트럼 데이터를 사용하여 색상 계산을 지원하는 BRDF 뷰어 (WDAS 뷰어에서 영감을 얻은)입니다. OpenGL을 공부하기위한 교육 프로젝트입니다.
Fabrizio Duroni

SH 또는 작은 큐브 맵 + 환경 큐브 맵 (반사 및 굴절)과 같은 일반적인 확장을 사용하는 것이 가장 좋은 첫 번째 방법이라고 생각합니다. 당신이 그것에 대해 어떻게 생각하십니까? (나는 잠 못 이루는 밤 동안 퇴근 후이 응용 프로그램을 개발 중입니다 :)). 위에 링크 한 출처 모음에 대해 다시 한 번 감사드립니다 (지금 공부할 자료가 많이 있습니다).
Fabrizio Duroni

트윗 담아 가기 BRDF 뷰어의 경우 간단한 지향성 주변 환경과 환경 큐브 맵이 좋습니다.
Nathan Reed

어쩌면 이것은 귀하의 카테고리 중 하나에 속하지만 구식으로 렌더링 된 모든면의 큐브 맵 기술적으로 완전히 실시간 기술이 아닙니까? 또한 확산 반사를위한 환경 큐브 맵으로 기본 주변을 보강 할 수 없습니까?

@racarate 죄송합니다. 응답하는 데 시간이 조금 걸리지 만, 그렇습니다. 나는 그것을 언급하려고 생각했지만 잊어 버렸습니다. :) 어쨌든 나는 그것을 추가했다. (첫 번째 글 머리 기호에서 확산을 위해 큐브 맵을 사용하는 것에 대해 언급했습니다.)
Nathan Reed

5

이는 실시간 CG에 남아있는 주요 '어려운'문제이며이를 해결하기위한 많은 연구가 진행되고 있습니다.

가장 큰 장애물은 래스터 그래픽에서 장면의 각 구성 요소가 '진공 상태'로 렌더링된다는 것입니다. 각 삼각형은 장면의 다른 삼각형을 참조하지 않고 렌더링되며 광선 추적 방식과 달리 픽셀도 마찬가지입니다. 여기서 각 광선은 메모리의 전체 장면에 액세스 할 수 있습니다. 따라서 실시간 프로그래머는 해키 트릭을 사용하여 반사 및 그림자와 같은 작업을 수행해야하며 전역 조명에도 동일하게 적용됩니다.

저렴한 런타임 방법은 구운 라이트 맵을 사용하는 것인데, 여기서 라디오 시티 나 경로 추적과 같은 느리지 만 멋진 것을 먼저 실행 한 다음 일반 정점 데이터와 함께 조명 정보를 저장합니다. 이것은 정적 지오메트리에는 유용하지만 움직이는 객체를 추가하자마자 문제가됩니다. Michal Iwanicki는 'The Last of Us'를 위해이 문제를 어떻게 해결했는지에 대해 훌륭한 발표를 했습니다.

구형 고조파 는 게임 엔진에서 간접 조명을 나타내는 데 많이 사용됩니다. 그것들은 기본적으로 구의 표면을 가로 지르는 푸리에 변환입니다. 고주파 성분을 버려서 색상 당 9 계수로 시각적으로 만족스럽고 대부분 정확한 환경 조명을 얻을 수 있습니다. 예를 들어, Unity는 SH를 사용하여 장면의 다양한 지점에서 '조명 프로브'를 굽습니다. 그러면 움직이는 물체가 근처의 프로브 사이를 보간하여 자신의 위치에서 간접 조명의 근사치를 얻을 수 있습니다. 로빈 그린의 논문 은 기본적으로이 기술에 대한 성경이지만, 꽤 무겁습니다.

현재 가장 인기있는 기술은 사전 베이킹 단계를 거치지 않는 복셀 콘 트레이싱 인 것 같습니다. 나는 그것에 익숙하지 않지만, 내가 이해하는 것처럼, 장면을 저해상도 마인 크래프트 스타일의 세계로 복 셀링하여 복셀을 octree와 같이 빠르게 이동 가능한 공간 구조에 배치 한 다음 바운스 조명을 수집하기 위해 어떤 복셀을 쳤는지 확인합니다. NVidia는 현재 이것을 매우 열심히 추진하고 있으며 여기여기 에 논문이 있습니다 .

희망이 있습니다 :)


0

경로 추적은 계산 비용이 많이 드는 알고리즘이며 실시간에는 적합하지 않습니다. PBRT의 아키텍처는 실시간에도 적합하지 않으며 PBRT의 주요 목표는 편향되지 않은 Monte Carlo 통합을 사용하여 렌더링 방정식을 해결하는 것입니다. 자세한 내용은 https://en.wikipedia.org/wiki/Unbiased_rendering 을 참조 하십시오 .

많은 최적화와 제약이 없으면 모바일 장치에서 적절한 성능에 도달 할 수 있을지 의심됩니다.

어쨌든 OpenGL에서 경로 추적을 구현할 수 있으므로 매우 강력한 컴퓨팅 셰이더 를 살펴 보는 것이 좋습니다 . OpenGL ES 3.1은 Desktop GL과 달리 약간의 제한이있는 컴퓨팅 쉐이더를 지원합니다.

자세한 내용은 https://github.com/LWJGL/lwjgl3-wiki/wiki/2.6.1을 참조하십시오 .- Ray-tracing-with-OpenGL-Compute-Shaders- (Part-I)

행운을 빌어 요!

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.