구형 고조파 및 라이트 프로브 란 무엇입니까 ? 컴퓨터 그래픽에서 얼마나 유용합니까? 정확히 무엇을합니까? 시그 그래프 프레젠테이션에서 블로그 게시물에 이르기까지 구면 고조파 및 라이트 프로브라는 단어를 들었습니다.
최근에 Matt Pettineo는 6 부로 구성된 블로그 시리즈 를 게시 했지만 여전히 그들이 무엇인지 이해하지 못합니다.
주변 조명을 개선하는 또 다른 방법입니까?
구형 고조파 및 라이트 프로브 란 무엇입니까 ? 컴퓨터 그래픽에서 얼마나 유용합니까? 정확히 무엇을합니까? 시그 그래프 프레젠테이션에서 블로그 게시물에 이르기까지 구면 고조파 및 라이트 프로브라는 단어를 들었습니다.
최근에 Matt Pettineo는 6 부로 구성된 블로그 시리즈 를 게시 했지만 여전히 그들이 무엇인지 이해하지 못합니다.
주변 조명을 개선하는 또 다른 방법입니까?
답변:
구형 고조파의 기초
SH에서 효율적으로 수행 될 수있는 하나의 이러한 동작을 " 컨볼 루션 (convolution) " 이라고하며 , 이는 구형에 2 개의 구형 2D 함수의 곱을 통합하는 것을 의미한다. 이는 조명 계산에서 일반적인 작업입니다. 예를 들어 함수 중 하나는 입사 조명일 수 있고 하나는 BRDF입니다. SH로 표현 될 때,이 연산은 단순히 두 개의 SH 계수 벡터의 내적입니다.
또 다른 흥미로운 작업은 효율적인 저역 통과 필터링 기능입니다. SH는 주파수 영역으로 표현되기 때문에 이것은 단순히 SH 계수 중 일부를 스케일링하거나 제로화하는 문제입니다. 다른 한편으로, 일부 다른 연산들은 공간 영역에 비해 SH에서 수행하기 어려울 수있다. 예를 들어, SH로 표현 된 함수를 회전 시키려면, 고차 SH에 대해 상당히 비쌀 수있다. SH에서 수행하기에 적합한 지 여부는 실제로 문제에 달려 있습니다.
SH는 일반적으로 저주파 기능 (즉, 기능이 부드럽게 변경됨) 만 나타내는 데 사용됩니다. 고주파수는 저장량 (SH 계수) 및 처리를 증가시켜야하기 때문입니다. 이것이 반짝이는 표면의 정반사를 대체하기 위해 SH가 사용되지 않는 이유입니다. 또한 Zphere Spherical Harmonics 도 있는데 , SH 계수 행렬의 대각선 요소 만 저장하면 z 축에 대해 회전 대칭 인 2D 함수의 저장 및 계산을 줄일 수 있습니다. 또한 반구형 고조파 는 계수가 적은 SH와 유사한 주파수를 표현할 수 있다는 장점이있는 반구형 기능 (조명에서도)을 처리해야하는 경우 사용할 수 있습니다.
공간 도메인 데이터를 SH로 변환하기위한 "SH 투영"도 수행해야합니다. SH 기반 기능으로 공간 도메인 데이터의 컨볼 루션을 수행하여이 작업을 수행 할 수 있습니다. SH의 흥미로운 특성은 공간 도메인 표현과 달리 SH가 앨리어싱을 겪지 않으므로 매우 낮은 차수 SH로 투영 할 때에도 앨리어싱 아티팩트가 없다는 것입니다.
가벼운 프로브
SH의 기본 작업 및 속성을 이해 했으므로 GI에 적용하는 방법을 생각할 수 있습니다. 라이트 프로브는 모든 방향에서 프로브가 위치한 지점까지 얼마나 많은 빛이 들어오는 지 기록합니다. 이것은 구의 2D 기능이며 SH (또는 빨강, 녹색 및 파랑의 경우 3 SH 기능)로 표시 될 수 있습니다. 조명 세부 사항의 양에 따라 프로브로 인코딩하려는 경우 SH 순서를 선택할 수 있습니다.
Lambertian 확산 조명에만 사용되는 광 프로브의 경우 컨볼 루션이 코사인 로브로 수행되므로 2 차 SH (9 계수)로 표현할 수 있으므로 상당히 낮은 차수 SH이면 충분합니다. 프로브의 지점에서 큐브 맵을 렌더링 한 다음 SH로 투영하면 라이트 프로브의 SH 계수를 간단히 생성 할 수 있습니다.
지오메트리를 렌더링 할 때 가장 가까운 라이트 프로브를 가져와 결과를 보간하여 공간 내에서 입사 조명 기능을 얻습니다. 이것은 예를 들어 근처의 프로브의 SH 계수를 직접 보간 한 다음 SH 도메인에서 픽셀 법선 지향 코사인 로브와의 컨볼 루션을 수행하여 수행 할 수 있습니다.
푸리에 변환이 무엇인지 모른다면 구형 고조파를 이해하기 전에 알아야 할 것이 있습니다. 푸리에 변환을 사용하면 신호를 각각 마지막 주파수의 두 배의 사인파와 코사인 파로 표시 할 수 있습니다. 즉, 신호를 평균 길이와 신호 길이와 동일한 사인파, 그 파장의 두 배의 사인파 등으로 나타낼 수 있습니다. 푸리에 변환은 이러한 특정 파장으로 고정되므로 각 파장의 진폭 만 기록하면됩니다.
우리는 일반적으로 푸리에 변환을 사용하여 단지 2D 디지털 신호 인 이미지를 나타냅니다. 이미지가 사람의 눈에 미치는 영향을 크게 바꾸지 않으면 서 사인파 일부를 버리거나 진폭을 저장하는 정밀도를 줄일 수 있기 때문에 유용합니다. OTOH, 픽셀을 버리면 이미지의 모양이 많이 바뀝니다.
이미지와 같은 샘플링 된 신호에서 원본 이미지에 샘플 (픽셀)과 동일한 수의 사인파를 사용하면 이미지를 정확하게 재구성 할 수 있으므로 주파수를 버리기 시작하면 이미지의 저장 공간이 줄어 듭니다.
구형 고조파는 푸리에 변환과 유사하지만 사인파 대신 구형 함수를 사용하므로 선형 함수 (예 : 이미지) 대신 구체에 정의 된 함수 (예 : 환경 맵)를 나타낼 수 있습니다.
표준 이미지가 이미지 평면을 통해 특정 지점에 도달하는 모든 빛을 기록하는 것과 마찬가지로 라이트 프로브는 모든 방향에서 특정 지점에 도달하는 모든 빛을 기록합니다. 그들은 처음 영화 효과에서 나왔습니다. 컴퓨터에서 생성 된 객체를 실제 장면에 추가하려면 실제 조명으로 합성 객체에 조명을 비출 수 있어야합니다. 그렇게하려면 합성 물체가있는 장면의 점에 도달하는 빛을 알아야합니다. (NB는 "조명"이라고 말하지만 모든 빛 의 이미지를 기록하고 있으므로 반사에도 사용할 수 있습니다.)
모든 방향에서 단일 지점에 도달하는 모든 빛을 기록하는 구면 렌즈가있는 카메라를 가질 수 없기 때문에 구면 거울의 일반 사진을 촬영 한 다음 이미지를 구면에 다시 투영하여 기록합니다.
영화 효과 이외에 인공 장면에서 생성 된 라이트 프로브를 사용하는 것이 더 일반적입니다. 장면에서 GI (Global Illumination)를 계산하는 비싼 알고리즘이 있고이 장면에서 움직이는 작은 물체 (예 : 플레이어가있는 게임 레벨)도 있다고 상상해보십시오. 객체가 움직일 때마다 전체 GI 알고리즘을 실행할 수 없으므로 정적 장면으로 한 번 실행하고 레벨의 다양한 지점에서 촬영 한 라이트 프로브를 저장하십시오. 그런 다음 가장 가까운 광 프로브로 플레이어를 조명하여 GI에 대한 근사치를 얻을 수 있습니다.
일반적으로 어쨌든 글로벌 일루미네이션의 날카로운 가장자리를 걸러 내고 싶기 때문에 작고 쉽게 고주파를 버릴 수있는 가장자리를 표현할 수있는 방법을 원합니다. 그것이 구형 고조파가 정말 잘하는 것입니다! 그렇기 때문에이 두 용어가 많이 사용되는 것을들을 수 있습니다.
값 비싼 GI 알고리즘을 사용하여 라이트 프로브를 계산할 수 있습니다. 일반적으로 레벨 디자인 도구에서 또는 동적 객체를 포함 시키려면 초당 한 번 (프레임 당 한 번이 아닌)입니다. 구형 고조파를 사용하여 값싼 것을 저장하십시오 .16 개의 플로트는 고품질 조명에는 충분하지만 반사는 아닙니다. 그런 다음 조명하려는 각 동적 객체에 대해 가장 가까운 조명 프로브를 선택하거나 여러 개를 함께 보간하여 셰이더에 균일하거나 일정한 입력으로 사용합니다. 구면 고조파를 사용하여 앰비언트 오 클루 전 데이터를 나타내는 것이 일반적이며, 구면 고조파 기능을 회전시키는 데 약간의 복잡성이 있지만, 광 프로브와 함께 사용하는 것이 매우 저렴합니다.
구형 고조파
배열에 데이터가 있지만 더 적은 바이트 수로 해당 데이터를 나타내려고한다고 가정 해 봅시다.
이를 수행하는 한 가지 방법은 데이터를 원시 값 대신 함수로 표현하는 것입니다.
문제는 선형 방정식이 아마도 데이터에 대한 근사치가 아닐 수 있다는 것입니다.
우리는 선형 방정식과 비교하여 메모리 저장 공간과 데이터 저장 및 검색의 계산 복잡성을 증가 시켰지만 데이터 배열에 더 가까운 근사치입니다. 우리는 그것을 입방 함수 이상으로 가져갈 수도 있습니다. 차수를 늘리면 저장, 계산 및 정확도가 증가합니다.
위의 예에서와 같이, 더 낮은 차수의 고조파 함수를 사용하여 더 적은 저장 공간으로 무언가를 만들고 데이터를 계산하기 위해 더 낮은 계산으로 더 낮은 정확도를 얻을 수 있습니다.
반면에 순서를 늘리고 원본 데이터에 대한 근사값을 높일 수 있지만 필요한 저장 공간이 더 필요하고 데이터 포인트를 계산하는 데 더 많은 계산이 필요합니다.
극단적으로, 배열에 샘플을 가지고있는 것만 큼 많은 구형 고조파 항을 사용할 수 있으며, 원래 배열을 정확하게 재구성 할 수 있지만 많은 계산을 수행하며 많은 저장 공간을 사용하고 있습니다. 당신이 시작한대로.
이 때문에 실제로 구형 고조파 기능은 구의 날카로운 반사와 같이 미세한 디테일을 표현해야하는 경우 큰 이점을 제공하지 않지만 미세한 디테일이없는 데이터 (데이터가없는 데이터)에 대해서는 저렴할 수 있습니다. 고주파수 콘텐츠가 많지 않습니다). 또한 스펙트럼 분석이나 컨볼 루션과 같은 주파수 영역 계산에 유용합니다.
이들이 저장하는 데 유용한 이러한 데이터 중 하나는 다른 방향에서 점에 도달하는 빛의 양인 "조도"입니다. 약간 흐릿하게 보이며, 이는 저주파 컨텐츠만을 가지며 구형 고조파 함수에 저장하기에 좋은 후보입니다.
다른 사람에게 라이트 프로브 설명을 남겨 두겠습니다 .p