구형 고조파 및 라이트 프로브 란 무엇입니까?


14

구형 고조파라이트 프로브 란 무엇입니까 ? 컴퓨터 그래픽에서 얼마나 유용합니까? 정확히 무엇을합니까? 시그 그래프 프레젠테이션에서 블로그 게시물에 이르기까지 구면 고조파 및 라이트 프로브라는 단어를 들었습니다.

최근에 Matt Pettineo는 6 부로 구성된 블로그 시리즈 를 게시 했지만 여전히 그들이 무엇인지 이해하지 못합니다.

주변 조명을 개선하는 또 다른 방법입니까?

답변:


11

구형 고조파의 기초

l여기에 이미지 설명을 입력하십시오

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 도메인에서 픽셀 법선 지향 코사인 로브와의 컨볼 루션을 수행하여 수행 할 수 있습니다.


더 간단한 이미지 기반 조명보다이 방법을 사용하면 어떤 이점이 있습니까?
Arjan Singh

큐브 맵을 사용하는 것보다 유사한 저장 및 성능 요구 사항으로 더 좋은 품질의 저주파 조명을 가질 수 있습니다.
JarkkoL

16

구형 고조파

f(x)f(θ,ϕ)

푸리에 변환이 무엇인지 모른다면 구형 고조파를 이해하기 전에 알아야 할 것이 있습니다. 푸리에 변환을 사용하면 신호를 각각 마지막 주파수의 두 배의 사인파와 코사인 파로 표시 할 수 있습니다. 즉, 신호를 평균 길이와 신호 길이와 동일한 사인파, 그 파장의 두 배의 사인파 등으로 나타낼 수 있습니다. 푸리에 변환은 이러한 특정 파장으로 고정되므로 각 파장의 진폭 만 기록하면됩니다.

우리는 일반적으로 푸리에 변환을 사용하여 단지 2D 디지털 신호 인 이미지를 나타냅니다. 이미지가 사람의 눈에 미치는 영향을 크게 바꾸지 않으면 서 사인파 일부를 버리거나 진폭을 저장하는 정밀도를 줄일 수 있기 때문에 유용합니다. OTOH, 픽셀을 버리면 이미지의 모양이 많이 바뀝니다.

이미지와 같은 샘플링 된 신호에서 원본 이미지에 샘플 (픽셀)과 동일한 수의 사인파를 사용하면 이미지를 정확하게 재구성 할 수 있으므로 주파수를 버리기 시작하면 이미지의 저장 공간이 줄어 듭니다.

구형 고조파는 푸리에 변환과 유사하지만 사인파 대신 구형 함수를 사용하므로 선형 함수 (예 : 이미지) 대신 구체에 정의 된 함수 (예 : 환경 맵)를 나타낼 수 있습니다.

라이트 프로브

표준 이미지가 이미지 평면을 통해 특정 지점에 도달하는 모든 빛을 기록하는 것과 마찬가지로 라이트 프로브는 모든 방향에서 특정 지점에 도달하는 모든 빛을 기록합니다. 그들은 처음 영화 효과에서 나왔습니다. 컴퓨터에서 생성 된 객체를 실제 장면에 추가하려면 실제 조명으로 합성 객체에 조명을 비출 수 있어야합니다. 그렇게하려면 합성 물체가있는 장면의 점에 도달하는 빛을 알아야합니다. (NB는 "조명"이라고 말하지만 모든 빛 의 이미지를 기록하고 있으므로 반사에도 사용할 수 있습니다.)

모든 방향에서 단일 지점에 도달하는 모든 빛을 기록하는 구면 렌즈가있는 카메라를 가질 수 없기 때문에 구면 거울의 일반 사진을 촬영 한 다음 이미지를 구면에 다시 투영하여 기록합니다.

영화 효과 이외에 인공 장면에서 생성 된 라이트 프로브를 사용하는 것이 더 일반적입니다. 장면에서 GI (Global Illumination)를 계산하는 비싼 알고리즘이 있고이 장면에서 움직이는 작은 물체 (예 : 플레이어가있는 게임 레벨)도 있다고 상상해보십시오. 객체가 움직일 때마다 전체 GI 알고리즘을 실행할 수 없으므로 정적 장면으로 한 번 실행하고 레벨의 다양한 지점에서 촬영 한 라이트 프로브를 저장하십시오. 그런 다음 가장 가까운 광 프로브로 플레이어를 조명하여 GI에 대한 근사치를 얻을 수 있습니다.

함께 사용

일반적으로 어쨌든 글로벌 일루미네이션의 날카로운 가장자리를 걸러 내고 싶기 때문에 작고 쉽게 고주파를 버릴 수있는 가장자리를 표현할 수있는 방법을 원합니다. 그것이 구형 고조파가 정말 잘하는 것입니다! 그렇기 때문에이 두 용어가 많이 사용되는 것을들을 수 있습니다.

값 비싼 GI 알고리즘을 사용하여 라이트 프로브를 계산할 수 있습니다. 일반적으로 레벨 디자인 도구에서 또는 동적 객체를 포함 시키려면 초당 한 번 (프레임 당 한 번이 아닌)입니다. 구형 고조파를 사용하여 값싼 것을 저장하십시오 .16 개의 플로트는 고품질 조명에는 충분하지만 반사는 아닙니다. 그런 다음 조명하려는 각 동적 객체에 대해 가장 가까운 조명 프로브를 선택하거나 여러 개를 함께 보간하여 셰이더에 균일하거나 일정한 입력으로 사용합니다. 구면 고조파를 사용하여 앰비언트 오 클루 전 데이터를 나타내는 것이 일반적이며, 구면 고조파 기능을 회전시키는 데 약간의 복잡성이 있지만, 광 프로브와 함께 사용하는 것이 매우 저렴합니다.


큰 대답은 이것이 정말로 모든 것을 분명히했습니다! 기본적으로 라이트 프로브는 움직이는 캐릭터의 조명을 계산하는 쉬운 방법으로 전체 장면에 대한 GI를 다시 계산할 수 없습니다. 반면에 구형 고조파는 고주파를 걸러내는 데 사용됩니다. (내가 틀렸다면 나를 고치십시오. 나는 올바른 이해가 있는지 확인하려고합니다.)
Arjan Singh

"원래 이미지에 샘플 (픽셀)과 동일한 수의 사인파를 사용하는 경우 실제로는 이미지를 정확하게 재구성 할 수 있습니다." 예를 들어 구형파는 정확한 표현을 위해 무한한 수의 주파수가 필요합니다
JarkkoL

@JarkkoL 물론, 진정한 구형파가합니다. 그러나 샘플링을 통해 이산화 한 경우 샘플링 오류보다 오차를 줄이려면 동일한 수의 주파수 만 있으면됩니다. 나이 퀴 스트 정리의 편리한 결과입니다 (샘플링 된 신호에 존재하는 가장 높은 주파수는 샘플 레이트의 절반 임).
Dan Hulme

아, 물론입니다. 주파수의 절반이지만 복잡한 (실제) 주파수 영역 결과가 필요하다고 가정합니다. 또는 DFT 주파수의 두 배인 DCT 및 실제 도메인을 사용하십시오.
JarkkoL

5

구형 고조파

배열에 데이터가 있지만 더 적은 바이트 수로 해당 데이터를 나타내려고한다고 가정 해 봅시다.

이를 수행하는 한 가지 방법은 데이터를 원시 값 대신 함수로 표현하는 것입니다.

y=ax+b

ab

문제는 선형 방정식이 아마도 데이터에 대한 근사치가 아닐 수 있다는 것입니다.

y=ax2+bx+c

ababc

우리는 선형 방정식과 비교하여 메모리 저장 공간과 데이터 저장 및 검색의 계산 복잡성을 증가 시켰지만 데이터 배열에 더 가까운 근사치입니다. 우리는 그것을 입방 함수 이상으로 가져갈 수도 있습니다. 차수를 늘리면 저장, 계산 및 정확도가 증가합니다.

f(x)

위의 예에서와 같이, 더 낮은 차수의 고조파 함수를 사용하여 더 적은 저장 공간으로 무언가를 만들고 데이터를 계산하기 위해 더 낮은 계산으로 더 낮은 정확도를 얻을 수 있습니다.

반면에 순서를 늘리고 원본 데이터에 대한 근사값을 높일 수 있지만 필요한 저장 공간이 더 필요하고 데이터 포인트를 계산하는 데 더 많은 계산이 필요합니다.

극단적으로, 배열에 샘플을 가지고있는 것만 큼 많은 구형 고조파 항을 사용할 수 있으며, 원래 배열을 정확하게 재구성 할 수 있지만 많은 계산을 수행하며 많은 저장 공간을 사용하고 있습니다. 당신이 시작한대로.

이 때문에 실제로 구형 고조파 기능은 구의 날카로운 반사와 같이 미세한 디테일을 표현해야하는 경우 큰 이점을 제공하지 않지만 미세한 디테일이없는 데이터 (데이터가없는 데이터)에 대해서는 저렴할 수 있습니다. 고주파수 콘텐츠가 많지 않습니다). 또한 스펙트럼 분석이나 컨볼 루션과 같은 주파수 영역 계산에 유용합니다.

이들이 저장하는 데 유용한 이러한 데이터 중 하나는 다른 방향에서 점에 도달하는 빛의 양인 "조도"입니다. 약간 흐릿하게 보이며, 이는 저주파 컨텐츠만을 가지며 구형 고조파 함수에 저장하기에 좋은 후보입니다.

다른 사람에게 라이트 프로브 설명을 남겨 두겠습니다 .p


왜 다운 투표? : P
Alan Wolfe

구형 고조파가 세부 사항을 잘 표현하지 못한다는 것은 사실이 아닙니다. 푸리에 변환과 마찬가지로 모든 주파수를 유지하면 원래 신호를 정확하게 재구성 할 수 있습니다. 필요하지 않은 고주파수를 버려 공간을 쉽게 절약 할 수 있다는 것입니다.
Dan Hulme

그리고 유감스럽게도, 투표를 한 후 다른 도움이되는 답변으로 하나의 모호한 주장을 표결하는 것이 가혹하다고 생각했지만, 내 생각은 다시 생각할 때까지 잠겼습니다.
Dan Hulme

아 예, 다항식으로 데이터 세트를 표현할 수있는 것과 같은 방식으로 가능하지만 실제로는 많은 데이터 포인트에 밀접하게 맞아야하는 두 가지 모두 잘못된 선택입니다. 다항식을 사용하면 예를 들어 N 개의 데이터 포인트를 정확하게 맞추기 위해 N 차 함수의 N 항이 필요합니다. 이는 데이터 포인트를 얻기 위해 조회가 아닌 계산이므로 배열보다 더 나쁜 선택입니다. 마찬가지로 실제 용어로 구면 고조파는 보존하려는 고주파 성분을 가진 구면 데이터에 적합하지 않습니다. 그러한 상황에서는 좋은 선택이 아닙니다.
Alan Wolfe

개별 샘플을 재구성하고 싶지만 푸리에의 모든 용도에 SH가 필요한 것은 아닙니다. 컨벌루션을 수행하려는 경우 샘플로 다시 변환하기 전에 주파수 영역에서 수행하는 것이 훨씬 저렴합니다. 본인의 답변을 마친 후에 답변을보다 명확하게하기 위해 수정 사항을 제안 하시겠습니까?
Dan Hulme
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.