원문 : http://www.cemyuksel.com/cyCodeBase/soln/poisson_disk_sampling.html


소스 코드 : https://github.com/cemyuksel/cyCodeBase/


논문 : http://www.cemyuksel.com/research/sampleelimination/


주의 : 번역이 개판이므로 이상하면 원문을 참고하세요.


주의 : 허락받고 번역한 것이 아니므로 언제든 내려갈 수 있습니다.



푸아송 디스크 샘플링은 컴퓨터 그래픽스와 다른 분야들에서 다양한 용도로 사용됩니다. 여기에서 필자는 cySampleElimination 코드 릴리스를 사용하여 모든 샘플링 문제를 위해 푸아송 디스크 샘플 집합을 생성하는 방법에 대해서 설명하고자 합니다.


1. What is Poisson Disk Sampling?


푸아송 디스크 샘플 셋( set )에서 두 개의 샘플들은 서로 가까워지지 않습니다. 가장 가까운 거리가 푸아송 디스크 반지름( radius )로 정의되는데, 이는 두 개의 가장 가까운 샘플들 사이의 거리의 절반입니다. 일반 랜덤( regular random ) 샘플링과 비교했을 때, 푸아송 디스크 샘플 셋들은 샘플링 영역( domain ) 전체에서 더 많은 균일한( uniform ) 샘플 분포( distribution )을 제공합니다.



1000 Random Samples                      1000 Poisson Disk Samples


위의 그림은 1000 개의 랜덤 샘플들과 1000 개의 푸아송 디스크 샘플들을 비교한 것입니다. 푸아송 디스크 샘플 점들은 샘플링 영역에서 더 고르게 분포되어 있으며, 너무 가까워지는 샘플 점들이 존재하지 않음을 알 수 있습니다. 하지만 랜덤 샘플들은 클러스터( cluster )를 생성하며, 샘플 사이에 상대적으로 큰 빈 공간들이 존재합니다. 이는 이 예제에서 사용된 특정 랜덤 넘버 생성기에 국한된 것은 아닙니다. 균일한( uniform ) 랜덤 샘플들은 고른 샘플 배치 확률( probability )을 제공하지만, 샘플링 영역에 대한 고른 커버리지( coverage )를 제공하지는 않습니다.


푸아송 디스크 샘플 셋들은 샘플 점들에 대한 훌륭한 분포를 제공하는 것 외에, 몬테 카를로( Monte Carlo ) 샘플링을 사용해 우수한 수렴( convergence ) 특성을 제공합니다. 같은 개수의 푸아송 디스크 샘플들은 일반적으로 랜덤 샘플링에 비해 더 적은 노이즈를 생성합니다.


2. Generating Poisson Disk Sample Sets


푸아송 디스크 샘플 셋들을 사용할 때 문제는 그것들을 생성하는 것이 눈에 띄게 어렵다는 것입니다. 왜냐하면 이 샘플들은 독립적으로 생성될 수가 없기 때문입니다; 각 샘플은 다른 샘플의 위치에 의존합니다. ( dart throwing 과 같은 ) 단순한 알고리즘들은 계산 비용이 비쌉니다. 계산적으로 효율적인 알고리즘들은 복잡하며 특정 샘플링 영역에 국한됩니다. 고차원( high-dimensional ) 샘플링은 6 차원이나 7 차원이 넘어 가는 것들에 대해서는 경험적으로 불가능합니다.


푸아송 디스크 샘플 셋을 생성하는 데 있어서 이런 모든 문제들은 필자가 2015 년에 소개한 weighted sample elimination 알고리즘에 의해 해결되었습니다. 이 알고리즘의 세부사항에 대해서는 다음 링크에서 찾아보실 수 있습니다: http://www.cemyuksel.com/research/sampleelimination/.


이 솔루션( solution )의 나머지 부분에서, 필자는 weighted sample elimination 알고리즘에 대한 기본 정보를 제공할 것이고 cySampleElimination 코드 릴리스에서 모든 차원의 샘플링 도메인을 위한 푸아송 디스크 샘플 셋들을 생성하기 위해서 소스 코드를 사용하는 방법에 대해서 설명할 것입니다.


3. Weighted Sample Elimination


Weighted sample elimination 은 푸아송 디스크 샘플 셋들을 생성하기 위한 간단한 알고리즘입니다. 이것의 추가적인 이점은 푸아송 디스크 반지름 속성을 지정할 필요가 없다는 것입니다. 그것의 입력은 ( 랜덤하게 생성된 ) 샘플 집합이며, 결과 샘플 셋이 푸아송 디스크 속성을 가지도록 이런 샘플들의 일부분을 제거합니다. 다시 말해, weighted sample elimination 알고리즘은 큰 집합의 입력 샘플들을 받아서 더 작은 집합의 출력 샘플들을 반환합니다. 새로운 샘플들을 생성하는 것이 아닙니다. 주어진 입력 집합으로부터 그냥 하위 집합을 선택하는 것입니다.


입력 샘플들은 모든 차원의 모든 샘플링 영역을 위해서 생성될 수 있습니다. 제공된 입력 샘플이 많을수록 더 좋은 품질의 푸아송 디스크 샘플 셋들을 얻을 수 있습니다만, 특정 비율을 넘어 서게 되면 결과가 나빠질 수 있습니다. 입력 집합의 크기를 출력 집합의 크기의 3 배를 넘도록 하는 것을 권장합니다. 필자는 일반적으로 출력 집합 크기보다 5 배 정도 큰 입력 집합을 사용합니다. 이것은 계산 속도와 샘플링 품질 사이의 좋은 균형을 제공합니다. 말하자면, 출력 샘플 집합 크기를 고려하지 않고 매우 작은 입력 샘플 집합을 사용하는 것은 좋지 않은 생각입니다. 예를 들어, 단지 10 개의 샘플들을 생성하려고 하는데, 50 개의 입력 샘플들을 사용하면 샘플 분포가 좋지 않을 것입니다. 이 경우에는, 입력 샘플 집합 크기보다 더 많은 샘플들을 사용해서 시작하는 것이 좋다고 생각합니다.


4. Using cySampleElimination


cySampleElimination 코드 릴리스는 어떠한 유형의 샘플 클래스 유형에 대해서도 사용가능한 템플릿 클래스를 포함하고 있습니다. 물론 cyPoint 코드 릴리스에 있는 클래스( 2D 를 위해  Point2, 3D 를 위해 Point3, 4D 를 위해 Point4, 임의의 차원을 위해 Point )들을 사용하도록 설계되어 있습니다.


첫 번째로 할 일은 입력 샘플들을 생성하는 것입니다. 1000 개의 출력 샘플들을 만들기 원한다고 가정합시다. 그러므로 우리는 5000 개의 입력 샘플들을 생성하는 것으로부터 시작할 것입니다. 이 샘플들을 생성하는 방법은 온전히 여러분과 여러분의 샘플링 문제에 달려 있습니다. 아래에 Point3f  를 사용해서 3D 에서 랜덤 샘플을 생성하는 간단한 코드를 삽입했습니다.



모든 샘플 값들은 0 에서 1 사이라는 점에 주의하세요. 이것은 중요합니다. 샘플링 영역이 다르다면 그것의 차원을 지정할 필요가 있습니다. 아래에서 이에 대해 다루겠습니다. 지금은 모든 샘플 값들을 0 에서 1 사이로 한다고 가정합니다.


Weighted sample elimination 을 사용하려면, 먼저 WeightedSampleElimination 클래스의 인스턴스를 생성할 필요가 있습니다. 



여기에서 템플릿 파라미터들은 샘플 클래스 타입( 이 경우에는 Point3f ), 부동 소수점 타입( float 혹은 double ), 포인트 타입의 차원성( 이 경우 3 ), 샘플 인덱스를 위한 타입( 이 경우 int )을 정의합니다. 2 십억 개가 넘는 샘플들을 가지고 작업하지 않는 이상에는 샘플 인덱스 타입은 int 가 적절할 것입니다.


생성자는 기본 파라미터들을 설정할 것입니다. 원한다면 수정해도 좋습니다. 아래에서 파라미터들에 대해서 설명하겠습니다. 지금은 기본값만으로도 충분하다고 간주하겠습니다. 푸아송 디스크 샘플 셋을 생성하려면,  WeightedSampleElimination 클래스의 Eliminate() 메서드를 호출할 필요가 있습니다.



됐습니다. 출력 점들은 푸아송 디스크 속성들을 가지게 될 것입니다. 우리가 푸아송 디스크 반지름을 지정할 필요가 없다는 것을 기억하십시오. 제거 기법은 몇 개의 파라미터들을 더 받을 수 있으며, 아래에서 설명하도록 하겠습니다.


5. Progressive sampling


샘플들이 하나씩 생성되는 것이 기대되는데 일단 원하는 속성에 도달하면 새로운 샘플들을 생성하는 것을 중지해야 하는 샘플링 문제가 있습니다. 이는 점진적( progressive ) 샘플링( 혹은 순응 샘플링( adaptive sampling ) ) 이라 불립니다. 이 Eliminate() 메서드는 progressive 인자를 true 로 설정함으로써 점진적 샘플을 쉽게 생성할 수 있게 해 줍니다.



이 경우 출력 집합에 있는 샘플들이 정렬되는데, 이 순서대로 샘플들이 생성되는 경우에, 시퀀스( sequence )에 있는 각 샘플들은 푸아송 디스크 샘플 셋이 됩니다. 아래의 애니메이션은 예제 시퀀스을 보여 줍니다.


Progressive Samples


6. Sampling Arbitrary Volumes


위에서 언급했듯이, 우리 예제 샘플 점들은 0 에서 1 사이의 값을 가집니다. 만약 다양한 영역을 샘플링하기 원한다면, 그 영역의 경계를 지정해야 합니다. 예를 들어, 샘플링 영역이 3D 로 된 박스라고 가정합시다. 여기에서 최소 경계는 (-2, -1, 0 ) 이고 최대 경계는 (2, 1, 1 )입니다. 이 경계들을 다음과 같이 설정할 수 있습니다.



이 경계들은 박스 모양의 영역을 지정한다는 것에 주목하십시오. 3D 상의 임의의 부피를 샘플링하고자 한다면, 그 경계들은 도움이 되지 않습니다. 대신에 Eliminate() 메서드의 d_max 인자를 직접 지정해야 합니다. d_max 인자는 요구된 출력 샘플 개수를 위해 샘플링 영역 내의 두 샘플들 간의 최대 거리를 지정합니다. 이 값은 2D 와 3D 에서는 잘 정의되어 있으며, 더 높은 차원에서는 근사계산될 수 있습니다. GetMaxPoissonDiskRadius() 메서드는 이 파라미터를 설정하는데 도움이 됩니다. d_max 인자는 이 메서드가 반환하는 반지름 값의 두 배여야 합니다.



GetMaxPoissonDiskRadius() 메서드의 파라미터들은 차원, 출력 샘플 크기, 샘플링 영역의 부피입니다. 만약 부피가 ( 기본값인 ) 0 으로 주어진다면, 그 부피는 경계들을 사용해서 계산됩니다. 그렇지 않으면 경계들은 완전히 무시됩니다.


7. Sampling Surfaces in 3D


Eliminate() 메서드의 마지막 인자는 3D 에서 서피스( surface )( 혹은 고차원 공간에서의 저차원 매니폴드( manifold ) )를 샘플링하기 위해서 사용될 수 있습니다. 먼저 입력 점들이 원하는 서피스 상에서 생성되어야 합니다. 그리고 나서 Eliminate() 메서드를 호출할 때, 올발른 d_max 인자와 샘플링 영역의 차원성을 지정해야 합니다. 우리 예제에서는 3D 상의 서피스를 샘플링하고 있기 때문에, 샘플링 영역은 2D 로 간주되어야 합니다.



이 경우에 area 값은 샘플링 영역의 전체 서피스 면적을 저장합니다.


WeightedSampleElimination 오브젝트가 3D 샘플러로서 생성( 3D 샘플 상에서 동작 )되었지만, 샘플링 영역을 2D 에 대한 차원성으로 지정했다는 것에 주목하십시오. 그 이유는 우리가 서피스를 샘플링하기 원했기 때문입니다. 즉, d_max 가 지정되고 점진적 샘플링이 사용되지 않았다면, 차원성을 지정하는 마지막 인자는 사용되지 않는다는 것입니다.


스탠포드 토끼 모델 상에 생성된 샘플들.


8. Tiling


가끔 샘플 셋을 생성한 다음에 어떤 영역에서 반복( tiling )시키고 싶을 때가 있습니다. 또한 파워 스펙트럼( power spectrum )을 활용하는 통계적 분석( statistical analysis )를 사용했을 때, 생성된 샘플 셋이 반복적이어야만 하는 경우가 있습니다. 반복 작업은 추가적인 계산을 포함합니다; 그러므로 그것은 기본값으로 꺼져 있습니다. SetTiling() 메서드를 사용해서 타일링을 켤 수 있습니다.


타일링이 꺼져 있다면, weighted sample elimination 은 샘플링 영역의 경계들 근처에서 더 많은 출력 샘플 집합들을 생성할 것입니다. 그러므로 박스 모양의 샘플링 영역을 위해서는, 샘플링 문제가 타일링을 포함하고 있지 않다고 해도, 타일링을 켜 두는 것이 좋습니다.


9. Adaptive Sampling


가끔은 영역의 다양한 영역에서 다양한 샘플링 밀도( density )를 가져야 할 때가 있습니다. Weight 함수를 적절하게 수정함으로써 이를 달성할 수 있습니다. 커스텀 weight 함수를 사용할 수 있다고 언급하는 것 외에 더 세부적인 정보를 제공하지는 않겠습니다. 이 커스텀 weight 함수는 더 듬성듬성하게( sparsely ) 샘플링되야 하는 영역보다 더 큰 값들을 반환해야 합니다. 그리고 더 조밀하게( denser ) 샘플링 분포가 생겼으면 하는 영역보다는 더 작은 값을 반환해야 합니다. 가장 듬성듬성하게 샘플링되는 영역을 위해서 커스텀 d_max 인자를 제공할 필요도 있습니다.


밀도( density ) 맵을 사용해서 생성된 샘플들.


10. Additional Parameters


기본 weight 함수는 세 개의 파라미터들을 가지고 있습니다; alpha, beta, gamma. alpha 파라미터는 weight 함수를 위해 사용되는 지수( exponent )입니다. 그것의 기본값은 8 입니다. 아마도 이 파라미터를 수정할 일은 없을 것입니다.


beta 파라미터는 weight limiting 의 양을 지정합니다. Weight limiting 은 더 높은 품질의 샘플 셋들을 제공할 수 있는 기법이지만, 공격적인( aggressive ) weight limiting 은 가끔 가깝게 배치된 샘플이 몇 개 밖에 생성되지 않도록 만들 수가 있습니다. 이것은 보통 원하지 않는 결과입니다. 기본적으로 weight limiting 은 0.65 로 설정되어 있는 beta 파라미터에 의존합니다. beta 파라미터의 ㄱ밧은 0 에서 1 까지입니다. 값이 커질수록 더 공격적인 weight limiting 이 제공되며 값이 작아질수록 weight limiting 의 요과가 줄어듭니다. beta 를 0 으로 설정하는 것은 weight limiting 을 끄는 것과 동일합니다.


마지막으로 gamma 파라미터는 weight limiting 의 한계를 입력 셋 크기와 출력 셋 크기의 상대적인 비율에 의존해 설정하기 위해 사용됩니다.


원래 논문에서의 이런 파라미터들의 세부사항들을 찾아 볼 수 있습니다. weighted sample elimination 에 대한 추가적인 정보를 원하신다면, 해당 프로젝트 페이지를 참고하시기 바랍니다: http://www.cemyuksel.com/research/sampleelimination/.

원문 : https://developer.nvidia.com/sites/default/files/akamai/gameworks/samples/DeinterleavedTexturing.pdf


샘플 페이지 : https://docs.nvidia.com/gameworks/content/gameworkslibrary/graphicssamples/d3d_samples/deinterleavedtexturingsample.htm


주의 : 번역이 개판이므로 이상하면 원문을 참고하세요.


주의 : 허락받고 번역한 것이 아니므로 언제든지 내려갈 수 있습니다.



Louis Bavoil

lbavoil@nvidia.com


March 2014


Overview


이 DirectX 11 샘플은 Deinterleaved Texturing 접근법을 사용하여 큰, 저밀도( sparse )의, 지터링된( jittered ) 포스트 프로세싱( post processing ) 필터( 여기에서 SSAO 패스는 4x4 의 랜덤 텍스쳐를 사용합니다 )를 더욱 캐시-효율적으로 만들 수 있는 방법에 대해서 설명합니다. 먼저 전체 해상도 입력 텍스쳐를 16 개의 쿼터-해상도( quarter-resolution ) 텍스쳐의 배열로 재구성됩니다. 다음으로 패스 당 하나의 쿼터-해상도 텍스쳐를 소스로 사용하는 16 개의 개별 쿼터-해상도 패스들을 사용하여 필터를 렌더링합니다.


그림 1. Deinterleaved Texturing 은 픽셀당 랜덤화( randomization )을 사용하는 단일 패스보다 2.3 배가 더 빠르지만 결과는 매우 비슷합니다.


Deinterleaved Texturing


Introduction


우리가 속도를 올리려고 하는 포스트 프로세싱 필터들은 큰, 저밀도의, 지터링된 필터들입니다. 예를 들어 픽셀 단위의 디스크 샘플링( disk sampling, 역주 : 어떤 거리 r 을 이용하여 랜덤하게 임의의 점을 찍는 샘플링 기법입니다. Poisson disk-sampling 을 줄여서 disk-sampling 이라 부르는 것 같습니다 ) 과 랜덤 텍스쳐 좌표( randomized texture coordinate ) [McGuire et al. 2012 ]를 사용하는 SSAO 픽셀 셰이더가 있습니다. 이 접근법으로부터의 이점을 얻을 수 있는 알고리즘은 SSDO [Ritschel et al. 2009] 와 SSR [Kasyan et al.2011]입니다. 이 모든 알고리즘들은 구부러짐( bending )을 노이즈( noise )와 교환하기 위해서 텍스쳐 좌표를 랜덤화합니다. 필터의 원래 구현이 가진 성능이 주로 텍스쳐 지연에 의해서 제한되고 있다고 가정합니다. 우리의 목표는 품질을 희생시키지 않고 그런 큰 필터들의 속도를 개선하는 일반적인 접근법을 찾아내는 것입니다.


그림 2. 고정 샘플링 패턴.


그림 2 에 있는 예제 샘플링 패턴에서, 인접 픽셀들은 인접 샘플들을 페칭( fetching )합니다. 이 경우에, 각 픽셀들은 중심 픽셀에 대해 상대적으로 고정된 옵셋( offset ) 위치에 있는 4 개의 텍셀들을 수집합니다. 잠금 단계( lock step )에서 실행되고 있는 인접 픽셀들의 쌍을 보면( 픽셀들은 0 으로 표시되어 있습니다 ), 각 샘플들을 위한 샘플 좌표들은 서로에 대해 인접해 있습니다( 샘플들은 1, 2, 3, 4 로 표시되어 있습니다 ). 그러므로 이 샘플링 패턴은 공간적인 텍스쳐 지역성( locality )을 가지고 있으며, 이는 텍스쳐-캐시 하드웨어에 대해 친화적입니다( 역주 : 왼쪽 그림은 고정 크기 샘플링 패턴의 옵셋을 보여 줍니다. 오른쪽은 녹색 0 을 중심으로 샘플링을 한 후에, 노란색 0 을 중심으로 샘플링을 수행했을 때, 각각의 샘플링 텍셀들이 이전에 샘플링 했던 텍셀들과 인접해 있음을 보여 줍니다. 메모리상 위치가 가깝기 때문에 지역성이 높고 캐시 적중도( cache hit )가 높다고 하는 것 같습니다 ).


그림 3. (a) 랜덤 샘플링. (b) 영역( sectored ) 샘플링.


이제 샘플링 패턴에 대한 임의의 픽셀 단위 랜덤화를 사용하는 그림 3 (a) 의 2 개의 픽셀들을 살펴 봅시다. 2 개의 인접한 픽셀들을 위한 첫 번째 샘플의 족적( footprint )이 퍼져 있습니다. 이는 텍스쳐 하드웨어에서 비효율성을 발생시킬 것입니다. 이 경우에 인접한 픽셀들이 멀리 떨어져 있는 텍셀들을 페칭해야 하므로 공간적 지역성이 떨어집니다.


일반적인 전략은 완전히 랜덤화된 샘플링보다는 영역화된 떨리는 샘플링을 사용하는 것입니다. 이 경우에, 우리는 4 개의 샘플을 가지고 있으며 커널 영역을 네 개의 쿼터들로 하위분할할 수 있습니다. 좌상단 쿼터에서 샘플 1 을 취하며, 우상단 쿼터에서 샘플 2 를 취하는 식입니다. 이런 방식으로 잠금 단계에서 실행되고 있는 샘플들이 각 영역 안에서 서로 가깝게 존재하게 됩니다. 그러므로 그것들은 공간적 지역성이 높아집니다. 하지만 큰 커널들에 대해서는 인접 픽셀들이 여전히 그것들의 영역 안에서 멀리 떨어져 있는 텍셀들을 페칭하게 될 것이며 텍스쳐-캐시 적중율 문제를 겪게 될 것입니다.


Previous Art


단순한 전략은 혼합-해상도 입력들을 사용하고, 입력에 대한 고해상도와 저해상도의 버전을 둘 다 바인딩하는 것입니다. 그리고 :


  • 커널의 중심 탭( tap )을 위해 전체 해상도 텍스쳐를 사용합니다.
  • 분산된 멀리 떨어진 탭들을 위해, 저해상도 텍스쳐를 사용합니다.


다른 전략은 밉맵화( mip-mapped )된 입력 텍스쳐를 [McGuire et al.2012] 에 있는 것처럼 사용하여 현재 픽셀에서의 스텝( step ) 크기에 기반한 샘플링된 LOD 를 적용하는 것입니다. 이 방식을 사용하면, 인접 픽셀들은 같은 밉 레벨에 있는 서로에게 더 가까운 샘플들을 페칭할 것입니다.


이 두 전략들은 여전히 공간적 지역성의 관점에서 덜 최적화되어 있습니다. 왜냐하면 그것들은 밴딩( banding, 역주 : 띠같은 모양의 아티팩트 )을 피하기 위해서 여전히 픽셀당 지터링 메커니즘을 사용할 필요가 있기 때문입니다.


Our Approach


우리의 접근법은 단일 샘플링 패턴 당 하나의 저해상도 이미지를 렌더링하는 것입니다. 그것은 [Keller and Heidrich 2001], [Segovia et al. 2006], [Bavoil and Jansen 2013] 에서 나온 오래된 아이디어입니다.


그림 4. 2x2-interleaved 샘플링 패턴.


우리는 그림 4 의 왼쪽에 나온 2x2 크기의 interleaved 샘플링 패턴에서부터 시작했습니다( 역주 : 신호처리에서 interleaving 은 비트를 일정한 단위로 재배열하여 전송하는 것을 의미합니다 ). 그리고 하나의 개별 패스에서 녹색 픽셀들을 모두 함께 처리합니다( 그것은 녹색 샘플링 패턴을 가집니다 ). 그리고 나서 붉은색 샘플링 패턴을 다른 개별 패스에서 처리하는 식입니다.


그 결과들을 모두 중간( intermediate ) 텍스쳐들에 저장합니다. 그래서 이러한 작업의 끝에서는 전체 해상도 출력을 처리한 것입니다. 샘플링 패턴 당 개별 패스들에서 모든 픽셀들을 처리했으므로, 픽셀 셰이더에서는 픽셀 당 랜덤화가 더 이상 존재하지 않습니다. 더욱이 다운샘플링된( down-sampled ) 입력 텍스쳐들을 사용하기도 했으므로 인접 픽셀들은 인접한 텍셀들을 페칭할 수 있습니다.


요약하면:


  • 샘플링 패턴들을 개별적으로 렌더링합니다.
  • 각 패스들에서, 다운샘플링된 입력 텍스쳐들을 사용합니다.

우리는 이 접근법을 Deinterleaved( 역주 : 신호처리에서 디인터리빙은 인터리빙되어 전송된 비트들을 처리하는 것을 의미합니다 ) Texturing 이라고 부릅니다.


Algorithm


그림 5. [ 1 단계 ] 입력 텍스쳐를 deinterleaving.


전체 해상도 입력 텍스쳐로부터 시작해서 ( 이 경우에는 2x2 interleaved ) 그림 5 에서처럼 deinterleave 합니다.


샘플링 패턴 당 하나의 텍스쳐를 생성합니다. 2x2 샘플링 패턴을 사용하는 이 예제에서, 텍스쳐들은 절반( half )-해상도입니다. 우리는 MRT 를 사용해 deinterleaved data 를 렌더링하고 그 것들을 4 개의 슬라이스( slice )를 가진 절반-해상도 2D 텍스쳐 배열에 저장합니다.


이 deinterleaving 단계는 구조체 배열( Array Of Struct )을 배열들의 구조( Struct Of Arrays )로 변환하는 것으로 볼 수 있습니다. 우리는 동일한 입력 정보와 출력 정보를 가지고 있으며, 그냥 입력을 재구성하면 됩니다.


그림 6. [ 2 단계 ] deinterleaved 데이터 샘플링.


다음으로는 deinterleaved 텍스쳐 당 하나의 드로 호출을 수행하고 각 드로 호출들은 하나의 샘플링 패턴을 가집니다. 이러한 각 드로 호출들은 텍스쳐 배열 A 로부터 단일 슬라이스를 샘플링하고 있으며 텍스쳐 배열 B 로 단일 슬라이스를 출력하고 있습니다.


이 드로 호출들의 픽셀 셰이더에서는 픽셀 당 지터링이 사용되지 않으며 인접 픽셀들은 가까운 텍셀들을 페칭합니다. 이는 텍스쳐 캐시에 친화적입니다.


그리고 모든 텍스쳐 슬라이스들이 저해상도( 절반-해상도 )이므로, 비디오 메모리로부터 셰이더 유닛들로 작업 집합을 전송하기 위해 요구되는 메모리 대역폭이 적으며, 성능을 상당히 개선하는데 도움을 줄 수 있습니다.


그림 7. [ 단계 3 ] 출력을 다시 interleaving.


이제 우리는 각 샘플링 패턴을 위해 4 개의 개별 결과들을 생성했습니다. 그 결과들을 다시 전체-해상도 텍스쳐로 interleave 합니다. 그것은 전체-해상도 픽셀 셰이더 패스이며, 텍스쳐 배열 B 로부터 페치하는 하나의 텍스쳐를 사용합니다.


이 기법은 이 SDK 샘플이 보여주는 것처럼 4x4 interleaving 으로도 확장될 수 있습니다. Deinterleaving 단계의 경우, 4 개의 MRT 를 사용해 1 번의 드로 호출을 수행하는 대신에, 8 개의 MRT 를 사용해 2 번의 드로 호출을 사용합니다. 16 개의 가능한 샘플링 패턴들을 처리하고, 나머지 단계들은 동일하게 유지합니다.


Acknowledgments


Sibenik 모델은 Marko Dabrovic 이 만들었습니다. 이 샘플에서 사용된 AT-AT 모델은 Brad Blackburn 이 만들었으며, http://www.scifi3d.com 에서 다운로드할 수 있습니다.


References


[Keller and Heidrich 2001] Alexander Keller and Wolfgang Heidrich. “Interleaved Sampling.” Proceedings of the Eurographics Workshop on Rendering. 2001.


[Segovia et al. 2006] B. Segovia, J. C. Iehl, R. Mitanchey, B. Péroche. “Non-interleaved Deferred Shading of Interleaved Sample Patterns.” Graphics Hardware 2006.


[Ritschel et al. 2009] Tobias Ritschel, Thorsten Grosch, Hans-Peter Seidel. “Approximating Dynamic Global Illumination in Image Space.” I3D 2009.


[Kasyan et al. 2011] Nickolay Kasyan, Nicolas Schulz, Tiago Sousa. “Secrets of CryENGINE 3 Graphics Technology.” Advances in Real-Time Rendering Course. SIGGRAPH 2011.


[McGuire et al. 2012] Morgan McGuire, Michael Mara, David Luebke. “Scalable Ambient Obscurance.” HPG 2012 [Bavoil and Jansen 2013] Louis Bavoil and Jon Jansen. “Particle Shadows & Cache-Efficient Post-Processing.”. GDC 2013

원문 : https://software.intel.com/en-us/articles/adaptive-screen-space-ambient-occlusion


샘플 소스 : https://github.com/GameTechDev/ASSAO/


주의 : 번역이 개판이므로 이상하면 원문을 참고하세요.


주의 : 허락받고 번역한 것이 아니므로 언제든 내려갈 수 있습니다.



By Filip Strugar, published on November 9, 2016, updated Feburary 13, 2017


이 기사는 어댑티브 스크린 스페이스 앰비언트 오클루전( adaptive screen space ambient occlusion )( ASSAO )라 불리는 이펙트( effect )의 새로운 구현에 대해서 소개합니다. 그것은 저전력 디바이스에서부터 고해상도를 가진 고성능 데스크탑들까지를, 통일된 외견( look ), 설정들, 업계 표준과 동일한 품질을 가진 하나의 구현하에서, 다룰 수 있도록 특별하게 설계되었습니다. 


SSAO 는 작은 범위의 앰비언트 이펙트들과 콘택트( contact ) 셰도우( shadow ) 이펙트들을 생성하기 위해 실시간 렌더링에서 사용되는 대중적인 이펙트입니다. 많은 현대의 게임 엔진들에서 사용되고 있으며, 보통 프레임 GPU 시간의 5 ~ 10 퍼센트만큼을 사용하게 됩니다. 여러 개의 알려진 구현들이 이미 존재하기는 하지만, 그 어떤 것도 오픈 소스이거나 무료로 이용할 수 있거나 저전력 모바일로부터 데스크탑 디바이스에 이르기까지 요구되는 성능 범위 단계( level of performance scaling )를 제공하지는 않습니다. 이 부분을 ASSAO 가 만족시켜줄 수 있습니다.


이 기사는 샘플코드를 이해하고 더 나아가 그것을 통합하거나 포팅( port )하는 방법에 대해서 초점을 맞추고 있습니다. 또한 구현 명세들과 이용가능한 옵션들과 설정들, 그리고 그것을 사용하는 데 있어 발생하는 트레이드 오프( trade-off )들에 다룹니다. 구현의 세부사항에 대해서 다루는 기사는 앞으로 나올 GPU Zen( GPU Pro* 8 )에 있습니다.


그림 1. Unity 4* 의 씬에 적용된 ASSAO 의 예제.


Full DirectX* 11 implementation is provided under MIT license in an easy-to-integrate package.


Algorithm Overview


ASSO 는 확장성( scalability )와 유연성( flexibility )을 위해 튜닝( tune )된  SSAO 구현입니다. AO 구현은 입체각( solid-angle ) 오클루전 모델에 기반합니다. 이는 novel progressive sampling kernel disk 를 사용하는 [Bavoil et al. 2008] 의 "Horizon-Based Ambient Occlusion" 과 유사합니다. 그것을 둘러싼 성능 프레임워크( performance framework )는 캐시 친화적인 deinterleaved rendering 의 2 x 2 버전입니다( 역주 : 이 방식에 대해서는 [ Deinterleaved Texturing for Cache-Efficient Interleaved Sampling ] 에서 다루고 있습니다 ). 그것은 "Deinterleaved Texturing for Cache-Efficient Interleaved Sampling" [Bavoil 2014] 와 선택적 뎁스( depth ) MIP-mapping 인 "Scalable Ambient Obscurance" [McGuire et al. 2012 ] 에서 언급되었습니다.


성능 관점에서 확장성 품질은 ( 점진적인 샘플링 커널( progressive sampling kernel )에 의해 활성화된 ) 다양한 AO 탭( tap )의 개수와 다양한 프리셋 레벨에서의 개별 기능들을 토글링( toggling )함으로써 결정됩니다.


마지막에 노이즈 제거( de-noise ) 블러가 적용된 인접 픽셀들 사이의 ( 회전되고 스케일링된 샘플링 디스크에 따른 ) AO 값을 공유하기 위해서 확률적( stochastic ) 샘플링을 사용합니다. 노이즈 제거 블러는 앞이나 뒤에 있는 오브젝트들에 AO 효과가 스며들어( bleeding ) 헤일로( halo )가 발생하는 것을 막기 위해 엣지를 고려합니다( edge-aware ). 가장자리는 뎁스에만 기반하거나 뎁스와 노멀( normal )에 기반합니다( 후자는 더 좋은 품질을 생성하지만, 처리하는 데 더 많은 비용을 사용합니다 ). 이런 스마트( smart ) 블러는 최적의 캐시 효율정을 위해 2 x 2 deinterleaved 영역( domain )에서 수행됩니다. Interleaving( 재구성 ) 패스 동안에 마지막 패스에서만 전체 해상도가 사용됩니다.


경험적으로, 그것은 다중 패스 픽셀 셰이더 기반 기법입니다. High 프리셋에서의 주요 단계들은 다음과 같습니다:


  1. 뎁스들을 준비합니다.
    1. 2 x 2 deinterleave 입력 스크린 뎁스를 4 개의 쿼터( quarter )-뎁스 버퍼들로 만들고, 값들을 뷰스페이스( viewspace )로 변환합니다. 입력 스크린 노멀들이 제공되지 않는다면, 그것들을 뎁스로부터 재구성합니다.
    2. 각각의 작은 뎁스 버퍼들을 위해 MIP 들을 생성합니다( Lowest 프리셋에서는 하지 않고, Low 프리셋이나 Medium 프리셋에서는 합니다 ).
  2. AO 항과 엣지를 고려한 블러를 4 개의 2 x 2 deinterleaved 파트( part )들에 대해서 계산합니다.
    1. AO 항과 엣지들을 계산하고 R8G8 텍스쳐에 저장합니다.
    2. 엣지를 고려한 스마트 블러를 적용합니다( 한 패스에서 여섯 패스까지, 사용자 설정에 달려 있습니다 ).
  3. 네 파트를 전체 해상도 버퍼에 합칩고 최종적으로 엣지를 고려한 블러 패스를 적용합니다.


Highest/Adaptive 품질 프리셋은 추가적인 기반( base ) AO 패스를 가지고 있으며, 이는 메인( main ) AO 패스의 픽셀당 변수 샘플 카운트를 안내( guide )하는 중요한 휴리스틱( heuristic )들을 제공하는데 사용됩니다.


표1 은 성능 수치들에 대한 개요를 제공합니다. 이 수치들은 참고용이며 드라이버와 하드웨어 명세에 따라 달라질 수 있습니다. 'radius' 같은 이펙트 설정을 변경하는 것은 성능에 영향을 주지 않습니다. 하지만 엣지를 고려한 블러의 경우에는 예외입니다; 블러 패스의 개수를 증가시키는 것은 비용을 증가시킵니다.


표1. 다양한 프리셋, 해상도, 하드웨어에서 ASSAO 이펙트 비용을 밀리세컨드( millisecond ) 단위로 표시.


스크린 노멀이 제공되고, 2-패스 블러와 Highest adaptive target 가 0.45 로 설정되면, Lowest/Low/Medium/High/Highest 프리셋들 사이의 이펙트 스케일링( 품질 vs 성능 )이 다양한 AO 탭의 개수와 개별 기능들에 대한 on/off 를 통해 결정됩니다. 표 2 는 이런 프리셋들의 세부적인 설정들을 보여 줍니다.


표 2. ASSAO 프리셋의 세부사항.


Sample Overview


샘플은 DirectX 11 을 사용하고 Windows* 7 64-bit 이상, 그리고 Microsoft Visual Studio* 2015 와 호환됩니다.


그림 2. ASSAO 샘플 레이아웃( layout ).


샘플에 포함된 Crytek Sponza* 씬이 기본으로 사용되며 기본 이펙트 프로우파일링 측정치( metric ) 이 우상단쪽 그래프에 나옵니다. 그래프 아래에는, 이펙트 설정, 품질, 혹은 이펙트 디버깅을 변경하기 위해 사용되는 여러 개의 다이얼( dial )들이 있습니다. 주요 설정은 다음과 같습니다:


  1. Effect enabled
    이펙트의 on/off 를 토글합니다.

  2. Effect radius
    뷰스페이스 단위의 앰비언트 오클루전의 반지름입니다.

  3. Effect strength
    선형 이펙트 배율( multiplier ). 이펙트 파워( power )와 함께 이펙트의 강도를 조절하고 이펙트를 페이드( fade ) 인/아웃( in/out )하는 데 유용합니다.

  4. Effect power
    지수적인( exponential ) 이펙트 수정자입니다: occlusion = pow( occlusion, effectPower ). 이펙트 커브의 파워를 변경( tweak )하는 최상의 방법입니다.

  5. Detail effect strength
    고주파수( high-frequency ) 이펙트를 추가하는 데 사용하는 2 픽셀 넓은 추가 커널입니다. 높은 값을 지정하면 에일리어싱( aliasing )과 일시적인 불안정성( temporal instability )이 증가합니다.

  6. Blur amount
    블러 패스의 개수를 더 높게 설정하면 더 낮은 고주파수 버전( less high-frequency variation )을 사용하는 것보다 더 부드러운 결과를 산출합니다. 이는 ( 에일리어싱을 줄여주는 ) 이점을 가지지만, 비용을 증가시킵니다.

  7. Blur sharpness
    거리 기반( 그리고 선택적인 노멀 기반 ) 가장자리가 흐려지는 것을 막는 정도를 결정합니다. 다른 앞뒤의 오브젝트들 사이에서 이펙트가 번지는 것을 막는데 사용됩니다. 이펙트가 번지면 헤일로와 다른 문제들이 발생합니다. 1 값이 의미하는 것은 완전히 날카로워( 엣지에서 블러링하지 않음 )지고 제약이 완화됨을 의미합니다. 1 에 가까운 값들은 에일이어싱을 제어하는 데 유용합니다.

  8. Deferred Path
    디퍼드 경로에서, 이펙트를 위한 입력들은 스크린 뎁스 텍스쳐와 노멀맵 텍스쳐입니다. 하지만, 포워드 패스가 사용되면, 뎁스 텍스쳐만이 입력으로 사용됩니다. 반면에 노멀맵은 뎁스로부터 재구성되는데, 이로 인해 비용이 추가되며 약간 다른 결과를 산출하게 됩니다.

  9. Expand resolution
    스크린 가장자리 근처에서는 이펙트 커널이 스크린 밖에서 처리되는 부분이 있습니다. 다양한 샘플링 모드( 즉 clamp/mirror )들이 다양한 결과를 산출하는데 사용될 수 있지만( m_amplerStateViewspaceDepthTab ), 최적의해결방법은 뎁스 퍼버를 생성하는 동안에 일정 비율만큼 더 크게 렌더링 영역과 해상도를 확장하는 것입니다. 그래서 AO 이펙트가 사용하는 데이터가 가장자리에서도 이용될 수 있게 합니다. ASSAO 는 선택적인 시저 사각형( scissor rectangle )을 사용해서 확장된 ( 보이지 않는 ) 영역들에 대한 AO 계산이 이루어지지 않도록 합니다.

  10. Texturing enabled
    AO 이펙트를 더 잘보이게 만들기 위해 ( 라이팅은 여전히 적용됨 ) 텍스쳐링을 토글합니다.

  11. Quality preset
    표 1 과 2 에서 설명되어 있듯이, 네 개의 품질 프리셋 사이에서 프리셋을 교체합니다.
    Highest/Adaptive 프리셋의 경우, Adaptive 타깃은 점진적인( progressive ) 품질 타깃을 제어하는데, 이는 품질과 성능을 빠르게 교환( trade-off )하기 위해 런타임에 변경될 수 있습니다.

  12. Switch to advanced UI
    이펙트를 더 자세히 디버깅하기 위해서, 샘플이 진보된 UI 로 변경되도록 할 수 있습니다. 이는 추가적인 씬들에 대한 접근을 제공하고 이펙트의 개발자 버전을 제공합니다. 이는 더 자세한 프로우파일링을 허용하며, 노멀, 검출된 가장자리, 선택된 픽셀에 대한 모든 AO 샘플들, adaptive effect heatmap 등을 보여 주는 다양한 디버그 뷰를 제공합니다.

Integration Details


DirectX 11 코드를 빠르게 통합하려면, 샘플 프로젝트에서 세 개의 파일들만 필요합니다:


  • Projects\ASSAO\ASSAO\ASSAO.h
  • Projects\ASSAO\ASSAO\ASSAODX11.h
  • Projects\ASSAO\ASSAO\ASSAO.hlsl


DirectX 11 API 를 제외한 다른 종속성 없이 전체 ASSAO 구현들이 포함되어 있습니다.


기본적인 ASSAO 통합 단계는 다음과 같습니다:


  1. ASSAO.h 와 ASSAODX11.cpp 를 프로젝트에 추가합니다.
  2. ASSAO.hlsl 파일을 로드할 수 있는 곳에다가 추가하십시오. 혹은 바이너리로 .hlsl 파일을 쉽게 임베드하는 방법( 그리고 커스텀 빌드 단계에 대한 )의 세부사항을 원한다면 ASSAOWrapperDX11.cpp "USE_EMBEDDED_SHADER" 를 참조하십시오.
  3. DirectX 11 디바이스 생성 후에, 정적 ASSAO_Effect::CreateInstance(...) 에다가 ID3D11Device 포인터와 셰이더 소스 버퍼를 제공함으로써, ASSAO_Effect 오브젝트 인스턴스를 생성하십시오. DirectX 디바이스가 파괴되기 전에 ASSAO_Effect::DestroyInstance() 를 호출해서 오브젝트를 파괴하는 것을 잊어 버리면 안 됩니다.
  4. 포스트 프로세싱 파이프라인 안에서 적절한 위치를 찾으십시오: SSAO 는 보통 스크린 스페이스 이펙트들이 실행되기 전에 라이트 누적( accumulation ) 버퍼나 포스트-톤맵 컬러 버퍼들에 직접적으로 적용되는데, 항상 곱( multiplication ) 블렌드 모드를 사용합니다. 라이팅 패스에서 나중에 사용하기 위한 개별 버퍼에다가 AO 항을 렌더링하기 위해 종종 더욱 물리적으로 정확한 접근법이 사용됩니다. 어떤 경우든지 간에, 요청되는 입력들은 씬 뎁스( 그리고 가능하다면 스크린 스페이스 노멀 )이므로, ASSAO 는 그것들을 이용할 수 있는 시점에 그려져야 합니다.
  5. 프레임당 입력 구조체를 ASSAO_InputsDX11 에서 채웁니다:
    1. SissorLeft/Right/Top/Bottom 은 Expand resolution 접근법이 사용되는 경우처럼 이펙트 출력이 더 작은 사각형으로 제한될 때만 사용됩니다. 그렇지 않으면 기본값인 0 이 사용되며, 이는 전체 뷰포트로 출력이 나간다는 것을 의미합니다.
    2. ViewportX/Y 는 반드시 0 이어야 하며 ViewportWidth/Height 는 입력 뎁스 텍스쳐 해상도 및 스크린 스페이스 노멀 텍스쳐 해상도와 출력 렌더 타깃의 크기여야 합니다.
    3. ProjectionMatrix 는 뎁스 버퍼를 그릴 때 사용된 프로젝션이어야 합니다. 왼손 좌표계와 오른손 좌표계가 역전된 Z( reversed Z )와 함께 모두 지원됩니다( http://outerra.blogspot.de/2012/11/maximizing-depth-buffer-range-and.html )( 역주 : 역전된 Z 와 관련해서는 [ Depth Precision Visualized ] 에 번역해 둔 다른 자료도 있습니다  ).
    4. NormalsWorldToViewspaceMatrix ( 선택적임 ) 는 입력 스크린 스페이스 노말이 뷰스페이스에 존재하지 않을 때 필요합니다. 이 경우에는 이 행렬이 뷰스페이스로 변환되어야 합니다.
    5. MatricesRowMajorOrder 는 입력 ProjectMatrix NormalsWorldtoViewspaceMatrix 의 메모리 레이아웃을 정의합니다.
    6. NormalsUnpackMul NormalsUnpackAdd 의 기본값은 2 와 -1 입니다. 그리고 노멀들을 일반적으로 저장되는 UNORM[0,1] 텍스쳐로부터 [-1,1] 범위로 언패킹하는데 사용됩니다. 노멀들이 부동소수점 수 텍스쳐로 제공된다면, 이 값들은 각각 1 (mul) 과 0 ( add ) 으로 설정될 필요가 있습니다.
    7. DrawOpaque 는 블렌딩 모드를 지정합니다: 이 값이 true 라면 선택된 렌더 타깃의 내용이 덮어써질 것입니다; 이 값이 false 라면 multiplicative 블렌딩 모드가 사용됩니다.
    8. DeviceContext ( DirectX 11 전용 ) 는 이펙트를 렌더링하는데 사용되는 ID3D11DeviceContext 포인터로 설정되어야 합니다.
    9. DepthSRV ( DirectX 11 전용 ) 는 입력 뎁스 데이터로 설정되어야 합니다.
    10. NormalSRV ( DirectX 11 전용 ) 는 입력 스크린 스페이스 노멀로 설정되거나 이용할 수 없다면 nullptr 로 설정되어야 합니다( 이 경우에 노멀들은 뎁스 데이터로부터 재구성됩니다 ).
    11. OverrideOutputRTV ( DirectX 11 전용 ) 는 nullptr 로 설정되거나 출력 렌더 타깃으로 설정되어야 합니다. 이 값이 nullptr 로 설정되면, 현재 선택되어 있는 RTV 가 사용됩니다.
  6. ASSAO_Settings 에 정의된 설정 구조체를 채웁니다. Sample overview 섹션에서 자세히 설명하고 있습니다.
  7. ASSAO_Effect::Draw 함수를 호출합니다. 현재 모든 DirectX 11 스테이트( state )들은 끈임없는 통합을 보장하기 위해서 그 호출 이후에 백업되고 복구됩니다.
샘플 프로젝트에 있는 다음 파일들은 통합 예제를 제공합니다:

  • Projects\ASSAO\ASSAOWrapper.h
  • Projects\ASSAO\ASSAOWrapper.cpp
  • Projects\ASSAO\ASSAOWrapperDX11.cpp


가장 최신의 소스 코드는 https:/github.com/GameTechDev/ASSAO 에서 다운로드할 수 있습니다.


Citations


[Bavoil et al. 2008] Bavoil, L., Sainz, M., and Dimitrov, R. 2008. "Image-Space Horizon-Based Ambient Occlusion.” In ACM SIGGRAPH 2008 talks, ACM, New York, NY, USA, SIGGRAPH ’08, 22:1–22:1.


[McGuire et al. 2012] Morgan McGuire, Michael Mara, David Luebke. “Scalable Ambient Obscurance.” HPG 2012.


[Bavoil 2014] Louis Bavoil, “Deinterleaved Texturing for Cache-Efficient Interleaved Sampling.” NVIDIA 2014.


Notices


This sample source code is released under the MIT License.

원문 : https://www.micromine.com/what-is-implicit-modelling/


주의 : 번역이 개판이므로 이상하면 원문을 참고하세요.


주의 : 허락받고 번역한 것이 아니므로 언제든 내려갈 수 있습니다.


정보 : 본문에서는 수학적 개념을 다루고 있으므로 "implicit function" 을 "음함수", "explicit function "을 "양함수", "parametric function" 을 "매개변수함수"라 번역합니다.



Paul Hooykaas

November 19, 2014


Introduction


모든 사람들이 음함수 모델링( implicit modeling ) 행사에 뛰어 들고 싶어하는 것으로 보입니다. Orefind 블로그 페이지에서는 이 유행을 반영하는데, 2012 년 후반부터 적어도 6 개의 관련 기사들이 있습니다 -- Jun Cowan 과 Ron Reid 가 주목할 만한 기여자들입니다.


불행하게도, 업계에서는 "음함수 모델링" 이라는 개념에 대한 일과된 이해가 없어 보입니다. 제가 불행하다라고 이야기한 이유는 원래의 정의는 "진짜" 라는 한정자를 필요로 하지 않음에도 리뷰어( reviewer )들이 이제 "진짜 암시적 모델링" 이라고 부르를 정도까지 타협이 일어나고 있기 때문입니다.


그래서 여기에서는 음함수 모델링이 실제로는 무엇인지 명확하게 해 보려고 합니다. 이 개념은 광물 자원 분야( mineral resources sector )에서는 상대적으로 새로 등장한 것입니다만, 컴퓨터 그래픽스 업계는 1960 년 후반부터 기반 기법들을 사용해 오고 있습니다. Jules Bloomenthal 의 ( 1995 년 1 월의 ) 논문인 Skeletal Design of Natural Forms 으로부터 발췌한 내용을 고려해 봅시다.


기하 모델링( geometric modeling )은 종종 파라미터( parametric ) 기법과 음함수( implicit ) 기법으로 분류됩니다. 둘 다 컴퓨터 그래픽스로부터 개발되었습니다(  [Coons 1967] 에서 초기 파라미터 기법이 소개되었고, [Mathematical Applications Group 1968] 에서 초기 음함수 기법이 소개되었습니다. 음함수 서피스들은 더욱 손쉽게 볼륨 관계( volumetric relationship )들을 수집( capture )합니다...


수학에서 "음함수" 라는 단어는 더 오랜 역사를 가지고 있으며, 그것은 특별한 유형의 함수를 기술하기 위해서 사용됩니다.


Implicit or Explicit


"음함수 모델링" 은 2003 년 11 월 벤디고( Bendigo )에서 열린 5 회 국제 광산 지질학 컨퍼런스( international mining geology conference )에서 제출된 논문에서 Jun Cowan 에 의해 탐사( exploration ) 업계와 광산 업계에 소개되었습니다. 이 기사의 많은 부분들은 그 논문의 내용을 반복한 것입니다.


아마도 음함수 모델링과 관련된 개념들을 강조하기 위해서, 그 논문은 ( 수작업 디지털화( manual digitizing )에 매우 의존하는 ) 전통적인 모델링 기법들을 '양함수' 라고 기술한 것 같습니다. 필자는 이러한 언급이 무심코 오늘날 우리가 인지하게 된 혼란의 일부 원인이 된 것이라 생각합니다. 매일 대화를 하면서 '음함수' 와 '양함수' 라는 단어들은 반대 의미로 쓰입니다( 후자는 "완전히 명확하게 정의된" 을 의미하고 전자는 "직접적으로 표현되지 않은" 을 의미합니다 ). 두 단어들을 모델링 프로세스( process )와 연관시킴으로써, 모든 메서드들이 이 두 가지 분류 중 하나로 들어 가야 한다고 여겨지게 되었습니다. 양함수 기법을 이해하는 것이 쉬웠기 때문에, 수작업 디지털화를 배제한 적절한 출력을 생성하는 모든 프로시저( procedure )들을 "음함수" 라고 여겨지도록 분류하는 것이 편했습니다. 예를 들어, 3D 블록 모델로부터 하나 이상의 등급 셸( grade cell )을 생성하는 것은 음함수 모델링의 형태라고 주장하는 것이 일반적( popular )입니다. 이것은 '음함수' 이라는 기술자( descriptor )가 일반적인 용법이 아니라 수학적인 의미에서 생겨났다는 것을 알게 되면 그리 이상한 것은 아닙니다.


Curves and Surfaces


이 주제에 대한 많은 참고 자료( reference material )들은 '커브( curve )' 와 '서피스( surface )' 에 대해 언급합니다. 커브와 서피스의 수학적 정의에 대해서 언급하는 것은 중요합니다. 왜냐하면 그것들은 이런 개념들에 대한 표준적인 이해와는 약간 다르기 때문입니다:


  • 커브는 라인( line )과 유사하지만 직선일 것을 요구받지 않습니다. 열린( open ) 커브는 시작 점과 끝 점이 다릅니다. 닫힌( closed ) 커브는 시작점과 끝이 만납니다. 그러므로 닫힌 커브에는 끝 점이 없습니다.
  • 놀랍게도 서피스의 ( 기하학적( geometric ) ) 정의는 '매니폴드( manifold )' 와 '유클리드( Euclidean )' 과 같은 기술적인 개념들로 빠르게 어수선해질 수 있습니다. 단순한 설명은 "솔리드( solid, 역주 : 안이 채워진 도형? ) 경계의 일부 혹은 전체" 입니다. 그런 서피스들의 중요한 점은 커브처럼 열려있거나 닫혀있다는 것입니다. 평면( plane )은 열린 서피스의 단순한 예입니다. 그리고 구( sphere )는 닫힌 서피스의 단순한 예입니다. 이것을 바라보는 다른 방식은 열린 서피스가 면적을 가지고 있고 닫힌 서피스가 부피를 가지고 있다는 것입니다.


Function Types


자, 수학 문맥에서 "음함수" 는 어떤 의미일까요? 수학에서는 ( 커브의 ) x, y 사이의 관계나 ( 서피스의 ) x, y, z 사이의 관계를 함수라고 부르며, 세 가지 종류의 구별되는 함수 유형이 존재합니다: 양함수, 음함수, 매개변수함수.


양함수:


일반 형태: y = f(x)


등차식 왼쪽의 변수는 등차식 오른쪽의 다른 변수의 항들로 표현됩니다.


Circle: y = √( r2 - x2 )


양함수들은 단일 값들을 가집니다.


이는 원을 정의하기 위해서는 두 개의 개별적인 양함수들이 요구된다는 것을 의미합니다.


  1. 위쪽 반원, y = +√( r2 - x2 )
  2. 아래쪽 반원, y = -√( r2 - x2 )


음함수:


일반 형태: f( x, y ) = 0


0 이 되는 항들의 집합을 설정함으로써 정의됩니다.


Circle: x2 + y2 - r2 = 0


매개변수함수:


일반 형태: x = Fx( t ), y = Fy( t )


출력 요소들이 파라미터나 파라미터들에 기반합니다.


Circle: x = r * cos( t ), y = r * sin( t )



노트 : 


  1. 위는 변수 x 와 y 를 사용하는 커브( 혹은 라인 )에 기반합니다. z 변수를 사용함으로써 서피스를 포함하는 논의로 확장하는 것이 가능합니다.
  2. 함수와 공식( equation ) 사이에는 약간의 차이가 있습니다만, 여기에서는 무시합니다.


양함수들은 x 값으로부터 직접적으로 y 값을 생성합니다. 그래서 원 상에 존재하는 점들의 수열을 생성하는 것이 상대적으로 쉽습니다. 하지만 ( 닫힌 라인이나 서피스가 지원되지 않는 ) 단일 값 제약( single value restriction )에 의해 양함수 형태는 우리 목적에 맞지 않게 됩니다.


음함수들은 "implicit" 라는 단어의 일반적인 용법과 연결됩니다. 원 예제에서 음함수는 x2 + y2 - r2 = 0 이라는 것을 기억하세요. 이에 기반해서 특정 반지름( 2 라고 하죠 )이 주어졌을 때 원을 어떻게 그려야 할 것인지 생각해 보세요. 원 위에 있는 연속된 점들을 체계적으로( systematically ) 생성할 수 있는 직접적인 방법이 존재하지 않습니다. 그리고 이것이 이 표현이 음함수라고 불리는 이유입니다. 원이 거기 존재한다 -- 확실히 잘 정의되어 있습니다 -- 는 것을 알고 있습니다만, 그것을 가시적으로 표현하는 것은 문제입니다.


하지만 음함수 형태는 자신만의 특별한 특성을 가지고 있습니다. ( 반지름이 알려진 값인 ) 특별한 원의 경우에, 우리는 모든 x, y 를 공식에 대입할 수 있습니다. 만약 그 결과가 양수라면 그 점은 원 밖에 존재합니다. 만약 결과가 음수라면 그 점은 원 안에 존재합니다. 만약 결과가 0 이라면 그 점은 원 위에 존재합니다. 다시 말해 모든 점에 대한 '분류( classification )'를 쉽게 할 수 있습니다.


한편으로 파라미터 표현은 원을 그리는 매우 편리한 방법을 제공합니다. t = 0 에서 시작해 x 와 y 를 계산합니다. 이제 적은 양만큼 t 를 증가시키면서 다음 x 와 y 를 계산합니다. 이를 t = 2π 가 될 때까지 계속 진행합니다...


An Implicit Model


변수를 포함하고 있지만 측정 가능한 속성( attribute )을 가진 3D 볼륨( volume )에 대해 생각해 보죠. '속성' 은 광석( ore ) 몸체의 밀도( density ), 온도( temperature ), 등급( grade )일 수 있습니다. 실제 측정값들은 분산된 데이터 포인트들로부터 취해집니다. 그 데이터 포인트들은 볼륨 상의 속성에 대한 연속적인 수학적 표현을 제공하기 위한 음함수들을 유도하기 위해서 사용될 수 있습니다. 이 음함수 모델은 무한한 개수의 isosurface -- 상수값의 점들을 표현하는 서피스 -- 들을 포함합니다. 등급 셸은 isosurface 에 대한 친숙한 예입니다.


하지만 음함수 모델 자체는 가시화될 수 없습니다. 그렇게 하기 위해서는 모델로부터 하나 이상의 isosurface 들을 추출하고 이를 3D 공간에 그려야 합니다. 만약 모델이 파라미터 형식으로 변환될 수 있다면 isosurface 추출은 쉬워질 것입니다. 하지만 사는 게 그렇게 쉽지는 않습니다. 동일한 파라미터 해법을 찾아내는 것은 너무 멀리 있는 희망입니다.


원 예제에서 살펴 봤듯이, 음함수 모델은 체계적으로 isosurface 상의 점들을 생성하기 위한 직접적인 방법을 가지고 있지 않습니다. 그것은 점이 그 서피스 상에 존재하는 지, 위쪽이나 아래쪽에 존재하는지를 결정하는 테스트를 제공합니다. 하지만 서피스 점들 자체를 생성하는 명시적인 규칙을 제공하지는 않습니다. 


The Definition (finally)


음함수 모델은 볼륨 상의 속성들에 대한 연속적인 수학적 표현입니다. 그것은 무한한 세부적인( fine ) 해상도를 가지고 있습니다. 이 모델로부터 눈에 보이는 서피스들을 생성하는 것은 개별적인 다음 단계입니다. 그리고 그것은 음함수 모델을 생성하는 것과는 별개입니다.


등급 셸을 블록 모델로부터 생성하는 시나리오를 다시 살펴 보죠. 위의 정의를 이용하면 두 가지 이유로 실패할 것입니다. 첫 번째로 그 모델은 삼차원 공간 상의 연속적인 등급이 아닌 개별적인 등급값을 가진 이산적인( discrete ) 점 집합입니다. 두 번째로 출력 서피스의 해상도는 원래 모델의 블록 크기에 의존합니다.


Isosurface Extraction


음함수 모델링은 일반적으로 세 부분으로 구별됩니다:


  1. 적절한 형식으로 데이터를 조직하기.
  2. 연속적인 볼륨 모델을 생성하기( 음함수 모델 ).
  3. 모델에 포함된 하나 이상의 서피스들을 출력하기.


출력은 거의 항상 삼각화된( triangulated ) 메시나 와이어프레임( wireframe )입니다. 삼각형은 직선으로 구성되므로, 출력 와이어프레임은 모델링된 서피스의 근사치( approximation )입니다. 메시를 더 세부적으로 만들수록 ( 더 작은 삼각형으로 만들수록 ) 더 나은 근사치가 나오며 외형이 더 부드러워집니다. 메시의 크기는 외형과 계산 시간 사이의 타협점입니다.


서피스 점들을 생성하는 직접적인 방법이 존재하지 않기 때문에, 간접적인 수단에 의존해야 합니다. 가장 일반적인 기법들 중의 하나는 "마칭 큐브( marching cube )"라 불립니다.



그 원칙은 2D 원 예제에서 "마칭 스퀘어( marching square )" 를 사용해서 ( 가장 단순하게 ) 설명될 수 있습니다. 좌상단에 위치한 정사각형으로부터 시작해, 정사각형의 모서리( corner )에서 음함수를 평가합니다. 만약 모든 모서리들이 양수값을 반환한다면, 그 정사각형은 완전히 원 바깥쪽에 존재합니다. 마찬가지로, 모든 모서리가 음수값을 반환한다면, 그 정사각형은 완전히 원 안쪽에 존재합니다. 만약 일부 모서리는 원 바깥에 존재하고 일부 모서리는 원 안쪽에 존재한다면, 그 정사각형은 원과 겹쳐 있는 것이고, 겹치는 라인을 계산할 수 있습니다. 만약 정사각형과 동일한 크기의 그리드를 가진 영역을 다루고 있다면, 원을 근사계산하는 라인 세그먼트( segment ) 집합을 결과로 작업을 끝내게 될 것입니다. 정사각형이 더 작아질 수록, 더 많은 개수의 라인 세그먼트들이 생겨나고 그 결과는 더 부드러워집니다.


3D 문맥에서, 큐브의 크기는 최종 서피스의 해상도를 제어합니다. 아래에 있는 스크린샷( screenshot )에는 두 개의 드래곤이 있는데요, 같은 음함수 모델을 사용하고 있지만, 서피스들이 서로 다른 메시 크기를 사용해서 생성되었습니다.



Radial basis functions


음함수 모델링은 언제나( invariably ) Radial Basis Functions( RBF ) 와 연관되어 있습니다. 이것들은 분산된 데이터 보간 문제를 해결하는 가장 정확하고 안정적인 기법 중의 하나로 인식되고 있습니다.


기저 함수들은 수학적 레고( Lego )로 기술됩니다. 그것들은 기본적인 기능 빌딩 블록( functional building block )들의 집합인데, 그 블록들은 우리가 필요로 하는 기능들을 제공하기 위해 서로의 위쪽에 쌓일( stack )수 있습니다.


Radial 기저 함수는 거리에 기반해 값들을 생성하는 함수들의 그룹입니다. 그래서 특정 점에 가까워질 수록 더 많은 영향이 발생합니다. 가장 일반적인 유형들은 다음과 같습니다:


  • Gaussian.
  • Multiquadric.
  • Inverse quadratic.
  • Inverse multiquadric.
  • Polyharmonic spline.


내 조사( survey )에 영향을 미친 것은 Grady Wright 가 2003 년에 작성한 논문입니다. 그는 RBF 개발이 초기에는 ( 1968 ) 자동화되고( automated ) 선입견없는( unbiased ) 등고선( contour ) 지도를 만들기 위해서 개발되었다고 언급했습니다. 


Summary


필자는 최근에 지질학자( geologist )들과 광산 기술자( engineer )들에게 음함수 모델에 대해서 어떻게 생각하는지에 대해 묻고 있습니다. 그 답변들은 다양했고 보통 명확하지 못했습니다. 자원 업계는 이 모델링 기술에 지난 10 년 동안 노출되어 왔습니다. 하지만 그 방법론은 더 오래전부터 존재했던 기하학적 프로세스들에서 채택되어 왔습니다. 우리는 음함수 모델링의 의미를 수집하기 위해 수학적 흔적을 따라야 합니다. 그렇게 하면, 명확한 정의가 보입니다. 그것은 볼륨 상의 수치적 속성들에 대한 연속적인 표현입니다. 그 모델은 x, y, z 항들에 대한 수학적 함수입니다. 보통 볼륨이 신발장 모양( shoe box shape )을 가지는게 편리합니다. 정의된 범위 내의 좌표계에서 xyz 위치를 삽입하면, 해당 위치의 속성값을 계산할 수 있습니다. 이것이 "연속적인 표현"이 의미하는 바입니다.


그 모델 자체를 가시화하는 직접적인 방법은 존재하지 않습니다. 이를 위해서는 추가적이고 독립적인 단계가 필요하며, 모델링되고 있는 속성들에 대한 하나 이상의 3D 등고이나 isosurface 들이 추출되는 것을 내포합니다.


우리 업계가 이 정의를 수용하는지 혹은 현재의 모호함을 계속 유지하게 되는지 여부는 여전히 남아 있습니다. 현재의 AusIMM "Mineral Resource and Ore Reserve Estimation -- Guide to Good Practice" 에는 "음함수 모델링" 에 대한 20 개가 넘는 참조들이 존재합니다. 이것은 이 방법론이 진지하게 수용되고 있음을 보여주며, 업계가 그 의미를 일관되게 이해하는 것이 더 중요해 집니다.


References


http://www.orefind.com/docs/orefind-research-papers-in-pdf/pigm_hr.pdf


http://www.unchainedgeometry.com/jbloom/dissertation.html


http://www.psych.mcgill.ca/misc/fda/ex-basis-a1.html


http://mathinsight.org/surface_defined_implicitly


http://www.wdv.com/Math/Calculus/Lecture01.pdf


http://amath.colorado.edu/faculty/fornberg/Docs/GradyWrightThesis.pdf


http://0fps.net/2012/07/10/smooth-voxel-terrain-part-1/

Blinn 과 Newell 은 1976 년에 reflection mapping( environment mapping 이라 불리기도 함 ) 이라는 기법을 소개했는데요, 이는 거울같은 서피스로부터의 반사를 시뮬레이션합니다. 그 공식은 다음과 같습니다[ 1 ].


식 1. Reflection Vector 계산


여기에서 N 은 서피스의 노멀( normal ) 벡터이며 V 는 서피스로부터 뷰어( viewer )를 향하는 벡터입니다. 그리고 R 은 반사 벡터입니다. N 과 V 는 모두 정규화( normalize )되어 있다고 가정합니다.


이 식을 처음 보면 상당히 이해하기 힘든데요, 그림을 그려서 관계를 살펴 보면 쉽게 이해할 수 있습니다. R 은 N 과 V 가 이루는 평면상에 존재하게 되므로 사실 이는 2D 수학입니다.


그림 1. Reflection Vector 계산 과정.


먼저 N 과 V 가 모두 정규화되어 있기 때문에 dot( N, V ) 는 VN 에 사영했을 때의 길이가 됩니다. 이게 마름모를 형성하고 있으므로 그것을 2 배 한 만큼 N 방향으로 밀어 낸 후에 -V 방향을 더하면 R 이 나옵니다.


그런데 셰이더를 작성할 때 이걸 일일히 계산할 필요는 없습니다. HLSL 내장함수로 reflect( I, N ) 라는 것이 존재합니다.


Blinn 과 Newell 의 공식과 차이가 있는데요, 뷰어와 노멀의 관계에서 반사 벡터를 구하는 것이 아니라, 입사( incident ) 벡터와 노멀의 관계에서 뷰어를 구한다는 것입니다.


식 2. HLSL reflect( i, n ) 의 계산식.


그림 1 처럼 직접 그려 보시면 이해가 갈 것이라 생각합니다. 자세한 내용은 [ reflect ] 에서 확인하세요.


참고자료


[ 1 ] 38p. TEXTURING & MODELING. A Procedural Approach. THIRD EDITION.

작성자 : 오석주 테크니컬 디렉터( TD, Technical Director ).

모바일에서 사용할 수 있는 SSS 에 대해서 소개한 글입니다. 저는 오탈자 교정 및 비문 수정만 했습니다.


Surbsurface Scattering( 이하 'SSS' ) 은 주로 빛이 표면의 안쪽으로 투과되어 들어 갔다가 다른 곳으로 튀어 나가는 표면에서 일어나는 현상이다. 주로 피부, 대리석, 우유, 양초 등이 이해 해당하는 물질들이다. 

우리가 주로 사용하는 BRDF( Bidirectional Reflectance Distribution Function ) 는 그림 1의 (a) 에서 볼 수 있듯이 빛이 입사한 지점과 반사되는 지점이 동일하다는 가정에서 만들어져 있다.

그림 1. (a) BRDF 와 (b) BSSRDF 에서의 빛의 산란.

출처 : https://graphics.stanford.edu/papers/bssrdf/bssrdf.pdf


그러나 SSS 를 계산하려면 Figure 1 의 (b) 와 같이 입사한 지점과 반사되는 지점이 다르다. 그러므로 아래와 같은 BSSRDF( Bidirectional Scattering-Surface Reflectance Distribution Function ) 을 사용해야 한다.

그림2. BSSRDF 모델.

출처 : https://graphics.stanford.edu/papers/bssrdf/bssrdf.pdf

편집자 주 :

앞에서 언급한 피부, 대리석, 우유, 양초 등을 이런 모델을 통해 렌더링하면 더욱 사실적인 결과를 산출한다. 여기에서는 피부를 중심으로 이야기할 것이다.

피부를 제대로 렌더링하기 위해 BSSRDF 를 실시간 그래픽스에 적용하는 것은 어렵다. 너무 무겁기 때문이다. 그래서 최적화를 위해 Texture-Space SSS 나 Scren-Space SSS( S5 ), Pre-Integrated SSS 등 여러가지 기법들이 만들어지게 됐다. 하지만 이런 기법들은 여전히 모바일에서 사용하기에는 무겁다.

그래서 Texture-Space SSS 나 Screen-Space SSS 의 개념을 기반으로 모바일에서도 사용할 수 있을 정도의 가볍고 근사된( approximated ) SSS 를 만드는 것을 목표로 했다.

일단 앞에서 언급한 두 가지 모델에 대해서 살펴 보도록 하겠다.

그림 3. Texture-Space Blur.

출처 : https://developer.download.nvidia.com/books/HTML/gpugems/gpugems_ch16.html

그림 3 은 Texture-Space( UV-Space ) 에서 라이팅 결과를 블러( Blur )해서 BSSRDF 를 흉내내는 것을 보여 준다. BSSRDF 에서, 블러의 크기는 빛이 입사된 지점과 반사된 지점 간의 차이를 나타내기 위해서 사용된다.

그림 4. Texture-Space SSS 와 Screen-Space SSS 의 비교.

출처 : http://www.iryoku.com/stare-into-the-future

그림 4 에서는 Texture-Space 블러와 Screen-Space 블러의 차이를 보여주고 있다.

그림 5. Screen-Space 블러에서 SSS 까지의 과정.

출처 : https://www.derschmale.com/blog/wp-content/weights.jpg

그림 5 는 Screen-Space 에서 블러한 결과를 사용해서 SSS 의 느낌을 달성하는 방법에 대해서 보여 주고 있다.

여기에서는 Texture-Space 와 Screen-Space 기법의 장단점에 대해서 논의하지는 않겠다. 이 기법들을 실제로 구현해 보면 자잘한 문제들을 가지고 있기 때문에 그것을 해결하는 방법까지 논의하면 할 이야기가 굉장히 많기 때문이다. 

어쨌든 여기에서 중요한 점은 대부분의 기법들이 라이팅 결과를 블러해서 SSS 효과를 만들고 있다는 것이다.

Normal Blur SSS 는 "모든 라이팅을 노멀 벡터와 라이트 벡터의 연산이라고 볼 때, Blur( dot( N, L ) ) 과 dot( Blur( N ), L ) 은 어느 정도 유사성을 띄고 있지 않을까?" 라는 아이디어에서 시작했다.

그림 6. 3x3 노멀 블러 커널.

그림 6 과 같은 커널을 사용해서 노멀맵을 블러한다고 가정해 보자( 여기에서 편의상 L 은 Directional-Light Vector 라 가정한다 ). 그러면 다음과 같은 결과를 얻을 수 있다.

위의 식은 다음과 같다.

실제로는 내적 결과를 0 이하로 잘라내는 과정인 max( dot( N, L ), 0 ) 을 수행하지 않았기 때문에 완전히 같다고는 할 수 없지만 근사치로는 쓸만하다고 할 수 있다. 포인트 라이트와 같은 punctual 라이트를 사용하면, 각 픽셀에서의 라이트 벡터는 달라지지만, 주변 픽셀을 블러한 것이므로 근사치로 사용하는 데 무리가 없다고 생각했다.

그러므로 노멀 벡터를 미리 블러해서 디퓨즈 라이팅을 계산하면 어느 정도 SSS 결과를 근사계산할 수 있다고 생각했다. 그리고 이 방법의 가장 큰 장점은 노멀 텍스쳐 한 장을 더 사용하고 dot( N, L ) 연산을 한 번 더 하는 정도의 비용으로 SSS 를 근사계산할 수 있다는 것이다. 문제는 "어느 정도로 SSS 가 근사되느냐" 이다.

 

그림 7. Object-Space Normal Map 블러. (좌) 원래 버텍스 노멀, (우) 블러된 버텍스 노멀.

일단 이해하기 쉽게 Object-Space Normal Map 을 뽑아 보았다. 여기에서는 블러를 할 것이므로 픽셀 노멀이 아니라 버텍스 노멀을 사용했다. 그리고 실제 적용도 버텍스 노멀에서 뽑아 낸 값으로 적용한다.

샘플에 사용된 모델은 Virtual Model 에서 무료로 제공하는 Louise 모델이다.

그림 8. Normal Blur SSS 결과. Unity3D, Android Platform. Custom PBR, Beckmann Specular.

그림 9. Normal Blur SSS 결과. Unity3D, Android Platform. Custom PBR, Beckmann Specular.

위 샘플들은 모두 Unity3D 의 Android Platform 에서 렌더링되었다. Custom PBR 셰이더를 사용했으며 Specular 는 Beckmann 모델을 사용했다. Normal Blur SSS 의 결과는 상당히 만족할만 했다. 실제로 사용된 노멀맵은 그림 10 과 같다.

그림 10. Louise 에서 사용된 2 장의 노멀맵.

실제로 이 기법을 모바일 기기에서 테스트해 봤을 때 최신 하드웨어에서는 사용했을 때와 그렇지 않을 때의 차이가 거의 없을 정도였다. 일반적인 렌더링 연산에서 늘어난 것은 블러된 노멀맵에 대한 한 번의 샘플링 비용과 dot( N, L ) 연산 몇 개 정도이다. 그러므로 최신 하드웨어에서는 차이를 거의 느낄 수가 없었다.

효과를 더욱 극단적으로 보이게 하기 위해서 과장된 다른 샘플의 예를 들어 보겠다. 아래 모델은 Free 3D Model 에서 무료로 제공되는 3D Scan Head 이다.

그림 11. 과장된 효과를 보여 주는 샘플.

주의 : 허락받고 번역한 것이 아니므로 언제든 내려갈 수 있습니다.

주의 : 번역이 개판이므로 이상하면 원문을 참조하세요.

원문 : Color Fundamental: Shading



우리는 컬러를 모든 머티리얼( 재질, material )에 대한 속성으로, 빛을 그것을 변경할 수 있는 요소로 이해하는 경향이 있습니다. 토마토는 붉은색이고 풀은 녹색이고 빛은 그냥 그것을 밝거나 어둡게 만듭니다. 맞을까요? 아닙니다.


컬러는 영원하게 존재하는 것이 아닙니다 - 그것은 우리의 비전( vision ) 메커니즘의 효과이며, 이는 빛에 의해서 공급됩니다. 빛이 없으면 색상도 없습니다. 여러분은 어두울 때 이를 쉽게 인지할 수 있습니다. 어두움이 색상을 다루는 것이 아닙니다 - 그것들을 생성하는 것은 빛입니다! 만약 이게 여러분에게 혁명적으로 들린다면, 계속 읽어 보시기 바랍니다 - 아티스트에게 있어서 그것을 이해하는 것보다 중요한 것은 없습니다. 또한 이 문서를 보기 전에 시리즈의 첫 번째 기사를 읽어 보세요.


What is Color?


약간 물리적인 버전을 살펴 보죠. 걱정하지 마세요. 저는 가능한한 쉽게 설명할 겁니다! 어떤 오브젝트들은 방사선( radiation )을 방출할 수 있습니다. 이것이 오브젝트가 다양한 방향으로 파티클 뭉치( bunch of particle)( 혹은 파동( wave ) )를 던진다는 것을 의미합니다. 빛은 일종의 복사에너지이며, 모든 광원은 포톤( phton )을 방출합니다.



포톤들은 다양한 파장( wavelength )( 여기에서는 x, y, z )으로 결합된 파동( wave )들입니다.



우리는 광원과 특정 방향 사이에서 포톤이 날아가는 길을 레이( ray )라 부를 겁니다.



Those were a couple of facts. 그런데 인간이라는 요소가 관여하면 무슨 일이 발생할까요? 우리 주변에는 많은 방사선들이 존재합니다. 하지만 우리의 눈은 특정 영역의 파장에만 특별히 반응을 하죠. 예를 들어, 우리는 파장이 그 영역에 들어 오기 전까지는 열을 볼 수 없습니다( 빨갛고 뜨거운 금속이 갑자기 광원이 됩니다 ). 우리가 볼 수 있는 전자기 방사선( electromagnetic radiation )의 일부를 가시 광선( visible light )라 부르며, 보통 이것을 그냥 빛이라 부릅니다.


우리는 이 시리즈의 첫 번째 기사에서 이에 대해 짧게 언급했었지만, 이제 세부사항을 더해 보도록 합시다. 우리 눈에는 두 종류의 광수용기 세포( photoreceptor cell )가 존재합니다; 원추( cone ) 세포와 간상( rod ) 세포입니다. 레이가 그 세포를 때리면, 그것들이 반응해서 어떤 정보를 뇌에 전달하게 됩니다.



간상 세포는 매우 빛에 민감하며 야간 시력( night vision, 암시 )에 간여합니다. 움직임과 형태를 보게 됩니다. 원추 세포는 반대이며, 우리에게 더욱 흥미로운 것입니다. 그것들은 파동을 특정 파장으로 나눌 수 있는데, 뇌는 그것을 ( 대충 ) 레드( 긴 파장 ), 그린( 중간 파장 ), 블루( 짧은 파장 )으로 해석합니다. 레이가 어떤 파장으로 구성되어 있느냐에 따라, 우리는 세 가지로 혼합된 색상을 인지하게 되는 겁니다.



하지만 만약 그것들이 같은 광원으로부터 온 것이라면, 다양한 파장들은 어디에서 온 걸까요? 대부분의 레이들은 어떤 오브젝트를 때리고 나서, 어딘가로 반사되고 있습니다( 예를 들어 여러분의 눈으로 ). 보통 그것들이 때리는 오브젝트들은 그것들을 완벽하게 거울처럼 반사하지는 않습니다. 파장들의 일부는 오브젝트에 의해서 흡수되고 있으며, 그것들은 여러분의 눈으로 절대 도달하지 않습니다. 결과적으로, 우리는 원래 레이의 일부만을 오브젝트로부터 받고 있는 겁니다. 이것들은 레이에 남아 있게 되고, 여러분의 뇌에 의해 오브젝트의 컬러로 해석됩니다. 다양한 컬러들이 머티리얼들의 흡수 및 반사 속성으로부터 오게 됩니다.



여러분은 아마도 페인팅을 할 때 그게 전부인지 궁금할 것입니다. 컬러만 사용해서 페인팅을 한다면, 물리적으로 그린 것이 아니게 됩니다. 몇 초 안에 모든 것이 명확해질 것이라 생각합니다.


Hue, Saturation, Brightness


이것보다 헷갈리는게 있을까요? 색상( hue ), 채도( saturation ), 명도( brightness )가 무엇인지 직감적으로 이해하고 있을 것입니다. 하지만 페인팅을 시작하게 되면, 그것들을 어떻게 사용해야 할지 추측하기가 어렵습니다. 색상은 글쎄요 컬러입니다. 맞나요? 채도는 선명함... 그리고 명도는 무엇인가가 밝거나 어둡거나 하는 것을 알려 줍니다. 하지만 그건 단지 페인팅이 완료된 그림을 보고 이야기할 때나 말이 됩니다. 그리고 여러분이 직접 그것을 어디에 배치해야 하는지 추측하는 것은 훨씬 더 어렵습니다. 하지만, 우리에게 필요한 것은 이런 값들이 실제로 어디에서 나오는지를 이해하는 것입니다.



The Definition of Hue


색상은 컬러의 "유형( type )"입니다. 레드( red ), 퍼플( purple ), 올리브( olive ), 크림슨( crimson )들은 모두 색상입니다. 그것들은 방금 위에서 이야기한 메커니즘에 기반하고 있습니다 - 반사된 파장들의 다양한 비율의 조합은 뇌에서 해석되는 최종 컬러를 생성합니다. 그러므로 간단하게 이야기하면, 색상은 "오브젝트의 컬러"에 기반합니다. 재밌는 사실: 실버( silver ), 골드( gold ), 브라운( brown )은 색상이 아닙니다. 실버는 빛나는 그레이( gray )이며, 골드는 빛나는 옐로우( yellow )입니다, 그리고 브라운은 어둡거나 채도가 낮은 오렌지( orange )입니다.



색상을 위해서 얼마나 많은 이름들을 개발하든지 간에, 그것들은 모두 레드, 그린, 블루에 기반합니다. The further on the color wheel you are from any of them, the more "original" color you'll get. 예를 들어 50% 레드 + 50% 그린은 옐로우지만, 이 비율을 약간 변경하면, 그리니시( greenish ) 혹은 레디시( reddish ) 색조를 보게 될 것입니다.



There's no greater of lesser hue, being put on a wheel they're all equal. 그러므로 우리는 퍼센트( percent ) 값보다는 디그리( degree ) 값을 사용해 그것들을 기술하게 됩니다( 역주 : 어떤 비율에 의해서 색상이 결정되는 것이 아니라, 각각이 얼마나 존재하느냐가 색상을 결정하고 있으므로, 각 파장끼리의 퍼센티지로 색상을 결정하는 것이 아니라, 각각의 파장이 얼마나 들어 있느냐를 기준으로 색상을 결정한다는 의미인 듯 ).


The Definition of Saturation


색상은 컬러를 의미하는 것은 아닙니다( 적어도 공식적으로는 그렇지 않습니다 )( 역주 : 색상, 명도, 채도가 합쳐져서 컬러라고 이야기하는 듯 ). 아래에 있는 모든 원들은 같은 색상값을 가지며, 컬러 휠에서 정확하게 같은 위치에 존재합니다( 명도 역시 동일합니다 ). 그런데 왜 그것들이 다른 컬러로 인지되는 걸까요?



채도의 일반적인 정의는 색상에 얼마나 많은 흰색이 섞였느냐입니다. 하지만 잠깐요, 그건 명도 아닌가요? 여러분은 더 밝은 컬러를 원하면, 그것을 하얗게 만듭니다... 하지만 이는 더 어두운 영역의 채도를 낮아지게 만듭니다( 역주 : 위의 그림에서 어둡게 보이는 것이 채도가 낮다는 의미인듯 ). 많이 헷갈리시죠? 그게 우리가 더 많은 설명을 필요로 하는 이유입니다.



채도는 주요 컬러( dominance of color )입니다. 아래의 세 가지 샘플들은 같은 명도와 색상을 가지고 있습니다. 달라진건 컴포넌트( component, 요소 )( 역주 : 여기에서는 파장을 의미 )들 사이의 비율뿐입니다. 우리는 "흰색을 더하지" 않습니다 - 컴포넌트 사이의 거리를 줄이고 있으며, 그래서 그 중에 어떤 것도 튀지 않게 만듭니다.



여러분이 추측할 수 있듯이, 컴포넌트 사이의 차이가 줄어들면, 채도를 잃게 되며, 흰색이 됩니다( 아직 명도를 포함시키지 않았습니다 ).



The Definition of Brightness


필요에 의해, 앞에서 했던 것과 유사하게 명도를 조절할 수 있습니다. 그것은 우리 눈이 인지할 수 있는 최대값을 정의합니다. 100% 블루보다 더 블루인 것은 없습니다. 100% 화이트보다 더 밝은 것은 없는 것과 같습니다.



이 바( bar )들은 최대치를 넘어서 채워질 수 없습니다:



그리고, 명확히, 블랙( black )은 정보가 부족해지는 상태가 됩니다.



재밌는 사실: 어두울 때, 우리의 원추 세포들은 적은 정보를 받게 되는데요, 이는 우리를 약간 색맹으로 만듭니다. 이 시점에 모든 빛에 대해서 민감해지는 간상 세포들이 ( 역주 : 빛을 ) 인계받게 됩니다. 그러나, 그것들은 그린-블루에 가장 민감하기 때문에, 그린-블루인 오브젝트가 더 밝게 보이게 만들 겁니다. 이것을 푸르키네 효과( Purkinje effect )라 부릅니다.


Luminance


절대적인 명도를 가지고 있음에도 불구하고, 모든 컬러는 다른 속성인 휘도( luminance )를 가집니다. 명도는 우리에게 얼마나 많은 컬러( 역주 : 아마도 색상을 잘못 쓴 듯 )가 그 컬러 안에 존재하는지를 알려주는 반면에, 어떤 색상들은 우리에게 더 밝게 보입니다 - 심지어 100% 밝기일 때도 그렇습니다. 휘도는 밝은 컬러가 얼마나 화이트에 대해 상대적인가에 대한 것입니다.


우리가 100% 만큼 밝은 주요 컬러를 그레이스케일( grayscale, 흑백 )로 바꾸면, 그것들의 명도는 갑자기 떨어지게 됩니다. 그것들은 여전히 화이트이지만, 블루는 매우, 매우 어둡게 바뀌고, 그린은 다른 것들보다 밝습니다. 이는 모든 원추 세포의 개별적인 민감성으로부터 발생하며, 우리가 옐로우( 밝은 레드 + 매우 어두운 그린 )을 가장 밝은 색으로 인지하게 되는 이유이며, 사이언( cyan )( 어두운 블루 + 매우 밝은 그린 )이 종종 라이트 블루( light blue )라 불리는 이유입니다. 휘도는 여러분이 그레이스케일로 그림을 시작할 때 중요합니다 - 예를 들어, 옐로우는 같은 절대적인 명도를 가진 다른 컬러들보다 더 밝은 베이스( base )를 필요로 합니다.



HSB Model


하지만 여전히 약간 헷갈릴 겁니다. 사실, 우리는 컬러를 주의깊게 만들지 않습니다. 너무 시간이 오래 걸려요! 다행히도, 색상, 채도, 명도는 매우 유용한 도구로 조합될 수 있습니다. 아래의 구성을 살펴 봅시다 - 여러분은 컬러 사이의 명확한 관계를 확인할 수 있습니다. 이걸 쓰지 않을 이유가 뭐가 있을까요?



만약 디지털 페인터를 사용한다면, 이것들은 여러분에게 친숙할 것입니다. 그건 색상, 채도, 명도를 하나로 합치는 방법이며, HSB( 역주 : Hue, Saturation, Brightness ) 라 불리는 일관된 모델입니다. 어떻게 동작하는 것일까요?



일단 색상, 채도, 명도에 대해서 알았기 때문에, 그것들을 모델에 배치하는 것은 쉽습니다. 색상환( Hue wheel )( 혹은 바여도 상관없습니다 )은 SB 사각/삼각형에 대해 독립적이며 상위개념( superior )입니다. 모든 색상은 일정 범위의 채도와 명도를 보유하고 있으며, 이 두 값들은 서로에게 연결되어 있습니다. 둘 다 특정 색상의 "풍부함( richness )" 혹은 "다채로움( colorfulness )" 을 정의합니다.



SB 모델은 서로 다른 속성들에 대한 영역으로 나뉠 수 있습니다. 만약 여러분이 광학적으로 적절한 컬러를 고르는 것을 배운다면, 여러분은 채도나 명도의 특정 값들에 대해서 알 필요가 없어질 것입니다 - 그것은 자연스럽게 빠른 페인팅을 위해 매우 유용합니다.



사각형이 더 직관적이기는 하지만, 개인적으로는 삼각형을 선호합니다. 그것은 채도나 명도를 개별적으로 제어하는 것이 아니라 전체적인 "풍부함"을 제어할 수 있도록 해 줍니다( 개별적인 조정을 위해서는 슬라이더를 사용합니다! ). 만약 여러분이 저같다면, 포토샵에서 항상 열려 있는 색상환을 이용할 수 있습니다. Painters Wheel 을 확인해 보세요.


CMY and RGB


그런데 전통적인 화가들은 어떨까요? 그들은 정돈된 슬라이더를 가진 편리한 색상환을 가지고 있지 않습니다. 어떻게 안료( pigment )의 색상, 채도, 명도를 조절할 수 있을까요?


먼저, 디지털 페인팅과 전통적 페인팅의 차이를 생각해 봅시다. 둘다 컬러를 사용합니다. 그렇죠? 문제는 디지털 페인팅이 다채로운 광원들을 사용해 우리 눈으로 바로 들어 오는 가장 완벽한 컬러들을 생성하고 있다는 것입니다. 반면에 전통적 페인팅에서는 안료로부터 반사되는 빛이 제한적입니다. 그려진 것과 여러분이 실제로 보는 것 사이에서 중개자( middleman )를 사용하는 것과 같습니다! 우리는 어떤 매체( medium )가 더 예술적인지 토론할 수 있지만, 디지털 페인팅이 더욱 비전 메커니즘과 어울린다는 것은 의심의 여지가 없습니다.


그래서, 전통적으로 그리기 위해서는 안료가 필요합니다. 그것들은 스스로 컬러를 방출하지 않는 대신에 그것들을 때리는 빛의 일부를 흡수하고, 그것들의 이름에 맞게 파장을 반사합니다. 예를 들어 레드 페인트는 그린과 블루를 흡수하고 레드만 반사합니다.



문제는 그것이 방출하는 것과 정확히 같은 빛을 반사하는 완벽한 안료를 만드는 것이 불가능하다는 데 있습니다. 예를 들면, "블루" 원추 세포만 시뮬레이션 할 수 없습니다. CMY( 역주 : Cyan, Magenta, Yellow ) 는 일종의 약속입니다: 사이언은 레드를 반사하지 않고, 마젠타는 그린을 반사하지 않으며, 옐로우는 블루를 반사하지 않습니다. 그래서 우리가 "블루" 원추 세포를 시뮬레이션하기를 원한다면, 사이언과 마젠타를 섞을 필요가 있습니다 - 이 안료는 가능한한 레드와 그린을 적게 반사하게 될 것입니다. "K" 는 CMY 에 추가된 블랙입니다. 왜냐하면 그 컴포넌트들은 완벽하지 않아서 같은 비율로 섞여 있다고 해도 순수한 블랙을 만들어낼 수 없기 때문입니다.



RGB 는 가산적( additive )입니다 - 더 많은 값을 더할수록, 더 밝은 컬러를 얻게 됩니다. CMY 는 감산적( subtractive )입니다 - 더 적은 값을 더할수록, 더 밝은 컬러를 얻게 됩니다.



Four Rules of Color Mixing


'

Rule 1 - Hue Mixing


두 색상을 혼합하면, 비율에 따라 그것들 사이의 색상을 얻을 수 있습니다. 이것은 가산혼합일 수도 있고 감산혼합일 수도 있습니다.



Rule 2 - Complementary Hue Mixing


여러분은 아마도 보색에 대해서 들어 보셨을 겁니다. 그것들은 색상환에서 반대쪽에 위치한 색상들을 의미합니다. ( 두 색상이 같은 명도를 가질 때 )그것들 사이의 대비( contrast )는 블랙과 화이트 사이처럼 두드러집니다. 그러나 그것들이 혼합되면, 서로를 중화시켜버립니다.



보색을 혼합하는 것은 중립성( 그레이 혹은 그레이시( grayish ) )을 제공합니다. 100% 명도의 보색들에 대한 가산 혼합은 화이트를 반환할 것이며 감산 혼합은 블랙을 반환할 것입니다.



감산 기법에서, 보색의 일부를 더하는 것은 정확하게 채도를 줄이는 가장 쉬운 방법입니다.



Rule 3 - Saturation Mixing


감산 혼합과 가산 혼합에서, 컴포넌트들 사이의 비율은 동일합니다. 그리고 결과적으로 채도가 감소됩니다.



Rule 4 - Brightness Mixing


가산 혼합은 더 밝은 컬러를 산출하고, 감산 혼합은 컴포넌트들 중 더 밝은 것보다 더 어두운 컬러를 산출합니다.



Color Temperature


색상환을 따뜻한 절반과 차가운 절반으로 나누는 전통은 매우 확고합니다. 우리는 따뜻한 컬러들은 활동적이고 친근한 반면에 차가운 컬러들은 수동적이고 격식이 있다고 알고 있습니다. 모든 책들이 컬러 심리학과 관련해서 작성되었지만, 문제는 그것이 목적성있는 분류가 아니라는 것에 있습니다. 가장 따뜻한 컬러는 무엇일까요? 레드? 옐로우? 퍼플은 따뜻합니까 차갑습니까? 그리고 정확하게 어디에 경계가 존재하는 건가요?



아래 그림을 보죠. 그것들은 모두 레드이며, 이론적으로는 항상 따뜻합니다. 그러면 그것들 중 일부는 왜 다른 것보다 차가워 보일까요? 이는 대비에 대한 것입니다. 컬러는 따뜻하지도 차갑지도 않습니다. 단지 더 따뜻해 보이고 더 차가워 보일 뿐입니다. 색상환은 그래서 가시적으로 그것을 나누는 게 쉽습니다. 왜냐하면 이 모든 컬러들이 한데 모아져 있고 비교하기 쉽기 때문입니다. 레드만 떼어 내서 보죠. 그것은 더 이상 따뜻하지도 차갑지도 않습니다. 그냥 레드입니다.



그런데, 어떻게 더 따뜻한 혹은 더 차가운 컬러를 만들까요? 색상환 위의 모든 색상들은 이웃을 가집니다. 이 이웃들은 우리의 샘플보다 항상 더 차갑거나 더 따뜻합니다( 만약 확신이 들지 않으면, 그것들의 이웃들 역시 살펴 보세요 ). 샘플보다 더 차가운 컬러를 생성하려면, 차가운 이웃쪽으로 이동해 보세요.



The Basic Rules of Shading


더 일찍 다뤘어야 했다구요? 저에게 잠시 시간을 할애해 주세요. 여러분은 이 긴 소개가 전체 과정을 이해하는 데 있어서 필요하다는 것을 알게 될 것입니다. 만약 여러분이 규칙들만을 기억하고 있다면, 스스로를 특정 상황에 국한시키는 것입니다. 하지만 그것들이 어떻게 만들어지는 지를 이해한다면, 제한이 없어질 것입니다.


The Local Color


어떤 광원에 의해서도 빛을 받지 않는 공통 베이스 컬러는 로컬 컬러라 불립니다. 우리는 이미 빛을 받지 않는 오브젝트는 어떤 컬러도 가질 수 없다는 것을 알고 있습니다. 그러므로 더 나은 정의는 빛이나 그림자에 의해서 강하게 영향받지 않는 컬러입니다. 그래서 체리의 로컬 컬러는 레드입니다. 심지어는 그것이 강한 오렌지 빛을 한 쪽에서 받고 다른 쪽에서 반사된 블루 빛을 받았다고 하더라도 말이죠. 로컬 컬러는 여러분이 그림을 그리기 시작할 곳입니다.


로컬 컬러의 채도와 명도는 어떻게 될까요? 명도는 여러분이 씬을 시작할 때 사용하는 가상의 산란된 빛( imaginary scattered light )에 의해 정의됩니다. 씬의 전반적인 명도( 산란된 빛의 세기 )를 정의하기 위해서는, 오브젝트를 화이트 시트에 배치하세요. 그것들은 모두 같은 빛에 의해 비춰지고, 같은 환경 하에서 그 오브젝트는 화이트 시트보다 더 밝을 수가 없습니다.



설명은 단순합니다 - 화이트 시트는 100% 의 빛을 반사합니다. 만약 오브젝트가 그것보다 밝다면, 그것은 오브젝트가 100% 의 빛보다 더 많은 빛을 반사한다는 의미가 됩니다( 그러면 그것은 형광물질이거나 스스로 빛을 방출하는 거겠죠 ). 이는 모두 대비에 관한 것입니다. 그러므로 더 어두운 부분은 여러분의 베이스 라이팅이 됩니다. 여러분은 나중에 더 튀는 광원을 추가할 수 있습니다.



채도는 어떨까요? 명도가 빛의 세기에 대한 것인 반면에, 채도는 컴포넌트들 사이의 비율에서 나옵니다. 이 비율은 빛의 세기가 변경되고 있는 동안에도 동일하게 유지됩니다( 나중에 자그마한 예외에 대해서 이야기할 것입니다 ). It's like adding more water with every teaspoon of sugar - the drink is not going to become any sweeter!




The Direct Light Source


첫 번째 기사에서 언급했던 빛의 영역에 대해서 빠르게 되돌이켜 보도록 하죠:



잘 정의되어 잇는 빛에 의해 비춰지지 않는 단순한 씬에서 시작해 보죠. 바닥은 그린이며, 공은 레드이고, 스카이는... 지금은 신경쓰지 마세요. 만약 배경이 매우 멀리 있다고 하면, 그것은 우리 오브젝트에 영향을 주지 않습니다. 우리는 당장은 직사광선이 없이 명도와 채도를 선택했고, 그것은 평평한 이차원으로 보입니다. 이것이 그것을 플랫 컬러( flat color )라 부르는 이유이며, 페인팅의 가장 쉬운 부분입니다.



광원이 생기면, 그것은 모든 씬으로 퍼져 나갑니다. 그것의 세기 - 명도 - 는 빛이 오브젝트와 직접적으로 만나는 곳에서 가장 높습니다( 풀 라이트( full light ), 하프 라이트( half light ) ). 그리고 빛이 닿지 못하는 곳에서 가장 낮습니다( 코어 섀도우( core shadow ), 캐스트 섀도우( cast shadow ) ). 로컬 컬러는 이제 끝났습니다.




공을 바닥에 붙어 있게 하기 위해서, 우리는 크레비스 섀도우( crevice shadow, 틈새 그림자 )를 추가할 필요가 있습니다 - 그곳은 빛이 도달하지 못하는 곳입니다. 그곳이 그림에서 가장 어두운 영역입니다.



문제는 씬이 여전히... 가짜같아 보인다는데 있습니다. 너무 컬러풀하고, 명랑합니다. 마치 어린이 동화책에 나오는 것 같네요. 그러나 뭔가가 잘못되었습니다... 만약 여러분이 첫 번째 기사를 주의깊게 읽어 보셨다면, 여기에는 디퓨트 리플렉션( diffuse reflection )만 사용했다는 것을 알아챘을 겁니다. 공을 때리는 모든 단일 레이는 일부는 흡수되고 레드만 반사합니다. 그러므로 최대 명도의 영역에서, 우리는 100% 레드를 획득하며 그것을 바꿀 방법은 없습니다! 이것은 매트( 무광, matte ) 머티리얼의 매우 자연스러운 상태이며, 채도를 줄이면 "더 밝은" 레드를 획득하는 것은 실수입니다.


이게 자연스럽다면, 왜 가짜같아 보일까요? 그 이유는 자연상에 완전한 무광 머티리얼이 존재하지 않기 때문입니다. 거의 대부분은 적어도 조금이라도 스펙큘러 리플렉션( specular reflection )을 반사합니다. 그리고 그것은 너무 반짝거릴 필요는 없습니다 - 보통 그것들은 매우 부드럽고 사소합니다. 여러분과 가까운 어떤 오브젝트를 바라보고 있을 때, 위치를 변경해 보세요 - 만약 그것의 "컬러들"이 여러분의 움직임을 따라서 ( 조금이라도! ) 변한다면, 그것들은 스펙큘러 리플렉션의 효과입니다. 여러분의 위치와 상관없는 것들은 디퓨즈 리플렉션에서 옵니다.


이전에 배웠듯이 스펙큘러 리플렉션은 광원의 리플렉션입니다. 그것이 세질수록 오브젝트 상에서 광원의 모양이 선명해집니다. 여기에서 가장 큰 역할은 머티리얼의 스펙큘러와 디큐즈 속성의 비율을 조정하는 것입니다. 매우 매끈한 오브젝트들은 보통 얇은 투명층을 가지고 있으며, 그것들 상에서 강한 스페큘러 머티리얼을 가집니다. 그래서 두 개의 리플렉션이 섞이지 않습니다( 세 번째 공 ).



밝은 영역의 채도를 감소시킨다고( 그것에 "화이트를 추가" ), 그것을 밝게 만드는 것이 아닙니다 - 여러분은 "광택( gloss )를 추가"하고 있는 겁니다.


하지만, 위의 공들은 여전히 가짜같습니다! ( so many ways to paint fake colors, huh? ). 이번에는 그것들이 3D 모델링같아 보입니다. 그 이유는 중립적인 화이트 빛은 자연상에서 발생하지 않기 때문입니다. 태양빛은 여러분의 눈에 들어 오기 전에 대기층을 통해 쪼개질 필요가 있습니다. 이전의 기사에서 무슨 일이 발생한 건지 설명했었습니다, so let's just add color to this mechanism.


짧은 파장 및 중간 파장은 쉽게 산란되고 있습니다. 대기를 통해서 그것들이 오랫 시간 동안 이동할 수록, 그것들은 자신의 길을 더욱 벗어나게 되며, 우리의 눈에 도달하지 않습니다( 적어도 초기의 방향에서 들어 오지는 않습니다 ). 그러므로, "화이트" 레이는 거의 레드나 그린이 되며, 심지어는 가장 태양이 높이 떠 있을 때도 블루가 부족합니다 - 태양은 따뜻합니다.



그런데 왜 따뜻한 광원의 리플렉션은 중립적으로 화이트여야 할까요? 가짜 3D 효과를 피하기 위해서는, 따뜻한 광택을 추가할 때 동시에 채도를 감소시키고 온도를 증가시켜야 합니다( 얼마나 세냐 약하냐는 중요치 않습니다 ). 이전에 배웠듯이, 차가운 레드와 따뜻한 레드가 존재하므로, 레드 표면이 오렌지나 옐로우로 즉각적으로 변한다는 것을 의미하는 것은 아닙니다!




그림을 더욱 매력적으로 만들기 위한 일반적인 방식으로서 광택을 사용하지는 말아야 합니다. 여러분이 느끼기에 화이트에 가까운 색이 나왔다면, 그것은 오브젝트가 빛나거나 젖었다는 것을 의미합니다. 피부를 그릴 때 그것을 고려해 보세요!



The Indirect Light Source


그런데 산란된 이 모든 블루들에는 무슨 일이 벌어진 것일까요? 그것은 물론 스카이 블루를 생성합니다. 우리가 이 밝은 블루를 볼 수 있다면, 그것은 우리의 눈에 도달함을 의미합니다 - 그리고 눈에만 도달하는 것은 아닙니다. 모든 오브젝트들은 이 간접광으로부터 "터치"당합니다. 그리고나서 그것들은 우리에게 다시 반사될 수 있습니다. 이는 태양광만큼 밝지는 않지만, 여전히 표면을 더 밝게 만들어 줍니다. 또한 만약 오브젝트가 완전한 무광이 아니라고 한다면, 표면은 채도를 잃고 차가워집니다( 왜냐하면 우리의 간접광원이 차갑기 때문입니다 ). 직접광은 항상 간접광보다는 강하다는 점을 염두에 두고, 그것들을 절대 섞으면 안 됩니다 - indirect reflection can't cross the terminator line.( 역주 : 직접광이 비치지 않기 시작하는 부분이 terminator line 인듯. 즉 직접광과 섞일 수 없다는 이야기인듯 )



가장 강한 리플렉션은 광택있는 표면에서 생성되지만, 우리의 "바닥"같은 무광 표면은 오브젝트에도 영향을 줍니다.



이전 기사에서 배웠듯이, 대비는 거리가 멀어지면 감소합니다. 그러나 멀어지는 오브젝트의 색상, 채도, 명도는 어떨까요? 글쎄요, 이것은 약간 복잡합니다. 오브젝트가 배경쪽으로 멀어지면, 스카이로부터 반사되는 빛과 그 정보가 혼합됩니다. 그렇죠? 이는 다음을 의미합니다:


  • 스카이의 색상의 방향에서 색상은 점진적으로 온도를 변경합니다.
  • 스카이의 값에 도달하도록 명도가 점진적으로 높아집니다.
  • 채도는 노이즈와 혼합되므로 감소합니다. 그러나 만약 광원이 배경( 뒤쪽 )에 존재하면( 전면이 어두울 때 ), 그 광원에 가까워질수록 채도가 증가할 수도 있습니다.

 


대기가 깨끗할수록 이 효과들은 줄어듭니다. 상대적으로, 먼지, 연기, 습도가 높으면, 오브젝트가 가까워도 이런 변화는 심해집니다. ( 무비 제작자들을 포함하는 ) 아티스트들의 일반적인 트릭은 작은 스케일에 대해서도 대기 효과를 표현하는 겁니다. 예를 들어, 몬스터의 한쪽 다리를 더 파랗게, 밝게, 채도를 낮게 만듭니다. 우리의 뇌는 그것을 더 멀다라고 인식합니다. 그래서 깊이감을 느낍니다. 그러나 대기의 두께도 고려해야만 합니다 - 이는 맑은 공기에는 맞지 않습니다.


Color and Value


적절한 컬러링은 자신도 모르게 올바른 값들을 생성합니다. 초심자들은 보통 그림을 시작할 때 적절하게 정의되어 있는 값들을 사용하려고 합니다. 하지만 우리가 방금 배운 규칙들을 사용하면, 컬러 페인팅에 있어서 문제를 겪지 않게 될 것입니다.


  • 로컬 컬러의 초기 명도는 전체 씬에서 균일한 명도로 설정합니다.
  • 디퓨즈 라이트들과 섀도우들은 로컬 컬러의 채도를 감소시킵니다 - 채도가 감소되지 않는 섀도우들은 더 밝은 값으로 보일 겁니다.
  • 광택이 심할수록, 값이 밝아집니다.
  • 간접광은 결코 직접광보다 밝을 수 없습니다. 그러므로 주요 광원과 헷갈릴 수가 없습니다.
  • 로컬 컬러는 한쪽은 빛을 받고 한쪽은 그림자가 있는 형태로 변하며, 이는 적절한 대비를 만듭니다.



더 많은 라이트들과 섀도우들이 추가되었다면, 어떻게 검사를 해야 할까요? 이를 위해서는 대비( contrast )가 중요하며, 어떤 대기( atmosphere )가 최선인지 선택할 필요가 있습니다. 일반적으로 메인 오브젝트를 세 개의 배경에 배치하는 것이 좋습니다: 화이트, 블랙, 50% 그레이. 만약 모든 상황에서 괜찮아 보이면, OK 입니다. 테스트를 위해 그림을 그레이스케일로 바꿔보는 것도 좋은 생각입니다.




Points to Remember


  • 높은 채도와 명도를 가지는 컬러는 자연상에 거의 존재하지 않습니다 - 그것들은 꽃, 새, 마법같은 것들을 위해서 남겨 두세요.
  • 빛을 받는 부분에 라이트를 배치해야지, 그림자 부분에 라이트를 배치하지 마세요! 만약에 라이트를 어두운 영역에 배치하고자 한다면, 그것을 점진적으로 밝게 만드세요.
  • 셰이딩이 너무 다채로우면, 잠시 쉬었다가 멀리서 보세요. There's a chance your eyes are just too focused on them after hours of work and the colors are actually OK. 그림을 돌려 보거나 거울을 통해서 간접적으로 보는 것도 도움이 됩니다.



No More Guessing


일단 컬러가 어떤 정보를 담는 단순한 신호라는 것을 이해하게 되면, 여러분의 그림에서 실세계를 베끼는 것이 더 쉬워집니다. 수백개의 규칙을 기억할 필요는 없습니다 - 기본을 이해하고 있다면, 훌륭한 정확도를 가지고 사실성을 계산할 수 있습니다! 물론 그것들을 성공을 위한 일반적인 방식으로 여기지는 마세요 - 예술은 예술입니다. 그리고 보통 실제로는 그 규칙들을 깰 때, 여러분은 최고의 효과를 얻기도 합니다.


다음 시리즈에서는 더 많은 트릭들을 보여 줄 것입니다. 다중의 다채로운 광원, 투명, 서브서피스 스캐터링, 빛 방출, 굴절, 그리고 텍스쳐에 대해서 보여 줄 것입니다.




Monika Zagrobelna

Poland


저는 오랜 시간 동안 쓸데없지만 창조적인 경험들을 한 폴란드 예술가입니다. 몇년이 지나서 제가 얼마나 잘못되었는지를 깨달았기 때문에, 저는 스스로 운명에 순응하고 그것들을 제대로 그리기 위해 연구를 해 보기로 결심했습니다! 제 튜토리얼은 그런 연구의 결과물입니다 - 그게 저에게 도움이 되었듯이 여러분에게도 도움이 되었으면 합니다.

회사에서 거리에 따른 texture streaming 을 하는 경우에 대해 이야기하다가 논쟁거리가 하나 생겼습니다.

 

저는 "직접 texture streaming 을 하면 더 작은 크기의 texture 를 적용하는 데다가 GPU 에서 계산되는 LOD 까지 영향을 받아 LOD bias 를 둔 것과 같은 효과가 나와서 품질 조절이 힘들다" 라는 주장을 했습니다.

 

하지만 같이 일하는 분은 "texture 의 해상도를 고려해서 LOD 계산이 되기 때문에 서로 다른 크기의 texture 를 binding 해도 참조하는 LOD 는 결과적으로 동일하다" 는 주장을 했습니다.

 

제가 이쪽 LOD 계산에 대해서 구현 문서를 실제로 본 적은 없고 ddxddy 를 이용한다고만 알고 있었기 때문에, 그럴 수도 있다는 생각이 들었습니다. 만약 texture 크기가 고려된다면 texture streaming 시에 LOD 문제에 대해서 걱정할 필요가 없어지겠죠. 그래서 실제로 그런 결과가 나오는지 테스트해 보기로 했습니다.

 

무지개색을 가진 mipmap chain 을 가진 텍스쳐를 생성했습니다. 1024 texture 와 512 texture 를 만들어서 테스트해 봤습니다. 둘 다 붉은색이 가장 낮은 LOD( Mipmap 0 )이며 보라색이 가장 높은 LOD 입니다. 결과는 다음과 같았습니다.

 

그림 1

 

여기에서 성급하게 결론을 내리려다가, 직접 texture streaming 이 들어 가는 경우에는 작은 texture 의 LOD0 은 큰 texture 의 LOD1 에서 시작해야 된다는 것을 상기했습니다. 그래서 512 texture 의 LOD0 이 주황색에서 시작하도록 texture 를 새로 만들어서 테스트해 보았습니다.

 

 

그림 2

 

결국 거리별로 texture streaming 단계를 조정해도 실제 참조해야 하는 LOD 는 거의 같다는 결론이 나왔습니다. 제가 틀렸습니다 ㅠㅠ.

 

물론 더 낮은 LOD 가 나와야 하는 곳에서 필요한 해상도의 texture 가 공급되어 있지 않으면 그림 3 과 같이 이상한 결과가 나오겠지만 말이죠. 그건 어쩔 수 없는 문제인 것 같습니다.

 

그림 3

 

정리하자면 mipmap level 결정에는 texture 크기가 반영되므로 texture streaming 을 직접 하는 경우에도 LOD bias 가 먹을 것을 걱정할 필요가 없습니다

 

주의할 점은 이게 pixel 단위 해상도 보장이 아니라는 것입니다. 밑에 코드에서 알 수 있듯이, 같은 기울기와 같은 uv 변화량을 공유하는 경우에만 동일한 pixel 단위 해상도가 보장됩니다. 만약 uv 가 다르면 texture size 에 따라 pixel 단위 해상도가 틀려집니다. 즉 같은 메쉬 내에서도 pixel 단위 해상도는 달라질 수 있다는 것입니다.

 

===============================

 

실제 virtual texturing 을 위해서 mipmap level 을 계산하는 샘플을 찾아 봤습니다( 출처 : Texture LOD calculation( useful for atlasing ).

 

 

위와 같이 한 뒤에 mipLevel 을 사용해 tex2Dlod() 를 호출해 주면 된다고 하네요. 물론 위의 코드는 일부이고 이런 저런 이슈가 있다고 하네요.

주의 : 번역이 개판이므로 이상하면 원문을 참조하세요.

주의 : 허락받고 번역한 것이 아니므로 언제든 내려갈 수 있습니다.

원문 : How To Split Specular And Diffuse In Real Images


How To Split Specular And Diffuse In Real Images

실제보다는 어렵다고 생각하는 것을 정리해 두십시오. 제가 집에서 만든 것은 실제 이미지에서 diffuse 요소와 specular 요소를 분리하는 편광을 사용하는 기능입니다. 아티스트들은 사진 레퍼런스를 찾기 위해 많은 시간을 들입니다. 하지만 specular 와 diffuse 를 분리하는 것은 재질을 이해하는 데 있어 도움을 줍니다. 타이틀 이미지에서( 역주 : 여기에는 타이틀 이미지가 없습니다. 첫 번째 이미지를 의미합니다 ), 왼쪽은 diffuse 만 나온 것이고, 중간은 diffuse 와 specular 가 같이 나온 것이고, 오른쪽은 specular 만 나온 것입니다. 제가 여기에 대한 전문가는 아니지만, 그것을 이해하는 방식에 대해서 이야기하고자 합니다.

 

 1. Original

 Image:

 

 2. Diffuse Only:

 

 3. Specular Only:

 

이걸 스스로 하고 싶다면, 다음과 같은 것들이 필요합니다:

1. 수동 모드로 찍을 수 있는 카메라. 예를 들면 SLR.

2. 카메라를 만지지 않고 여러 장을 찍을 수 있도록 해 주는 원격 셔터 콘트롤러.

3. 광원. 저의 경우에는 Ikea 에서 산 램프를 사용합니다.

4. 편광 필름 몇 개. 저는 polarization.com 에서 구합니다. 여러분은 "Fully Laminated Linear Polarizer Sheets" 를 원할 겁니다. Linar 필터인지 확인하세요. Circular 필터를 구하시면 안 됩니다.

초기 단계에 컴퓨터 그래픽스에서는 오브젝트가 diffuse 반사와 specular 반사를 모두 가지고 있다고 가정했습니다. 어떤 빛이 표면을 비추고 있고 그 근처에 카메라가 있다고 가정해 봅시다. 그런데 이런 모델은 엄청나게 단순화된 모델입니다.

표면을 비추는 일부 빛들은 엣지( edge, 역주 : 그림에서 표면의 테두리를 의미하는 듯 )에서 몰래 빠져 나갑니다. 우리가 백색 빛과 파란색 표면을 가지고 있다면, 그 빛은 백색으로 그냥 남아 있을 겁니다. 우리는 이것을 specular 라고 부르죠.

어떤 빛은 표면에 의해 흡수될 것입니다. 일부 전자들은 소멸될 것이고, 새로운 포톤들이 랜덤한 방향으로 방출될 겁니다. 만약 우리가 백색 빛과 파란색 표면을 가지고 있다면, 방출되는 빛은 파란색이 겁니다. 우리는 이를 diffuse 라고 부릅니다.

여러분은 이미 그 사실을 알고 계실 겁니다. 그렇지 않다면 이제 알게 됐겠죠. 흥미로운 점은 그 빛이 편광될( polarized ) 수 있다는 것입니다. 여러분의 친구인 wikipedia 에 가면 더 많은 것을 배울 수 있을 겁니다. 게다가 specular 빛은 자신의 입사 편광( incoming polarization )을 유지하지만 diffuse 빛은 그렇지 못합니다. 그래서 diffuse 빛은 랜덤한 방향으로 랜덤한 편광을 가진채 다시 전파되는 겁니다. 우리는 그것을 비편광되었다( unpolarized )고 말할 수 있죠( 역주 : [ 편광으로 입체 영화를 본다 ] 에 좀 더 쉬운 설명이 있습니다 ).

여기에 장치가 있습니다.

매우 기본적입니다. 저는 카메라의 모든 설정을 수동 모드로 만들었습니다. 이런 의미죠:

1. 수동 노출( exposure, 역주 : [ 이제 노출을 조정해 보자 ] 를 참조하세요 ).

2. 수동 조리개( aperture, 역주 : [ 이제 노출을 조정해 보자 ] 를 참조하세요 ).

3. 수동 화이트 밸런스( white balance, 역주 : [ 화이트 밸런스 완벽 컨트롤하기! ] 를 참조하세요 ).

4. 수동 감도( ISO, 역주 : [ 카메라 감도( ISO )란? ] 을 참조하세요 ).

5. 자동 초점( Auto Focus ) 끄기.

6. 색상 프로우파일( profile )을 Adobe 98 이 아니라 sRGB 로 설정( 표준 감마 스페이스 색상 공간, 역주 : [ RGB 색공간 ] 을 참조하세요 ).

그리고 원격 셔터에서 손가락을 살짝 뗍니다. 그런 방식으로 저는 카메라에 손대지 않고 여러 장의 사진을 찍습니다. 만약 여러분이 카메라를 손대서 여러 장의 사진을 찍는다면, 정렬이 흔들릴 것이라고 생각합니다. 그리고 우리는 광원을 가지고 있습니다. 이제 광원에 대해 자세히 살펴 보죠.

광원은 그냥 Ikea 에서 사온 할로겐( halogen, 역주 : 발음이 핼러즌 ㅡㅡ ) 램프입니다. 하지만 그 앞에 선형 편광 필터가 달려 있습니다. 그 필터를 전기식 테이프( electrical tape )로 붙였습니다. 왜냐하면 저는 품격이 있는 사람( claasy guy )이니까요. 경고를 하나 하자면, 할로겐 램프는 엄청 뜨거워지므로 제 편광 필터가 녹아버려서 좀 휘었습니다.

이제 우리가 할 일은 두 개의 사진을 찍는 겁니다. 그렇지만 카메라 앞에 편광 필터를 달 것입니다. 카메라와 광원에 모두 편광 필터를 달아야 한다는 것을 기억하세요. 만약 제가 비디오 게임 프로그래머가 되기 위해 LA 에 왔다고 생각한다면, 잘못 생각하고 계신 겁니다. 손 모델의 꿈을 꾸고 있는 동안 돈을 버는 방법일 뿐입니다( 역주 : 안 웃김 ㅠㅠ ).

편광 필터에 오렌지색 테이프가 보이세요? 저는 이제 편광 필터를 90 도 회전시킬 것이고 다른 사진을 찍을 겁니다. 오렌지 테이프가 어떻게 이동했는지 확인해 보세요.

이제 우리가 찍은 첫 번째 사진이 있습니다. 정렬이 완벽하게 되었다면, 그 안에 specular 가 전혀 없을 겁니다. 물론 보통 그런 경우는 있을 수가 없죠. 왜냐하면 손으로 정렬을 완벽하게 하는 것은 불가능하기 때문입니다.

이것이 어떻게 동작할까요? 편광이 표면에 비춥니다. Specular 빛은 표면에서 반사되어서 카메라로 들어 오죠. 그 빛은 편광 필터에 도달하고, 그 편광 필터는 빛의 편광에 대해 수직으로 정렬되어 있습니다. 그러면 편광 필터에 의해 모든 것( specular )이 흡수됩니다. 반면에 diffuse 빛은 표면에 의해 흡수되기는 하지만 비편광된 상태로 다시 방출됩니다. 그래서 편광 필터는 diffuse 빛의 절반만 흡수합니다. 그리고 나머지는 카메라로 들어 오게 되죠. 그래서 그 이미지는 50% 의 diffuse 와 0% 의 specular 를 가집니다. 이제 두 번째 이미지를 보죠.

이 녀석은 카메라로 향하는 specular 빛에 대한 편광이며 편광 필터에 대해 정렬되어 있습니다. 그래서 모든 빛이 통과하게 되죠. 반면에 diffuse 빛은 여전히 비편광 상태이며, 절반이 흡수됩니다. 이 이미지는 50% 의 diffuse 와 100% 의 specular 를 가집니다.

만약 첫 번째 이미지를 A 라고 하고 두 번째 이미지를 B 라고 한다면, diffuse 이미지는 2 * A 이고 specular 이미지는 B - A 입니다. 물론 이 이미지들은 sRGB 프로우파일로 저장되어 있습니다. 그래서 두 개의 이미지를 비교하고 그것들을 분리해서 각 결과를 sRGB 이미지로 만드는 쉐이더 코드를 만들었습니다. 항상 그렇듯이, 이 코드를 실제로 테스트해 본 건 아닙니다.

float LinearToSrgb(float val)
{
   float ret;
   if (val <= 0.0)
      ret = 0.0f;
   else if (val <= 0.0031308f)
      ret = 12.92f*val;
   else if (val <= 1.0f)
      ret = (pow(val, 0.41666)*1.055f)-0.055f;
   else
      ret = 1.0f;
   return ret;
}

float SrgbToLinear(float val)
{
   float ret;
   if (val <= 0.0f)
      ret = 0;
   else if (val <= 0.04045f)
      ret = val / 12.92f;
   else if (val <= 1.0f)
      ret = pow((val + 0.055f)/1.055f,2.4f);
   else
      ret = 1.0f;
   return ret;
}

int g_bSpecOrDiff;

float4 ps_main( float2 texCoord  : TEXCOORD0 ) : COLOR
{
   float3 srcA = tex2D(Texture0, texCoord ).rgb;
   float3 srcB = tex2D(Texture1, texCoord ).rgb;
   float3 linA = SrgbToLinear(srcA);
   float3 linB = SrgbToLinear(srcB);
   float3 linDiff = linA*2;
   float3 linSpec = linB-linA;
   float3 texDiff = LinearToSrgb(linDiff);
   float3 texSpec = LinearToSrgb(linSpec);
   float3 ret = g_bSpecOrDiff ? texDiff : texSpec;
   return ret;
} 

만약 이 코드가 맞다면 여러분의 diffuse 이미지는 다음과 같이 보일 겁니다:

그리고 specular 이미지는 다음과 같이 보일 겁니다:

이 절차는 완벽한 것은 아닙니다.

1. 보통 diffuse-only 이미지에서 약간의 specular 를 포함하게 될 것입니다.

2. 어떤 물체들에 대해서는 별로 좋은 결과를 내지 못합니다. Specular-only 이미지에서, 손잡이가 약간 푸르스름합니다. 저는 손잡이가 유전체( dielectric )여서 ( 역주 : 빛의 ) 주파수를 약간 교란한다고 생각합니다.

3. 만약 specular 나 diffuse 이미지가 1.0 에서 잘린다면( clamping ), 그런 픽셀들은 엉망이 될 겁니다. 그럴 때는 노출값을 낮추는 것이 좋습니다.

4. 원격 셔터를 사용하십시오. 그렇지 않으면 정렬 문제가 생길겁니다.

별로 문제가 많이 발생하지 않고 여러분만의 specular/diffuse 분리를 해낼 수 있었으면 좋겠네요.

휴~ 긴 글이었습니다.

알림 : 이 문서는 주위 분들에게 질문을 하기 위해서 작성되었습니다. 구현이 완전히 끝나면 따로 문서를 공유할 계획입니다.



제가 이번에 [ Terrain Synthesis from Digital Elevation Models ] 라는 논문의 내용을 구현해 보려고 하고 있습니다.

 

이것은 세 가지 단계로 이루어져 있습니다; profile recognition, polygon breaking, branch reduction. 이것은 [ Profile-recognition & Polygon-breaking Algorithm( PPA ) ] 를 사용합니다.


현재 저는 profile recognition 까지 구현을 한 상태입니다. 아래 그림은 valley 에 대한 profile 덩어리를 보여주고 있습니다: target-connection, cross-line removal, parallel-line removal 까지 수행한 상태입니다.

 

 

이제 polygon breaking 을 적용할 차례인데요, 닫힌 폴리곤에서 중요하지 않은 라인 세그먼트를 배제하면서 중심 라인은 보존하는 단계입니다. 즉 일종의 thinning 알고리즘입니다. 저자의 경우에는 [ k x k thinning ] 의 4 가지 원칙을 지켰다고 이야기하더군요. 5 번째는 branch reduction 을 통해서 해결한다고 합니다.


어쨌든 닫힌 폴리곤의 중요하지 않은 라인 세그먼트라는 것은, valley 를 찾는 경우에는 가장 높은 elevation 을 가진 세그먼트이고, ridge 를 찾는 경우에는 가장 낮은 elevation 을 가진 세그먼트입니다.


그냥 삼각형이나 사각형인 경우에는 문제가 쉽게 해결이 됩니다. loop 를 돌기도 편하죠. 하지만 아래 그림에서 붉은 색으로 보이는 복잡한 모양의 닫힌 폴리곤같은 경우를 만나면 머리가 좀 아파집니다.



전에 처음 시도했을 때는 Brute-force 기법을 사용해서 재귀함수를 만들었습니다. 그랬더니 라인이 너무 많아 stack-overflow 가 발생하더군요. 


그리고 그 다음에 시도했을 때는 stack algorithm 을 사용해 라인 세그먼트를 쌓아 가다가 시작 세그먼트와 만나는 닫힌 폴리곤이 형성되면 그 중에서 가장 적절하지 않은 세그먼트를 배제하는 방법을 취했습니다. 이 방식은 매우 시간이 오래 걸렸습니다. 게다가 뭘 잘못했는지 중간에 맘에 안드는 결과가 나오는 곳이 있더군요.


[ A Visual Basic program for ridge axis picking on DEM data using the Profile-Recognition and Polygon-Breaking Algorithm ] 에서는 [ 4. Polygon-breaking ] 섹션에서 "dead-end detection" 이라는 것에 대해서 언급합니다. 


A technique of "dead-end detection" has been designed in this paper to preempt many unnecessary tracing steps: when the segment tracing process encounters a dead-end of a branch, all the segments in this branch are marked as "route disabled". The tracing process then regresses to the root of the dead-end branch and the system flags the branch to be avoided for future tracings.


여기에서 branch 가 모양을 의미하는 건지 tree 의 branch 를 의미하는 건지 모호하고 branch 의 dead-end 라는 의미도 모호하네요. 이 문서에서 tree 자료구조에 대한 언급도 없었구요. 전체적으로 "dead-end detection" 알고리즘을 이해하기 어렵습니다. 자료구조를 어떻게 잡아야 할지도 모르겠구요.

 

현재 제 구현에서는 각 샘플포인트가 다음과 같이 정의되어 있습니다.


 

기존에 stack 방식의 구현을 했을 때는 Point 자료구조에서 Line 이라는 자료구조를 뽑아 내서 그것들을 기준으로 polygon breaking 을 처리했었습니다.

 

어쨌든 여기에서 좀 막막한 감이 있는데 polygon breaking 알고리즘 및 자료구조에 대해서 이해가 가는 분이 계시면 저에게 가르침을 주시면 감사드리겠습니다.

 

추가 : 제 구현 코드는 다음과 같습니다 : WpfApplication1.zip

 


해결!

 

그래프의 관점에서 이를 설명할 수 있습니다. 물론 너비우선탐색을 적용하면 트리구조라 해도 상관이 없습니다. 그냥 보이는 대로 폴리곤의 라인 세그먼트를 생각도 되구요.

 

하지만 어떠한 관점에서 구현하든지 앞에서 언급했듯이 재귀 함수를 구현할 수는 없습니다. 저같은 경우에는 재귀없이 깊이우선탐색을 하기 위해 stack 을 사용했습니다.

 

세그먼트를 높이 순으로 sorting 하기 때문에 한 번이라도 closed 상태가 되면 가장 불필요한 세그먼트는 시작 세그먼트라 할 수 있습니다. 저는 이 시작 세그먼트가 가장 불필요하다는 전제를 까먹고 구현하다가 고생을 했던 것이죠. 패스의 끝점( End point )에 도달하면 이전 분기로 롤백하면서 기존에 지나왔던 세그먼트를 정리하고 그 중에서 가장 불필요한 세그먼트의 높이를 기록해야 한다고 생각했습니다. 그것이 머리와 구현을 복잡하게 만들었던 것입니다. 이미 시작 세그먼트가 가장 불필요한 세그먼트라는 전제가 있는데 말이죠. 물론 이런 전제가 아니라도 알고리즘은 충분히 복잡합니다. 실수의 여지가 엄청나게 많죠.

 

어쨌든 시작 세그먼트가 포함되었던 closed polygon 은 닫힌 상태가 깨집니다. 만약 closed polygon 이 아니었고 endpoint 에 도달했다면 그 역시 닫힌 상태가 깨진 것이죠. 즉 closed polygon 이었든 그렇지 않았든 시작 세그먼트를 경유하려고 시도하는 모든 테스트는 더 이상 필요하지 않은 것이죠. 즉 이 시작 세그먼트를 경유하면 막다른 길( dead-end )로 가게 되어버리는 것입니다. 이런 시작 세그먼트에는 IsDeadEnded 라는 플래그를 설정해 둡니다. 그러면 다음 탐색시에 이 세그먼트를 테스트할 필요가 없습니다. 이런 식으로 세그먼트를 하나씩 제거하다가 보면 점점 탐색 속도가 빨라지게 됩니다.

 

제가 dead-end detection 없이 brute-force 로 탐색을 해 봤는데 100 x 100 이미지를 처리하는데 20 분 가까이 기다려도 끝이 나지 않았습니다. Dead-end detection 을 도입하니 3 초 안에 끝나더군요. 알고리즘 최적화의 무서움을 새삼 느꼈습니다.

 

나중에 전체 PPA 기법에 대해 따로 정리해 보도록 하겠습니다.

 

결과는 다음과 같습니다. Cyan 색상이 최종 결과입니다. 아직 branch reduction 부분이 완벽하지 않네요. 연구를 좀 더 해 봐야 할 것 같습니다.

 

 

비교대상을 만들어 주신( VB 코드를 구해서 C# 코드로 컨버팅해서 공유해 주신 ) 오석주 TD 님께 감사드립니다. 제가 제 구현에 확신을 가지고 계속 작업하는데 많은 도움을 주었습니다. 코드 흐름 자체는 잘못된 것이 아니라는 확신을 가지고 작업할 수 있었습니다.

 

원래 구현자는 배열을 여러 개 만들어서 플래그를 설정하면서 작업을 하더군요. VB 6.0 시절이라 그런지 개체지향프로그래밍에는 익숙하지 않은 것 같았습니다. 아니면 성능때문에 일부러 그렇게 한 것일지도 모르죠. 배열이 하도 복잡해서 제대로 이해를 하지는 못했지만 주석의 흐름으로 봤을 때 비슷한 방향으로 구현하고 있다는 것을 알 수 있었습니다.

 

앞으로 합성 구현이 남았는데 관련 논문의 양을 보니 가슴이 답답해 지네요( OTL ).

원문 : http://www.howardzzh.com/research/terrain/

주의 : 허락받고 번역한 것이 아니므로 언제든 내려갈 수 있습니다.

주의 : 번역이 개판이므로 이상하면 원문을 참조하십시오.

주의 : "feature" 를 "특징"이라고 번역했는데 뭔가 어색할 때가 있습니다. 그냥 마음속으로 "특징"을 "feature" 라고 읽으시기 바랍니다.

주의 : Appendix 는 번역하지 않았습니다. 원문을 참조하세요.

 

Terrain Synthesis from Digital Elevation Models

 

Howard Zhou, Jie Sun, Greg Turk, Member, IEEE, and James M. Rehg, Member, IEEE

 

Abstract -- 이 논문에서 우리는 지형 합성을 위한 예제 기반( example-based, 역주 : 이 "예제" 라는 표현은 "본보기", "기준" 등의 의미로 사용되는 것 같습니다. 그런 느낌으로 이해해 주시기 바랍니다. ) 시스템을 제공합니다. 우리의 접근법에서 샘플 지형으로부터의 ( 하이트 필드( height field )로 표현되는 ) 패치( patch )들은 새로운 지형을 생성하는데 사용됩니다. 이러한 합성은 사용자가 스케치한 특징( feature ) 맵으로부터 생성되는데, 그 맵은 결과로 나오는 합성된 지형에서 어느 부분이 특징적인지를 지정하게 됩니다. 우리의 시스템은 큰 규모의 곡선적인 특징( 산등성이와 골짜기 )들을 강조하게 됩니다. 왜냐하면 그러한 특징들이 대부분의 지형에서 주요한 가시적 요소들이기 때문입니다. 예제 하이트 필드와 사용자의 스케치 맵은 모두 기하영역의 기법을 사용해 분석됩니다. 시스템은 예제 데이터로부터 사용자의 스케치에서 찾을 수 있는 특징과 일치하는 패치를 찾습니다. 그 패치들은 그래프 컷( graph cut )과 푸아송 편집( Poisson editing, 역주 : [ poisson image editing ] 참조 )을 사용해 서로 합쳐집니다. 패치들이 합성된 지형에 배치되는 순서는 특징 트리에 대한 넓이 우선 탐색( breadth-first traversal, 역주 : [ Data Structure - Breadth First Traversal ] 참조 )에 의해서 결정됩니다. 그리고 이는 표준 래스터-스캔 배치( raster-scan placement ) 순서에 있어서 개선된 결과를 산출하게 됩니다.

 

Index Terms - Terrain synthesis, Digital Elevation Models, terrain analysis, texture synthesis.

 

1. INTRODUCTION

 

 

지형 함성을 가능하게 해 주는 수많은 애플리케이션들이 존재합니다. 그리고 보통은 그 ㅈ지형은 씬에서 주요 가시 요소가 됩니다. 그런 애플리케이션은 풍경( landscape ) 디자인,  비행 시뮬레이션, 응급 대응 훈련, 전장 시뮬레이션, 장편 극영화 특수 효과, 컴퓨터 게임들을 포함하고 있습니다. 수년 동안 그래픽스 연구자들은 합성 지형을 생성하기 위한 효율적인 기법들을 개발하는 데 있어 주목할 만한 발전을 해 왔습니다. 이전의 지형 합성은 프랙탈( fractal ) 모델과 물리적인 침식( erosion ) 모델을 사용해 사실적으로 보이는 지형을 만드는데 초점을 맞춰 왔습니다.

 

컴퓨팅 파워와 지형 가시화 기법에 대한 개발 수준이 급격하게 성장하면서, 좀 더 사실적인 지형에 대한 요구가 꽤 증가되어 왔습니다. 게다가 지형 모델링 애플리케이션의  사용자들은 새로운 지형을 창조하는 데 있어 더 많은 제어권을 원하게 되었습니다. 그러나 현재 지형 합성 기법들은 몇 가지 제약을 가지고 있습니다. 먼저 이 기법들은 사용자에게 원하는 지형의 특징을 배치하는 데 있어서 적은 제어권을 제공하거나 아예 제공하고 있지 않습니다. 다음으로 이러한 기법들에서 제어 파라미터를 사용하는 것은 그랜드 캐년( Grand Canyon )과 같은 기하학적 특징을 가진 지형과 같은 원하는 스타일의 지형을 생성하기 어렵게 만듭니다.

 

그림 2a2b 는 좀 유명한 상업 소프트웨어에 의해 제공되는 프랙탈 및 침식 지형의 예를 보여주고 있습니다. 그것들은 흑백 고도 맵( intensity-coded elevation map )처럼 출력되고 있습니다. 이러한 스타일의 지형들은 그림 2c2d 에 나와 있는 자연적인 지형들과는 매우 다릅니다.

 

우리는 새로운 예제 기반 지형 합성 기법을 제시하는데, 이는 지형 특징 배치와 지형 스타일에 대해 사용자가 직관적으로 제어할 수 있어야 하는 필요성에 대해 다룹니다. 우리의 기법은 예제 기반 텍스쳐 합성으로부터 패치를 매칭하고 배치하는 하는 기술을 이용합니다. 우리 접근법에서 사용자가 스케치한 지형 특징 맵( 스케치 맵이라 불림 )과 실제 지형 데이터( 예제 하이트 필드라 불림 )는 원하는 지형의 스타일을 포함하고 있습니다. 예제 하이트 필드는 디지털 고도 모델( Digital Elevation Map, DEM ) 형식입니다. 이는 US Geological Survey 에서 온라인으로 이용할 수 있습니다. 다음으로 우리 시스템은 자동적으로 실제 지형 데이터의 가시적 스타일을 보존하면서 스케치 맵의 특징 제약들을 만족시켜주는 새로운 하이트 필드를 생성하게 됩니다. 우리 접근법을 통한 합성 결과는 그림 1 에 나와 있습니다.

 

그림 1. Flathead National Forest Mountain Range( 위쪽 이미지 ) 와 Grand Canyon( 아래쪽 이미지 )의 DEM 을 사용해 합성된 지형들.

 

그림 2. 현재의 기법들로 생성된 지형의 예제들. ( a ) Terragen 에 의해 1024 x 1025 해상도로 생성된 프랙탈 지형( ridged multi-Perlin ). ( b ) Bryce 에 의해 1024 x 1024 로 생성된 침식 지형. 각각은 두 개의 실제 고도 맵들과 비교됨: ( c ) 몬타나의 Flathead National Forest 산맥의 1/3 각초( arcsecond )( 10 m ) DEM. ( d ) 켄터키의 Vernon 산의 1/3 각초( 10 m ) DEM. ( DEMs courtesy of the US Geological Survey ).

 

스케치 맵은 사용자에게 합성 과정을 제어하는 데 있어 쉽고 직관적인 방법을 제공합니다. 각 맵은 그림 10a 의 중앙에 있는 이미지에서의 분기점( bifurcation point )과 같은 중요한 지형 특징의 위치를 지정하게 됩니다. 사실 브러쉬의 너비와 픽셀 강도는 별로 중요치 않습니다. 왜냐하면 그것들은 더 어두운 픽셀은 더 낮은 고도를 가리키고 더 밝은 픽셀은 더 높은 고도를 가리킨다는 단순한 원칙을 따르기 때문입니다. 이 연구에서 우리의 목표는 가시적으로 주목할만한 지형을 생성하는 것입니다. 우리는 합성된 지형이 기하학적으로 정확한가에 대한 개별적인 이슈에 대해서는 다루지 않을 것입니다.

 

우리 알고리즘의 시작점은 스케치 맵과 예제 하이트 필드에서 중요한 지형 특징을 식별하는 것입니다. 우리 시스템은 큰 규모의 곡선적인 특징들에 집중하는데, 그런 것들로는 강, 계곡, 산등성이같은 것들이 있습니다. 왜냐하면 그러한 것들이 보통 대규모 지형에서는 ( 그림 2c2d 에서 보이는 것처럼 ) 중요한 가시적 요소이기 때문입니다. 스케치 맵의 지형구조와 예제 하이트 필드에의 지형구조는 보통 서로 다르며 공간적으로 큰 큐모에서 매칭시키는 것은 거의 정확하지 않습니다. 그러나 우리는 적은 규모에서 볼 때는 그렇지 않다는 것을 발견했습니다. 계곡의 분기 영역이나 직선 영역과 같은  공통적인 지형 특징들은 양쪽 맵에서 모두 찾아볼 수 있습니다. 그러므로, 우리 알고리즘은 스케치 맵을 작은 패치 영역으로 분할하고 예제 하이트 필드에서 구조적인 특징이 일치하는 부분을 검색합니다.

 

스케치 맵에서 구조 정보를 추출하는 것은 그것의 단순함 때문에 직관적입니다. 반대로 실제 지형 하이트 필드에서 산등성이나 계곡과 같은 구조 정보를 추출하는 것은 어려울 수 있습니다. 여기에서 우리는 기하 영역의 연구를 이요합니다. 특히 우리는 하이트 필드로부터 산등성이 및 계곡의 축과 같은 구조 정보를 추출하기 위해 Chan et al. [1] 에 의해 개발된 윤곽 인식( Profile recognition ) 및 폴리곤 분열 알고리즘( Polygon breaking Algorithm, PPA )을 사용합니다.

 

일단 중요한 구조적 지형 특징이 추출되고 나면, 우리 알고리즘은 다음과 같은 단계들을 밝게 됩니다: 첫 번째로 스케치 맵과 예제 하이트 필드에서 패치 영역을 매칭하고 정렬하기 위해서 곡선적 지형 특징들이 제약으로서 사용됩니다. 두 번째로 이러한 특징들은 이웃 패치 영역 사이의 경계가 겹치는 곳을 따라 매칭을 하기 위한 제약으로 사용됩니다. 패치는 가중치화된 점수 결합( weighted combination of scores )을 기반으로 선택되는데, 그 점수는 패치와 그것의 이웃들 사이의 적합도( goodness-of-fit ) 및 요청된 패치의 변형량( amount of deformation )을 가늠하게 됩니다. 패치 배치의 순서는 사용자 스케치 맵으로부터 생성된 특징 트리에 대한 넓이 우선 탐색에 의해 결정됩니다. 각 패치는 가시적 분절을 최소화하기 위해서 graph-cut seam finding 과 Poisson seam removal 의 조합을 사용해 출력 맵에 배치됩니다.

 

이 논문은 다음과 같은 기법들에 공헌을 했습니다:

 

    • 합성된 지형 특징들을 스케치 기반으로 지정해서 사용자가 함성 결과 전반을 직관적으로 제어할 수 있도록 해 주는 기법.
    • 큰 규모의 곡선적 지형 특징들을 매칭하고 배치하기 위한 특징 기반 접근법. 이는 큰 지형 데이터베이스들을 효율적으로 만들 수 있도록 해 줬으며, 합성 과정에서 중요한 가시적 요소들을 보존해 줍니다.
    • 표준 래스터-스캔 오더링의 대안으로서 사용되는 트리기반 오더링( tree-ordered ) 패치 배치 알고리즘. 이는 사용자 입력과 매칭되는 지형 구조를 더욱 신뢰성있게 재구축하는 결과를 산출합니다.
    • 서로 다른 유형의 지형들 사이에서의 전이를 합성하고 여러 개의 DEM 들을 사용해서 단일한 합성된 출력물을 만드는 기능.

 

우리는 예전의 텍스쳐 합성 기법들로부터 이 연구에 대한 영감을 얻었습니다. 그 연구들에 대해 다음 섹션에서 리뷰하도록 하겠습니다.

 

2. RELATED WORK

 

합성된 지형을 생성하는 두 개의 주요 접근법이 존재합니다: 프랙탈 풍경 모델링과 물리적 침식 시뮬레이션. 프랙탈 풍경 모델링은 Mandelbrot 의 개척적인 연구[2] 로 거슬러 올라 갑니다. 그 이후로 다양한 확률적( stochastic ) 하위분할 기술들이 소개되었습니다. Fournier et al. [3] 은 프랙탈 서피스를 생성하기 위해 random midpoint displacement 기법을 소개했습니다. Voss [4] 는 fractional Brownian surfce 에 successive random displacement 를 추가했습니다. Miller [5] 는 프랙탈 지형을 생성하기 위한 square-square 하위분할 스키마와 하이트 필드를 렌더링하기 위한 병렬 처리 알고리즘을 제안했습니다. Lewis [6] 는 일반화된 확률적 하위분할을 제안했습니다. Szeliski 와 Terzopoulos [7] 는 결정론적 스플라인( deterministic spline )과 확률적 프랙탈들을 제약있는 프랙탈들로 결합함으로써 사용자의 제어권 문제를 다뤘습니다. 최근의 프랙탈 기반 접근법은 [8] 과 [9] 에 소개되어 있습니다.

 

물리적 침식 시뮬레이션은 풍경 공식에 대한 모델과 지형학( geomorphologic ) 커뮤니티로부터의 하천 침식( stream erosion )에 기반해 지형 디테일( detail )을 합성하는 것에 대한 대안적 접근법입니다. 그것은 보통 거친 하이트 필드가 생성된 후의 개선( refinement ) 단계로서 사용되었습니다. Kelly et al. [10] 은 처음으로 하도망( stream netowrk )에 의한 침식을 시뮬레이션 함으로써 자연스런 지형을 근사계산하는 기법을 소개했습니다. 나중에 Musgrave et al. [11] 은 프랙탈 모델링 접근법과 침식 시뮬레이션 접근법을 하나의 프레임웤으로 결합했습니다. [12], [13], [14], [15], [16] 에 예시된 최근의 물리적 침식 기술들은 물리적 모델링 관점과 계산적 효율성을 모두 증진시키는데 초첨을 맞춰왔습니다. 적절히 튜닝된 파라미터들을 사용함으로써 이 기법들은 사실적으로 보이는 지형들을 생성할 수 있습니다.

 

프랙탈 기술과 물리적 침식 기술들은 모두 절차적인( procedural ) 개선을 통해 지형 디테일을 추가합니다. 이는 보통 비직관적인 파라미터 튜닝을 포함하게 됩니다. 최근에 Brosz et al [17] 은 현존하는 DEM 데이터로부터 고해상도 지형 디테일을 추출하고 mutiresolution analysis 를 통해 그것을 저해상도 지형에 적용하려고 시도했습니다. 경험적으로 볼 때 그들의 기법은 꽤 세부화된 소스 및 타깃 지형을 모두 요구하며, 사용자가 임의의 지형을 생성할 수 있는 자유도를 제공하지 않습니다.

 

사용자에게 합성된 지형 전반에 대한 더욱 직관적인 제어를 제공하기 위해서, 이미지 기반 대안들이 Lewis [18] 및 Perlin 과 Velho [19] 에 의해 제안되었습니다. 이 작업들에서, 지형은 텍스쳐 유형으로서 사용되며( viewed ) 사용자 제어는 텍스쳐에 대한 직접적인 조작을 통해서 제공되었습니다. 그러나 사용자가 사실적이고 자연스러운 하이트 필드를 손으로 그리는 것은 너무 어렵기 때문에, 이 기법들은 보통 사실적인 디테일이 부족해진다는 문제점을 겪게 되었습니다.

 

2.1. Commercial Software

 

우리는 우리의 기법과 비슷한 접근법을 사용하는 지형 합성을 위한 상업 소프트웨어를 발견하지 못했습니다. 간단히 네 개의 주요 상업 시스템들을 리뷰하겠습니다; Mojoworld, Terragen, World Machine, Bryce. 이것들은 최신 기법을 대표합니다. Mojoworld 와 Terragen 은 둘 다 프랙탈 합성 엔진을 가지고 있는데, 그 엔진은 지형을 절차적으로 생성하니다. 그 결과는 매우 조밀( compact )합니다. 왜냐하면 그것들은 그때그때( on the fly ) 생성되기 때문입니다. 반면에 WorldMachine 은 사실적으로 느껴지는 지형을 합성하기 위해서 그것의 절차적 모양( shape )과 노이즈 생성기의 상단에 기하적 침식을 제공합니다.이런 모든 시스템들에서 합성 결과에 대한 제어는 생성 과정에서 전역 파라미터들을 변경함으로써 가능합니다. 그러나 독특하고 사실적인 지형 타입을 생성하기 위해서 이러한 파라미터들을 설정하는 것은 어렵습니다. 더우기 이 시스템들은 주요 지형 특징을 사용자가 지정해서 배치하는 것을 지원하지 않습니다. Bryce 는 프랙탈 합성 엔진과 침식 합성 엔진을 모두 지원하면서 페인팅 접근 방식을 사용해 사용자가 하이트 필드를 직접적으로 수정할 수 있도록 합니다( 기본적으로 [18] 의 기법에 프랙탈 노이즈를 추가한 것 ). 그림 2c 와 2d 는 그런 상업 시스템들에 의해 생성된 예제 지형들입니다. 그러나 이러한 제품들 중의 어떤 것도 Grand Canyon 스타일과 같은 특정 스타일로 지형을 합성하는 것이 불가능합니다.

 

2.2. Texture Synthesis

 

이미지 기반 텍스쳐 합성은 주어진 예제 이미지로부터 픽셀을 그림으로써 임의의 큰 텍스쳐 패치를 생성하는 절차를 의미합니다. 지난 몇 십년 동안, 합성된 텍스쳐의 품질은 2D 와 3D 영역에서 지속적으로 발전해 왔습니다. 이는 nonparametric neighborhood-based 기법인 [21], [22], [23] 에 대한 픽셀 기반 기법들을 발전시킴으로써 이루어졌습니다 [20]. [24], [25], [26], [27], [28], [29], [30], [31] 에서 예시된 가장 최근의 패치 기반 기술들은 두 개의 공통적인 단계를 가지고 있습니다: 1) 칸텍스트( context ) 영역과 가장 유사한 이웃들을 단순한 텍스쳐에서 검색합니다. 그리고 2) ( 부분적으로 ) 합성된 출력 텍스쳐에 패치나 픽셀을 결합( merge )합니다. Dynamic programming [24] 와 graph cuts [26] 가 패치 결합 단계를 최적화하기 위해 사용되었습니다. 우리는 지형 데이터의 유일한 특징을 다루는 검색-결합 전략을 사용합니다.

 

최근에 Zhang et al. [32] 는 임의의 서피스에서 다양한 텍스쳐를 점진적으로( progressively ) 합성하기 위해 특징 기반 왜곡( feature-based warping ) 기법과 블렌딩( blending ) 기법을 소개했습니다. 그들의 연구에서 특징 텍스톤 마스크( feature texton mask )는 수작업을 통해 추출됩니다. Wu 와 Yu [27] 는 패치 기반 텍스쳐 합성을 이끌어 내기 위해서 고수준 특징으로서의 입력 텍스쳐에서 추출된 엣지( edge )를 사용합니다. 우리는 이 앞선 연구들을 두 가지 방식으로 발전시킵니다. 첫 번째로 우리는 원하는 지형 특징을 사용자가 스케칭하는 것을 지원하기 위해서 곡선적 특징들을 사용하며 큰 지형 데이터 셋에서 패치를 매칭하기 위한 효율적인 검색 방식을 사용합니다. 두 번째로 다양한 범위의 스타일로 된 큰 DEM 으로부터 산등성이와 계곡을 신뢰성있게 추출할 수 있는 특징 분석 기술을 소개합니다. 우리는 표준 엣지 검색 기법들이 이 작업을 위해서는 부적절하다는 것에 대해서 설명할 것입니다.

 

 

Hertzmann et al [25] 는 이미지 유추( analogies ) 프레임웤을 소개했습니다. 이는 texture-by-numbers 접근법을 통해 지형 이미지를 합성하는데 사용될 수 있습니다. 이 연구는 새로운 지형 하이트 필드를 직접적으로 합성하지 않습니다. 하이트 필드 합성을 위한 그 애플리케이션은 지형 스타일을 특화하는 산등성이나 계곡과 같은 확장된 구조를 보존하는 지역적 이웃 매칭( local-neighborhood matching ) 접근법을 보장하기 어렵습니다. [30] 은 drag-and-drop features 와 synthesis magnification 을 포함하는 GPU 기반 텍스쳐 합성 기법을 제시했습니다. 이 기법들은 지형 하이트 맵 상에서 산을 재배치하는데 사용되었습니다. 이 연구와는 대조적으로 우리의 관심은 원하는 사용자 스케치를 사용해서 확장된 지형 특징을 매칭함으로써 특정 스타일로 온전한 지형 이미지를 자동적으로 생성하는 데 있습니다. 그러므로 우리는 자동 특징 추출 및 매칭을 완전하게 지원합니다.

 

우리의 지형 합성을 위한 예제 기반 접근법이 최근의 패치 기반 기법들의 성공에 영감을 받았기는 하지만, 지형 합성은 하이트 필드 상에서 단순히 텍스쳐 합성을 하는 것이 아닙니다. 지형 생성 문제는 세 가지 주요 방식에서 전통적인 텍스쳐 합성과는 구분될 수 있습니다. 첫째로 광범위한 지형 유형들이 ( 산등성이 및 계곡과 같은 ) 전역 특징들의 조합에 의해서 특화될 수 있는데, 이 특징들은 입력 지형 맵으로부터 신뢰성있게 추출될 수 있습니다. 반면에 범용 이미지 텍스쳐들을 위해서는 그러한 수비게 식별가능한 전역 특징이 존재하지 않습니다. 둘째로 다양한 범위의 애플리케이션에 있어 유용하기 위해서는 지형 합성은 반드시 전역적으로 제어되어야 합니다. 그리고 ( 보통 기가픽셀 이상인 ) 큰 지형 데이터 셋은 반드시 사용자의 제약을 만족시킬 수 있도록 검색되어야 합니다. 이는 작은 입력 텍스쳐 패치를 같은 지역적 강도( local intensity ) 구조를 가지고 있는 더 큰 출력 이미지로 "키우는" 기본적인 텍스쳐 합성 문제와는 대조되는 부분입니다. 셋째로 텍스쳐 합성을 위한 많은 최근의 cut-and-merge 기술들은 이미지 텍스쳐들이 많은 자연스러운 분계선들( boundaries )을 포함한다는 사실을 이용한다는 것입니다. 그 분계선들은 텍스쳐 엘리먼트들을 결합하는 곳을 따라서 좋은 경계( good seam )를 제공하게 됩니다. 반면에 지형 데이터는 자연스러운 경계가 존재하지 않습니다. 더우기 두 개의 인접한 패치들에서 하이트 필드 사이에 존재하는 불일치는 즉각적으로 눈에 띄게 될 것입니다. 높이 차를 제거하기 위해서 블러링( blurring )을 사용하는 것은 매우 잘 보이는 아티팩트를 산출하게 됩니다. 우리는, 최근의 graph-cut 기법과 Poisson seam removal 기법을 결합해서, 지형 패치를 결합( merge )하는 문제를 다루는 방법을 보여 줄 것입니다.

 

3. FEATURE EXTRACTION

 

이섹션에서 우리는 예제 하이트 필드와 사용자의 스케치 맵으로부터 지형 특징을 추출하기 위한 기법에 대해서 기술할 것입니다. 우리는 지형 특징 이라는 개념을 강, 계곡, 산등성이와 같은 대규모의 곡선적 특징들을 가리키기 위해 사용합니다. 그러한 지형 특징들은 지형의 전체적인 외형( layout )을 특화합니다. 그림 3a 는 예제 하이트 필드를 보여 주는데, 이는 Grand Canyon 의 일부를 포함하며 쉐이딩된 입체 지도( shaded relief map )으로 표시됩니다. 이 예제는 큰 규모의 곡선적 구조( 본류 강바닥 )과 풍부한 이차 구조( 협곡의 가파른 면 및 다른 특징들 )을 모두 보여 줍니다. 우리의 목적은 주요 구조를 원하는 스케치 모양과 매칭시키는 것인데, 이 때 이 데이터 내에 표현된 풍부한 디테일들이 보존되어야 합니다.

 

그림 3. 특징 추출 메서드의 비교. ( a )  쉐이딩된 입체 지도로 출력된 Grand Canyon 하이트 필드. ( b ) Canny 엣지 검출기에 의해 추출된 특징. ( c ) PPA 에 의해 검출된 특징.

 

지형 특징이 엣지 검출을 통해 식별될 수도 있을 것 같습니다. 그러나 더 정밀하게 검토해 보면 복잡한 지형 데이터에 엣지 검출을 적용하는 것에는 몇 가지 문제가 있습니다. 먼저 지형 특징들은 하이트 필드에 대한 지역적 극값들( local extrema )에 의해 특화되는 반면, 엣지 검출 기법은 이미지의 극대값( maximal derivatives )에 기반하고 있습니다( 역주 : [ Application of Derivatives ] 참조 ). 결과적으로 지형 데이터에 대한 엣지 검출 애플리케이션을 사용하면 그것은 지역 높이값의 다양함 때문에 그림 3b 에서 볼 수 있는 것처럼 겉으로 보기에는 그럴싸한 특징들을 산출합니다[각주:1]. 또한 지형 데이터는 특화된 분기 구조를 가지는데 이는 표준 엣지 검출 알고리즘에 의해 정확하게 다뤄질 수가 없습니다( 예를 들어, 그림 3b 의 오른쪽 아래 코너를 확인해 보십시오 ).

 

우리는 대규모 지형 특징들을 식별하기 위해서 지형학 문헌에 의존합니다. 특히 우리 작업을 위해 Chang et al. [1] 에 의해 개발된 PPA 를 받아 들였습니다. 우리는 이 섹션에서 그 기법에 대해 간단히 요약할 것이며 세부 사항에 대해서 알고자 하는 독자들은 그들의 논문을 읽어 보시기 바랍니다.

 

그림 4. Chang 의 PPA. ( a ) 외곽선 인식( profile recognition ). ( b ) 타깃 연결( target connection ). ( c ) 폴리곤 분열( polygon breaking ). ( d ) 분기 제거( branch reduction ).

 

 

PPA 는 산등성이나 계곡을 추출할 수 있습니다. 여기에서 우리는 산등성이 검색에 대해서만 다룰 것입니다. 이를 적절히 수정하면 계곡도 검색할 수 있습니다. 먼저 각 그리드 포인트( 하이트 필드의 픽셀 )를 방문해서 그것이 산등성이가 될 수 있는 것인지를 판단합니다. 여덟개의 바깥쪽으로 향하는 패스에서 그리드 포인트들이 검사됩니다( 그림 4a 에서 노란 점들 ). 그리고 이 패스들을 따라가다가, 현재 점의 높이에서 중앙 포인트의 높이를 뺐을 때 문턱값[각주:2]보다 더 아래로 떨어지면( 역주 : 더 큰 차이가 나면 ), 중앙 포인트를 후보로 마킹합니다. 이러한 모든 후보들은 다른 인접 후보들과 세그먼트로 연결됩니다( 그림 4b 의 붉은 원 ). 한 세그먼트가 다른 세그먼트를 가로지르면, 더 낮은 고도를 가진 세그먼트가 취소됩니다( 그림 4b 에서 점선으로 된 세그먼트들 ). 그리고 나서 닫힌 폴리곤에 대해서 가장 중요하지 않은 세그먼트들( 그림 4c 에 보이는 것처럼 가장 낮은 높이를 가지는 남은 세그먼트 )을 반복적으로 제거함으로써 폴리곤들이 모수석 라인( 역주 : 잔가지가 많은 나무 모양 라인 ) 패턴으로 분열됩니다. 이 처리는 더 이상 닫힌 폴리곤이 없을 때까지 계속됩니다. 폴리곤 분열 처리가 끝나면, 더 짧은 가지들이 제거됩니다( 그림 4d 에서 점선으로 된 세그먼트 ).

 

예제 지형에 대한 PPA 의 출력이 그림 3c 에 나와 있습니다( 역주 : 왜 ridge 를 검색한다고 하면서 valley 를 검색했는지... ). 계곡의 축들은 하이트 필드에서 중요한 곡선적 특징들을 인간이 인지하는 것과 일치한다는 데 주목하십시오. 우리 시스템은 PPA 를 사용해서 예제 하이트 필드와 사용자 스케치 맵의 특징들을 식별하게 됩니다. 스케치 맵의 단색값들은 고도 값으로 취급됩니다. PPA 의 출력은 산등성이나 계곡을 따라가는 긴 체인( chain )을 형성하는 연결된 라인 세그먼트의 집합입니다. 이 세그먼트 체인들은 사용자의 스케치와 주어진 하이트 필드의 영역 사이에서 특징 매칭을 위한 기저입니다. 세그먼트 체인이 식별되고 나면, 그것들은 두 개의 특징 유형을 형성하기 위해서 분석될 것입니다: 고립된( isolated ) 특징과 곡선적인 ( 패스 ) 특징. 고립된 특징 은 분기점이거나 끝점입니다. 곡선적 특징 은 고립된 특징들을 잇는 긴 세그먼트 체인입니다.

 

PPA 의 핵심 속성은 ( 일반적으로 숲인, 역주 : 숲은 연결이 끝어진 비순환 그래프를 의미 ) 트리를 형성하는 특징을 추출하는 것입니다. 왜냐하면 모든 닫힌 폴리곤들은 분석 절차에서 분열되기 때문입니다. 이 속성은 합성을 하는 동안 패치의 배치 순서를 결정하기 위해서 트리 순회를 사용할 수 있도록 해 줍니다. 이에 대해서 다음 섹션에 다룰 것입니다.

 

4. FEATURE-BASED PATCH MATCHING AND PLACEMENT

 

우리의 합성 프로세스는 예제 하이트 필드로부터 패치를 추출함으로써 새로운 하이트 필드를 만들고, 그것을 사용자 스케치에 의해 표현된 하이트 필드 출력에 배치합니다. 보통 패치 크기는 80 x 80 픽셀입니다( 이는 예제 지형 데이터의 스케일과 사용자가 원하는 결과의 디테일에 의해 결정됩니다 ). 패치 선택과 배치는 두 단계로 이루어집니다: feature patch matching 및 placment 와 nonfeature patch placement 입니다.

 

그림 5. 각 feature 유형에 대한 지형 패치들의 예. ( a ), ( b ), ( c ) 는 각각 분기점 패치, 끝점 패치, 경로 패치입니다. ( d ), ( e ), ( f ) 는 feature 추출 이후의 관련 패치들입니다. 경계 색상은 그림 6b 에서의 feature 유형을 의미합니다.

 

그림 6. 패치 배치 순서를 설명. ( a ) 예제 스케치 맵. ( b ) PPA 분석에 의해 반환된 트리 구조. 분기점 feature 와 끝점 feature 는 경로 feature 와 연결됩니다. ( c ) 루트 패치가 먼저 배치됩니다. ( d ) 너비 우선 탐색은 부가적인 패치들에 대한 배치를 돕습니다. ( e ) 트리 탐색이 완료되면, nonfeature 패치들을 배치하기 시작합니다. ( f ) 최종 결과입니다.

 

 

첫 번째 단계인 feature matching 및 placement 는 스케치 맵의 분기점( branch point )과 끝점( endpoint )인 isolated feature 와 curvilinear feature( path ) 인 nonisolated feature 를 모두 배치합니다. 그림 5 에서는 이러한 유형의 feature 들의 예를 보여 줍니다. 이러한 feature 들과 일치하는 패치를 찾고 이 패치들을 출력 하이트 필드에 배치합니다.

 

만약 우리가 PPA 로부터 추출한 isolated feature 들을 노드로 취급하고 curvilinear feature( path ) 들은 그래프의 edge 로 취급한다면, 이 그래프는 비순환( acyclic )임을 보장받을 수 있습니다. 우리 알고리즘은 너비 우선 검색 순서를 사용해 패치 영역들을 일치시키고 정렬시킵니다. 먼저 isolated feature( 만약 제공된다면 일반적으로 브랜치 )들을 루트로 선택합니다. 그리고 나서 그래프에서 한 번에 하나의 edge 를 탐색해 내려가는 데 모든 edge 들이 루트로부터 이어질 때까지 계속합니다. 이 프로세스는 그림 6c, 6d, 6e 에 설명되어 있습니다. 이는 전통적인 텍스쳐 합성 기법과는 좀 다르다는 것에 주의해야 합니다. 전통적인 기법들은 rigid patch placement order( 예를 들어 왼쪽에서 오른쪽, 위에서 아래 )를 따릅니다.

 

마지막으로, 하이트 필드에서 아직 채워지지 않은 모든 영역들은 어떤 명확한 feature 도 포함하고 있지 않은 입력으로부터의 영역을 사용해서 채워집니다. 최종 결과는 그림 6f 에 나와 있습니다. 두 가지 단계들은 모두 배치를 위해 몇 가지 후보 패치들을 고려해야 합니다. 그리고 사용하기 위해 선택된 패치는 적어도 사용자의 스케치와 어울리는 것이어야 하며 이미 배치된 패치들과 어울려야 합니다( 패치 배치는 출력 하이트 필드에 침착되어야 할( deposited ) 픽셀을 선택하기 위해서 graph-cut 알고리즘을 실행하며, 이에 대해서는 섹션 5.1 에서 설명할 것입니다 ). 섹션 4.1 과 4.2 에서는 매칭 및 배치 연산에 대해서 좀 더 세부적으로 설명할 것입니다.

 

4.1. Feature Patch Matching and Placment

 

위에서 설명했듯이 사용자 스케치의 isolated feature 들은 세그먼트 그래프에서 branch point 이거나 endpoint 입니다. 그림 6b 는 세 개의 분기점와 5 개의 끝점을 가집니다. 시스템은 사용자의 스케치 맵을 분석하고 그러한 모든 isolated feature 들을 식별합니다. 한 번에 하나씩 그러한 각각의 isolated feature 가 검사되며, 후보 매칭들의 리스트는 예제 하이트 필드의 isolated feature 들로부터 형성됩니다. 분기점과 끝점에 대해 순서대로 살펴 보도록 합시다.

 

4.1.1. Branch Points

 

분기점 매칭의 경우, 분기점들의 차수( degree, 혹은 밸런스( valence ) )가 일치해야만 하며 진출( outgoing ) 세그먼트 체인의 각도( angle )는 반드시 비슷해야 합니다. 각도 매칭의 품질을 결정하기 위해서는, d 개의 이용가능한 alignment( 노선? ) 만이 d 차수를 가진 분기점에 대해서 고려되어야만 합니다. 예를 들어 그림 5d 에서 보이는 것처럼 3 차수의 브랜치 패치는 3 개의 alignment 들인 ( 1, 2, 3 ) -> ( 1, 2, 3 ), ( 2, 3, 1 ), ( 3, 1, 2 ) 을 가집니다( 이 패치들의 미러 이미지는 새로운 패치로 취급되며 그것의 alignment 는 독립된 프로세스입니다 ). 일반적으로 주어진 예제 하이트 필드에는 그러한 분기점들이 많이 존재하지 않으므로, 모든 후보 매칭들에 대한 검사는 극단적으로 빠릅니다.

 

사용자 스케치와의 피팅( fit )을 위해 후보 패치들에 대한 왜곡( warping )을 수행하려면, 첫 번째 제어점 집합 {Pi} 가 그 패치들을 위해 식별되어야만 합니다. 이 제어점들은 분기점 자체의 위치로 구성되며, 부가적으로 각 진출 경로가 패치에 새겨진 원과 접촉( intersect )하는 위치( 그림 5d 참조 )가 추가됩니다. 예를 들어 세 개의 분기를 가지는 패치는 총 4 개의 제어점을 가지게 됩니다. 스케치 맵으로부터의 패치를 위해 그것과 관련한 제어점 집합 {P'i} 도 정의됩니다. 이제 우리는 제어점 {Pi} 를 {P'i}  에 매핑하는 연속적인 좌표 변환을 필요로 하며, 그것은 찌그러짐( distortion )을 최소화해 줄 것입니다. 우리는 이 목적을 달성하기 위해 thin-plate spline( TPS ) interpolation [33] 을 사용합니다. 왜냐하면 그것은 적은 제약을 사용하고 integral bending norm 에 의해 측정된 것처럼 왜곡을 최소화합니다. 우리는 두 개의 개별적인 TPS 함수를 사용해 좌표 변환을 형성하는데, 그 변환은 원본 하이트 필드의 모든 위치를 왜곡된( warped ) 하이트 필드의 보간된 위치로 매핑합니다. 가장 낮은 변형( deformation ) 에너지를 가진 최상의 k 분기점 패치들은 앞으로의 매칭을 위한 후보가 됩니다.

 

 

4.1.2. Endpoints

 

끝점 매칭은 직관적입니다. 왜냐하면 모든 끝점들은 비슷한 curvilinear feature 들을 가지기 때문입니다: 상대적으로 짧은 세그먼트 체인이 끝점에서 나옵니다. 이는 쉽게 정렬될 수 있습니다. 그러므로 이 경우에는 모든 끝점 패치들을 왜곡없이 앞으로의 매칭을 위한 후보로 선택합니다( 그림 5e ).

 

 

4.1.3. Path Features

 

그림 7. ( a ) 경로를 따라 고르게 샘플링된 점에서 저장된 경로에 대해 수직인 Height profile 들. 두 경로가 만나는 점 P 에서의 Height profile 은 P2 와 P3 에서 저장된 profile 과 선형적으로 보간됩니다. ( b ) P3 에서 저장된 5-point height profile 의 예.

 

우리의 모든 curvilinear feature 들은 ( PPA 로부터 나온 ) 라인 세그먼트 체인인데, 그것은 두 개의 isolated feature 들 사이를 연결합니다. 우리 시스템은 사용자 스케치의 라인 세그먼트 체임을 순회하는 동안에 curvilinear feature 들을 따라 일치하는 패치들을 검색합니다. 시스템은 이 체인들을 따라 패치의 1/2 크기만큼을 이동합니다. 그리고 각 이동 단계마다 패치를 내려 놓는 것이죠. 분기 패치와 마찬가지로 curvilinear feature 를 따라 가는데 있어서의 후보 패치들은 사용자 스케치와 일치하도록 변형됩니다. 후보 패치에는 항상 p0, p1, p2 라는 세 개의 제어점이 존재합니다( 그림 5f ). 그리고 왜곡을 결정하는 사용자 스케치에는 세 개의 관련 점들인 P'0, P'1, P'2 가 존재합니다. 외부 제어점인 p1 과 p2 는 패스가 패치에 새겨진 서클을 가로지는 곳에 위치합니다. 중간의 p0 은 패치 내의 체인의 중심점입니다. 이는 분기 패치의 중앙 제어점과 유사합니다.

 

모든 후보 패치들은 매칭 기준의 조합을 고려해서 순위가 매겨집니다. 가장 좋은 후보 패치가 출력 하이트 필드에 합성됩니다. 우리는 다음과 같은 비용 개념을 사용합니다:

 

    • Cd. 이는 TPS 왜곡( [33] 을 확인하세요 )으로부터의 변형 에너지를 의미합니다. 변형 에너지는 후보 패치 지형 구조가 스케치 맵의 제약과 얼마만큼이나 일치하는지를 측정합니다. TPS 왜곡은 ( 제어점이 한 라인상에 존재해서 폐기되는 경우를 제외하고는 ) 대부분의 경우에 패치를 원하는 구성으로 왜곡할 수 있습니다. 하지만 대규모 변형은 거슬리는 찌그러짐을 만들어낼 수 있으며, 여기에서는 패널티를 부여 받습니다.
    • Cg. 이는 graph-cut 점수( Appendix A 참조 )를 의미합니다. Graph-cut seam 비용은 후보 패치가 이미 머지된 패치들과 겹치는 영역에서 얼마나 어울리는지를 지시합니다( graph-cut 은 자동적으로 하나의 패치가 다중의 패치와 겹치는 경우를 제어하며 그 겹침이 해제될 수 있습니다 ). 높은 graph-cut 점수는 그 seam 이 더 심해서 Possion editing 에 의해서 제거되기 힘들다는 것을 의미합니다.
    • Cf. 이는 feature 차이점( dissimilarity ) 비용을 의미합니다. 차이점 비용은 만나는 경로들을 따라서 존재하는 feature 들이 얼마나 일치하는지를 측정합니다[각주:3]. 우리는 curvilinear 경로를 고르게 샘플링하고, 각 샘플 포인트에서 그 경로의 방향과 직각인 coarse height profile 을 저장합니다( 현재 우리 구현에서는 7-point profile 을 사용합니다 )( 그림 7 ). 그 경로가 P 에서 다른 경로와 만날 때, P 에서의 height profile 은 가장 가까운 이웃인 P2 와 P3 에서 저장된 profile 들과 선형적으로 보간됩니다. 경로가 만나는 곳에서의 height profile 은 sum of squared differences( SSD ) 를 사용해 비교됩니다.
    • Cis. 이는 사용자가 지정한 제약( 들 )을 의미합니다. height 제약이나 path smoothness 제약 등이 있습니다.

 

전체 비용은 전체 매칭 비용들의 선형 결합입니다.

 

.

 

α 는 가중치일 뿐만 아니라 그 비용을 위한 normalization 계수( coefficient )이기도 하다는 데 주의하시기 바랍니다. 우리의 현재 시스템에서 우리는 대부분의 테스트 케이스에 다음과 같은 값을 사용합니다.

 

 

 

이 계수를 변경하면 특정 매칭 기준이 강조되며, 다른 합성 결과를 산출하게 됩니다. Curvilinear feature 매칭과 너비우선 탐색 순으로의 배치를 마치고 나면, 출력 하이트 필드는 그림 6e 에서 보이는 것 중 하나와 비슷하게 보일 것입니다.

 

그림 8그림 10a 의 스케치 맵과 그림 10b 의 예제 하이트 맵을 사용하여 만들어진 래스터-스캔 순서 패치 배치와 트리-순서 패치 배치를 비교한 것을 보여 줍니다. λ 심볼의 내부 구조는 래스터 스캔 결과에서는 잘못 해석됩니다( 그림 8a ). 이는 행 기반 스캔이 서클의 경계를 즉각적으로 lock on 해서 앞으로의 매칭에 대한 제약을 생성하기 때문입니다. 그 제약은 내부의 좋은 매칭들을 방해하게 됩니다. 그림 8b 는 가장 어려운 요소( center branch point )가 가장 먼저 매칭될 때 λ 와 서클이 모두 복제( reproduce )될 수 있음을 보여 줍니다.

 

그림 8. ( a ) 래스터-스캔 패치 배치 순서를 사용해 만들어진 합성. ( b ) 트리 순회를 사용해서 만들어진 합성.

 

4.2. Nonfeature Patch Placment

 

Isolated feature 와 curvilinear feature 들이 배치되고 나면, 출력 하이트 필드의 빈 영역들은 특별한 feature 를 가지지 않는 공간들입니다. 이 영역을 채우는 실행가능한 방법은 이미 배치되어 있는 픽셀들과 어울리는 패치를 복사하는 것입니다. 이를 위해 우리 시스템은 이미 채워진 영역들로부터 "성장시켜" 나갑니다. 특히, coarsely spaced increments 내의 정방형 패치 위치들은( 예를 들어 수평적이나 수직으로 매 100 pixel ) 이미 합성된 하이트 필드와 겹쳐진 지역에 대한 영역과 관련해 내림차순으로 채워집니다. 시스템은 겹쳐진 지역의 SSD 에 기반해, 패치와 이미 합성된 하이트 필드 사이의 고품질 매칭을 검색하며, k 개의 후보들을 선택합니다. 그리고 나서 머징( merging )중인 곳의 SSD 점수와 graph-cut 비용의 결합( combination )에 따라 최적의 매칭을 찾습니다. 최적의 패치가 배치되고, 시스템은 겹친 지역을 찾기 위해 하이트필드를 계속해서 순회합니다. 출력 맵의 모든 피셀이 채워지면 이 과정이 끝나게 됩니다.

 

이미 합성된 출력 하이트 필드와의 최적의 매칭을 찾기 위한 SSD 기반 검색은 Fast Fourier Transformations( FFTs ) [ 34 ], [ 35 ] 에 의해 가속화될 수 있습니다. FFT 기반 접근을 사용하면, 매칭 비용은 O( n log( n ) ) 시간으로 계산될 수 있으며, 여기에서 n 은 소스 하이트 필드의 픽셀 개수입니다. 이는 SSD 구현이 O( n2 ) 의 시간이 걸린다는 점과 대조됩니다.

 

5. PATCH MERGING

 

그림 9. 패치 배치 및 Seam 제거에 대한 설명. ( a ) 패치 매칭은 graph-cut 을 통해 식별됩니다. ( b ) 배치 배치는 seam 을 산출합니다. ( c ) Possion seam remover 는 최종 결과를 산출합니다.

 

우리 시스템은 두 개의 기법을 사용해 출력 하이트 필드에 배치된 패치들 사이의 부드러운 전이( transition )를 보장합니다. 첫 번째 기법은 graph-cut 기술입니다 [ 26 ], [ 36 ]. 이것은 이미 배치된 픽셀들과 배치되고 있는 지역으로부터의 픽셀들 사이에서 good seam 들을 검색합니다. 두 번째 기법은 현존하는 pixel 과 새롭게 배치되고 있는 패치의 픽셀 사이에서 더욱 완만한( gentle ) 전이를 생성하기 위해서 Poisson equation [ 37 ] 을 사용합니다.

 

5.1. Graph-Cut Optimal Seam Finder

 

Graph-cut 알고리즘은 패치들 간의 겹친 지역에서 seam 을 찾아내는데, 그것은 어떤 픽셀이 최종 이미지에서 유지되어야 하는지를 결정하게 됩니다. 이는 max-flow/min-cut 그래프 문제를 해결함으로써 수행됩니다. 이는 cut 을 가로지르는 mismatched elevation 에 대한 비용을 최소화합니다. 그래프에서 edge 는 인접 픽셀들 간의 연결을 표현하며, 그것들은 높이차에 기반한 가중치를 부여받습니다. 일부 패치의 경우에, 우리는 주어진 패치로부터 branch feature 패치의 중앙 픽셀들과 같은 특정 그룹의 픽셀들이 포함되기를 원할 것입니다. 이는 특정 edge 의 가중치를 무한대로 높게 설정함으로써 수행될 수 있습니다.

 

앞에서 언급했듯이 graph-cut 알고리즘으로부터 최종 seam 의 비용이 시스템에 의해 사용됩니다. 시스템은 주어진 feature 를 표현하기 위해 여러 후보 패치 중 하나를 선택하기 위해 이를 사용합니다. Seam 을 검색하기 위해서 graph-cut 알고리즘을 사용하는 방법에 대한 세부사항은 [ 26 ] 에서 찾아 볼 수 있습니다.

 

5.2. Poisson Seam Remover

 

시스템이 graph-cut 을 사용해 출력 맵에 새로운 패치들을 배치하고 나면, seam 을 따라 불연속성이 가시화될 것입니다( 그림 9b ). 우리는 이를 개선하기 위해서 seam 들에서 gradient value 들을 인위적으로( artificially ) 설정합니다. 우리는 Poisson equation 을 사용함으로써 이를 수행하는데, 그것은 Perez et al. 이 색상 이미지에서 seam 을 가로질러 pixel 을 매칭시키는 방식 [ 37 ] 과 유사합니다.

 

우리의 고도( elevation ) 조정 단계는 겹친 지역( 일반적으로 패치 크기의 1/3 )에서의 먼저 elevation value 를 gradient value 로 변환합니다. 그리고 나서 seam 을 가로지르는 gradient value 들은 인위적으로 0 으로 설정됩니다. 마지막으로 Poisson equation 을 사용해 이 인접 gradient value 들에 대한 최적의 elevation 집합을 찾습니다. 이 작업의 결과는 새로운 elevation 집합인데, 이는 seam 을 더욱 부드럽게 만들어 줍니다( 그림 9c ). 우리 시스템은 그러한 elevation 조정을 지역적으로 수행합니다. 이는 배치된 패치 당 한 번만 그 메서드가 호출된다는 의미입니다. Elevation 조정을 지역적으로 수행하면, 엄청난 양의 행렬 연산을 수행해야 하는 상황을 피할 수 있습니다. 더 세부적인 내용은 Appdendix B 에서 확인하시기 바랍니다.

 

6. TERRAIN SYNTHESIS RESULTS

 

우리는 그림 1, 10, 11, 12, 13, 15 에서 보이는 결과를 산출하기 위해 US Geological Survey terrain data 로부터 만든 DEM 을 사용했습니다. 데이터의 원점, 해상도, 크기들이 표 1 에 기술되어 있습니다.

 

우리의 예제 하이트 필드는 1,200 x 1,200 에서 4,097 x 4,097 의 범위를 가지고 있으며, 16 비트 하이트 해상도를 가집니다. 이렇게 큰 지형 맵들은 전통적인 텍스쳐 합성 접근법에서는 심각한 검색 문제를 발생시킵니다. 80 x 80 크기를 가지는 패치를 사용하면, 4,000 x 4,000 크기의 맵의 경우 약 16 million( 1600 만 ) 개의 가능한 매칭들이 존재하게 됩니다. 그러나 우리의 feature 기반 분석의 결과로서( 역주 : 앞에서 이야기한 PPA 를 의미하는 듯 ), 우리는 채워져야 할 후보 위치에 대한 매칭을 600 개 수준으로 필터링할 수 있었습니다. 이는 계산 비용을 엄청나게 줄여 줬습니다. 우리의 기법은 대략 5 분에서 6 분 정도의 시간을 소비해 대표적인( ? ) 지형을 합성할 수 있었습니다. Intel Pentinum 4 2.0 GHz 프로세서와 2 Gbyte 메모리를 사용했습니다. 모든 결과들은 Planetside 사의 Terragen 지형 렌더링 시스템을 사용해서 렌더링되었습니다. 지형 지오메트리에 매핑될 텍스쳐로는 ( 높이와 기울기에 의해 결정된 ) 절차적 텍스쳐를 사용했습니다.

 

그림 10 그림 11 은 우리의 지형 합성 접근법을 사용해서 같은 스케치 맵으로부터 다양한 출력을 뽑아 내는 것을 보여 줍니다. 그림 10d 는 Mount Jackson 의 지형과 그림 10a 에서 보여준 스케치 맵을 사용해서 만든 ( 1,000 x 1,000 ) 합성 결과를 보여 줍니다. 이 결과가 많은 패치들로부터 생성되기는 했지만, 내부의 λ 와 외부의 서클이 끊기지 않는 산등성이를 형성하고 있습니다. 또한 커튼같이 접히는 특징들이 산의 측면을 따라 잘 보이고 있습니다. 그림 10h 는 Grand Canyon 지형을 사용한 ( 2,000 x 2,000 ) 합성 결과를 보여 줍니다. 이 예제를 위해 그림 10e 의 스케치 맵을 사용했는데, 그것은 그림 10a 의 역( inverse )입니다.  그래서 산등성이 대신에 계곡이 선택됩니다. 여기에서 λ 와 서클은 Colorado River 와 만나는 조각( piece )으로부터 형성됩니다. 그런데 아직 seam 위치는 검출되지 않았습니다. 사용자 스케치가 영향을 주기는 하지만, 이 지형은 원본 데이터의 풍부한 침식 형태( water-carved feature )를 보존합니다. 그림 11d 는 Mount Vernon 지형에 대한 ( 1,000 x 1,000 ) 합성 결과를 보여 줍니다. 그림 11h 는 Flathead National Forest mountain 지역을 사용한 ( 2,000 x 2,0000 ) 합성 결과를 보여 줍니다. 그럼 12d 는 Mount Vernon 지형과 중국어로 "물" 이라고 그려진 사용자 스케치를 사용한 결과를 보여 줍니다. 이 결과들은 우리 시스템이 매우 다양한 유형의 지형과 매우 다양한 특성들을 처리하면서도 입력 스케치 맵의 핵심 feature 를 유지하는 능력을 가졌음을 보여 줍니다. 그림 15 는 Grand Canyon 과 Flathead range 의 합성 결과에 대한 클로즈업( close-up ) 뷰를 제공합니다. 그림 13a 는 Crand Canyon 높이 맵을 렌더링한 것을 보여 줍니다. 우리는 스케치 맵을 획득하기 위해 이 맵으로부터 PPA 를 사용해 협곡 feature 를 추출했습니다. Puget Sound DEM 스타일로 스케치를 합성함으로써, 우리는 그림 13b 에서 보여 주듯이 Grand Canyon 에 대한 ( 4,000 x 2,000 ) "산맥" 버전을 획득했습니다.

 

표 1.

 

 

그림 10. 하프라이프( half-life ) 심볼을 사용한 다중 지형 합성 결과. ( a ) 사용자 스케치. ( b ) Mount Jackson. ( c ) 합성 결과. ( d ) Colorado 의 Mound Jackson 의 elevation map 으로부터 합성된 지형을 렌더링함. ( e ) 사용자 스케치. ( f ) Grand Canyon. ( g ) 합성 결과. ( h ) Grand Canyon 의 elevation map 으로부터 합성된 지형을 렌더링함.

 

그림 11. 하프라이프( half-life ) 심볼을 사용한 다중 지형 합성 결과. ( a ) 사용자 스케치. ( b ) Mount Vernon. ( c ) 합성 결과. ( d ) Kentucky 의 Mound Vernon 의 elevation map 으로부터 합성된 지형을 렌더링함. ( e ) 사용자 스케치. ( f ) Flathead 산맥. ( g ) 합성 결과. ( h ) Montana 의 Flathead National Forest 산맥( mountain range )의 elevation map 으로부터 합성된 지형을 렌더링함

 

그림 12. 중국어로 "물" 이라 쓰여진 스케치를 사용한 지형 합성. ( a ) 사용자 스케치. ( b ) Mount Vernon. ( c ) 합성 결과. ( d ) Kentucky 의 Mound Vernon 의 elevation map 으로부터 합성된 지형을 렌더링함.

 

그림 13. Grand Canyon 을 산맥으로 바꿈. Grand Canyon DEM 으로부터 추출된 feature 를 사용자 스케치로서 사용하는데, 이를 Puget-Sound 스타일 산맥의 elevation map 으로부터 Grand Canyon 의 구조를 따르는 산맥을 합성하기 위해서 사용함.

 

6.1. Synthesis with Multiple Terrain Style

 

 

그림 14. 다중 elevation map 들로부터 합성된 중간계의 3D 맵. ( a ) 중간계 맵. ( b ) 수계( water system )가 마스킹된 사용자 스케치. ( c ) 합성 결과. ( d ) 다중 elevation map 들로부터 합성된 지형을 렌더링.

 

표 2.

 

 

 

그림 14 에서는 더 큰 예제를 보여 줍니다. 그것은 여러 종류의 지형 스타일을 사용하는 중간계( Middle Earth )에 대한 3D 맵을 생성하는 것을 보여 줍니다. 단순한 스케치맵( 그림 14b )은 사용자에 의해서 생성되었는데, 중간계( 그림 14a )에 대해 아티스트가 렌더링한 맵으로부터 추출된 것입니다. 사용자는 다양한 지형 스타일을 스케치 맵의 각 부분에 설정할 수 있습니다( 표 2 ). 이 예제에서 사용자는 먼저 Mordor 의 Mount Doom 의 위치에 Mout St. Helen 을 배치했습니다( 지역적 특징 ). 다음으로 우리 시스템은 나머지 지형( 3,470 x 2,996 )을 자동으로 합성했고 그것을 Mount Doom 과 연속적으로 머지했습니다. 사용자 스케치는 다양한 산맥들과 하곡( river valley )들을 포함한다는데 주목하십시오( Mordor 의 북서쪽 코너 근처의 죽음의 늪( Dead Marshes ). 해안( coast ), 호수( lake ), 강( river ) 등은 단순한 마스크를 사용해 생성됩니다. 그것은 원본 맵으로부터 추출되었습니다. 합성된 하이트 맵( 그림 14c )은 Planetside 의 Terragen 지형 렌더링 시스템을 사용해 렌더링되었으며, 아트적인 느낌을 주기 위해 절차적 텍스쳐와 마스킹된 텍스쳐들이 사용되었습니다. 이 예제는 우리 시스템이 다중의 지형 스타일들을 하나의 합성 지형으로 결합하고 그것들을 seam 없이 블렌딩할 수 있는 능력을 가지고 있음을 보여 줍니다.

 

http://www.computer.org/tvcg/archves.html 에서 ( DivX 로 인코딩된 ) 동영상을 보시기 바랍니다. http://www.cc.gatech.edu/howardz/terrain 에 가면 추가적인 결과들을 확인하실 수 있습니다.

 

7. CONCLUSION

 

우리는 예제 기반 텍스쳐 합성 기법이 지형 합성의 영역에서 성공적으로 수용될 수 있음을 입증했습니다. 그 결과는 사용자가 제어 가능한 합성된 지형에서의 새로운 수준의 가시적 현실성입니다. 우리의 접근법은 geomorphology community 로부터 가지고 온 분석 기법을 사용해 하이트필드로부터 유용한 지형 특성을 추출할 수 있다는 사실에 영향을 받았습니다.

 

우리는 트리 순서에 기반한( tree-ordered ) 패치 배치 알고리즘을 소개했는데, 그것은 feature 트리에 대한 너비 우선 탐색에 기반합니다. 우리의 결과는 이 배치 기법이 표준 래스터-스캔 배치 순서보다 우월함을 입증합니다.

 

우리는 다양한 스타일의 지형을 합성하면서도 주요 지형 특징의 위치들에 대한 제어를 유지할 수 있다는 것을 증명했습니다. 우리 시스템은 원하는 지형 특성을 지정하기 위해 직관적인 스케치 기반 인터페이스에 기반합니다. 우리는 우리 기법이 지형 합성에 있어서 예제 기반 접근법을 온전하게 사용하는 첫 번째 시스템이라고 확신합니다.

 

우리 기법은 예제 기반 기법들과 동일한 제약들을 가지고 있습니다. 특히 최종 합성의 품질은 이용가능한 지형 데이터의 풍성함( richness )에 의존합니다. 만약 사용자가 원하는 지형 특성을 예제 하이트필드에서 찾지 못했다면, 그것은 원하는 결과를 산출하지 못할 것입니다. 예를 들어, 중요한 curvilinear feature 들이 거의 없는 사막으로부터 지형 데이터를 가지고 왔다면, 우리 기법은 형편없게 동작할 것입니다. 또한 curvilinear feature pattern 이 극단적으로 복잡해도 형편없게 동작할 것입니다. 추가적인 이슈는 패치 크기를 지정할 필요가 있다는 것입니다. 그것은 예제 지형의 해상도 및 스케일에 의존합니다.

 

우리는 우리의 현재 기법을 몇 가지 방향으로 확장할 계획을 가지고 있습니다. 먼저 스케치 맵에 부가적인 제약들을 도입함으로써 합성된 지형 전반에 대해 사용자가 더 많은 제어를 할 수 있도록 하는 데 관심을 가지고 있습니다. 예를 들어 우리는 특정 위치에서 원하는 elevation 을 지정할 수 있는 기능을 제공할 계획을 가지고 있습니다. 이는 matcher 와 함께 Poisson solver 를 제약함으로써 수행될 수 있습니다. 또한 우리는 현재 C0 연속성을 적용( enforcement )하고 있는데 이를 C1 연속성을 적용하는 연구를 하고 있습니다. 우리는 렌더링을 위해 elevation 과 texture map 의 joint synthesis 를 연구하고 있으며, 지형 합성에 대한 상호적인 제어( interactive control )에 대해서 연구하고 있습니다.

 

그림 15. Grand Canyon( 위쪽 )과 Flathead National Foreset 산맥( 아래쪽 )으로부터 합성된 지형에 대한 클로즈업 뷰.

 

APPENDIX A

GRAPH_CUT SEAM FINDING

 

생략. 원문 참조.

 

APPENDIX B

POSSION SEAM REMOVAL

 

생략. 원문 참조.

 

ACKNOWLEDGEMENTS

 

생략. 원문 참조.

 

REFERENCES

 

[1] Y.-C. Chang, G.-S. Song, and S.-K. Hsu, “Automatic Extraction of Ridge and Valley Axes Using the Profile Recognition and Polygon-Breaking Algorithm,” Computer and Geosciences, vol. 24, no. 1, pp. 83-93, 1998.
[2] B.B. Mandelbrot, The Fractal Geometry of Nature. W.H. Freeman,1982.
[3] A. Fournier, D. Fussel, and L. Carpenter, “Computer Rendering of Stochastic Models,” Comm. ACM, vol. 25, no. 6, pp. 371-384, 1982.
[4] R.F. Voss, “Random Fractal Forgeries,” Fundamental Algorithms for Computer Graphics, R.A. Earnshaw, ed., 1985.
[5] G.S.P. Miller, “The Definition and Rendering of Terrain Maps,”Proc. 13th Ann. Conf. Computer Graphics and Interactive Techniques (SIGGRAPH ’86), vol. 20, no. 4, pp. 39-48, 1986.
[6] J.P. Lewis, “Generalized Stochastic Subdivision,” ACM Trans.Graphics, vol. 6, no. 3, pp. 167-190, 1987.
[7] R. Szeliski and D. Terzopoulos, “From Splines to Fractals,” Proc. 16th Ann. Conf. Computer Graphics and Interactive Techniques (SIGGRAPH ’89), pp. 51-60, 1989.
[8] D.S. Ebert, F.K. Musgrave, D. Peachy, K. Perlin, and S. Worley, Texturing and Modeling: A Procedural Approach. Morgan Kaufmann, 2002.
[9] C. Dachsbacher, Interactive Terrain Rendering: Towards Realism with Procedural Models and Graphics Hardware, http://www.opus.ub.uni-erlangen.de/opus/volltexte/2006/354/, 2006.
[10] A.D. Kelley, M.C. Malin, and G.M. Nielson, “Terrain Simulation Using a Model of Stream Erosion,” Proc. 15th Ann. Conf. Computer Graphics and Interactive Techniques (SIGGRAPH ’88), pp. 263-268,1988.
[11] F.K. Musgrave, C.E. Kolb, and R.S. Mace, “The Synthesis and Rendering of Eroded Fractal Terrains,” Proc. 16th Ann. Conf. Computer Graphics and Interactive Techniques (SIGGRAPH ’89), vol. 23, no. 3, pp. 41-50, 1989.
[12] P. Roudier and B.P.M. Perrin, “Landscapes Synthesis Achieved through Erosion and Deposition Process Simulation,” Computer Graphics Forum, vol. 12, no. 3, p. 375, Aug. 1993.
[13] N. Chiba, K. Muraoka, and K. Fujita, “An Erosion Model Based on Velocity Fields for the Visual Simulation of Mountain Scenery,”J. Visualization and Computer Animation, vol. 9, no. 4, pp. 185-194, 1998.
[14] K. Nagashima, “Computer Generation of Eroded Valley and Mountain Terrains,” The Visual Computer, vol. 13, nos. 9-10, pp. 456-464, 1997.
[15] B. Benes and R. Forsbach, “Layered Data Representation for Visual Simulation of Terrain Erosion,” Proc. 17th Spring Conf. Computer Graphics (SCCG ’01), p. 80, 2001.
[16] B. Neidhold, M. Wacker, and O. Deussen, “Interactive Physically Based Fluid and Erosion Simulation,” Proc. Eurographics Workshop Natural Phenomena, 2005.
[17] J. Brosz, F.F. Samavati, and M.C. Sousa, “Terrain Synthesis By-Example,” Proc. First Int’l Conf. Computer Graphics Theory and Applications (GRAPP ’06), 2006.
[18] J.-P. Lewis, “Texture Synthesis for Digital Painting,” Proc. 11th Ann. Conf. Computer Graphics and Interactive Techniques (SIGGRAPH ’84), pp. 245-252, 1984.
[19] K. Perlin and L. Velho, “Live Paint: Painting with Procedural Multiscale Textures,” Proc. 22nd Ann. Conf. Computer Graphics and Interactive Techniques (SIGGRAPH ’95), pp. 153-160, 1995.
[20] D.J. Heeger and J.R. Bergen, “Pyramid-Based Texture Analysis/Synthesis,” Proc. 22nd Ann. Conf. Computer Graphics and Interactive Techniques (SIGGRAPH ’95), pp. 229-238, 1995.
[21] A.A. Efros and T.K. Leung, “Texture Synthesis by Non-Parametric Sampling,” Proc. Int’l Conf. Computer Vision, pp. 1033-1038, 1999.
[22] L.-Y. Wei and M. Levoy, “Fast Texture Synthesis Using Tree-Structured Vector Quantization,” Proc. 27th Ann. Conf. Computer Graphics and Interactive Techniques (SIGGRAPH ’00), pp. 479-488, 2000.
[23] M. Ashikhmin, “Synthesizing Natural Textures,” Proc. Symp. Interactive 3D Graphics, pp. 217-226, 2001.
[24] A.A. Efros and W.T. Freeman, “Image Quilting for Texture Synthesis and Transfer,” Proc. 28th Ann. Conf. Computer Graphics and Interactive Techniques (SIGGRAPH ’01), pp. 341-346, 2001.
[25] A. Hertzmann, C.E. Jacobs, N. Oliver, B. Curless, and D.H. Salesin, “Image Analogies,” Proc. 28th Ann. Conf. Computer Graphics and Interactive Techniques (SIGGRAPH ’01), pp. 327-340, 2001.
[26] V. Kwatra, A. Scho¨ dl, I. Essa, G. Turk, and A. Bobick, “Graphcut Textures: Image and Video Synthesis Using Graph Cuts,” ACM Trans. Graphics, Proc. 30th Int’l Conf. Computer Graphics and Interactive Techniques (SIGGRAPH ’03), vol. 22, no. 3, pp. 277-286, 2003.
[27] Q. Wu and Y. Yu, “Feature Matching and Deformation for Texture Synthesis,” ACM Trans. Graphics, Proc. 31st Int’l Conf. Computer Graphics and Interactive Techniques (SIGGRAPH ’03), vol. 23, no. 3, pp. 364-367, 2004.
[28] P. Bhat, S. Ingram, and G. Turk, “Geometric Texture Synthesis,”Proc. Eurographics Symp. Geometry Processing, 2004.
[29] A. Lagae, O. Dumont, and P. Dutre´, “Geometry Synthesis by Example,” Shape Modeling Int’l, 2005.
[30] S. Lefebvre and H. Hoppe, “Parallel Controllable Texture Synthesis,” ACM Trans. Graphics, Proc. 32nd Int’l Conf. Computer Graphics and Interactive Techniques (SIGGRAPH ’05), pp. 777-786, Aug. 2005.

[31] S. Lefebvre and H. Hoppe, “Appearance-Space Texture Synthesis,”ACM Trans. Graphics, Proc. 33rd Int’l Conf. Computer Graphics and Interactive Techniques (SIGGRAPH ’06), vol. 25, no. 3, pp. 541-548, 2006.
[32] J. Zhang, K. Zhou, L. Velho, B. Guo, and H.-Y. Shum, “Synthesis of Progressively-Variant Textures on Arbitrary Surfaces,” ACM Trans. Graphics, vol. 22, no. 3, pp. 295-302, 2003.
[33] F.L. Bookstein, “Principal Warps: Thin-Plate Splines and the Decomposition of Deformations,” IEEE Trans. Pattern Analysis and Machine Intelligence, vol. 11, no. 6, pp. 567-585, 1989.
[34] C. Soler, M.-P. Cani, and A. Angelidis, “Hierarchical Pattern Mapping,” ACM Trans. Graphics, vol. 21, no. 3, pp. 673-680, July 2002.
[35] S.L. Kilthau, M.S. Drew, and T. Mo¨ ller, “Full Search Content Independent Block Matching Based on the Fast Fourier Transform,”Proc. IEEE Int’l Conf. Image Processing (ICIP ’02), pp. 669-672, 2002.
[36] Y. Boykov, O. Veksler, and R. Zabih, “Fast Approximate Energy Minimization via Graph Cuts,” IEEE Trans. Pattern Analysis and Machine Intelligence, vol. 23, no. 11, pp. 1222-1239, Nov. 2001.
[37] P. Pe´rez, M. Gangnet, and A. Blake, “Poisson Image Editing,”ACM Trans. Graphics, Proc. 30th Int’l Conf. Computer Graphics and Interactive Techniques (SIGGRAPH ’03), vol. 22, no. 3, pp. 313-318, 2003.

 

저자 소개 생략. 원문 참조.

  1. 다양한 스케일을 사용해서 엣지를 검출해도 이 문제를 쉽게 해결할 수 없습니다. 왜냐하면 인지적으로 볼 때 중요한 지형 구조들이 스케일을 변경했을 때 유지된다는 보장을 할 수 없기 때문입니다. [본문으로]
  2. 우리는 일반적으로 이 문턱값을 입력 하이트 필드의 높이 범위의 절반 정도로 잡습니다. [본문으로]
  3. Graph-cut 비용은 겹침( overlaping )에 대한 전체적 품질을 측정하지만, 그것은 겹치는 영역에 존재하는 모든 픽셀의 가중치를 동일하게 설정합니다. Feature 차이점 측정을 graph-cut 알고리즘에 통합하기는 힘듭니다; 그러므로 feature 를 강조하기 위해 개별적인 feature 차이점 비용 개념이 우리 시스템에 구현되었습니다. [본문으로]

원문 : http://bytewrangler.blogspot.kr/2011/10/signed-distance-fields.html

주의 : 허락받고 번역한 것이 아니므로 언제든 내려갈 수 있습니다.

주의 : 번역이 개판이므로 이상하면 원문을 참조하십시오.



Signed Distance Fields


필자는 Valve Software 의 Ghris Green 이 작성한 이 백서에서 처음으로 부호있는 디스턴스 필드( Signed Distance Fields )라는 것을 접했습니다. Valve 는 자신들의 이용가능한 그래픽스 기술들에 대한 기술 문서들을 만드는데, 정말 멋집니다. 이 경우에, 이 기법은 팀 포트리스 2 에서 사용되었는데, 특히 게임 내의 표지판이나 데칼들에 사용되었습니다.


부호있는 디스턴스 필드는 ( 일반적으로는 흑백인 ) 비트맵 데이터를 저장하는 다른 방식입니다. 비트맵의 각 픽셀이 그 점에서의 강도( intensity )를 표현하는 것이 아니라, 소스 이미지에서 검정색이 아닌 가장 가까운 픽셀에 대한 거리를 표현합니다. 그 모양 바깥쪽에 존재하는 픽셀들은 양수 거리 값을 가지게 됩니다. 반면에 그 모양 안쪽의 픽셀들은 음수 거리 값을 가지게 됩니다. 그러므로 "부호있는( signed )" 이라는 이름이 들어갑니다.


그림 1: 부호있는 디스턴스 필드가 픽셀 수준에서 보여지는 방식에 대한 예제.


디스턴스 필드는 사실 실수 데이터로 구성되어 있지만, 설명의 목적 때문에 정수로 보여 준다는 것에 주의하시기 바랍니다.


부호있는 디스턴스 필드를 생성하기 위해서, 여러분은 소스 이미지에 대한 디스턴스 트랜스폼( distance transform )을 적용합니다. 그리고 나서 원래 이미지를 렌더링하기 위해 다음과 같이 합니다.



부호있는 디스턴스 필드를 실제로 유용하게 만드는 것은 여러분이 이미지를 리사이징할 필요가 있을 때입니다. 이 거리값은 3D 하드웨어에 의해서 보간되는데, 그것은 전통적인 비트맵의 강도 값이 보간되는 방식과 동일합니다. 그러나 엣지가 테스트에 의해 생성되기 때문에, 그것은 crisp 하게 남아 있게 됩니다. 이는 여러분이 비트맵을 여러 번 확대할 수 있으며, 전통적인 비트맵이 필터링 아티팩트 때문에 뭉개지거나 두툼해지는 것과는 다르게 그런 현상을 겪지 않게 된다는 것을 의미합니다.


Creating the Distance Field


디스턴스 필드를 계산하기 위해서 사용할 수 있는 많은 트랜스폼들이 존재합니다. 가장 좋은 접근법은 고해상도 소스 이미지를 사용하고 여러분의 응용프로그램에 적절한 사이즈로 그것을 다운샘플링하는 것입니다. 그러면 디스턴스 필드의 속성이 많은 정보들을 보존하게 됩니다.


Brute force 기법( 비트맵에서 주어진 픽셀과 다른 픽셀들 간의 유클리디안( euclidean ) 거리를 계산하는 것을 의미합니다 )은 완벽한 디스턴스 필드를 생성하지만, 그것은 O(n^2) 복잡도를 가지기 때문에 큰 이미지에 대해서는 매우 느립니다. ( 정확하지는 않지만 ) 더 빠른 알고리즘이 존재하긴 합니다만 알고리즘을 선택하는 것은 별로 중요하지 않습니다. 왜냐하면 런타임에 실행할 필요가 없기 때문입니다. Valve 는 실제로 brute force 방식을 사용했으며 그들의 서버에서 밤 시간동안에 batch job 으로 처리합니다. 필자는 그냥 더 빠른 접근법을 선택했습니다. 왜냐하면 결과를 얻기 편하기 때문입니다.


그림 2: Bulldog 에서 최종 디스턴스 필드가 어떤 모양인지 보여주는 예제.


An application of Distance Fields


디스턴스 필드를 위한 소스 데이터는 일반적으로 흑백이기 때문에, 그것의 유용성은 제한되어 있습니다. 그러나 디스턴스 필드에 매우 적합한 응용프로그램은 텍스트를 그리는 것입니다.


예를 들어 TrueType 이나 OpenType 폰트( 혹은 정확한 개념을 사용하기 위해 "typeface" )는 벡터 형식으로 저장됩니다. 이것은 각 상형문자들( glyphs, typeface 내의 문자들 )이 코너( corner )와 제어점( control point )을 위해 x, y 좌표를 가진 도형으로서 표현됨을 의미합니다. 이는 스크린 상의 디스플레이를 위해서 비트맵으로 변환되거나 "래스터화( rasterised )"됩니다. 여러분이 원하는 텍스트의 크기에 의존해서 x, y 좌표들은 스케일링( scale )되며 문자 도형을 표현하는 커브들도 스케일링됩니다. 래스터화 과정은 현대 하드웨어에서도 느릴 수 있습니다. 그래서 게임에서 선호되는 방식은 여러분이 원하는 크기로 폰트를 미리 래스터화해서 비트맵에 저장하는 것입니다. 그리고 나서 비트맵으로부터 개별 문자들을 선택함으로써 요청된 텍스트를 구성합니다.


이 기법은 매우 빠르지만, 약간의 제약이 있습니다. 여러분은 모든 크기와 스타일의 조합에 대해서 개별적인 폰트 비트맵을 생성해야만 합니다. 왜냐하면 비트맵은 잘 스케일링되지 않기 때문입니다. Take for example a game that wants to have 2 different typefaces, say a normal looking sans serif typeface like Arial, and maybe a fancier caligraphy typeface for ye olde books and scrolls and the like. 문체상의( stylistic ) 이유로 여러분은 3 개의 다른 크기를 원할 것입니다. 타이틀/캡션 혹은 툴팁같은 것들 때문에 말이죠. 혹은 다양한 범위의 스크린 해상도를 지원하고자 할 수도 있고, 사람들이 UI 요소들을 읽는데 현미경을 필요로 하기를 원치 않을 수도 있습니다.  이미 우리는 2 * 3 = 6 개의 비트맵을 생성하고 관리해야 합니다. 만약 여러분이 이탤릭체나 볼드체를 원한다고 하면 더 심각해질 수 있습니다.


부호있는 디스턴스 필드 접근법은 taking the sizing out of the equation 을 통해 이러한 짐을 경감시켜주는데 도움을 줍니다. 왜냐하면 디스턴스 필드는 그래픽적 아티팩트가 거의 없이 스케일을 늘리거나 줄일 수 있기 때문입니다.


보너스로 디스턴스 필드 데이터를 사용해서 엣지를 안티 에일리어싱할 수 있습니다. 이는 거리 테스트에 부가적인 항을 추가함으로써 가능한데, 특정 범위 내의 디스턴스 값들에 대해서 페이딩( smoothly ramp from lit to unlit )을 수행합니다. Valve 기사에서는 drop shadows 와 outline 과 같은 몇 가지 다른 효과들에 대해 다룹니다.


Bulldog 에서 필자는 픽셀 쉐이더를 사용해서 부호있는 디스턴스 필드 폰트를 구현했는데, 그것은 디스턴스 필드 데이터를 가지고 노는 것을 꽤 쉽게 만들어 줍니다.


이 쉐이더 코드는 놀랄만큼 단순하며, 단순한 안티 에일리어싱 텍스트는 다음과 같습니다:



delta 는 상수인데, 이것은 문자의 엣지로부터 안티 에일리어싱이 확장되는 거리를 결정합니다. Bulldog 에서 필자가 사용하는 실제 쉐이더 코드는 약간 더 복잡합니다. 왜냐하면 그것은 테두리( border )와 ( 텍스트 박스에서 텍스트를 선택한 경우같이 ) ( 역주 : 색상이 )반전된 문자를 다뤄야 하기 때문입니다. 또한 다양한 폰트 크기에 대해 안티 에일리어싱을 조정해야 하기 때문입니다. 필자는 나중에 부호있는 디스턴스 필드를 사용해서 만들어진 새로운 폰트 시스템에 대한 포스트를 작성할 것입니다. 현재로서는, 여기에서는 다양한 크기로 렌더링된 같은 폰트들에 대한 예제를 보여드리겠습니다:


그림 3: 12, 24, 64 픽셀에서의 폰트 출력 예제.


마지막으로, Bulldog 의 다른 부분에서 보통과는 다른 방식으로 부호있는 디스턴스 필드를 사용해 봤다고 말씀드리고 싶습니다. 하지만 그것은 다음 포스트에서 언급하겠습니다...

원문 : http://www.valvesoftware.com/publications/2007/SIGGRAPH2007_AlphaTestedMagnification.pdf

주의 : 허락받고 번역한 것이 아니므로 언제든 내려갈 수 있습니다.

주의 : 번역이 개판이므로 이상하면 원문을 참조하세요.



Improved Alpha-Tested Magnification for Vector Textures and Special Effects


Chris Green

Valve


그림 1: 64x64 텍스쳐로 인코딩된 벡터 아트. 

(a) 단순한 바이리니어( bilinear ) 필터링.

(b) 알파 테스팅.

(c) 우리의 디스턴스 필드( distance field ) 기법.


Abstract


굴곡지고 선형적인 요소로 조합된 상형문자( glyph )에 대한 진보된 렌더링을 허용하는 단순하고 효율적인 기법을 제시합니다. 디스턴스 필드( distance field )를 고해상도 이미지로부터 생성한 다음, 저해상도 텍스쳐의 채널에 저장합니다. 가장 단순한 케이스에서, 이 텍스쳐는 현대 GPU 들의 알파 테스팅( alpha testing )과 alpha-thresholding 을 사용해서 커스텀 쉐이더를 사용하지 않고 단순하게 렌더링될 수 있습니다. 이는 가장 낮은 사양의 3D 그래픽스 하드웨어 상에서도 사용될 수 있는 기법입니다.


프로그래밍가능한 쉐이딩을 사용하면, 이 기법은 다양한 특수 효과 렌더링을 수행하기 위해서 확장될 수 있는데, 이는 소프트 엣지( soft edges ), 아웃라인( outlining ), 드랍 쉐도우( drop shadow ), 멀티코어 이미지( multi-cored images ), 샤프 코너( sharp corner ) 등을 포함합니다.


1 Introduction


고품질 실시간 3D 렌더링에서는, 텍스쳐 맵의 저장소를 위해서 이용할 수 있는 제한된 메모리를 효율적으로 사용하는 것이 중요합니다. 컴퓨터 게임과 같은 상호작용가능한 응용프로그램에서는, 사용자가 보통 텍스쳐 매핑된 오브젝트를 매우 확대된 상태에서 볼 수 있는데, 이는 큰 해상도로 저장된 텍스쳐 맵을 요구합니다. 그렇지 않으면 그런 시점에서 볼 때 그림 1a 에서 보이는 것처럼 텍스쳐가 뭉개져 보이게 됩니다.


텍스쳐 맵들이 텍스트( text ), 신호( signs ), UI 요소와 같은 "라인 아트( line art )" 이미지들을 표현하기 위해 사용될 때, 이는 납득할만하게 보이기 위한 매우 큰 해상도의 텍스쳐를 사용할 것을 요구하게 됩니다.


이 문제는 나뭇잎( foliage )과 같은 복잡한 오브젝트들을 위한 알파 테스팅되는 이미지 기반 임포스터들에서도 나타납니다. 커버리지( coverage )로부터 파생된 알파채널을 가진 텍스쳐들이 하드웨어의 바이리니어 필터링을 사용해 확대될 때, 그림 1b 에서 보이는 것처럼 보기싫은 "구불구불한 모양( wiggles )"이 나타납니다. 왜냐하면 커버리지 함수( coverage function )는 선형적이지 않기 때문입니다.


이 챕터에서, 우리는 그러한 텍스쳐가 매우 확대될 때 발생하는 아티팩트들( artifacts )을 최소화하기 위해 알파 테스트된 텍스쳐 맵을 생성하고 렌더링는 단순한 기법을 제시합니다. 우리는 컴퓨터 게임 문맥에서의 몇 가지 사용 시나리오들을 설명할 것인데, 3D 렌더링과 UI 요소들을에 대해 모두 다릅니다. 우리의 기법은 그림 1c 에서 보이듯이 고품질 벡터 아트 렌더링을 생성할 수 있습니다.


2 Related work


텍스쳐 매핑 그래픽스 하드웨어를 사용해 벡터 그래픽스를 정확하게 렌더링하기 위한 많은 기법들이 개발되어 왔습니다. [Firsken et al. 2000] 에서는 2차원 상형문자와 3차원 입체 지오메트리( solid geometry )를 표현하기 위해 디스턴스 필드를 사용했습니다. 지역적 다양성( local variations )에 기반해 디스턴스 필드의 해상도를 순응적으로( adaptively ) 제어하기 위해서 쿼드트리( quadtrees )와 옥트리( octrees )가 사용되었습니다. 그러한 오브젝트에 대한 GPU 렌더링에 대해서는 논의된 바가 없기는 하지만, GPU 프로그래밍 모델의 일반성( generality )에서의 최근의 진보는 이 기법을 DirectX10 을 사용해서 구현할 수 있도록 해 줍니다[Blythe 2006].


[Sen 2004] 와 [Tumblin and Choudhury 2004] 에서는 제어가능한 방식으로 샤프 엣지를 추가하기 위해 텍셀 샘플들간의 보간을 제어하기 위한 부가적 데이터가 텍스쳐 맵에 추가됩니다. 라인 아트 이미지와 하드 엣지( hard edge )를 포함하는 사진( photographic ) 텍스쳐들은 모두 그들의 표현을 사용해서 GPU 상에서 직접적으로 렌더링되었습니다.


[Loop and Blinn 2005] 에서는 음의 3차 커브들( implicit cubic curves, 역주 : implicit curve )을 사용하여 상형문자의 경계( boundaries )를 모델링했습니다. 이 때 smooth resolution-independent curves 를 사용하는 벡터 텍스처를 렌더링하기 위해 GPU 를 사용했습니다.


[Qin et al. 2006] 에서는 거리 기반 표현이 사용되었는데, 각 보로노이 영역( Voronoi region, 역주 : Voronoi diagram )에 영향을 주는 "특징( feature )"들의 미리 계산된 집합들을 사용합니다. 이러한 특징들이 주어지면, 픽셀 쉐이더를 사용해 해석적으로( analytically ) 정확한 거리 값을 계산합니다.


이진 on/off 결과를 산출하기 위해 픽셀쉐이더로부터 알파 값 출력이 thresholding 되는 알파-테스팅은 재구축( reconstructed ) 텍스쳐에서 샤프 엣지를 생성하기 위해서 게임에서 광범위하게 사용됩니다. 불운하게도 일반적으로 이를 위한 소스로서 사용되는 이미지는 서브텍셀( subtexel ) 수준에서 바이리니어 보간을 사용해서 재구축되기에는 적절하지 않은 "커버리지" 정보를 포함하기 때문에,  이 텍스쳐들이 확대될 때 축에 정렬되지 않은 엣지들에 대해서는 보통 보기싫은 아티팩트들이 보이게 됩니다.


3 Representation and Generation


스토리지를 최소한으로 유지하면서 단순한 알파 테스팅의 아티팩트들을 극복하기 위해서, 우리는 벡터 텍스처를 디스플레이하기 위한 기법을 찾아냈으며, 다음과 같은 것들을 수행할 수 있습니다 :


    • 프로그래밍가능한 쉐이딩을 수행할 수 없는 시스템을 포함하는 다양한 수준의 그래픽 하드웨어에서 작동합니다.
    • 표준 텍스쳐 매핑에 가깝거나 가능한한 빠르게 실행됩니다.
    • 모든 현대 GPU 들에서 바이리니어 보간 표현의 이점을 취합니다.
    • 적은 변경만을 동반하는 이미 존재하는 복잡한 쉐이더 시스템[Mitchell et al. 2006] 내부의 함수입니다.
    • 약간의 명령만을 픽셀 쉐이더에 추가하므로, 벡터 텍스쳐는 명령 제한을 초과하지 않고 현존하는 쉐이더들 내에서 사용될 수 있습니다.
    • 벡터 형식으로 제공되는 입력 이미지를 요구하지 않습니다.
    • 현존하는 저해상도 8 비트 텍스쳐 포맷을 사용합니다.
    • 알파 테스팅되는 임포스터 이미지들을 직접적으로 대체하기 위해서 사용됩니다.


우리는 고르게 샘플링되는 부호있는 디스턴스 필드 표현( uniformly-sampled signed-distance field representation )을 구현하기로 했습니다. 그리고 거리 함수는 8 비트 채널에 저장됩니다. 이렇게 함으로써, 우리는 내장된 바이리니어 텍스쳐 보간의 이점을 취할 수 있으며, 이는 서브 텍셀들 간의 거리와 매우 고해상도 이미지에 대한 piecewise-linear approximation 을 정확하게 재구축하기 위해 모든 현대 GPU 에서 사용될 수 있습니다. 이 표현은 다른 접근법들과 비교할 수 있게 표현할 수 있는 특징 토폴로지( topology of features )의 관점에서는 제약이 있기는 합니다만, 그것의 성능, 단순함, 우리의 현존하는 렌더링 시스템과의 통합의 편의성들을 고려했을 때 Valve 의 소스 엔진을 위한 올바른 선택이라는 점에서 만족스럽습니다.


기반 아트의 벡터 기반 표현으로부터의 적절한 거리 데이터를 생성하는 것이 가능하지만, 대신에 우리는 고해상도 소스 이미지로부터 저해상도 디스턴스 필드를 생성하기로 했습니다. 일반적인 경우에는, 4096x4096 이미지를 사용해서 그림 2 에서 보이는 것과 같은 64x64 의 저해상도 이미지로 디스턴스 필드 텍스쳐를 생성합니다.


그림 2: (a) 고해상도( 4096x4096 ) 이진 입력이

(b) 저해상도( 64x64 ) 디스턴스 필드를 계산하기 위해 사용됨.


텍스쳐 생성 시점에, 생성기( generator )는 입력으로 고해상도 이진 텍스쳐를 사용하는데, 여기에서 각 텍셀은 "in" 이나 "out" 으로 식별됩니다. 사용자는 대상 해상도와 "spread factor" 를 설정하는데, 이는 0 에서 1 범위로 8 비트 텍스쳐 채널에 부호있는 디스턴스를 매핑하는데 사용됩니다. Spread 요소는 드랍 쉐도우나 아웃라인으로서의 특수 렌더링 속성과 같은 효과의 영역( domain )을 제어하는 데도 사용되는데, 이에 대해서는 4.2 섹션에서 논의하도록 하겠습니다.


각 출력 텍셀들의 경우, 디스턴스 필드 생성기는 고해상도 이미지 내의 관련 픽셀들이 "in" 인지 "out" 인지를 결정하게 됩니다. 부가적으로 생성기는 반대 상태에 있는 가장 가까운 텍셀에 대한 ( 텍셀 단위의 ) 2D 디스턴스를 계산합니다. 이는 주어진 픽셀 주변의 지역적 이웃들을 검사함으로써 수행됩니다. 우리의 단순한 "brute-force" 검색보다 부호있는 디스턴스 필드를 계산하기 위한 더 효율적이고 복잡한 알고리즘들이 있기는 하지만, 8 비트 채널에 제한된 디스턴스 범위가 들어가야 하기 때문에, 적은 이웃들만이 검색되어야 합니다. 이 단순한 brute-force 기법을 위한 실행시간은 무시할만 합니다.


이 부호있는 디스턴스가 계산되고 나면, 우리는 그것을 0 에서 1 범위로 매핑하는데, 0 은 최대 음수 거리를 의미하며, 1 은 최대 양수 거리를 의미합니다. 텍셀값이 0.5 이면 정확한 엣지의 위치를 표현합니다. 그러므로 0.5 는 일반적으로 알파 문턱값( threshold ) 값으로 사용됩니다.


4 Rendering


가장 단순한 경우에, 결과 디스턴스 필드 텍스쳐는 말 그대로 지오메트리가 알파 테스팅을 사용해서 렌더링되는 모든 문맥에 사용될 수 있습니다. Under magnification, this will produce an image with high-resolution ( albeit, aliased ) linear edge, free of the false curved contours ( see Figure 1b ) common with alpha-tested textures generated by storing and filtering coverage rather than a distance field. 디스턴스 필드 표현을 사용하면, 우리는 그냥 알파 테스트 문턱값을 0.5 로 설정해야 합니다. 비용이 많이 드는 정렬 단계를 회피하기 위해서 특정 프리미티브 클래스들을 위해 알파 블렌딩 대신에 알파 테스트를 사용하는 것이 매우 일반적이기 때문에, 이 기법은 성능 부하없이 가시 품질을 즉각적으로 개선할 수 있습니다.


그림 3: 팀 포트리스 2 의 서피스에 적용된 128x128 크기의 

"무단 침입 금지( No trespassing )" 디스턴스 필드 이미지.


그림 3 에서 우리는 팀 포트리스 2 에서 벽 표면에 데칼로 렌더링된 "No Trespassing" 이라는 표지판의 128x128 디스턴스 필드 표현을 소개합니다. 이 데칼의 월드 공간에서 보이는 해상도는 매우 높으며, 확대를 한다고 해도 게임내에서 항상 고해상도가 유지될 것입니다. 우리는 다음 섹션에서 이러한 특별한 데칼 예제를 언급할 것입니다. 왜냐하면 우리는 이러한 방식으로 우리의 벡터 아트를 표현할 때 우리에게 이용가능한 다른 증진법( enhancements )들에 대해 논의할 것이기 때문입니다.


4.1 Antialiasing


만약 주어진 응용프로그램에 대해 알파 블렌딩이 실용적이라면, 같은 디스턴스 필드 표현은 커스텀 프래그먼트 쉐이더를 요청하는 비용으로 그냥 알파 테스팅을 사용하는 것보다 더 좋은 품질의 렌더링을 생성하는데 사용될 수 있습니다. 


그림 4: 256x256 크기의 "No Trespassing" 표지판을 확대.

왼쪽은 하드 엣지 오른쪽은 소프트 엣지.


그림 4 는 거슬리는 에일리어싱 픽셀 엣지를 부드럽게 만드는 단순한 방법을 설명합니다. 두 개의 디스턴스 문턱값인 Distmin 과 Distmax 가 정의되며, 쉐이더는 smoothstep() 함수를 사용해 두 값 사이의 디스턴스 필드 값을 매핑합니다. 픽셀당 스크린공간 도함수( per-pixel screen-space derivatives )를 지원하는 그래픽스 하드웨어상에서, 디스턴스 필드의 텍스쳐 좌표에 대한 도함수는 벡터 아트의 엣지들을 적절히 안티 에일리어싱하기 위해 소프트 영역의 너비를 조절하기 위해 사용될 수 있습니다[Qin et al. 2006]. 텍스처가 축소되면, 에일리어싱 아티팩트를 감소시키기 위해서 소프트 영역을 넓게 만들 수 있습니다. 부가적으로 알파 테스팅되는 나뭇잎을 렌더링할 때, 알파 문턱값은 거리를 사용해 증가될 수 있습니다, 그래서 LOD 튐( popping )을 피하기 위해 거리가 멀어질 수록 나뭇잎은 점진적으로 사라게 됩니다.


4.2 Enhanced Rendering


래스터 하드웨어를 사용해 상쾌한( crisp ? ) 고해상도 안티에일리어싱 벡터 아트를 제공하는 것과 더불어, 우리는 아웃라이닝, 글로우( glows ), 드랍 쉐도우 등과 같은 다른 효과들을 취하기 위해서 디스턴스 필드를 사용하는 추가적인 조작을 할 수 있습니다. 물론 이러한 모든 연산들은 디스턴스 필드에 대한 함수이므로, 그것들은 쉐이더 파라미터를 사용해 동적으로 제어될 수 있습니다.


4.2.1 Outlining


그림 5: 픽셀 쉐이더에 의해 추가된 아웃라인.



두 개의 사용자 지정 디스턴스 값들 사이의 모든 텍셀의 색상을 변경함으로써, 그림 5 의 데칼 예제에서 보이듯이 픽셀 쉐이더를 사용함으로써 단순한 텍스쳐 공간 아웃라이닝이 적욛될 수 있습니다. 확대했을 때 생성된 아웃라인은 꽤 고품질의 엣지를 가지게 됩니다. 물론 아웃라인의 색상과 너비는 그냥 픽셀 쉐이더 상수를 변경함으로써 동적으로 다양해질 수 있습니다.


4.2.2 Glows


그림 6: 픽셀 쉐이더에 의해 추가된 무섭게 빛나는 "외곽 글로우( outer glow )".


알파값이 0.5 와 0 의 문턱값 사이라면, 그림 6 에서 보이듯이 smoothstep 함수를 사용해서 "헤일로( halo )"를 대체하기 위해서 smoothstep 함수를 사용할 수 있는데, 그것의 색상값은 픽셀 쉐이더 상수로부터 옵니다. 이 효과의 동적 속성은 특히 게임에서 강력합니다. 왜냐하면 디자이너들이 글로우 파라미터들을 애니메이션 시킴으로써 특정 게임 상태에 기반해 게임 월드 내의 특정 벡터 조각에 대해 주의( attention )를 줄 수 있기 때문입니다( 체력을 깜박거린다거나 출구 표지를 강조한다거나 하는 등 ).


4.2.3 Drop Shadows


그림 7: 픽셀 쉐이더에 의해 추가된 소프트 드랍 쉐도우.

그림자의 방향, 크기, 투명도, 색상은 동적으로 제어가능함.


단일 거리에 대한 단순한 함수들인 효과들과 더불어, 우리는 그림 7 에 보이는 드랍 쉐도우나 다른 비슷한 효과들을 생성하기 위해 텍스쳐 좌표 오프셋을 사용하여 디스턴스 필드에 대한 이차 룩업( second lookup )을 사용할 수 있습니다.


이러한 단순한 2D 효과들과 함께, 디스턴스 필드를 다른 방식으로 해석해서 디자이너에게 더 많은 옵션들을 제공할 수 있습니다.


4.3 Sharp corners


그림 8: 64x64 로 인코딩된 코너.

왼쪽은 하나의 디스턴스 필드.

오른족은 두 개의 디스턴스 필드에 대한 AND.


앞의 다른 예제들에서 살펴 보았듯이, 단일 부호있는 디스턴스를 사용하여 엣지를 인코딩하는 것은 디스턴스 필드의 해상도가 감소할수록 코너를 "rounds off"합니다[Qin et al. 2006]( 역주 : 코너를 둥글둥글하게 만든다는 의미인듯...). 예를 들어, 그림 2a 의 문자 G 의 하드 코너는 그림 5, 6, 7 에서 보이는 것처럼 더욱 round off 됩니다.


그러나 텍셀과 겹치는 다른 엣지를 표현하기 위해 텍스쳐의 한 채널 이상을 사용함으로써 샤프 코너가 유지될 수 있습니다. 예를 들어, 두 개의 채널을 사용할 때, 두 엣지가 겹치는 것은 픽셀 쉐이더에서 논리 AND 연산을 수행함으로써 정확하게 표현될 수 있습니다. 그림 8 에서, 우리는 이러한 두 개의 엣지 디스턴스들을 단일 텍스쳐의 red 와 green 채널에 저장했으며, 잘 보존된 점모양의 코너가 결과로서 산출됩니다. 이것은 우리 텍스트 상에서 샤프 코너를 표현하기를 원한다면 "No Trespassing" 표지판 상에서도 같은 기법이 적용될 수 있습니다. 현재 상태로는, 우리는 이 텍스트의 둥글둥글한 스타일을 좋아하며, 이 데칼과 팀 포트리스 2 에서의 다른 데칼들을 위해서는 단일 디스턴스 필드를 사용했습니다.


5. Conclusion


이 챕터에서, 우리는 효율적인 벡터 텍스쳐 시스템을 설명했는데, 이는 Half-Life 2 시리즈, Counter-Strike: Source, Day of Defeat : Source 와 같은 게임을 개발하는 데 사용했던 Source 게임 엔진에 통합되었습니다. 이 벡터 텍스쳐 기법은 앞으로 나올 팀 포트리스 2 에도 사용되었는데, 전통적인 텍스쳐 매핑과 비교했을 때 중요한 성능 저하는 없습니다. 우리는 벡터로 인코딩된 이미지들을 우리의 1인칭 3D 뷰의 3D 지오메트리 상에 매핑되는 텍스쳐나 2D 스크린 오우버레이( overlay )들을 위해서 사용할 수 있습니다. 이 기능은 가시 품질을 매우 증진시키며 텍스쳐 메모리를 절약해 줍니다.



References


BLYTHE, D. 2006. The direct3d 10 system. In SIGGRAPH ’06: ACM SIGGRAPH 2006 Papers, ACM Press, New York, NY, USA, 724–734.


FRISKEN, S. F., PERRY, R. N., ROCKWOOD, A. P., AND JONES, T. R. 2000. Adaptively sampled distance fields: a general representation of shape for computer graphics. In SIGGRAPH’00: Proceedings of the 27th annual conference on Computer graphics and interactive techniques, ACM Press/Addison-Wesley Publishing Co., New York, NY, USA, 249–254.


LOOP, C., AND BLINN, J. 2005. Resolution independent curve rendering using programmable graphics hardware. In SIGf Figure 9: HLSL source code for outline, glow/dropshadow, and edge softness. GRAPH ’05: ACM SIGGRAPH 2005 Papers, ACM Press, New York, NY, USA, 1000–1009.


MITCHELL, J., MCTAGGART, G., AND GREEN, C. 2006. Shading in valve’s source engine. In SIGGRAPH ’06: ACM SIGGRAPH 2006 Courses, ACM Press, New York, NY, USA, 129–142.


QIN, Z., MCCOOL, M. D., AND KAPLAN, C. S. 2006. Real-time texture-mapped vector glyphs. In I3D ’06: Proceedings of the 2006 symposium on Interactive 3D graphics and games, ACM Press, New York, NY, USA, 125–132.


RAY, N., NEIGER, T., CAVIN, X., AND LEVY, B. 2005. Vector texture maps. In Tech Report.


SEN, P. 2004. Silhouette maps for improved texture magnification. In HWWS ’04: Proceedings of the ACM SIGGRAPH/EUROGRAPHICS conference on Graphics hardware, ACM Press, New York, NY, USA, 65–73.


TUMBLIN, J., AND CHOUDHURY, P. 2004. Bixels: Picture samples with sharp embedded boundaries. In Rendering Techniques, 255–264.

원문 : https://www.cs.cornell.edu/~srm/publications/EGSR07-btdf.pdf

주의 : 번역이 개판이므로 이상하면 원문을 참조하십시오.

주의 : 허락받고 번역한 것이 아니므로 언제든 내려갈 수 있습니다.



Microfacet Models for Refraction through Rough Surfaces



Bruce Walter

Stephen R. Marschner

Hongsong Li

Kenneth E. Torrance


Program of Computer Graphics, Cornell University

Beijing Institute of Technology




Abstract


미세면 모델은 거친 서피스로부터 반사되는 빛을 모델링하는 데 있어서 매우 성공적이라고 증명되어 왔습니다. 우리는 이 논문에서 미세면 이론에 대해서 리뷰하고 식각 글라스( etched glass, 역주 : etching 은 화학약품을 사용해서 특정 부위만 부식시키는 것을 의미함 )와 같은 거친 서피스를 통과하는 투과( transmission, 전송, 전파 )을 시뮬레이션하기 위해서 확장될 수 있는 방법에 대해서 설명합니다. 우리는 몇 개의 실제 서피스들로부터 가져 온 측정 데이터와 최종 투과 모델을 비교하고 미세면 분산 함수와 그림자-마스킹( shadowing-masking ) 함수를 적절히 선택하는 방법에 대해 논의합니다. 매질을 투과하는 빛을 렌더링하는 것은 적어도 두 개의 인터페이스( interface )를 가로지르는 빛을 트래킹( tracking )할 것을 요구하기 때문에, 좋은 중요도 샘플링( importance sampling ) 방법이 필요합니다. 그러므로 우리는 미세면 모델들을 샘플링하는 함수 및 그것과 연관된 확률 밀도 함수( probability density function )들에 대한 효율적인 책략에 대해서도 설명할 것입니다.


Categories and Subject Descriptos (according to ACM CCS): I.3.7 [Three-Dimensional Graphics and Realism]: Keywords: Refraction, Microfacet BTDF, Cook-Torrance Model, Global Illumination, Monte Carlo Sampling




1. Introduction


반사가능한 매질로의 투과는 유리나 물같은 매우 투명한 매질( media )이나 피부나 대리석같은 반투명한 매질을 포함하는 다양한 재질의 외형을 결정하는 데 있어서 중요한 요소입니다. 매질의 경계가 부드럽다면, 굴절( refraction )에 대한 Snell 의 법칙을 사용해 투과를 쉽게 모델링하게 됩니다. 그러나 경계가 거칠다면, 컴퓨터 그래픽에서 사용할 만한 물리에 기반해 입증된 모델이 부족합니다.


이 논문에서, 우리는 먼저 미세면 이론에 대해서 리뷰한 후, 하프 벡터에 대한 일반화 기법을 사용해 재질 사이의 거친 경계에서 반사( reflection )와 굴절( refraction )을 모델링하는 방법에 대해서 보여 줍니다. 이는 완벽한 분석적( analytic ) BSDF 모델을 제공하는데, 이는 그림 1 에 나온 식각 글라스 글로브( etched glass globe )와 같은 거친 투과성 재질을 시뮬레이션하는데 사용될 수 있습니다. 우리의 목표 중 하나는 구현자들을 위한 완벽하고 자족적인( self-contained, 역주 : 내부적으로 모든 구현이 완비된 ) 참조를 제공하는데 있으며, 그래서 우리는 필요한 모든 공식들을 제공하고 분산, 그림자-마스킹, 중요도 샘플링을 선택하는 것과 같은 실용적 이슈들에 대해서 논의할 것입니다. 전송된 빛은 적어도 두 개의 인터페이스를 통과해야 하는데, 효율적인 렌더링을 위해서는 중요도 샘플링이 매우 중요합니다.


그림 1: 식각( etched ) 세계 지도를 사용한 유리 구.

우리 미세면 굴절 모델을 사용해서 시뮬레이션 됨

(텍스쳐 맵에 의해 러프니스가 곱해진 Beckmann 분산).


또한 우리는 4 개의 실세계 서피스들로부터 가져 온 실측 데이터와 우리의 미세면 모델을 비교함으로써 그것을 입증합니다. 거친 투과는 몇 가지 흥미로운 결과( 에를 들면, 그림 2 를 참조 )를 보여줍니다, such as the strong shift in the peak away from the smooth refraction direction towards grazing angles ( 거친 반사에서 off-specular peaks 와 유사합니다 ). 그리고 이 미세면 모델은 그러한 효과들을 성공적으로 예측할 수 있습니다. 우리는 우리가 GGX 라 부르는 새로운 미세면 분산 함수를 소개하기도 하는데, 그것은 표준 Beckmann 분산 함수보다는 우리의 일부 서피스와 더 가까운 결과를 제공합니다.


그림 2: ( 가루유리 같은) 거친 서피스에 대해서 0, 30, 60, 80 도의 입사각에 대해 측정된 투과 ( ft(i,o,n)|o·n| ).



다음으로 우리는 섹션 3 에서 관련 연구들과 일반화된 미세면 이론들에 대해서 논의할 것입니다. 미세면 ( 부드러운 ) 반사와 굴절에 대한 근사 식들을 섹션 4 에서 소개할 것입니다. 그리고 나서 섹션 5 에서 거친 서피스 반사 모델과 굴절 모델을 제공하고 미세면 분산 함수 및 관련 함수들에 대한 선택에 대해 논의할 것입니다. 섹션 6 에서는 우리의 측정 장치들에 대해서 설명하고 우리의 측정값을 미세면 모델의 값과 비교할 것입니다. 부록 A 에서는 임의의 미세면 분산 함수들에 대한 Smith 의 그림자-마스킹 근사식을 리뷰할 것입니다.


2. Previous Work


미세면 모델은 거친 서피스로부터의 빛 반사를 모델링하기 위해 Cook 과 Torrance [CT82] 에 의해 소개되었으며, 이는 광학 분야의 이전 작업들에 기반합니다[TS67]. 많은 변종들이 제안되었습니다( 예를 들어 [vSK98, KSK01, PK02] ). 미세면 모델들은 그래픽스에서 광범위하게 사용되며, 실제 서피스들을 모델링하는데 있어 효과적임이 증명되었습니다 [NDM05].


Ward [Lar92] 는 Cook-Torrance 모델을 단순화시킨 버전을 소개했는데, 비등방성 재질로부터의 반사를 위해 그것을 확장했습니다. 그는 그의 모델을 샘플링하기 위한 기법을 소개하기도 했는데, Beckmann 분선이 일반적이기는 하지만 정확한 샘플링 가중치를 살펴 보고 싶다면 [Wal05] 를 참조하시기 바랍니다. Lawrence 등은 [LRR04] 에서 fitted separable approximations 를 사용하는 대안적인 샘플링 기법을 제안했습니다.


Schlick [Sch94] 는 프레넬( Fresnel ) 공식에 대한 근사식을 포함하는 Cook-Torrance 모델보다 더 뾰족한 근사식을 생성하기 위해 합리적인 근사식을 사용했습니다.


Ashikhmin 과 Shirley [AS00] 는 정확한 중요도 샘플링을 포함하는 Phong 미세면 분산을 사용하는 비등방성 반사 모델을 소개했습니다. [APS00] 은 임의의 미세면 분산으로부터 에너지 보존 반사 모델을 생성했습니다. 하지만 이 공식은 closed form solutions( 역주 : 이미 확립된 해법을 이용해서 해석적으로 정확한 해를 구하는 방식. 구체적인 공식이나 함수를 제공할 수 있어야 만 함. closed form solution = analytic solution ) 없이 수학적으로 평가한 적분을 포함하고 있습니다.


우리의 연구것과 가장 유사한 것은 Stam [Sta01] 입니다. 그는 굴절에 대한 미세면 모델을 피부의 반사도를 위해 레이어화 된 모델의 일부로서 유도했으며, 굴절을 위해 함수[야코비] 행렬식( Jacobian )을 유도했습니다. 그러나 이전의 작업과는 다르게 Stam 은 중요도 샘플링을 제공하지 않았고 실증 데이터에 대한 검증을 수행하지 않았습니다. 또한 그림자-마스크 항을 빼먹었으며 비표준 Beckmann 분산의 변종을 사용했습니다.


그림자-마스킹 항을 위한 많은 근사식들이 제시되었습니다( 예를 들어 [TS67, San69, APS00] ). 우리는 Smith [Smi67] 에서 가져온 근사식을 사용하는데, 그것은 원래 가우시안 서피스를 위해서 유도되었으며, 나중에 임의의 미세면 분산을 위해서 [Bro80, BBS02] 에서 일반화되었습니다.


반사 모델에 기반한 파동 광학( wave optics )이 제안되었는데( 예를 들어 [HTSG91]), 그것은 미세면 모델보다는 더 광범위한 범위의 서피스들을 시뮬레이션할 수 있지만, 계산비용이 너무 비싸며 괜찮은 중요도 샘플링 함수를 가지고 있지 않습니다.


다양한 거친 서피스 모델들을 위한 투과에 대한 수치 시뮬레이션( numerical simulations )들도 수행되었고 측정된 결과들과 비교되었습니다 [RE75, Ger03, SN91, NSSD90].


표기. 이 연구에서 우리는 단위 벡터와 방향을 표현하기 위해서 굵은 소문자( 예를 들어 i or v ) 를 사용합니다. 차이를 명확하게 하기 위해 정규화되지 않은 벡터들은 화살표와 함께 작성될 것입니다( 예를 들어  ). 우리는 구형 극 좌표계를 사용하는 방향을 기술할 것입니다( 예를 들어 v = (θvv) ). 극 각도 θ 는 항상 ( 역주 : 뷰나 빛의 ) 방향과 미세면 노멀 n( 이는 우리가 논의하는 등방성의 경우에 임의로 선택될 수 있음 ) 과의 각도입니다. 반면에 방위각( azimuthal angle ) φ 는 n 과 수직하는 canonical direction 과의 각도입니다. Although we describe the BSDF in terms of radiance( i.e. light flow ), the equations are identical when handling its dual, importance( i.e. tracing from cameras [Vea96] ).


그림 3: 심볼 테이블.


3. Microfacet Theory


BSDF( Bidireictional Scattering Distribution Function ) 는 서피스에서 빛이 산란하는 방식을 기술합니다. 그것은 i 방향으로 입사한 복사조도( irradiance ) 당 o 방향으로 발생한 산란된 복사휘도( radiance )의 비율로 정의됩니다. 우리는 그것을 함수 fs(i,o,n) 으로 표기하며 로컬 서피스 노멀 n 상에서 그것의 의존성이 두드러집니다. 만약 그것이 반사나 굴절로만 제한된다면, 보통 BRDF 나 BTDF 라 불리는데, 우리 BSDF 는 BRDF fr 항과 BTDF ft 항의 합입니다. Since we want to include both reflection and transmission, we will care that our derivations and equations can correctly handle directions on either side of the surface.


미세면 모델에서 세부적인 마이크로서피스( microsurface, 미세 서피스 ) 는 수정된 산란 함수( BSDF )를 사용해 단순화된 매크로서피스( mcrosurface, 거대 서피스 )로 대체됩니다 ( 그림 4 참조 ). 그 함수는 통합된 마이크로서피스의 지향성 산란( directional scattering )과 일치합니다( 예를 둘 다 멀리서 보면 같은 결과로 보입니다 ). 이는 마이크로서피스의 세부사항이 직접적으로 관찰하기에는 너무 작아서 먼 곳에서 보는 지향성 산란 패턴만이 일치한다고 가정합니다. 일반적으로 기하학적 광학( geometric optics )이라 가정되며, 문제를 단순하게 하기 위해서 단일 산란( single scattering )만이 모델링됩니다. 표면을 두 번( 이상 ) 때리는 파동 효과와 빛은 무시되며, 개별적으로 다뤄져야만 합니다.


그림 4: 마이크로서피스 대 매크로서피스.


특별한 마이크로서피스 설정을 가지고 연구를 하기보다는, 미세면( microfacet ) 분산 함수 D 와 그림자-마스킹 함수 G 에 대한 통계적 측정값과 미세 서피스 BSDF  를 사용해 마이크로서피스를 적절히 기술할 수 있다고 가정합니다.


3.1. Microfacet Distribution Function, D


미세면 노멀 분산 D(m)은 마이크로서피스 상의 서피스 노멀 m 들에 대한 통계적인 분산을 기술합니다. m 을 중심으로 한 극소 입체각( infinitesimal solid angle ) dωm 과 극소 매크로서피스 면적 dA 가 주어지면, D(m)dωmdA 는 지정된 입체각의 내부에 존재하는 노멀을 가진 마이크로서피스의 전체 면적을 의미합니다. 그러므로 D 는 1/스테라디안 단위의 밀도 함수입니다. 이치에 맞는 미세면 분산은 적어도 다음과 같은 속성들을 가져야 합니다:


    • 미세면 분산은 양수 값이어야 합니다:


    • 전체 마이크로서피스 면적은 적어도 그것과 연관된 매크로 서피스의 면적보다는 커야 합니다:


    • 마이크로서피스의 ( 부호있는 ) 사영된 면적은 모든 방향 v 에 대한 매크로서피스의 사영된 면적과 같아야만 합니다:

그리고 v = n 인 특별한 경우에 대해서는



각 미세면 분산들을 위한 공식들에 대해서는 섹션 5.2 에서 논의합니다.


3.2. Shadowing-Masking Function, G


그림 5: 그림자-마스킹 기하학: 같은 마이크로서피스 노멀 m 을 사용하는 세 지점.

두 개는 io 방향에서 보이며, 한개는 ( i 방향에서 ) 차폐됨.

관례상, 우리는 항상 서피스로부터 멀리 떨어진 것을 가리키는 방향들을 사용함

( 역주 : 방향이 표면에 들어 가는 방향이 아니라 표면으로 부터 나오는 방향임을 의미 ).


양방향 그림자-마스킹 함수 G(i,o,m) 은 노멀 m 을 가지는 마이크로서피스가 i 방향과 o 방향에서 얼마만큼 많이 보이는지를 기술합니다( 그림 5 참조 ). 일반적으로 그림자-마스킹 함수는 지표각이나 매우 거친 서피스를 제외하고는 BSDF 의 모양을 결정하는 데 있어서 적은 영향만을 끼치지만, 에너지 보존 법칙을 지킬 필요가 있습니다. 이치에 맞는 그림자-마스킹 함수를 만들려면 다음과 같은 속성들을 가져야 합니다:


    • 그림자-마스킹은 0 에서 1 까지의 값입니다:


    • 두 visibility direction 에 대해서 대칭적입니다:


    • 마이크로서피스의 뒤쪽 면은 결코 매크로서피스의 앞쪽에 있는 방향으로부터 가시적이지 않으며, 다른 경우에도 마찬가지입니다( sidedness agreement ):


그림자-마스킹 함수는 마이크로서피스의 세부사항에 의존하며, 정확한 공식을 만드는 것이 거의 불가능합니다. 더 일반적으로는 다양한 통계적 모델과 단순화된 가설을 사용해서 근사식들이 유도됩니다. 더 많은 논의를 원한다면 섹션 5 와 부록 A 를 참조하세요.


3.3 Macrosurface BSDF Integral


매크로서피스 BSDF 는 마이크로서피스에 대한 통합된 방향성 ( 단일 ) 산란 행동에 맞추기 위해서 설계됩니다. 우리는 마이크로서피스에서 볼 수 있을 만한 모든 부분들에 대한 기여도를 적분( 혹은 합산 )함으로써 이를 계산할 수 있는데, 각각은 부분들은 마이크로서피스 BSDF 인  과 연관된 빛을 스캐터링합니다. D 와 G 의 곱은 마이크로 노멀이 m 인 마이크로서피스에 상응하는 가시 면적을 제공합니다. 또한 우리는 마이크로서피스 상의 첫 번째로 전송된 입사 복사조도에 대해 교정 팩터를 적용한 후에 산란된 복사휘도를 다시 매크로서피스로 재전송할 필요가 있습니다. 왜냐하면 복사조도와 복사후도는 서피스가 사영된 면적에 대해서 상대적으로 계측되기 때문입니다. 매크로서피스 BSDF 에 대한 적분 결과는 다음과 같습니다:



이 적분을 적용하기 위해, 우리는 D, G,  을 위한 공식을 필요로 합니다. 마이크로서피스는 지역적으로 부드럽다고 가정하면,   은 이상적인 ( 거울면 ) 반사와 이상적인 ( Snell's law ) 굴절을 위한 항들의 합이며, Fresnel 항 F 에 의해서 기술되는 상대적인 세기를 가집니다.  을 위한 적절한 공식은 다음 섹션에서 유도될 것입니다.


4. Microsurface Specular BSDFs


모든 BSDF 는 마이크로서피스 BSDF 를 위해서 사용될 수 있습니다. 하지만 대부분의 미세면 모델들은 이상적인 거울면 반사를 가정하는데, 여기에서 마이크로서피스는 작고 평평한 거울들( 즉 미세면 )의 집합처럼 동작합니다. 이 연구에서 우리는 이상적인 반사와 이상적인 굴절을 모두 포함시키고 있습니다.


일반적인 스펙큘러 BSDF 는 i 방향으로부터의 입사 에너지인 ρ 를 단일 스펙큘러 방향 s 로 산란시킵니다( 여기에서 ρ 와 si 와 로컬 서피스 노멀에 대한 함수입니다. 역주: 원문 내용이 이상함. s 는 방향이라고 했는데 ㅡㅡ;; ). 우리는 다음과 같은 스펙큘러 BSDF 공식을 작성할 수 있습니다:



여기에서 δωo(s,o) 는 디랙 델타 함수( Dirac delta function )이며, 그것의 값은 s = o 일 때 무한대이고 그렇지 않을 때 0 입니다. 수학적으로 볼 때 델타 함수들은 함수가 아니라 꽤 일반화된 함수입니다. 그것들은 항상 관련 척도를 가지며( e.g., δωoo 에 대한 입체각 척도입니다 ), 이 척도에 대한 관점에서 적분에 의해 정의됩니다: 주어진 어떤 함수 g() 에 대해,



식 8 에 있는 그런 BSDF 를 사용하기 위해서, 우리는 그것을 마이크로서피스 노멀들과 그것들과 관련된 입체각 척도의 항으로 표현할 필요가 있습니다. 어떤 입사방향과 반사방향이 주어졌다고 가정해 봅시다. 거기에는 에너지를 i 에서 o 로 산란시키는 마이크로서피스 노멀이 적어도 하나는 존재할 것이고, 우리는 그 노멀을 하프 디렉션이라 불리는 h(i,o)로 계산할 것입니다. 그리고 나서 우리는 BSDF 를 hm 사이의 델타 함수의 항으로 재작성할 수 있습니다. 그러나 델타 함수는 적분의 관점에서 정의되기 때문에, 그것의 관련 척도를 변경하는 것은 적분 값을 보전하기 위한 적절한 교정 팩터를 요구합니다. Change of values theorem 을 사용하면, 식 9 는 다음과 동일해 집니다.



여기에서 는 ( 입체각 측정값을 사용해 ) ho 사이의 변환을 위한 야코비안 행렬( Jacobian matrix ) 를 결정하는 절대값입니다( 역주 : 6 자 뒤집어 놓은 것처럼 생긴 ∂ 기호는 편미분 기호입니다 ). 단순함을 위해 보통 야코비안이라 부릅니다.


이 야코비안은 두 공간에서의 작은 변화량( perturbation )들 사이의 크기 관계( magnitude relationship )를 기술합니다. 우리는 o 에 대한 입체각 내의 작은 변화량을 생성하고 h 에서 유도된 입체각 변화량을 찾아냄으로써 그것을 계산할 수 있습니다. o 에서의 변화량을 dωo 라고 표기할 것이고 h 에서의 변화량을 dωh 라고 표기할 것입니다. 야코비안은 다음과 같이 정의됩니다: 극소( infinitesimal ) 변화량에 대한 극한에서 



단위 구 상의 면적과 직접적으로 연관된 입체각과 그런 극소 면적들은 근사적으로는 평평하다고 취급될 수 있습니다. 이는 우리가 그림 6 과 7 에서 반사 및 굴절에 대한 야코비안들을 기하학적으로 계산할 수 있게 해 줍니다. 우리는 o 주변의 극소 입체각 변화량 dωo 를 생성하는데, 그것은 o 를 기반으로 하는 단위 구 상의 극소 면적과 동일합니다. 그리고 나서 이 면적으로 h 를 기반으로 하는 단위 구 상에 사영하는데, 그것은 h 에 대한 유도된 극소 입체각 변화량 dωh 와 동일합니다. 그리고 이 극소 입체각들 사이의 비율은 야코비안과 같습니다. 이 야코비안들은 [Sta01] 에서처럼 ho 와 관련된 공식들로부터 대수적으로 계산될 수 있습니다.


그림 6:  하프 벡터  와 정규화된 하프 디렉션  을 사용하는 이상적인 반사를 위한 기하. 야코비안을 계산하기 위해서, 우리는 정규화된 하프 벡터에서 극소 입체각 변화량 dωh 를 계산하는데, 이는 o 에서의 극소 입체각 변화량 dωo 에 의해서 유도됩니다. 입체각은 그것과 연관된 단위 구들 상의 면적에 직접적으로 비례합니다. Only the 2D incidence plane slice through the full 3D space is shown.



그림 7: 하프 벡터  와 정규화된 하프 디렉션  를 사용하는 이상적인 굴절을 위한 기하. o 에서의 극소 입체각 변화량 dωo 를 취하고 에서의 변화량에 사영하고 나서,  를 위한 단위 구 상에 사영함으로써 야코비안을 계산합니다. Only the 2D incidence plane slice through the full 3D space is shown.


4.1. , Ideal Reflection


이상적인 반사를 위해, 우리는 하프 디렉션을  로 정규화되지 않은 하프 벡터를  로 표기합니다( 우리는 투과의

경우를 위해서는 를 사용할 것입니다 ). 우리는 을 위한 표준 공식을 사용하는데, ( i·n )의 부호를 곱해 준다는 것만 다릅니다( 역주 : 결국 항상 양수값이 나온다는 의미 ). 그래서 우리의 공식은 서피스의 양 측면( 즉 앞이나 뒤 )에 대해서 동작하게 될 것입니다. 반사 하프 디렉션은 io 의 중간에 위치하며, 그것과 그것의 야코비안은 다음과 같습니다:




야코비안에 대한 기하학적 유도는 그림 6 에 설명되어 있습니다. 우리는  이고  이라는 것을 이용하기도 했습니다. i = -o 일 때는 하프 디렉션이 정의되지 않는데요, 이것은 결코 유효한 반사 구성이 될 수 없습니다. 반사의 경우 우리는 ρ 를 프레넬 팩터 F 와 동일하게 설정합니다( 5.1 섹션 참조 ). 식 11 을 사용하면, 반사 마이크로서피스 BRDF 는 다음과 같습니다: 서피스의 양 측면으로부터의 반사를 위해 



야코비안 항 때문에  은 이 감소할 수록 증가하며, 이것이 미세면 모델들에서 예측되고 실제 서피스들에서 관찰되는 off-specular 반사 피크의 중요 원인입니다.


4.2. , Ideal Refraction


투과의 경우 우리는 서피스의 양 측면에서의 굴절률을 필요로 합니다. 서피스의 입사 면과 투과되는 면의 굴절률들을 각각  ( 역주: eta 라 읽음 )와  라고 표기하도록 하겠습니다. 이상적인 굴절은 입사 방향 와 관련한 굴절 방향 o 를 찾기 위해서 Snell 의 법칙을 따르게 됩니다. Snell 의 법칙은 하프 디렉션 를 사용해서 다음과 같이 표현될 수 있습니다:



m 에 수직인 io 성분들의 크기는 그것들과 m 사이의 각도에 대한 sin 값과 같습니다. Snell 의 법칙에 의한 굴절 방향의 경우, 이 성분들은  에서 정확히 취소되며, 결과 방향은 m 과 colinear( 역주 : 같은 라인상에 존재한다는 의미 ) 합니다. 만약 우리가 io 가 서피스의 같은 측면에 존재하는 경우( 역주 : 굴절이 일어나지 않고 반사만 일어나는 경우 )를 배제하면, io 가 서피스 노멀로 m 을 사용할 때의 굴절을 위해서 Snell 의 법칙을 따르는 경우에만 이 될 것입니다. 에는 음수가 존재하는데, 이는 우리가 서피스 노멀이 낮은 굴절률을 가진 매질쪽( 예를 들어 공기 )을 가리킨다는 관례를 따르고 있기 때문입니다. 우리는 서피스의 두 측면이 서로 다른 굴절률을 가진다고 가정합니다; 그렇지 않으면  가 불분명해질 것입니다. 이것과 관련한 야코비안은 다음과 같습니다( 그림 7 참조 ):



우리는 인터페이스에서 흡수되는 빛은 없다고 가정하기 때문에 굴절을 위한 ρ 는 1 에서 프레넬 팩터 F 를 뺀 것입니다. 식 11 을 사용하여, 우리는 마이크로서피스 굴절 BSDF 를 다음과 같이 작성할 수 있습니다:



이 BTDF 는 reciprocity 를 따르지 않음에 주의하십시오. 대신  입니다. 이는 굴절하는 인터페이스의 잘 알려진 속성입니다. 그리고 만약 원한다면 우리는 radiance( 종종 basic radiance 라 불림 ) 가 아니라 을 트래킹함으로써 reciprocity 를 복구할 수 있습니다. 반사에서처럼, BTDF 는 지표각으로 갈수록 증가하는데, 이는 야코비안 항 때문입니다. 이 항은 굴절 로브에서 반사와 유사한 off-specular 피크를 발생시킵니다.


5. BSDF for Rough Surfaces


식 8 을 사용해 마이크로서피스 BSDF 들을 반사와 굴절을 위해서 사용함으로써, 우리는 이제 매크로서피스 반사와 굴절을 위한 BSDF fs 를 작성할 수 있습니다. 이는 BRDF 항과 BTDF 항의 합입니다:



반사항은 다음과 같습니다:



이는 우리가 분모에서 π 대신에 4 라는 팩터를 사용했다는 점만 제외하면 Cook-Torrance BSDF 와 정확히 같습니다. 그러나 원래의 논문은 D 를 위한 다른 정규화를 사용했습니다. 좀 더 최근의 다른 논문들은 4 를 사용하는 우리의 논문에 동의합니다( 예를 들어 [Sta01] ).


굴절항은 다음과 같습니다:



We don't get as much nice cancellation of terms in the refraction component, but it is still easily implemented and evaluated. 이는 거친 유전체( dielectric ) 서피스를 통과하는 반사 및 굴절에 대한 미세면 모델에 대한 기본 BSDF 공식을 완성시킵니다.


5.1. Choosing F, D, and G


식 20 과 21 을 사용하는 것은 F, D, G 항들에 대한 적절한 선택들을 요구합니다. 프레넬 항은 가장 이해하기 쉽습니다. 그리고 정확한 공식을 문헌에서 찾아 볼 수 있습니다. 일반적으로 프레넬 항은 수직 입사시에 작으며( 예를 들어  인 유리를 위해서는 0.04 ), 지표각이나 완전 내부 반사에서는 unity 로 증가합니다. unpolarized( 편극 안 된, 여러 유형으로 진동하는 ) light 를 가진 유전체를 위한 정확하고 편리한 공식은 다음과 같습니다 [CT82]:



만약 g 가 허수( imaginary )라면, 이는 전체 내부 반사를 가리키며 이 경우 F = 1 입니다. F 를 위한 더 값싼 근사식들이 종종 사용되기도 합니다 [CT82, Sch94].


여러 가지 미세면 분산 함수 D 들이 제안되어 왔습니다. 이 논문에서, 우리는 세 가지 유형에 대해서 다룹니다: Beckmann, Phong, GGX. Beckmann 분산은 마이크로서피스에 대한 Gaussian roughness assumption 으로부터 만들어졌으며, 광학 문헌들에서 광범위하게 사용됩니다. Phong 분산은 그래픽스 문헌에서 개발된 순수하게 실증적인 것입니다; 그러나 width 파라미터들을 적절히 선택하면, 그것은 Beckmann 분산과 거의 비슷합니다. GGX 분산은 새로운 것이며, 우리는 투과를 위해 측정된 데이터들과 그것을 더 잘 일치시킬 수 있게 하기 위해서 개발했습니다. 세 분산 유형들을 위한 공식들과 관련 함수들은 이 섹션의 끝 부분에 나옵니다.


그림자-마스킹( shadowing-masking ) 항 G 는 분산 함수 D 와 마이크로서피스의 세부사항에 의존합니다. 그래서 정확한 솔루션을 찾는다는 것이 거의 불가능합니다. Cook 과 Torrance 는 모든 분산 D 를 위해 에너지 보존을 보장하는 평행 그루브( parallel grooves ) 에 대한 1D 모델에 기반하는 G 를 사용했습니다. 그러나 우리는 그것을 사용하는 것을 추천하지 않습니다. 왜냐하면 그것은 1차 미분 불연속성을 가지고 있으며 다른 특징들도 실제 서피스에서는 보이지 않는 것들이기 때문입니다. 대신에, 우리는 Smith 그림자-마스킹 근사식 [Smi67] 을 사용할 것입니다. Smith G 는 원래 Gaussian rough surface 로부터 유도되었지만, 임의의 분산 함수들 [Bro80, BBS02] 를 가진 서피스들을 다루기 위해서 확장되어 왔습니다. 비록 몇몇 사례들에서( 예를 들어 Phong ) 결과 적분들이 단순한 closed form solution( 역주 : analytic solution ) 을 가지고 있지 않긴 하지만 말입니다.


Smith G 는 두 개의 한 방향의( monodirectional ) 그림자 항 G1 들에 대한 개별 곱으로서 양방향 그림자-마스킹을 근사계산합니다:



여기에서 G1 은 [Smi67, Bro80, BBS02] 와 부록 A 에서 기술된 것처럼 미세면 분산 D 로부터 유도됩니다. Smith 는 실제로 두 개의 다른 그림자 함수들입니다: 하나는 마이크로서피스 노멀 m 이 알려졌을 때 하나, 모든 마이크로서피스 노말들에 대한 평균냈을 때 다른 하나. 비록 후자가 문헌들( 예를 들어 [HTSG91] )에서 더 자주 사용되기는 하지만, 마이크로서피스 노멀이 알려진 미세면 모델에서는 전자가 더 적합하며 우리는 이 논문에서 그것을 사용합니다.


5.2. Specific Distributions and Related Functions


그림 8: 왼쪽: Beckmann (red), Phong (blue), GGX(green) 분산 함수 D(m) 들. 각각은 αb = 0.2, αp = 48, αg = 0.2 를 사용합니다. Beckmann 과 Phong 은 GGX 가 더 좁은 피크와 더 강한 테일을 가지는 것에 비하면 거의 비슷합니다. 오른쪽: Beckmann, Phong, GGX 를 위한 Smith 그림자-마스킹 항 G1(v,n) 들. G1 은 지표각에서를 제외하고는 거의 1 입니다. 그리고 GGX 는 더 강한 테일을 가지고 있기 때문에 좀 더 많은 그림자를 가지게 됩니다.


아래에서 우리는 Beckmann, Phong, GGX 분산 D 를 위한 식을 제공합니다( 그림 8 참조 ). 그리고 그것들과 관련한 Smith 그림자 함수 G1 을 제공합니다. 또한 [0, 1) 범위에 있는 두개의 유니폼 랜덤 변수들인 ξ1 ( 역주 ksi 라 읽음. 크시 )과 ξ2 로부터 마이크로서피스 노멀들을 생성하기 위한 샘플링 공식들을 제공합니다. 주어진 샘플링 공식을 사용하여 어떤 m 을 생성하는 것에 대한 확률( probability )는 다음과 같습니다:



θmmn 사이의 각도이며, θvv n 사이의 각도이고, χ+(a) ( 역주: chi 라 읽음. 키 )는 양의 특성( positive characteristic ) 함수( a > 0 이면 1 이고 a <= 0 이면 0 )입니다. 이것들은 모두 하이트필드( heightfield ) 분산들입니다( 즉 m·n <= 0 이면 D(m) = 0 ). 그리고 그것들에 대한 비등방성 변종들이 존재하지만 여기에서는 논의하지 않을 것입니다.


width 파라미터 αb 를 사용하는 Beckmann Distribution:




G1 공식에서 첫 번째 팩터는 sideness agreement 를 포함합니다( 즉 v 는 반드시 매크로서피스나 마이크로서피스에 대해 같은 측면에 존재해야만 합니다 ). 그것은 에러 함수  를 포함하고 있기 때문에, 이 공식은 평가하기에 너무 비쌀 수 있습니다. Shclick [Sch94] 은 더 싼 비례 근사식( rational approximation, 유리 근사식 )을 사용할 것을 제안했지만, 그것은 서로 다른 그림자-마스킹 공식에 기반했습니다. 대신에, 우리는 Smith G1 공식에 대한 다음의 비례 근사식을 제안하는데 0.35% 보다는 작은 상대적 에러를 사용합니다.



샘플링 에 대한 공식은 다음과 같습니다:




width 파라미터 αg 를 사용하는 GGX Distribution:




GGX 분산은 Beckmann 분산과 Phong 분산보다는 더 강한 테일( tail )들을 가집니다. 즉 더 많은 그림자를 가지는 경향이 있습니다. 샘플링 을 위한 공식은 다음과 같습니다:




5.3. Sampling and Weights


BSDF 를 샘플링하기 위해서, 우리는 방향 i 를 가지고 있으며 산란된 방향 o 를 fs(i,o,n)|o·n| 과 거의 일치하는 패턴으로 생성하기를 원한다고 가정합니다. 일반적으로 미세면 BSDF 는 정확하게 샘플링될 수 없습니다. 우리의 접근법은 먼저 마이크로서피스 노멀 m 을 샘플링하고 나서 그것을 사용해서 산란된 방향 o 를 생성할 것입니다. 관련 샘플들에 대한 가중치를 계산하기 위해, 우리는 샘플 방향들에 대한 확률 밀도 po 를 계산할 필요가 있습니다. 결과 가중치는 다음과 같을 것입니다:



여기에서 우리는 결과 가중치에서의 변화를 최소화하기 위한 샘플링을 선택하기 원합니다.


만약 산란된 방향 o 를 생성하기 위해서 확률 pm 으로 미세면 노멀 m 을 선택하고 하프-디렉션 공식( 즉 식 13 이나 16 )을 역으로 계산한다면( invert ), 최종 확률은 하프-디렉션 트랜스폼( transform )의 야코비안을 포함하게 될 것입니다( 예를 들어 [Wal05] 를 참조 ):



5.2 섹션으로부터의 샘플링 공식들을 사용하면, 우리는 과 관련된 샘플링된 미세면 노멀들 m 을 생성할 수 있습니다. 그리고 나서 우리는 프레넬 항 F(i,m) 을 평가하고, 반사인지 굴절인지를 선택하기 위해서 그것을 사용할 수 있습니다. 즉 프레넬 항을 확률로 끌고 들어 오는 것입니다. 반사의 경우, 산란 방향 or 은 다음과 같습니다:




그리고 투과의 경우, 산란된 방향 ot 는 다음과 같습니다:



그리고 다른 경우에는 산란된 방향에 대한 결과 가중치가 다음과 같습니다:



수직 입사시 ( 즉  ), 이는 거의 완벽한 샘플링이 됩니다. 지표각에서, 그것은 여전히 좋은 샘플링이지만 D 와 G 를 어떤 것을 선택했느냐와 파라미터의 값에 따라 수백배까지 높은 샘플 가중치가 생성될 수도 있습니다. 그러한 높은 가중치들이 나올거 같지 않지만( fs 가 매우 작은 곳의 지표각에서의 retroreflection 을 위해서는 최악임 ), 그것들은 그러한 높은 가중치가 결코 발생하지 말아야 한다는 가정을 가진 기법들에서 문제가 됩니다( 예를 들어 대부분의 파티클 트레이싱 기법들 ). 우리는 샘플링 분산을 약간 수정함으로써 최대 가중치를 훌륭하게 줄일 수 있습니다. 예를 들어 Beckmann 분산을 사용할 때, 우리는  에 의해 주어진 약간 넓어진 분산을 대신 샘플링할 수 있습니다. 이는 최대 샘플링 가중치를 대충 4 배 정도 확 줄여줍니다.


6. Measurements


그림 9: 측정 설정: 우리는 우리 샘플들의 뒤쪽에 유리 반구를 둘렀습니다. 

이는 지표각에서도 투과를 관찰할 수 있게 해 줍니다.


( 역주 : 이 섹션은 측정 방법론 및 대상에 대한 내용이 주를 이루고 있고 모르는 개념이 너무 많이 나와서, 귀찮으면 그냥 원문을 그대로 썼습니다 )


우리의 산란 모델을 검증하기 위해서, 우리는 다양한 종류의 거친 유리 서피스들을 통과하는 투과를 측정했습니다. 이 측정을 거친 서피스를 가진 유리 그릇에 조명을 비치고 산란된 빛을 측정하는 단순한 방법을 사용할 수는 없습니다. 왜냐하면 빛은 유리 내부에서 직접적으로 관찰되지 않으며, 내부 반사가 상대적으로 지표각에 가까운 방향으로 산란되는 빛을 방해하기 때문입니다. 그래서 측정할 수 있는 곳으로 빛이 도달하지 않습니다. 동시에 내부적으로 반사되는 빛의 대다수는 내부로부터 거친 스피스를 향한 조명으로 다시 작용할 것이며, 이는 경로에서 벗어난 허용할 수 없는 다량의 빛을 생성하게 됩니다.


전송된 빛을 직접적으로 관찰하기 위해서, 우리는 plano-convex lens( 평면 볼록 렌즈 )를 덧붙임으로써 두 번째 인터페이스를 제거했습니다. 이 렌즈는 샘플의 뒤쪽을 향하는 반구에 가깝습니다( 그림 9 ). 이러한 구성은 [NN04] 의 연구에서 영감을 받았습니다. 샘플은 거친 서피스로부터 빛을 받으며, 구형 서피스를 통해 여러 각도로부터 보입니다. 이 때 장치의 회전 중심은 구형 서피스의 중심에 정렬되기 때문에 뷰 방향은 항상 서피스에 대해 수직입니다. 이러한 방식으로, 산란된 빛은 프레넬 반사 때문에 최소한의 손실로 서피스를 떠나게 됩니다. 또한, 상대적으로 적은 빛만이 샘플의 중심 근처의 영역으로 재반사됩니다. 왜냐하면 반구를 떠나는 경로의 반사는 거의 서피스에 수직이기 때문입니다. 이는 평평한 샘플을 사용했을 때와 비교하면 빛이 경로를 벗어나는 문제를 줄여 줍니다.


우리 설정에서, 100 mm 의 정사각형 샘플이 동일한 굴절률을 가진 접착제를 사용해서 75 mm 의 직경과 75 mm 의 초점 거리를 가진 거의 반구모양인 평면 볼록 렌즈에 부착됩니다. 6 mm 의 두께를 가진 샘플의 경우, 렌즈의 구형 서피스의 중심은 거친 서피스 상에 존재합니다. 하지만 우리 샘플들은 다양한 두께로 구성되어 있기 때문에, 이 기법은 반드시 서피스와 중심 간의 몇 mm 정도의 거리를 감수해야만 합니다.


이 샘플은 6 mm 의 원형 광섬유로부터 610 mm 의 거리에서 조명을 받게 됩니다( 조명 입체각: 0.000076 sr ). 그 광원은 DC 정규 섬유 조명이며, 전체 샘플 서피스 상에 안정적이고 떨리지 않는 조명을 제공합니다. 전송된 빛은 냉각한 CCD 카메라에 의해 감지되는데, 이 카메라는 반구형 면으로부터의 샘플을 보게 됩니다. 이 카메라는 885 mm 의 거리에 있는 f/5.6 의 35 mm 촬영 렌즈를 사용합니다( 수신 입체각: 0.000039 sr ). 측정값은 카메라 이비지의 고정된 사각 영역 안의 픽셀 값들을 평균냄으로써 구해지는데, 이 영역은 거의 3mm x 10 mm 까지의 구형 서피스 상의 면적과 관련이 있습니다.


측정된 면적은 이미지 내의 고정된 면적으로 정의되기 때문에, 측정값은 카메라에 의해 관찰된 복사휘도( radiance )에 대한 비율입니다. Since radiance is preserved ( up to a constant factor ) under refraction, this arrangement produces a signal proportional to the BTDF times the cosine of the incident angle. 이 속성을 가지기 위에서는 앞에서 조명을 비추고 뒤에서 보는 것이 중요합니다; if the sample was flood-illuminated from the hemispherical side, the lens would focus the light into a nonuniform distribution of irradiance that would make the system sensitive to exact alignment between the sphere center and the surface.


우리는 거친 서피스를 가진 네 개의 유리 샘플들을 서로 다른 절차를 통해 측정했습니다. One was commercially produced ground glass created by sandblasting soda-lime glass with 120 abrasive ( ground, 1/16 inch thickness ). One sample was prepared in our lab by acid-etching one side of a plate of soda-lime glass ( etched, 3/16 inch thickness ). The last two are less well characterized: commercially available frosted flass ( frosted, 1/8 inch thickness ) and commercially available antiglare glass for picture framing ( antiglare, 1/16 inch thickness ). All samples had flat polished surfaces on the reverse side except the antiglare glass, which was rough on both sides; we assume that the adhesive fills in the surface so that the extra rough interface is not relevent( and in fact, there is no visible evidence of an air layer ).


측정 결과는 모두 산란된 로브의 피크가 기대했던 굴절 방향과 벗어나는 것을 보여 주었습니다. antiglare glass 에서처럼 러프니스가 낮아지면, 그 피크는 이상적인 반사 각에 가깝지만, 더 거친 샘플들의 경우에는 지표각으로 갈수록 많이 벗어나게 됩니다.


이러한 이유로 이 거친 서피스 BTDF 들의 많은 특징들은 평평한 그릇에서 직접적으로 관찰하기 어렵습니다. 다음에 보여 주듯이, 우리의 미세면 모델들은 이런 행동들을 잘 예측합니다.


6.1. Sample Results


그림 10: 가루( ground ) 유리 샘플. 

위쪽은 BTDF fit 이며 아래쪽은 실증적인 미세면 분산 D 에 대한 fit 임.

Red 라인은 Beckmann 이고 green 라인은 GGX 임.


그림 11: 냉각( frosted ) 유리 샘플. 

위쪽은 BTDF fit 이며 아래쪽은 실증적인 미세면 분산 D 에 대한 fit 임.

Red 라인은 Beckmann fit 이며 green 라인은 GGX fit 임.



네 가지 샘플들 각각에 대해, 우리는 Beckmann 분산과 GGX 분산을 사용해 미세면 BTDF 와 측정된 결과를 맞춰 보았습니다( 그림 12 ). 모든 샘플들에 대해 우리는 굴절률이 1.51 이라 가정했습니다. 이는 우리에게 맞춰야 하는( to fit ) 두 개의 자유 파라미터를 제공합니다: 분산 너비 파라미터( αb 와 αg )와 우리 측정값을 절대 스케일로 매핑하기 위한 전체 스케일링 팩터.


그림 12: 네 샘플을 위해 피팅된 계수( coefficient )들. 우리는 수직 입사에 대한 측정 데이터를 우리 BTDF 를 위해 피팅하는데, Beckmann 미세면 분산과 GGX 미세면 분산을 모두 사용함. 각각의 경우 우리는 분산 width 파라미터와 전체 스케일링 팩터를 모두 피팅함( 왜냐하면 우리가 절대적인 측정값보다는 상대적인 측정값을 가지고 있기 때문임 ).


그림 13: 식각( etched ) 유리 샘플. 

위쪽은 BTDF fit 이며 아래쪽은 실증적인 미세면 분산 D 에 대한 fit 임.

 Red 라인은 Beckmann fit 이며 green 라인은 GGX fit 임.


그림 14: 눈부심방지( antiglare ) 유리 샘플.

위쪽은 BTDF fit 이며 아래쪽은 실증적 미세면 분산 D 에 대한 fit 임.

Red 라인은 Beckmann fit 이며 green 라인은 GGX fit 임.


우리 BTDF 모델을 테스트하기 위해, 각 샘플들을 위한 두 개의 그래프를 보여 줍니다. 첫 번째는 투과되는 각 θo 에 대한 함수인 ft(i,o,n)|o·n| 을 보여 줍니다. 우리는 수직 입사의 경우( θi = 0 )도 보여 주는데, 여기에서 우리는 피팅( fitting )을 수행했으며, 세 개의 부가적인 입사각( θi = 30, 60, 80° )을 사용해서 이러한 각들을 추정하기 위해 모델의 기능을 테스트했습니다.


두 번째 그래프는 데이터로부터 미세면 분산 함수 D 의 점들을 직접적으로 추정합니다. G 항은 지표각에서만을 제외하고는 1 이기 때문에, 우리가 지표각에서 먼 데이터 점들만을 사용하고( 즉 |i·n| > 0.5 이고 |o·n| > 0.5 ) 이 점들에 대해 G(i,o,m) = 1 이라 가정하면, 우리는 그와 관련한 D(ht) 의 값들에 대한 식 21 을 풀 수 있습니다. 또한 매우 낮은 측정값을 가진 점들을 배제할 수 있습니다. 왜냐하면 이 값들은 경로를 벗어난 빛에 의해 쉽게 영향을 받기 때문입니다. 만약 데이터가 미세면 모델과 어울린다면, 이 점들은 서피스의 미세면 분산 함수인 커브와 가까운 곳에 위치할 것입니다. 두 그래프에서 상대적인 측정 데이터와의 비교를 가능하게 하기 위해서 적당한 스케일링 팩터에 의해 모델들이 스케일링되어 있다는 점에 주의하시기 바랍니다.


가루 유리 샘플에 맞는 데이터와 모델은 그림 10 에 나와 있습니다. 우리는 GGX 분산이 그 데이터에 훌륭하게 어울리며 그것이 Beckmann fit 보다 더 낫다는 것을 알 수 있습니다. 유일하고 중대한 차이는 지표각 근처에서 발생하는데, 여기에서 기하 광학의 미세면 가설과 단일 스캐터링이 덜 유효해집니다. Beckmann 분산이 아래쪽 그래프에서 보이듯이 기준( inferred ) 미세면 분산과 일치하지 않는다는 것을 발견했습니다. 그래서 우리는 특별히 GGX 분산을 개발했습니다.


냉각 유리와 식각 유리를 위한 그래프는 그림 1113 에 있습니다. 두 샘플들의 경우에, Beckmann 과 GGX 는 모두 측정된 투과 패턴과 일치하는 타당한 작업을 수행했지만, 아래쪽 그래프에서 보이듯이 실증적인 미세면 분산 함수들과는 일치하는 모델은 없었습니다. 아마도 우리는 Beckmann 과 GGX 사이의 어딘가에 있는 것처럼 행동하는 분산 함수를 찾아야 할 필요가 있을 것 같습니다.


눈부심방지 유리는 다른 샘플들보다는 훨씬 더 낮은 서피스 러프니스를 가지고 있습니다. 그러므로 그림 14 에서 볼 수 있듯이 훨씬 좁은 로브를 가집니다. 그것이 너무 좁기 때문에, 우리는 상대적으로 로브 내에서 적은 샘플들만을 획득하게 되며, 그것의 width 를 추정하는데 더 많은 어려움을 겪습니다. 이 경우에는 Beckmann 과 GGX 가 모두 잘 들어 맞습니다.


우리의 BTDF 모델과 샘플링 기법을 사용해서, 우리는 눈부심방지 유리, 가루 유리, 식각 유리 샘플에 대한 렌더링 시뮬레이션을 했으며 이는 그림 15 에 나와 있습니다. 이 이미지들은 서로 다른 외형을 겹쳐서 보여 주며, 불투명한 패턴 및 디퓨즈 라이트에 대한 기능들을 잘 보여 줍니다. 패턴을 가진 식각 유리 글로브를 위한 시뮬레이션은 그림 1 에 나와 있습니다.


그림 15: 거칠게 만든 사각형의 서피스를 가진 유리 슬라이드에 대한 시뮬레이션.

 눈부심방지 유리, 가루 유리, 식각 유리를 위해 피팅된 분산들을 사용함.


7. Conclusions


이 논문에서, 우리는 미세면 이론에 대한 포괄적인 리뷰를 제공했으며, 거친 서피스를 가진 투과성 재질들을 다루기 위해서 그것이 어떻게 확장될 수 있는지를 보여 주었습니다. 우리는 최종 BTDF 모델들을 측정 데이터와 비교해서 검증했으며, 그것들이 실제 서피스의 굴절 행위를 예측할 수 있음을 보여 주었습니다. 우리는 새로운 미세면 분산 함수( GGX 분산 )를 개발했고, 적어도 어떤 서피스들에 대해서는 그것이 표준 Beckmann 분산보다는 측정 데이터와 더 가깝게 일치한다는 것을 보여 주었습니다. 또한 미세면 모델을 효율적으로 중요도 샘플링하는 방법에 대해서 보여 주었는데, 그것은 굴절된 빛을 렌더링할 때 필수적입니다. 우리는 이 기법들이 피부, 마블, 페인트와 같은 반투명한 재질을 가진 진보된 모델들을 포함하는 더 광범위한 재질들을 시뮬레이션하는 데 있어서 유용하다는 것을 증명할 수 있습니다.


Acknowledgements


This work was supported by NSF grants ACI-0205438, CNS-0615240, and CAPEER CCF-0347303, an Alfred P. Solan Research Fellowship, and Intel.


References


[APS00] ASHIKHMIN M., PREMOZE S., SHIRLEY P. S.: A microfacet-based BRDF generator. In Proceedings of ACM SIGGRAPH 2000 (July 2000), pp. 65–74.


[AS00] ASHIKHMIN M., SHIRLEY P. S.: An anisotropic phong BRDF model. Journal of Graphics Tools 5, 2 (2000), 25–32.


[BBS02] BOURLIER C., BERGINC G., SAILLARD J.: One- and two-dimensional shadowing functions for any height and slope stationary uncorrelated surface in the monostatic and bistatic configurations. IEEE Trans. on Antennas and Propagation 50 (Mar. 2002), 312–324.


[Bro80] BROWN G. S.: Shadowing by non-Gaussian random surfaces. IEEE Trans. on Antennas and Propagation 28 (Nov. 1980), 788–790.


[CT82] COOK R. L., TORRANCE K. E.: A reflectance model for computer graphics. ACM Transactions on Graphics 1, 1 (Jan. 1982), 7–24.


[Ger03] GERMER T. A.: Polarized light diffusely scattered under smooth and rough interfaces. In Polarization Science and Remote Sensing. (Dec. 2003), vol. 5158 of Proceedings of the SPIE, pp. 193–204.


[HTSG91] HE X. D., TORRANCE K. E., SILLION F. X., GREENBERG D. P.: A comprehensive physical model for light reflection. In Computer Graphics (Proceedings of SIGGRAPH 91) (July 1991), pp. 175–186.


[KSK01] KELEMEN C., SZIRMAY-KALOS L.: A microfacet based coupled specular-matte BRDF model with importance sampling. Eurographics Short Presentations (2001).


[Lar92] LARSON G. J. W.: Measuring and modeling anisotropic reflection. In Computer Graphics (Proceedings of SIGGRAPH 92) (July 1992), pp. 265–272.


[LRR04] LAWRENCE J., RUSINKIEWICZ S., RAMAMOORTHI R.: Efficient BRDF importance sampling using a factored representation. ACM Transactions on Graphics 23, 3 (Aug. 2004), 496–505.


[NDM05] NGAN A., DURAND F., MATUSIK W.: Experimental analysis of BRDF models. In Rendering Techniques 2005: Eurographics Symposium on Rendering (June 2005), pp. 117–126.


[NN04] NEE S.-M. F., NEE T.-W.: Polarization of transmission scattering simulated by using a multiple-facets model. Journal of the Optical Society of America A 21 (Sept. 2004), 1635–1644.


[NSSD90] NIETO-VESPERINAS M., SANCHEZ-GIL J. A., SANT A. J., DAINTY J. C.: Light transmission from a randomly rough dielectric diffuser: theoretical and experimental results. Optics Letters 15 (Nov. 1990), 1261–1263.


[PK02] PONT S. C., KOENDERINK J. J.: Bidirectional reflectance distribution function of specular surfaces with hemispherical pits. Journal of the Optical Society of America A 19 (Dec. 2002), 2456–2466.


[RE75] ROGERS J. E., EDWARDS D. K.: Bidirectional reflectance and transmittance of a scattering-absorbing medium with a rough surface. In Thermophysics Conference (May 1975).


[San69] SANCER M. I.: Shadow Corrected Electromagnetic Scattering from Randomly Rough Surfaces. IEEE Trans. on Antennas and Propagation 17 (1969), 577–585.


[Sch94] SCHLICK C.: An inexpensive BRDF model for physically-based rendering. Computer Graphics Forum 13, 3 (1994), 233–246.


[Smi67] SMITH B. G.: Geometrical shadowing of a random rough surface. IEEE Trans. on Antennas and Propagation (1967), 668–671.


[SN91] SÁNCHEZ-GIL J. A., NIETO-VESPERINAS M.: Light scattering from random rough dielectric surfaces. Journal of the Optical Society of America A 8 (Aug. 1991), 1270–1286.


[Sta01] STAM J.: An illumination model for a skin layer bounded by rough surfaces. In Rendering Techniques 2001: 12th Eurographics Workshop on Rendering (June 2001), pp. 39–52.


[TS67] TORRANCE K. E., SPARROW E. M.: Theory for off-specular reflection from roughened surfaces. Journal

of Optical Society of America 57, 9 (1967), 1105–1114.


[Vea96] VEACH E.: Non-symmetric scattering in light transport algorithms. In Eurographics Rendering Workshop 1996 (June 1996), pp. 81–90.


[vSK98] VAN GINNEKEN B., STAVRIDI M., KOENDERINK J. J.: Diffuse and Specular Reflectance from Rough Surfaces. Applied Optics 37 (Jan. 1998), 130–139.


[Wal05] WALTER B.: Notes on the Ward BRDF. Technical Report PCG-05-06, Cornell Program of Computer Graphics, Apr. 2005.


Appendix A: Deriving the Smith Shdowing, G1


( 역주 : 생략, 원문을 참조하세요 )

원문 : https://disney-animation.s3.amazonaws.com/library/s2012_pbs_disney_brdf_notes_v2.pdf

주의 : 번역이 개판이므로 이상하면 원문을 참조하세요.

주의 : 허락받고 번역한 것이 아니므로 언제든 내려갈 수 있습니다.

주의 : 부록은 번역하지 않았으므로 원문을 참조하세요.



Physically-Based Shading at Disney


by Brent Burley, Walt Disney Animation Studios


[Revised Aug 31, 2012. Corrected normalization factor in Equation 4.]


1 Introduction


Tangled( 한국개봉명 : 라푼젤 ) [27] 에서 물리 기반 헤어 쉐이딩을 사용하는 것에 성공한 후에, 우리는 재질의 더 많은 영역에 물리 기반 쉐이딩 모델들을 적용하는 것을 고려하기 시작했습니다. 우리는 물리 기반 헤어 모델을 사용해서 아티스트의 제어를 유지한 채로 가시적인 풍성함의 정도를 더 깊게 할 수 있었습니다. 그러나 여전히 전통적인 "단순(ad-hoc)" 쉐이딩 모델 및 점 광원( punctual light )을 가지고 있는 씬의 나머지 부분과 헤어 라이팅을 통합하는 것은 모험에 가깝다는 것이 증명되었습니다. 우리는 차기작에서는 재질들과 환경들 사이의 라이팅 반응( response )을 더 일관되게 만들면서 재질들의 풍성함은 증가시키기를 원했습니다. 또한 단순화된 아티스트 컨트롤을 통해서 아티스트들의 생산성이 높아지기를 원했습니다.


우리가 연구를 시작했을 때는 어떤 모델을 사용해야 할지 심지어는 우리가 원하는 물리 기반이 어떤 것인지에 대해서 분명하지 못했습니다. 완벽하게 에너지 보존 법칙을 지켜야 하나? 굴절률( Index of refraction )과 같은 물리적인 파라미터들을 선호해야 하나?


디퓨즈( Diffuse )의 경우에는 램버트( Lambert )가 받아들일 수 있는 표준으로 보였고, 스펙큘러( specular )의 경우에는 대부분을 문헌( literature )에서 얻어야 하는 것처럼 보였습니다. Ashikhmin-Shirley ( 2000 ) [3] 와 같은 모델들은 물리적으로 타당하면서 직관적이고 실용적이되는 것이 목표였지만, He et al. ( 1991 ) [12] 와 같은 다른 모델들은 좀 더 포괄적인 물리적 모델을 제공했습니다. 여전히 다른 모델들은 실제 관측 데이터에 더 잘 들어 맞게 하는 것( fitting ) [15, 14, 22, 17, 4 ]을 목표로 하지만, 이것들 중의 일부는 직접적인 조작에 적합합니다. 우리는 몇 개의 모델들을 구현했고 아티스트들은 그것들을 선택하고 조합했습니다. 하지만 우리가 피하고 싶었던 파라미터 폭발( parameter explosion, 역주 : 너무 많은 파라미터를 공급해야 하는 사태 ) 상황으로 다시 되돌아가게 되었습니다.


측정 재질( measured material )에 대한 매우 다양한 연구 중 하나는 Ngan et al. ( 2005 ) [21] 이었는데, 이것은 다섯개의 대중적인 모델들을 비교했습니다. 어떤 모델들은 전반적으로 다른 모델들보다 더 나아졌지만, 흥미롭게도 모델들의 성능들 사이에는 강한 연관성이 존재했습니다 - 어떤 재질들은 모든 모델들에 의해 잘 표현되었지만, 다른 재질들은 전혀 적합하지 않은 것으로 증명되었습니다. 몇 몇 경우에만 부가적인 스펙큘러 로브( lobe )가 도움이 되었습니다. 이는 질문을 하게 만듭니다. 어려운 재질들에서 표현되지 않고 있는 것은 무엇일까?


이 질문에 답하고 BRDF 모델들을 더욱 직관적으로 평가하기 위해서, 우리는 새로운 BRDF 뷰어를 개발했는데, 이는 측정된( measured ) BRDF 와 분석적( analytic ) BRDF 를 모두 출력하고 비교합니다. 우리는 측정된 BRDF 데이터를 보여주기 위한 새롭고 직관적인 방법을 발견했으며, 알려진 모델로 잘 표현되지 않는 흥미로운 특징들을 측정된 재질들에서 찾아냈습니다.


이 코스 노트( course note )에서, 우리는 측정된 재질에 대해 공부하면서 관측한 것들에 대해서 공유하고, 어떤 모델이 측정된 데이터에 맞고 어디에서 그것들이 결핍되어 있는지를 알아내는 것에 대한 통찰력을 공유하고자 합니다. 또한 이 새로운 모델을 작업에 적용한 것과 관련한 경험에 대해서 설명하고, 단순함과 신뢰도를 유지하면서 아티스트들이 사용하기 적합한 수준의 컨트롤을 추가할 수 있었던 방법에 대해 논의하고자 합니다.


2 Microfacet Model


우리는 BRDF 를 정의하고 미세면 모델의 관점에서 측정된 재질들과 비교할 것입니다 [30, 7, 33]. 미세면 모델은, 주어진 빛 벡터 l 과 뷰 벡터 v 사이에서 서피스 반사가 발생할 수 있으려면, l 벡터와 v 벡터 사이에서 반만큼 정렬된 노멀( normal )을 가진 서피스나 미세면들이 존재해야만 한다고 가정합니다. 이 "하프벡터( half vector )"는 보통 미세면 노멀이라 불리는데, 다음과 같이 정의됩니다( 역주 : 모든 미세면의 노멀이라는 의미가 아니라, lv 가 특정 관계에 있을 때 나에게 정반사를 보내줄 수 있는 미세면의 노멀을 이야기하는 것입니다. [PBR Specular D 의 기하학적 의미] 참조 ).



등방성 재질을 위한 미세면 모델의 일반형은 다음과 같습니다:



디퓨즈 항은 알려지지 않은 형태의 함수입니다. 램버트 디퓨즈가 보통 사용되는데 상수 값에 의해 표현됩니다. 스펙큘러 항의 경우, D 는 미세면 분산( 분포 ) 함수이며 스펙큘러 피크( peak )의 모양을 결정합니다. F 는 프레넬( Fresnel ) 반사 계수이며, G 는 기하학적 감쇠 혹은 그림자 팩터( factor, 인자, 요소 )입니다.


θl 과 θvlv 의 입사각인데 노멀에 대해 상대적입니다. θh 는 노멀과 하프벡터 사이의 각도입니다. 그리고 θdl 과 하프벡터( 혹은 대칭적으로는 vh ) 사이의 각도 "차이"입니다( 역주 : 번역이긴 하지만 아래에 참고 이미지를 추가함. 그림 R1 ).


그림 R1: 각도 관계.


미세면 형식으로 명확하게 설명되고 있지 않은 물리적으로 타당성있는 모델들은 대부분 여전히 미세면 모델로 해석될 수 있습니다. 그것들은 분산 함수, 프레넬 팩터, 그리고 기하학적 그림자 팩터들을 고려할 수 있는 부가적인 요소들을 가지고 있기 때문입니다. 미세면 모델들과 다른 모델들과의 실제적인 차이는 그것들이 명시적으로 팩터를 포함하고 있느냐의 여부인데, 이 팩터는 미세면을 유도하는 과정에서 나오게 됩니다. 이 요소를 포함하고 있지 않은 모델들의 경우에는, D 요소와 F 요소를 뽑아낸 후에 그 모델에 를 곱해줌으로써 암묵적으로 그림자 팩터를 결정할 수 있습니다.


3 Visualizing measured BRDFs


3.1 The "MERL 100"


그림 1: MERL 100 BRDFs 의 이미지 슬라이스.


Matusik et al. ( 2003 ) [18] 은 100 개의 등방성 BRDF 재질 샘플들의 집합을 캡쳐했는데, 페인트, 나무, 금속, 섬유, 돌, 플라스틱, 그리고 다른 합성 재질들을 포함하는 광범위한 영역의 재질들을 커버합니다. 이 데이터 집합은 Mitsubishi Electric Research Laboratories 의 www.merl.com/brdf 에서 자유롭게 이용할 수 있으며, 보통 새로운 BRDF 모델들을 평가하기 위해 사용됩니다. 이 BRDF 들에 대한 슬라이스가 그림 1 에 나와 있습니다.


MERL 100 내의 각 BRDF 는 상대적으로 θh, θd, φd 축을 따라서 90 X 90 X 180 크기의 큐브에 조밀하게 샘플링되어 있습니다. 이것들은 θh 축을 제외하고는 1 도씩 증가하는 것과 같습니다. θh 축은 스펙큘러 피크 근처에 데이터 샘플들을 집중시키기 위해서 왜곡되었습니다. 그 측정값은 필요에 의해 필터링되거나 추정됩니다. 그래서 데이터에는 빈 부분( holes )이 존재하지 않습니다. 이는 데이터를 사용하기 쉽다는 점에서 훌륭합니다. 하지만 데이터가 얼마나 정확한지가 명확하지 않습니다. 특히 수평선 근처에서 그렇습니다. 이 때문에 어떤 연구자들은 피팅을 수행할 때 수평선 근처의 데이터를 버려 버립니다. 하지만 그것이 재질의 외형에 중요한 영향을 주는 것을 고려해 보면 여전히 유용합니다.


3.2 BRDF Explorer


그림 2: Disney BRDF Explorer.


MERL 측정 재질을 실험하고 분석적 모델과 비교하기 위해서, 우리는 그림 2 에 보이는 새로운 툴인 BRDF Explorer 를 개발했습니다. github.com/wdas/brdf 에서 오픈 소스로 이용하실 수 있습니다. 그것은 다음과 같은 기능들을 가지고 있습니다:


    • GLSL 로 작성된 여러개의 분석적 BRDF 를 로드할 수 있는 기능.
    • Ngan et al. [21] 에 의해 캡쳐된 비등방성 재질 샘플들을 포함하는 측정된 BRDF 들을 로드할 수 있는 기능.
    • 다중 데이터 플롯( 3d hemispherical view, polar plot, and various cartesian plots ).
    • Computed albedo plot( 즉, directional-hemispherical reflectance ).
    • 노출( exposure ) 제어를 할 수 있는 Image slice view.
    • Importance-sampled IBL 라이팅을 적용한 Lit object view.
    • Lit sphere view.
    • 파라메트릭( parametric ) 모델들을 위한 동적 UI 컨트롤.


이 툴은 측정된 재질들을 현존하는 분석적 모델들과 비교하는 것 뿐만 아니라 새로운 모델을 개발하는 데 있어서도 소중합니다. 놀랍게도 인터랙티브 BRDF 에디터로서 아티스트들에게도 유용하다는 것이 밝혀졌습니다. 이는 모델 파라미터들과 BRDF 공간에 대한 더 깊은 이해를 할 수 있게 해 줍니다.


3.3 Image slice


그림 3: red-plastic 과 specular-red-plastic 을 위한 BRDF 이미지 슬라이스.

"슬라이스 공간" 에 대한 도해도 함께 보여주고 있음.


측정된 재질을 가시화하는 가장 단순하고 직관적인 방법은 그것을 이미지 스택으로 단순하게 보여주는 것입니다. 그리고 우리는 그 데이터에 대한 직관력을 획득하는데 있어서 이것이 매우 강력한 도구임을 발견했습니다. 나중에 알게 된 것이지만, MERL 100 재질들 내에서 모든 흥미로운 특징들은 φd = 90 슬라이스에서 나타납니다. 두 재질 샘플들과 함께 이 공간에 대한 도해가 그림 3 에 나와 잇습니다. 다른 슬라이스들은 그 슬라이스를 대략적으로 그냥 왜곡시킨 버전이며 그림 4 에 나와 있습니다. 이 관측값은 Romerio ( 2008 ) [19] 와 Pacanowsi ( 2012 ) [24] 같은 최근의 연구에서 f(θhd) 형식에 대한 단순화된 등방성 BRDF 모델을 위한 기저로서 사용되어 왔습니다.


그림 4: 하프벡터 주변의 에 대한 방위각( azimuthal ) 회전인 φd 의 다양한 값에 대한 specular-red-plastic 의 슬라이스.

우상단 코너의 검은색 영역은 BRDF 도메인의 일부를 표현하는데, 여기에서는 l 벡터나 v 벡터가 수평선 아래에 존재합니다.


이미지 슬라이스에서, 왼쪽 가장자리는 스펙큘러 피크를 표현하고, 위쪽 가장자리는 프레넬 피크를 표현합니다. 바닥 가장자리를 따라서 빛 벡터와 뷰 벡터가 일치한다는 점에 주목하십시오; 그러므로 바닥 가장자리는 retroreflection 을 표현하게 됩니다. 우하단 코너는 특별히 grazing retroreflection 을 표현합니다. 디퓨즈 반사도는 전체 BRDF 공간에서 나타납니다. 하지만 이미지의 중간은 일반적으로 디퓨즈 반응에 대해 격리되어 있습니다.


그림 3 의 도해는 θl 이나 θv 에 대한 등치선( isoline )을 포함합니다. 많은 디퓨즈 효과들은 이 윤곽( contour )을 따르는 경향이 있습니다. 이 등치선은 φd 가 0 에 근접하면 쭉 펴진다는 점에 주목하십시오. 그리고 θd 슬라이스들을 비교하는 것은 재질 응답에서 어느 부분이 디퓨즈 반사 때문에 생기고 어느 부분이 스펙큘러 반사 때문에 생기는지에 대한 직관을 제공할 수 있습니다. 다른 힌트는 당연히 색상입니다; 가시적인 색조를 산출하는 디퓨즈 반사도는 subsurface scattering 과 absorption 때문에 발생합니다. 반면에 스펙큘러 반사도는 서피스로부터 오며 그것은 ( 서피스가 금속이 아닌 이상 ) 색조를 가지지 않습니다( 서피스가 금속이면 디퓨즈 성분이 존재하지 않습니다 ).


4 Observtions from MERL materials


4.1 Diffuse observations


그림 5: 디퓨즈 색상 변화를 보여주는 재질들.

위쪽 행: 렌더링된 구 상에서 점광원에 대한 반응( response )들;

아래쪽 행: BRDF 이미지 슬라이스들.



디퓨즈 반사도( reflectance )는 서피스로 굴절되고, 산란되고, 부분적으로 흡수되고, 다시 방출되는 빛을 표현합니다. 일부 빛이 흡수되는 것을 고려하면, 디퓨즈 반응은 서피스 색상을 사용해 빛나고, 비금속 재질의 빛나는 부분은 디퓨즈라고 여겨질 수 있습니다.


그림 6: MERL 100 재질의 retroreflective 반응.

왼쪽: 50 개의 부드러운 재질들 ( f(0) > 0.5 );

오른쪽: 50 개의 거친 재질들 ( f(0) < 0.5 ).

θh = 0 근처의 피크( peak )는 스펙큘러 피크이며,

θh = 90 근처의 피크( 혹은 드랍( drop ) )은 grazing retroreflection 을 표현함.


그림 7: red-plastic, specular-red-plastic, Lambertian diffuse 에 대한 점광원 반응.


램버시안( Lambertian ) 디퓨즈 모델은 굴절된 빛이 모든 방향성을 잃어 버릴 정도로 충분히 산란된다고 가정합니다. 그러므로 디퓨즈 반사도는 상수입니다. 그러나 그림 1그림 5 에서의 다양한 이미지 슬라이스에서는 소수의 재질들만이 램버시안 반응을 보이는 것을 볼 수 있습니다. [ 주의 : 램버트 쉐이더는 n·l 요소를 포함하지만, 그것은 라이팅 적분의 일부이지 BRDF 가 아닙니다 ]


그림 6 에서 보이는 것처럼, 많은 재질들은 grazing retroreflection 에서 드랍을 보여줍니다. 그리고 많은 다른 재질들은 피크를 보여 줍니다. 이는 이미지 슬라이스 내의 apparent tinting 때문에 발생하는 디퓨즈 현상인 것으로 보입니다. 특히 이것은 러프니스와 강하게 연관되어 있습니다 - 강한 스펙큘러 피크를 가지는 부드러운 서피스는 shadowed edge 를 가지고, 거친 서피스는 그림자 대신에 피크를 가지는 경향이 있습니다. 이 연광성은 retroreflective response curves 에서 볼 수 있으며, 또한 그림 7 의 렌더링된 구에서도 볼 수 있습니다.


부드러운 서피스를 위한 grazing shadow 는 프레넬 공식에 의해 예측됩니다: 지표각( grazing angle )에서는 서피스로부터 더 많은 에너지가 반사되며, 확산성있게 재방출되기 위한 서피스로 굴절되는 에너지는 적습니다.


Oren-Nayar 모델( 1995 )은 디퓨즈 모양을 평평하게 만드는 거친 디퓨즈 서피스들을 위한 retroreflective increase 를 예측합니다. 그러나 이 retroreflective peak 는 측정된 데이터만큼 강하지 않으며 측정된 거친 재질들은 일반적으로 디퓨즈를 평평하게 보이도록 하지 않습니다. Subsurface scattering 이론으로부터 유도된 Hanrahan-Krueger 모델 ( 1993 )도 디퓨즈 모양의 평탄화를 예측했지만, 그것은 가장자리에서 충분히 강한 피크를 가지지 않습니다. Oren-Nayar 와는 반대로 이 모델은 완벽하게 부드러운 서피스를 가정합니다. Oren-Nayar 모델과 Hanrahan-Krueger 모델이 그림 8 에서 비교되고 있습니다.


그림 8: Lambert, Oren-Nayar, Hanrahan-Krueger 디퓨즈 모델에 대한

BRDF 슬라이스 및 점광원 응답.


Retroreflective peak 외의 추가적인 diffuse variation 들을 그림 5 의 이미지 슬라이스들에서 찾아 볼 수 있습니다. θl / θv 등치선을 따르는 intensity variation 과 color variation 을 볼 수 있습니다. 이는 layered subsurface scattering 때문에 발생하는 것으로 보입니다. 그러나 심지어 layered subsurface scattering 모델이라 할지라도 일반적으로는 서피스가 부드럽고 강한 retroreflective peak 를 생성하지 않는다고 가정합니다.


4.2 Specular D observations


미세면 분산 함수 D(θh) 는 그림 6 에서 보이는 측정된 재질의 retroreflective responses 에서 관찰될 수 있습니다. 이 재질들은 서피스의 러프니스를 나타내는 것으로 보일 수 잇는 피크의 높이에 기반해 두 개의 그룹으로 분리됩니다. 강철( steel )로부터 나오는 가장 높은 피크는 400 이 넘었습니다. 피크가 평탄화된 다음의 커브의 나머지 부분들은 아마도 디퓨즈 반사도에서 기인한 것일 겁니다.


거의 대다수의 MERL 재질들은 테일( tail )을 가진 스펙큘러 로브를 가지고 있는데, 이는 전통적인 스펙큘러 모델들의 테일보다 훨씬 깁니다. 그 예는 그림 9 에 보이는 크롬( chrome ) 샘플입니다. 이 재질에 대한 스펙큘러 반응은 부드럽고 매우 연마된 서피스들을 위해서 일반적입니다. 그러한 서피스들은 몇 도 넓은 스펙큘러 피크와 몇 배 더 넓은 스펙큘러 테일을 가지고 있습니다. 이상하게도 전통적인 Beckmann, Blinn Phong, Gaussian 분산들은 거의 비슷한 너비를 가지고 있지만, 피크나 테일을 잘 표현하지 못합니다.


그림 9: MERL 크롬에 맞는 몇 개의 스펙큘러 분산들.

왼쪽: θh ( 각도 )에 대한 스펙큘러 피크의 로그스케일 그래프;

black = 크롬,

 red = GGX ( alpha = 0.006 ),

 green = Beckmann ( m = 0.013 ),

 blue = Blinn Phong ( n = 12000 ).

오른쪽 : 크롬, GGX, Beckmann 으로부터의 ( clipped ) 점광원 반응들. 


더 넓은 테일에 대한 필요성이 Walter et al. ( 2007 ) [33] 에 의해 소개된 GGX 분산을 위한 동기가 되었습니다; GGX 는 다른 분산들보다는 훨씬 더 긴 테일을 가지고 있지만, 여전히 크롬 샘플의 타는듯한 하이라이트를 캡쳐하는데는 실패합니다. 측정된 재질에 맞추기 위해서 테일 반응을 모델링하는 것의 중요성은 최근 연구인 Löw et al. ( 2012 ) [17] 과 Bagher et al. ( 2012 ) [4] 의 근간이 되기도 했습니다. 이 모델들은 둘 다 부가적인 파라미터를 추가해서 피크와는 별개로 테일을 제어합니다. 테일을 모델링하기 위한 또다른 옵션은 Ngan [21] 에 의해 제안되었던 것처럼 첫 번째 스펙큘러 피크에다가 두 번째의 넓은 스펙큘러 피크를 사용하는 것입니다.


4.3 Specular F observations


그림 10: θd 에 대한 MERL 100 재질들의 정규화된 프레넬 반응들의 그래프.

반응들은 1 도에서 4 도까지의 θh 에 대한 평균이며, 입사 반응은 빠져 있으며,

모양을 비교하기 위해 45 도에서 89 도 까지의 θd 상에서 정규화됨.

점선은 이론적인 프레넬 반응을 의미함.


프레넬 반사 팩터 F(θd) 는 빛 벡터와 뷰 벡터가 서로 멀어질 때 스펙큘러 반사가 증가함을 보여주며, 모든 부드러운 서피스들은 지표각에서 100% 의 스펙큘러 반사에 접근하게 될 것임을 예측합니다. 거친 표면의 경우 100% 의 스펙큘러 반사는 있을 수 없지만, 여전히 스펙큘러가 증가하는 방향으로 반사도가 변합니다.


MERL 재질들에 대한 프레넬 반응을 보여 주는 커브가 그림 10 에 나와 있습니다. 이 커브는 옵셋( offset )이며 그 반응들의 전체 모양을 비교하기 위해서 스케일링된 것입니다. 이는 그림 1 의 이미지 슬라이드들의 위쪽 가장자리에서도 볼 수 있습니다.


특히, 지표각 근처의 커브들의 대부분에서 나타나는 뾰쪽함은 프레넬 효과에 의해서 예상되는 것보다 더 큽니다. 사실 이러한 관측값은 높은 입사각에서 목격되는 "off-specular peak" 를 설명하기 위해 Torrance-Sparrow ( 1967 ) [30] 미세면 모델의 동기가 되었습니다. 미세면 모델의  팩터는 지표각에서 무한대로 갑니다. ( 모델에서든 실세계에서든 ) 이것이 문제가 되지 않는 이유는 지표각 반사도가 미세면의 그림자 효과에 의해 제거되기 때문입니다. G 팩터는 빛 벡터의 그림자를 표현하며, 대칭적으로 뷰 벡터에 대한 마스킹( masking )을 표현합니다. 그리고 지표각 반사도를 억제합니다. 그러나 G 팩터가 그림자를 표현함에도 불구하고, G 와  의 결합은 프레넬 효과를 실질적으로 증폭시킵니다. 


4.4 Specular G ( and albedo ) observations


그림 11: MERL 100 재질들의 알베도 그래프.

왼쪽: 50 개의 부드러운 재질.

오른쪽: 50 개의 거친 재질.


측정된 데이터로부터 G 를 추출하는 것은 어렵습니다. 왜냐하면 D 팩터와 F 팩터에 대한 정확한 평가와 그리고 디퓨즈로부터 스펙큘러를 격리할 것을 요구하기 때문입니다.그러나 G 의 효과는 지향성 알베도( directional albedo ) 상에서의 그것의 효과에서 간접적으로 볼 수 있습니다.


알베도라는 것은 전체 입사 에너지에 대한 전체 반사 에너지의 비율입니다. 넓은 개념에서 그것은 서피스의 색상을 대표하며 모든 파장에 대해 1 보다 작아야 합니다. 알베도는 태양과 같은 단일 방향으로부터 오는 빛으로 생각될 수도 있습니다. 이 경우에 알베도는 입사각에 의존하는 지향성 함수가 되며, 모든 각과 파장에 대해 1 보다 작아야 합니다.


대부분의 재질의 지향성 알베도는 그림 11 에서 보이듯이 처음 70 도 내에서는 상대적으로 평평합니다. 그리고 지표각에서는 서피스 러프니스와 강하게 연관을 맺습니다. 부드러운 재질들의 알베도는 75 도 근처에서 약간 증가했다가 90 도로 가면서 떨어집니다. 거친 재질들의 알베도는 보통 지표각 근처에서 급격하게 증가합니다. 특히, 전체적인 알베도 값들은 매우 낮으며, 일부 재질들만이 0.3 이 넘는 알베도 값을 가집니다.


The grazing retro-reflection exhibited by many rough materials also contributes significantly to this gain, as evidenced by a chromatic tint in the albedo.


그림 12: 몇 개의 스펙큘러 G 모델을 비교한 알베도 그래프.

모든 그래프는 같은 D ( GGX/TR ) 팩터와 F 팩터를 사용함.

왼쪽: 부드러운 서피스 ( α = 0.02 );

오른쪽: 거친 서피스 ( α = 0.5 ).

"no G" 모델은 G 팩터와 를 배제함.


모델링된 G 팩터들을 선정하기 위해서 그림 12 에서 알베도 반응을 보여주는데, 매우 부드러운 서피스와 매우 거친 서피스를 모두 다룹니다. 특히, G 와  를 전체적으로 누락시킴으로써 "No G" 모델이라고 불리는 것의 결과는 지표각에서 전체적으로 어두운 반응을 보여줍니다. 여기에서 중요한 점은 G 함수를 선택하는 것은 알베도에 중요한 영향을 미치며 결국에는 서피스 외형에 중요한 영향을 미친다는 것입니다.


몇몇 스펙큘러 모델들은 좀 더 이치에 맞는 알베도 반응 커브를 생성한다는 분명항 목적을 가지고 개발되었습니다[30, 29, 19, 20, 8, 9, 33, 10, 14]. 이들 중 일부의 경우, 에너지 균형을 유지하기 위해서 알베도를 완전히 평평하게 만들어 버립니다. 그림 11 의 MERL 데이터의 알베도 그래프에 기반해서 보면, 거의 대부분의 재질들이 grazing gain 을 보여주기는 하지만, 이것이 그렇게 비합리적이지는 않습니다. 심지어 grazing gain 의 일부는 non-specular effects 에서 기인합니다.


몇 가지 가정을 단순화하면, Smith [29] 의 기법을 따르는 미세면 분산 D 로부터 그림자 함수를 유도하는 것이 가능합니다. 이는 Walter ( 2007 ) 와 Schlick ( 1994 ) 에 의해서 사용된 접근법입니다. 그림 12 에서 볼 수 있듯이, Walter 의 Smith 모델의 지표각 반사도는 부드러운 서피스들의 경우에는 급격하게 증가합니다. 이러한 효과는 측정된 데이터에서는 볼 수 없는 것입니다. 더 거친 값들의 경우에, 그 반응은 좀 더 이치에 맞게 보입니다. Smith G 는 적은 개수의 함수들만을 위한 분석적 형식을 가지고 있으며, 보통은 tabular integration 이나 다른 근사계산이 사용된다는 점에 주의하시기 바랍니다.


Kurt et al. ( 2010 ) [14] 의 실증적 모델은 다른 접근법을 취하며, 자유 매개변수( free parameters )를 사용하는 데이터 피팅을 제안합니다. 그림 12 는 Kurt 모델을 보여주는데 α = 0.25 를 사용합니다; 다른 α 값은 더 넓은 범위의 알베도 반응을 산출할 수 있습니다. Of concern though is that the Kurt albedo diverges near grazing angles, significantly for rough distributions. 다른 옵션은 그냥 Walter 의 Smith G 유도 함수들 중 하나나 Schlick 의 더 단순한 함수를 사용하고, G 러프니스를 자유 매개변수로 분리하는 것입니다.


4.5 Fabric


MERL 데이터베이스 내의 많은 섬유 샘플들은 지표각에서 스펙큘러 색조를 보여 주며, 비슷한 러프니스를 가진 재질들보다 더 강력한 프레넬 피크를 가집니다. 이러한 예가 그림 13 에 나와 있습니다.


그림 13: 다양한 섬유 샘플들에 대한 BRDF 이미지 슬라이스들.


매우 복잡한 재질 응답을 가지고 있는 섬유들이 많이 있기는 하지만, MERL 섬유들은 상대적으로 모델링하기 편합니다.


4.6 Iridescence


그림 14: color-changing-paint1, 2, 3 에 대한 BRDF 이미지 슬라이스.

위쪽 행: 원래 데이터;

아래쪽 행: 1/max(r,g,b ) 를 픽셀당 적용함으로써 생성한 관련 채도 이미지.


그림 14 에서 세 개의 색상 변조 페인트는 φd 에 대해 최소한의 의존성을 가지는 (θhd) 상의 일관성있는 색상 조각들을 보여 줍니다. This appears to be a completely specular phenomenon given that there's very little reflectance away from the specular peak. 이는 θh 와 θd 에 대한 함수로서의 스펙큘라 색조( hue )를 작은 텍스쳐 맵과 곱합으로써 단순하게 모델링될 수 있습니다.


4.7 Data anomalies


MERL 데이터에서의 일부 변칙들이 그림 15 에 나와 있습니다.


    • 매우 빛나는 재질들 중 일부는, 특히 금속들은, 렌즈 플레어나 비등방성 서피스 스크래치를 연상시키는 대칭적인 하이라이트를 보여 줍니다.
    • 75 도 근처를 지나간 데이터는 외삽된( extrapolated ) 것처럼 보입니다( 역주 : 보외법 혹은 외삽법 : 그래프 등의 자료에서 나와 있지 않은 부분을 그 부분에 가까운 부분에서 이어 나가면서 추정하는 방법. 그 반대가 보간법 혹은 내삽법( interpolation )이라 함. 보간법은 그래프 자료 내의 빈 부분의 값을 그 주변의 값으로 평균내서 추정하는 방법 ).
    • 섬유의 지표각 반응은 보통 이상한 불연속성을 보이는데, 아마도 캡쳐를 하는 동안에 가장자리 근처에서 늘어나거나 접혔기 때문인 것으로 보입니다.
    • 일부 나무들은 θd 를 따라 변조 패턴( modulation pattern )을 보여주는데, 이는 나무결 때문인 것으로 보입니다.
    • Subsurface scattering 효과가 구워집니다.


그림 15: MERL 데이터에서의 변칙. 왼쪽에서 오른쪽으로: steel 의 점광원 반응은 대칭적 하이라이트를 보여줌.

color-changing-paint1 의 채도 그래프는 외삽( extrapolated ) 지표각 데이터를 보여 줌( 모든 재질에서 보임 ).

white-fabric 은 지표각 근처에서 주름을 연상시키는 그림자를 보여줌.

fruitwood-241 은 나무결을 연산시키는 스펙큘러 다양성을 보여줌( 왜곡된 θh 공간에 저장된 것으로 보임 ).


이것은 데이터나 캡쳐 과정에 있어서 심각한 것은 아닙니다. 하지만 전체를 피팅하거나 해석할 때는 주의해야할 필요가 있습니다. 이것은 잠재적으로 왜 어떤 머티리얼들은 피팅하기 어려운가 라는 이전의 질문에 대한 답변의 일부가 되기도 합니다.


5 Disney "principled" BRDF


5.1 Principles


새로운 물리 기반 반사도 모델을 개발하는 도중에, 아티스트들은 우리에게 물리적으로 올바른 쉐이딩 모델이 아니라 아티스트가 손댈 수 있는 쉐이딩 모델이 필요하다고 이야기했습니다.  이 때문에 엄격하게 물리적인 것 보다는 "원칙을 지키는" 모델을 개발하자는 것이 우리의 철학이 되었습니다.


우리의 모델을 개발할 때 따라야만 한다고 결정한 원칙들이 있습니다:


    • 물리적인 파라미터들보다는 직관적인 파라미터들을 사용해야만 합니다.
    • 가능하면 적은 개수의 파라미터들만을 사용해야 합니다.
    • Parameters should be zero to one over their plausible range.
    • Parameters should be allowed to be pushed beyond their plausible range where it make sense.
    • 파라미터들에 대한 모든 조합은 견고해야 하며 가능하면 이치에 맞아야 합니다.


우리는 각 파라미터를 추가할 때 철저하게 회의를 했습니다. 최종적으로 1 개의 색상 파라미터와 10 개의 스칼라 파라미터를 결정했으며, 이에 대해서는 다음 섹션에서 설명할 것입니다.


5.2 Parameters


    • baseColor - 서피스 색상, 보통 텍스쳐 맵들에 의해 공급됨.
    • subsurface - subsurface 근사계산을 사용해 디퓨즈의 모양을 제어.
    • metallic - 금속성( metallic-ness ) ( 0 = 유전체, 1 = 금속 ). 서로 다른 모델들 간에 선형적으로 블렌딩됨. 금속 모델은 디퓨즈 성분을 가지지 않으며, baseColor 와 동일한 입사 스펙큘러에 의해 색조가 정해짐.
    • specular - 입사 스펙큘러의 양. 이는 명시적인 굴절률 대신에 사용됨.
    • specularTint - 입사 스펙큘러의 색조를 baseColor 처럼 만들기 위해서 아티스트가 제어할 수 있도록 양보한 것. 입사각 스펙큘러는 여전히 무색( achromatic )임.
    • roughness - 서피스의 겨칠기. 디퓨즈 반응과 스펙큘러 반응을 모두 제어함.
    • anisotropic - 비등방성의 정도. 이는 스펙큘러 하이라이트의 형상비( aspect ratio )를 제어함. ( 0 = 등방성, 1 = 최대 비등방성 ).
    • sheen - 부가적인 지표각 성분. 주로 옷을 위해서 사용됨.
    • sheenTint - sheen 색조를 baseColor 처럼 만들기 위한 양.
    • clearcoat - 이차적인 특별한 목적을 가진 스펙큘러 로브.
    • clearcoatGloss - clearcoat 의 광택을 제어함( 0 = "새틴( satin, 광택이 곱고 보드라운 견직물 )"의 외형, 1 = "윤기 있는( gloss )" 외형 ).
각각의 파라미터들을 적용해서 렌더링된 예가 그림 16 에 나와 있습니다.

그림 16: BRDF 파라미터들의 효과의 예.

각 행에서 파라미터들은 0 에서 1 까지 다양하며, 다른 파라미터들은 상수값임.


5.3 Diffuse model details


어떤 모델들은 다음과 같은 디퓨즈 프레넬 팩터를 포함합니다:



여기에서 F(θ)는 반사를 위한 프레넬 팩터입니다.


[주의: 반사를 위한 프레넬 법칙에서 Helmholtz reciprocity( 역주 : light 와 eye 의 위치를 바꿔도 같은 식이 성립한다는 법칙 ) 를 보존하기 위해서는 두 번의 굴절을 고려해야 합니다. 하나는 서피스로 들어 가는 것이고 다른 하나는 서피스에서 나오는 것입니다. ]


측정된 데이터 관측에서 봤듯이, 우리의 예전 스튜디오에서 경험했던 것에 의하면, 램버트의 디퓨즈 모델은 보통 가장자리에서 너무 어두워집니다. 그리고 그것을 좀 더 물리적으로 이치에 맞도록 만들기 위해 프레넬 팩터를 추가하게 되면 더 어두워집니다.


우리의 관측에 기반해서, 우리는 디퓨즈 retroreflection 을 위한 새롭고 실증적인 모델을 개발했습니다. 이것은 부드러운 서피스들을 위한 디퓨즈 프레넬 그림자와 거친 서피스를 위해 추가된 하이라이트 사이의 전이입니다. 이 효과에 대한 가능한 설명은 다음과 같습니다. 거친 서피스의 경우에 빛은 미세면에 들어 갔다가 측면으로 나오는데, 이는 지표각에서의 반사를 증가시킵니다. 아무튼 우리 아티스트들이 그것을 좋아합니다. 그리고 그것은 우리의 ad-hoc( 임기응변 ) 모델에서 사용했던 것과 유사한 특징을 가집니다. 이제는 그것이 더욱 이치에 맞고 물리에 기반했다는 것을 제외한다면 말이죠.


우리 모델에서, 우리는 디퓨즈 프레넬 팩터를 위한 굴절률을 무시했습니다. 그리고 입사 디퓨즈가 손실되는 경우는 없다고 가정했습니다. 이는 직접적으로 입사 디퓨즈 색상을 지정할 수 있도록 해 줍니다. 우리는 Schlick Fresnel approximation 을 사용하며 0 이 아니라 러프니스로부터 결정된 특정 값을 지표각 retroreflection 반응에 사용할 수 있도록 수정했습니다.


우리의 기본 디퓨즈 모델은 다음과 같습니다:



여기에서



입니다.


이것은 디퓨즈 프레넬 그림자를 생성하는데, 부드러운 서피스의 경우에는 지표각에서의 입사 디퓨즈 반사도를 0.5 만큼 줄이고, 거친 서피스의 경우에는 그 반응을 0.25 만큼 증가시킵니다. 이것은 MERL 데이터와의 합리적인 매칭을 제공하는 것으로 보이며, 아티스트들도 이에 대해 만족했습니다. 우리 모델에서 다양한 러프니스를 값을 가지고 테스트한 BRDF 이미지 슬라이스가 그림 17 에 나와 있습니다.


그림 17: 다양한 러프니스 값들에 대한 우리 모델의 BRDF 이미지 슬라이스들.


subsurface 파라미터는 기본 디퓨즈 모양과 Hanrahan-Krueger subsurface BRDF [11] 에서 영감을 받은 것의 모양을 블렌딩합니다. 이는 멀리 있는 오브젝트들과 평균 산란 경로 길이( scattering path length )가 작은 오브젝트 상에서의 subsurface 의 외형을 제공하는데 유용합니다; 그러나 이것이 full subsurface transport 를 수행하는 것을 대체하는 것은 아닙니다. 왜냐하면 그것은 그림자나 서피스를 통해 빛을 퍼지게( bleed )하지 않기 때문입니다.


5.4 Specular D details


대중적인 모델 중에서 GGX 가 가장 긴 테일을 가지고 있습니다. 이 모델은 사실 Blinn ( 1977 ) [6] 이 경험적인 데이터와의 매칭을 위해서 자주 사용한 Trowbridge-Reitz ( 1975 ) [31] 분산과 동일합니다. 그러나 이 분산은 여전히 많은 재질들을 위해 충분히 긴 테일을 가지고 있지 못합니다.


Trowbridge 와 Reitz 는 가루 유리( 젖빛 유리, ground glass )에 대한 측정값에 대해 자신들의 분산 함수와 몇 가지 다른 분산 함수들을 비교했습니다. 다른 분산들 중에 Berry ( 1923 ) 의 분산은 비슷한 형식을 가지고 있었지만, 지수( exponent )로 2 대신에 1 을 사용했으며 더 긴 테일을 산출했습니다. 이는 지수 변수를 사용하는 더 일반적인 분산을 제안하며, 그것은 dubbed Generalized-Trowbridge-Reitz 혹은 GTR 입니다:



이 개별 분산들에서, c 는 스케일링 상수이며, α 는 roughness 파라미터인데 값의 범위는 0 에서 1 입니다; α = 0 은 완전히 부드러운 분산( 즉, θh = 0 에서의 델타 함수 )을 생성하며 α = 1 은 완전히 거칠거나 고른 분산을 생성합니다.


그림 18: 다양한 γ 변수를 위한

 θh ( 역주 : 그림에서는 h 가 아니라 d 인데 왜인지 모르겠음 ) 에 대한 GTR 분산 커브.


Preliminary fitting results suggest typical value of γ between 1 and 2. 흥미롭게도 γ = 3/2 인 GTR 은 θ = 2θh 를 위한 Henyey-Greenstein 페이즈 함수와 동일합니다; θh 를 두배로 만들면 반구로부터의 분산을 구로부터의 분산으로 확장하는 것처럼 보일 수 있습니다.


이치에 맞는 미세면 분산은 반드시 정규화되어야만( normalized ) 합니다. 그리고 효율적인 렌더링을 위해 중요도 샘플링을 지원해야만 합니다. 둘다 분산이 반구상에서 적분될 것을 요구합니다. 운이 좋게도 이 함수는 simple closed-form integral 을 가집니다. 정규화 함수와 중요도 샘플링 함수, 그리고 효율적인 비등방성 형식을 유도하는 것은 부록 B 에 나와 있습니다.


우리의 BRDF 의 경우에, 우리는 두 개의 고정된 스펙큘러 로브를 사용하는데, 두 개다 GTR 모델을 사용합니다. 주 로브는 γ = 2 를 사용하며, 보조 로브는 γ = 1 을 사용합니다. 주 로브는 기반 재질을 표현하며 비등방성이거나 금속성일 수 있습니다. 보조 로브는 기반 재질 위의 clearcoat layer 를 표현하므로 항상 등방성이며 비금속입니다.


 roughness 의 경우에, 우리는 α 를 roughness2 로 매핑( mapping )하는 것이 좀 더 개념적으로 선형적인 변화를 산출한다는 것을 발견했습니다. 이 리매핑( remapping )이 없다면, 윤이 나는 재질들을 위해 요구되는 값들이 매우 작고 비직관적이 됩니다. 또한 거친 재질과 부드러운 재질을 보간하는 것이 항상 거친 결과를 산출하게 됩니다. 최종 보간은 그림 16 과 19 에 나와 있습니다.


그림 19: 매우 다른 두 개의 재질을 보간함. 윤이 나는 금색 금속과 파란 고무.


명시적인 굴절률( index of refraction, ior ) 대신에 사용하는 specular 파라미터는 입사 스펙큘러의 양을 결정합니다. 이 파라미터의 정규화된 범위는 입사 스펙큘러 범위인 [0.0, 0.08] 로 리매핑됩니다. 이것은 [1.0, 1.8] 범위의 ior 값과 연관되어 있는데, 이는 대부분의 재질을 포괄합니다. 특히, 파라미터 범위의 중간값은 1.5 인 ior 과 연관되며, 매우 일반적인 값이어서 우리는 이것을 기본값으로 사용합니다( 역주 : specular = 0.5 를 지정하면 ior = 1.5 가 된다는 의미). 이 specular 파라미터는 더 큰 ior 에 도달하기 위해서 범위를 넘어설 수 있지만, 주의깊게 사용해야만 합니다. 실세계의 반사도 값들이 너무 비직관적으로 낮습니다. 그래서 아티스트들이 납득할 수 있는 재질을 만드는 데 도움을 주기 위해서 이러한 파라미터 매핑을 사용합니다.


clearcoat layer 의 경우에, 우리는 ior 을 1.5 로 고정합니다. 이는 폴리우레탄( polyurethane )을 연상시키는데, 아티스트들은 clearcoat 파라미터를 사용해 레이어의 전체 강도를 스케일링할 수 있습니다. 정규화된 파라미터 범위는 [0, 0.25]의 전체 스케일링과 연관됩니다. 이 레이어는 큰 비주얼 임팩트를 가지고 있음에도 불구하고, 상대적으로 적은 양의 에너지를 표현합니다. 그래서 우리는 기반 레이어로부터 어떠한 에너지도 빼지 않습니다( 역주: 에너지 보존 법칙을 지키지 않는다는 의미인듯 ). 이 파라미터가 0 으로 설정되면 clearcoat layer 는 실질적으로 비활성화되며 아무런 비용도 소비하지 않습니다.


5.5 Specular F details


Schlick Fresnel approximation [28] 을 사용하는 것은 우리 목적에 충분히 부합하며, 완전한 프레넬 공식을 사용하는 것보다는 약간 더 단순합니다; 근사계산으로 인한 에러는 다른 팩터들 때문에 발생하는 에러에 비하면 거의 없는 거나 마찬가지입니다.



상수 F0 는 수직 입사시의 스펙큘러 반사도를 표현하며, 이는 유전체( dielectircs )를 위해서는 무채색( achromatic )이며 금속을 위해서는 유채색( chromatic, 즉 색조가 있는 )입니다. 실제 값은 굴절률에 의존하게 됩니다. 스펙큘러 반사는 미세면으로부터 기 때문에 F 는 빛 벡터와 미세면 노멀( 즉, 하프벡터 ) 사이의 각인 θd 에 의존하지 서피스 노멀과의 입사각에 의존하지는 않는다는 것에 주의하십시오.


프레넬 함수는 입사 스펙큘러 반사도와 지표각에서의 unity 를 ( 비선형적으로 ) 보간하는 것처럼 보일 수 있습니다. 그러한 반응은 모든 빛이 반사되는 지표각 입사에서는 무채색이 된다는 것에 주의하십시오.


5.6 Specular G details


우리 모델의 경우에, 우리는 하이브리드 접근법을 택했습니다. Smith 의 그림자 팩터가 주 스펙큘러를 위해서 사용될 수 있다는 점을 고려해 우리는 Walter 가 GGX 를 위해 유도한 G 를 사용합니다. 그러나 반짝거리는 서피스에서의 극단적인 gain 을 줄이기 위해서 roughness 를 리매핑했습니다. G 를 계산하기 위한 목적으로 [0, 1] 범위를 가지는 원래의 roughness 를 선형적으로 스케일링해서 [0.5, 1] 범위로 줄였습니다. 주의: 우리는 앞에서 설명했던 것과 같이 roughness 를 제곱하기 전에 이것을 수행합니다. 그렇기 때문에 최종 αg 값은 ( 0.5 + roughness/2)2 입니다.


이 리매핑은, 측정된 데이터와 우리의 데이터를 비교했을 때, 작은 러프니스 값을 가지는 경우에 스펙큘러가 "너무 세다"라는 피드백을 아티스트들로부터 받았기 때문에 수행되었습니다. 이는 러프니스에 따라서 다양한 결과를 내는 G 함수는 적어도 부분적으로는 물리에 기반한 것이며 이치에 맞는 것처럼 보입니다. clearcoat 스펙큘러의 경우에, 우리는 Smith G 유도를 가지지 않습니다. 그냥 GGX G 를 사용하는데 러프니스를 0.25 로 고정하게 됩니다. 이것이 가장 이치에 맞고 아티스트에게 만족감을 준다는 것을 발견했기 때문입니다.


5.7 Layering vs parameter blending


새로운 모델을 정착시키고 나서, 우리는 그것을 우리 쉐이더에 통합할 방법에 대해서 결정할 필요를 느꼈습니다. 첫 번째 질문은 공간적( spatial )으로 다양할 필요가 있는 파라미터들은 무엇인가였고, 그것에 대한 답은 전부다 였습니다; 만약 아티스트가 단순하게 서피스 상에 다양한 재질을 배치하고 그것들 사이에서 마스킹을 하는 것을 원했다면, 우리는 파라미터들을 전부 블렌딩할 필요가 있었을 것입니다. 또한 그 마스크는 필터링될 것이고, 마스크의 블러링된 가장자리들에서의 재질 반응은 반드시 이치에 맞아야 합니다.


모든 파라미터들을 정규화하고 개념적으로는 선형적이어야 한다는 우리의 설계 원칙의 이점은 재질들이 일반적으로 매우 직관적인 방식으로 보간된다는 것입니다. 이러한 예가 그림 19 에 나와 있습니다.


우리가 보간을 견고하게( robustly ) 수행할 수 있다는 것을 깨닫고 난 후에, 우리는 마스크를 통해 공간적 다양성을 획득할 수 있을지 여부가 궁금해졌습니다. 그 아이디어는 아티스트가 재질 프리셋의 리스트를 선택하고 나서 단순하게 텍스쳐 마스크를 사용해 그것들을 블렌딩하는 것입니다. 이는 현상적으로 성공적임이 밝혀졌으며, 작업과정을 매우 단순화시켜 주었으며, 재질의 일관성을 증진시켜주고, 쉐이더 평가( 역주: 실행의 관점에서 평가인듯. 성능과 관련한 이슈로 보임 )를 극단적으로 효율적으로 만들어 주었습니다. 우리의 쉐이더 UI 는 그림 20 에 나와 있습니다.


그림 20: 재질 레이어를 보여주는 우리 쉐이더 에디터에 대한 스크린 샷.

마스크 표현식 내의 변수들은 공간적으로 다양한 쉐이더 모듈( 일반적으로는 텍스쳐 맵 )을 참조합니다.


6 Production experience on Wreck-It Ralph


우리는 "원칙을 지킨 레이어들"의 쉐이더를 Wreck-It Ralph( 한국개봉명: 주먹왕 랄프 ) 에 적용했으며, 가상적으로는 헤어를 제외한 모든 재질들에 그 쉐이더를 사용했습니다( 헤어는 여전히 Tangled 를 위해 개발된 모델을 사용합니다 ). 다양한 재질들이 그림 21 에 나와 있습니다. 바닥, 카펫, 그리고 다른 입자로된 재질에서 반짝거리는 효과를 생성하기 위해, 스펙큘러 성분에 개별( seperate ) 노멀들이 사용되었다는 것에 주목하십시오.


새로운 재질 모델을 적용하면서, 새로운 sampled area light 와 멋지게 보이는 이치에 맞는 재질들을 만드는데 있어 중요한 IBL 도 소개되었습니다; 만약 여러분이 이치에 맞는 반짝이는 재질을 만들었는데 점광원을 거기에 비추게 된다면, 여러분의 하이라이트는 매우 작은 점으로 보이게 될 것입니다. 그러면 라이트 작업자들은 에어리어 광원에 대한 응답인 것처럼 속이기 위해서 러프니스 값을 올리게 될 것입니다. 그리고 이는 전체적인 물리 기반 쉐이딩 패러다임을 해치게 됩니다. 좋은 소식은 라이트 작업자들이 자신들의 ( 역주 : 빛에 대한 ) 지배력을 높이기 위해서 에어리어 광원과 IBL 을 사용하는 것을 좋아한다는 것입니다. It's also worth nothing that the new material model was both a motivator and an enabler in the switch to sampled lights in that with our previous ad-hoc shading model it world have been to expensive for each reflectance module to perform its own sampled light integration.


Wreck-It Ralph 에서의 성공에 힘입어, 우리의 다음 쇼에서는 새로운 쉐이딩 모델을 수정하지 않고 사용할 계획이며, 이미 사용하고 있기도 합니다.


그림 21: Wreck-It Ralph 의 프로덕션 스틸.


6.1 Look development


단일 BRDF 를 모든 곳에 적용하는 것의 이점은 그것이 재질 에디터의 개발을 단순화해 준다는 것입니다. 우리 "Material Designer" 는 노멀, 오브젝트 ID, 재질 레이어 마스크를 포함하는 g-buffer 를 렌더링합니다. 이러한 채널들을 사용해서 image-based relighting 을 빠르게 수행하면서 모든 BRDF 파라미터를 실시간에( interactively ) 편집할 수 있습니다. 아티스트들은 실시간에 IBL 을 회전시켜서 프로덕션 모델의 전체 문맥에서 모든 파라미터들과 레이어들의 전체 효과를 확인할 수 있습니다.


통합된 모델을 사용하는 것의 다른 이점은 그것이 Material Designer 로부터 저장된 프리셋 집합들로 구성된 매우 단순한 재질 라이브러리를 만들 수 있도록 해 준다는 것입니다. 재질을 라이브러리에서 가져올 수 있으며, 쉐이더를 부가적인 레이어로 추가하고, 마스크를 사용해서 블렌딩할 수 있습니다. 그러므로 Photoshop 의 레이어 스택처럼 레이어를 빠르게 만들 수 있습니다.


재질을 완전하게 평가하기 위해서는 모든 각도에서 빛을 비춰보는 것이 중요합니다. 새로운 재질 모델로 전환하는 것의 일부로서, 우리는 다양한 IBL 을 사용하는 모든 요소들을 검증하기 시작했으며, 모든 턴테이블( turntable )들은 요소 회전과 라이팅 회전을 모두 포함합니다( 역주 : 3D 뷰어에서 빛이나 모델을 돌려볼 수 있음을 의미하는 듯 ).


새로운 쉐이더 시스템을 적용하고 나서 look development 의 생산성이 매우 향상되었으며, 새로운 아티스트들을 교육하는 시간이 훨씬 단축되었고, 더 일관성있게 고품질의 결과를 산출할 수 있게 되었습니다. Notably, most of our look development were able to roll off of the show early due to the lack of the need for material re-do's in lighting. 이는 전례없는 일이었습니다.


6.2 Lighting


앞에서 언급했듯이, 새로운 재질 모델을 사용해서 작업을 하기 위해서는 라이팅에 대한 다양한 접근이 필요했습니다. 이는 큰 학습 곡선을 필요로 했습니다. 또한 물리 기반 모델에 대해 전체적인 타협을 하지 않고서 라이팅에 대한 아티스트의 제어를 추가하는 것은 도전이었습니다.


라이팅에 있어 가장 큰 변화는 IBL 을 로컬 필라이트( local fill light )로 사용하는 것이었습니다. Most IBLs are used with light linking to specific elements in the shot and many have distance cutoffs. 이것들은 재질의 특성들을 대부분 무시해 버리는 이전의 환경맵들에 비하면 클 발전을 포함했습니다. Area lights were also a well received addition.


라이트 작업자들( lighters )에게 있어 가장 큰 도전은 사실적인 빛 인텐서티( intensity ) 값과 폴오프( falloff )를 사용해서 작업하는 것이었습니다. 결국 우리는 비물리 폴오프 컨트롤을 개발했습니다. 주어진 거리에서 원하는 노출을 획득하기 위해서 자동으로 인텐서티를 조절하면서 광원을 가상적으로 더 멀리 떨어져 있게 만드는 것입니다. 하지만 빛의 인텐서티와 폴오프를 제어하는 것은 라이트 작업자에게는 도전으로 남아 있습니다.


라이팅과 관련한 또 다른 도전은 스펙큘러 하이라이트가 이제 톤 매핑( tone mapping )을 요구하게 된다는 사실입니다. 빛나는 재질상의 하이라이트는 수백개나 될 수 있으며, 값을 단순하게 클리핑( clip )하는 것은 차갑게( harsh ) 보일 수 있으며, 다양한 위치에서 각 색상 채널이 클리핑되므로 밴딩이 나타날 수 있으며, 중심부( core )는 항상 하얗게 나오도록 강제될 수 이습니다. 우리는 새로운 글로벌 톤 매핑 연ㅅ나자를 개발했는데, 이는 대부분의 가시 영역을 위한 값을 보존하고 색상과 대비를 유지하면서 최대값( top end )를 끌어 내립니다. 우리는 기본 설정을 가지고 있는데, 이것은 대부분의 경우에 합리적으로 동작하지만 color grading 을 하는 샷( shot )에서는 최종값을 조절합니다.


In the end though, the materials behave predictably which is a huge benefit to lighters and gives them a starting place that is physically plausible.


6.3 Future work


현재 가장 큰 이슈는 직관적으로 제어할 수 있는 subsurface 모델이 부족하다는 것입니다. 이것의 핵심 관점은 BRDF 통합입니다. 이상적으로 보면 BRDF 와 subsurface 모델 사이의 일치점은 존재할 것입니다. 먼 거리의 오브젝트들을 위해서 BRDF 가 사용될 수 있으며 동일한 결과를 산출하게 됩니다. 또한 전체적인 노출을 변경하지 않은 상태에서 subsurface 효과를 오브젝트에 추가하기 위해 아티스트들은 mean-free path 를 0 에서부터 증가시켜야 합니다 - 디퓨즈의 모양만 변해야 합니다( 그리고 diffusion 이 가능하다면 빛은 그림자로 스며들어야( bleed ) 합니다 ).


우리는 옷감의 반사도를 모델링하고자 합니다. 우리는 특별히 복잡한 옷감 모델을 위한 반사도 데이터를 캡쳐함으로써 옷감을 렌더링하기 위한 특별한 쉐이더를 추가할 수 있다는 것을 알고 있습니다. 하지만 다양한 범위의 옷감 재질을 직접적으로 모델링하는 방법에 대해서 연구하고자 합니다. 현재로서는 이 필요성을 충족시켜 줄 수 있는 보여줄 만한 것이 없습니다.


또한 우리 모델에 무지개빛( iridescence )을 추가하라는 요청을 받은 상태입니다. 이전에 언급했던 것처럼 이는 스펙큘러 색상 변조를 추가하는 것만큼 단순합니다.


Acnowledgements


먼저 무엇보다, Chunk Tappan 에게 감사드리고 싶습니다. 그는 새롭게 재질을 파라미터화하기 위해 공동작업을 했으며, 새로운 look development 파이프라인의 선두에 있었습니다. 또한 Christian Eisenacher 에게도 감사드립니다. 그는 Material Designer 작업을 했습니다. Disney BRDF Viewer 작업을 한 Greg Nichols 와 Jared Johnson 에게도 감사드립니다. 그리고 인내심을 가지고 지원해 준 Ralph Look 과 Lighting 팀에게도 감사드리고 싶습니다. 마지막으로 Stephen Hill, Naty Hoffman, 그리고 Pete Shirley 에게 감사드리고 싶습니다. 그들은 소중한 입력( input, 입력 데이터? )을 제공했으며, 특히 Stephen 은 부록 B 의 식 ( 14 ) 에서 projected half-vector 공식을 제안해 주었습니다.


References


[1] Michael Ashikhmin. Distribution-based brdfs. Technical report, 2007.


[2] Michael Ashikhmin, Simon Premoze, and Peter Shirley. A Microfacet-Based BRDF generator. In Sheila Homeyer, editor, Proceedings of the Computer Graphics Conference 2000 (SIGGRAPH-00), pages 65{74, New York, July 23{28 2000. ACMPress.


[3] Michael Ashikhmin and Peter Shirley. An anisotropic Phong BRDF model. Journal of Graphics Tools: JGT, 5(2):25{32, 2000.


[4] M. M. Bagher, C. Soler, and N. Holzschuch. Accurate tting of measured reflectances using a shifted gamma micro-facet distribution. Computer Graphics Forum, 31(4):1509{1518, 2012.


[5] P. Beckmann and A. Spizzichino. The scattering of electromagnetic waves from rough surfaces. MacMillan, 1963.


[6] James F. Blinn. Models of light reflection for computer synthesized pictures. volume 11, pages 192{198, July 1977.


[7] R. L. Cook and K. E. Torrance. A reflectance model for computer graphics. Computer Graphics, 15(3):307{316, 1981.


[8] Arne Dur. An improved normalization for the Ward reflectance model. Journal of graphics, gpu, and game tools, 11(1):51{59, 2006.


[9] Dave Edwards, Solomon Boulos, Jared Johnson, Peter Shirley, Michael Ashikhmin, Michael Stark, and Chris Wyman. The halfway vector disk for brdf modeling. ACM Trans. Graph., 25(1):1{18, January 2006.


[10] David Geisler-Moroder and Arne Dur. A new Ward BRDF model with bounded albedo. Comput. Graph. Forum, 29(4):1391{1398, 2010.


[11] Pat Hanrahan and Wolfgang Krueger. Reflection from layered surfaces due to subsurface scattering. In Proceedings of the 20th annual conference on Computer graphics and interactive techniques, SIGGRAPH '93, pages 165{174, New York, NY, USA, 1993. ACM.


[12] Xiao D. He, Kenneth E. Torrance, Francois X. Sillion, and Donald P. Greenberg. A Comprehensive Physical Model for Light Re

ection. In Computer Graphics (ACM SIGGRAPH '91 Proceedings), volume 25, pages 175{186, July 1991.


[13] Csaba Kelemen, Laszlo Szirmay-Kalos, and Laszlo Szirmay-kalos. A microfacet based coupled specular-matte brdf model with importance sampling. Eurographics Short Presentations, 2001.


[14] Murat Kurt, Laszlo Szirmay-Kalos, and Jaroslav Krivanek. An anisotropic brdf model for fitting and monte carlo rendering. SIGGRAPH Comput. Graph., 44(1):3:1{3:15, February 2010.


[15] Eric P. Lafortune, Sing-Choong Foo, Kenneth E. Torrance, and Donald P. Greenberg. Nonlinear approximation of reflectance functions. In Computer Graphics (ACM SIGGRAPH '97 Proceedings), volume 31, pages 117{126, 1997.


[16] Robert R. Lewis. Making Shaders More Physically Plausible. In Fourth Eurographics Workshop on Rendering, number Series EG 93 RW, pages 47{62, Paris, France, June 1993.


[17] Joakim Low, Joel Kronander, Anders Ynnerman, and Jonas Unger. Brdf models for accurate and efficient rendering of glossy surfaces. ACM Trans. Graph., 31(1):9:1{9:14, February 2012.


[18] Wojciech Matusik, Hanspeter Pster, Matt Brand, and Leonard McMillan. A data-driven reflectance model. ACM Transactions on Graphics, 22(3):759{769, July 2003.


[19] Laszlo Neumann, Attila Neumann, and Laszlo Szirmay-Kalos. Compact metallic reflectance models. Computer Graphics Forum, 18(3):161{172, September 1999. ISSN 1067-7055.


[20] Laszlo Neumann, Attila Neumann, and Laszlo Szirmay-Kalos. Reflectance models by pumping up the albedo function. In Machine Graphics and Vision, pages 3{18, 1999.


[21] Addy Ngan, Fredo Durand, and Wojciech Matusik. Experimental analysis of BRDF models. In Kavita Bala and Philip Dutre, editors, Eurographics Symposium on Rendering, pages 117{126, Konstanz, Germany, 2005. Eurographics Association.


[22] Ko Nishino and Stephen Lombardi. Directional statistics-based reflectance model for isotropic bidirectional reflectance distribution functions. J. Opt. Soc. Am. A, 28(1):8{18, Jan 2011.


[23] Michael Oren and Shree K. Nayar. Generalization of lambert's reflectance model. In SIGGRAPH, pages 239{246. ACM, 1994.


[24] Romain Pacanowski, Oliver Salazar Celis, Christophe Schlick, Xavier Granier, Pierre Poulin, and Annie Cuyt. Rational brdf. IEEE Transactions on Visualization and Computer Graphics, 99(PrePrints), 2012.


[25] Bui-T. Phong. Illumination for computer generated pictures. Communications of the ACM, 18(6):311{317, June 1975.


[26] Fabiano Romeiro, Yuriy Vasilyev, and Todd Zickler. Passive reflectometry. In Proceedings of the 10th European Conference on Computer Vision: Part IV, ECCV '08, pages 859{872, Berlin, Heidelberg, 2008. Springer-Verlag.


[27] Iman Sadeghi, Heather Pritchett, Henrik Wann Jensen, and Rasmus Tamstorf. An artist friendly hair shading system. In ACM SIGGRAPH 2010 papers, SIGGRAPH '10, pages 56:1{56:10, New York, NY, USA, 2010. ACM.


[28] Christophe Schlick. An Inexpensive BRDF Model for Physically-Based Rendering. Computer Graphics Forum, 13(3):233{246, 1994.


[29] B. Smith. Geometrical shadowing of a random rough surface. IEEE Trans. Ant. and Propagation, AP-15(5):668{671, September 1967.


[30] K. Torrance and E. Sparrow. Theory for o-specular reflection from roughened surfaces. J. Optical Soc. America, 57:1105{1114, 1967.


[31] S. Trowbridge and K. P. Reitz. Average irregularity representation of a rough ray reflection. Journal of the Optical Society of America, 65(5):531{536, May 1975.


[32] Bruce Walter. Notes on the Ward BRDF. Technical Report PCG-05-06, Cornell Program of Computer Graphics, 2005.


[33] Bruce Walter, Stephen R. Marschner, Hongsong Li, and Kenneth E. Torrance. Microfacet models for refraction through rough surfaces. In Proceedings of the Eurographics Symposium on Rendering, 2007.


[34] Gregory J. Ward. Measuring and modeling anisotropic reflection. In Edwin E. Catmull, editor, Computer Graphics (SIGGRAPH '92 Proceedings), volume 26, pages 265{272, July 1992.


[35] L. B. Wol, S. K. Nayar, and M. Oren. Improved diuse reflection models for computer vision. International Journal of Computer Vision, 30(1):55{71, October 1998.


Appendix A: Selected of BRDF models used in graphics


생략 : 원문 참조.


Appendix B: GTR Microfacet Distribution


생략 : 원문 참조.


원문 : http://graphics.pixar.com/library/ReflectanceModel/paper.pdf

주의 : 번역이 개판이므로 이상하면 원문을 참조하십시오.

주의 : 허락받고 번역한 것이 아니므로 언제든 내려갈 수 있습니다.


 

A Reflectance Model for Computer Graphics

 

ROBERT L. COOK

Lucasfilm Ltd.

and

KENNETH E. TORRANCE

Cornell University


 

컴퓨터 합성 이미지를 위한 새로운 반사도 모델이 제시됩니다. 이 모델은 같은 장면 내의 다양한 재질과 광원의 상대적인 밝기를 고려합니다. 이는 입사각과 함께 반사도가 변경될 때마다 발생하는 반사되는 빛의 지향성 분포( directional distribution )와 색상 변화에 대해 기술합니다. 특정한 실제 재질로 구성된 오브젝트로부터 반사광의 스펙트럼 에너지 분포( spectral energy distribution )를 획득하기 위한 기법이 제시되며, 스펙트럼 에너지 분포와 관련된 색상을 정확하게 복제하기 위한 방법이 논의됩니다. 이 모델은 금속과 플라스틱의 시뮬레이션에 적용됩니다.

 

Categories and Subject Descriptors: I.3.7 [Computer Graphics]: Three-Dimensional Graphics and Realism--color, shading, shadowing, and texture

 

General Terms: Algorithms

 

Additional Key Words and Phrases: image synthesis, relfectance

 


 

INTRODUCTION

 

컴퓨터 그래픽스에서 사실적인 이미지를 렌더링하는 것은 오브젝트가 빛을 반사하는 방법에 대한 모델을 요구합니다. 반사도( reflectance ) 모델은 반사되는 빛의 색상 및 공간적 분포를 설명해야만 합니다. 이 모델은 surface geometry representation 과 hidden surface algorithm 과 같은 이미지 합성의 다른 관점들과는 독립적입니다.

 

대부분의 실제 서피스들은 이상적인 스펙큘러( 거울같은 ) 반사체나 이상적인 디퓨즈( 램버시안, Lambertian ) 반사체가 아닙니다. Phong [14, 15 ] 은 컴퓨터 그래픽스를 위한 반사도 모델을 제안했는데, 이는 스펙큘러 반사와 디퓨즈 반사에 대한 선형 결합( linear combination )입니다. 스펙큘러 요소는 power 로 증가하는 코사인( cosine ) 함수를 사용함으로써 스펙큘러 방향 주변에서 퍼집니다. 그 다음에 Blinn [5, 6] 은 [23] 의 스펙큘러 반사 모델과 유사한 아이디어를 사용했는데, 이는 서피스 노멀( normal )에 대해 상대적인 지표각( grazing angle )에서 빛이 입사할 때 발생하는 off-specular peaks 를 고려합니다( 역주 : off-specular peak 는 입사각과 반사각이 다른 specular 를 의미합니다. 번역이기는 하지만 원문에는 없는 그림을 추가합니다. 그림 R1 참조 ). Witted [24] 는 완전히 부드러운 서피스( surface )로부터의 이상적인 스펙큘러 반사를 위한 항을 추가함으로써 이 모델들을 확장했습니다( 역주 : Witted Ray Tracing 으로 검색 ). 이러한 모든 모델들은 geometrical optics( ray theory )에 기반합니다.

 

그림 R1: Off-specular reflection 의 예: 지표각에 가까워질 수록 specular 의 방향( M ) 이 반사각과 달라지는 모습을 보여줌.

 

앞에서 말한 모델들은 반사를 세 가지 요소로 구성된 것으로 취급합니다: 앰비언트( ambient ), 디퓨즈( diffuse ), 스펙큘러( specular ). 앰비언트 요소는 환경으로부터 고르게 입사해서 서피스에 의해 모든 방향으로 동일하게 반사한다고 가정하는 빛을 표현합니다. 디퓨즈 성분과 스펙큘러 성분은 특정 광원으로부터 오는 빛과 관련이 있습니다. 디퓨트 성분은 모든 방향으로 동일하게 산란하는 빛을 표현합니다. 스펙큘러 성분은 하이라이트( highlight )를 표현하는데, 빛이 미러 방향 주변에 집중되어 있습니다. 스펙큘러 요소는 광원의 색상으로 간주되었습니다; Fresnel 공식은 각도 별로 다양해지는 스펙큘러 인텐서티( intensity )를 획득하기 위해서 사용되었지만, 색상에 대한 것이 아닙니다. 앰비언트 요소와 디퓨즈 요소는 재질의 색상으로 간주되었습니다. 최종 모델은 즉정 유형의 재질에 대해 사실적인 모양을 보여주는 이미지를 산출합니다.

 

이 논문은 이전 모델들보다 더 일반적인 거친 서피스를 위한 반사도 모델을 제시합니다. 이는 geometrical optics 에 기반하며, 다양한 범위의 재질들, 서피스 조건들, 라이팅 상황들에 적용할 수 있습니다. 이 모델의 중심은 반사율에 대한 정의인데, 이는 광원의 인텐서티와 사이즈에 대한 오브젝트의 밝기와 관련이 있습니다. 이 모델은 반사되는 빛에 대한 지향성 분포( directional distribution )와 스펙트럼 조합( spectral composition )을 예측합니다. 스펙트럼 에너지 분포로부터의 RGB 값을 계산하는 방법에 대해 기술합니다. 새로운 반사도 모델은 금속과 플라스틱의 시뮬레이션에 적용되는데, 이전의 모델들을 사용해서 렌더링된 이미지들이 종종 플라스틱처럼 보이는 이유에 대해서 설명하고, 이 플라스틱 외형을 피할 수 있는 방법에 대해 설명합니다.

 

THE REFLECTANCE MODEL

 

광원, 서피스, 관찰자가 주어질 때, 반사도 모델은 관찰자에게 도달하는 반사광의 인텐서티와 스펙트럼 조합에 대해 기술합니다. 반사광의 인텐서티는 광원의 인텐서티와 사이즈, 그리고 재질의 반사 능력과 서피스 특성에 의해 결정됩니다. 반사광의 스펙트럼 조합은 광원의 스펙트럼 조합과 서피스의 파장 선별 반사( wavelength-selective reflection, 역주 : 우리가 알고 있는 albedo 를 의미하는 듯함 )에 의해 결정됩니다. 이 섹션에서는 적절한 반사도 정의를 소개하고 그것을 일반적인 반사도 모델과 결합시킬 것입니다. 그림 1 은 이 모델에서 사용되는 심볼들에 대한 요약을 포함합니다.

 

그림 1: 심볼 요약.

 

그림 2에는 반사에 대한 기하학적 구조가 나와 있습니다. 관찰자는 서피스상의 점 P 를 바라보고 있습니다. V 는 관찰자 방향에 대한 단위 벡터입니다. N 은 서피스의 단위 노멀입니다. L 은 지정된 광원 방향의 유닛 벡터입니다. HV L 사이의 각을 이등분한 곳의 정규화된 벡터입니다. H 는 다음과 같이 정의됩니다.

 

 

이것은 광원에서 관찰자를 향해 거울같이 빛을 반사하는 가상의 서피스에 대한 단위 노멀입니다. α 는 H 와 N 사이의 각도이며, θ 는 H 와 V 사이의 각도입니다. 그래서 cos(θ) = V˙H = L˙H 입니다.

 

그림 2: 반사의 기하구조.

 

빛의 입사빔( beam )의 에너지는 단위 시간과 반사하는 서피스의 단위 면적 당 에너지로 표현됩니다. 입사광의 인텐서티는 이와 유사하지만, 단위 사영 면적과 단위 입체각에 대해서 표현됩니다 [20, 8]. ( 입체각은 광원의 사영된 면적을 광원으로부터의 거리의 제곱으로 나눈 것이며, 멀리 있는 광원을 위한 상수로 취급될 수 있습니다. ) 입사광에서의 에너지는 다음과 같습니다.

 

 

거울이나 거울에 가까운 것들을 제외하고, 입사빔은 광범위한 각도로 반사됩니다. 이런 이유로, 주어진 방향에서의 반사 인텐서티는 입사 인텐서티뿐만 아니라 입사 에너지에도 의존하게 됩니다. ( 작은 입체각 내의 ) 다른 방향으로부터의 입사 에너지에 대한 주어진 방향에서의 반사 인텐서티의 비율은 양방향 반사도( bidirectional reflectance )라 불립니다. 이 반사율은 반사 연구에 있어서 기본입니다( 부가적인 논의에 대해 알려면 [20, 8]을 참조하십시오 ). 각 광원에 대해, 양방향 반사도 R 은 다음과 같습니다.

 

 

각 광원으로부터 관찰자에게 도달하는 반사 인텐서티는 다음과 같습니다.

 

 

양방향 반사도는 두 개의 요소로 분리될 수 있습니다; 스펙큘러, 디퓨즈. 스펙큘러 요소는 재질의 표면으로부터 반사되는 빛을 표현합니다. 디퓨즈 요소는 ( 재질의 서피스 안으로 파고든 입사광에 의해 발생하는 ) 내부 산란이나 ( 서피스가 충분히 거칠면 발생하는 ) 다중 서피스 반사로부터 기인합니다. 만약 재질이 균질하지 않다면 스펙큘러 요소와 디퓨즈 요소는 서로 다른 색상을 가질 수 있습니다. 그래서 양방향 반사도는 다음과 같습니다.

 

 

개별 광원에 의한 직접 조명과 더불어, 오브젝트는 배경이나 앰비언트 조명에 의해 조명을 받을 수 있습니다. 특정 광원으로부터 직접 비춰지는 것이 아닌 모든 빛은 앰비언트 조명으로 뭉뚱그려집니다. 앰비언트 조명의 특정 방향으로부터 관찰자를 향해 반사되는 빛의 양은 적지만, 전체 반구상에서 오는 빛을 합치면 이것의 효과는 커집니다. 따라서, 앰비언트( 혹은 hemispherical-directional ) 반사 Ra 를 소개하는 것이 편리합니다. 이 반사는 양방향 반사도 R 의 적분이며, 즉 Rs 와 Rd 의 선형결합입니다. 단순함을 위해, 우리는 Ra 가 뷰 방향에 대해 독립적이라 가정합니다. 추가적으로 우리는 앰비언트 조명이 고르게 입사한다고 가정합니다. 앰비언트 조명 때문에 생기는 반사 인텐서티는 다음과 같이 정의됩니다.

 

 

f 항은 ( 코너와 같은 ) 근처에 있는 오브젝트들에 의해 차폐되지 않는 조명을 비추는 반구의 양( fraction, 비율? )입니다 [25]. 이는 다음과 같이 주어집니다.

 

 

여기에서 적분은 빛을 비추는 반구의 비차폐 영역에 대해서 수행됩니다.

 

관찰자에게 도달하는 빛의 전체 인텐서티는 모든 광원으로부터의 반사 인텐서티의 합에 모든 앰비언트 조명으로부터의 반사 인텐서티를 더한 것입니다. f = 1 이라고 가정하면, 이 논문에서 사용된 기본 반사도 모델은 다음과 같습니다.

 

 

이 공식은 씬에 조명을 비추는 서로 다른 인텐서티와 사영 면적을 가진 광원들의 효과를 고려합니다. 예를 들어, 어떤 조명빔( illuminating beam )과 동일한 인텐서티( Ii )와 조명 각( N˙L )을 가지지만 두 배 큰 입체각( dωi )을 가진 조명빔은 서피스를 두 배 밝게 만듭니다. 다른 빔보다 두 배의 인텐서티를 가지지만 같은 조명각과 입체각을 가진 조명빔도 서피스를 두 배 밝게 만듭니다.

 

이 논문은 환경 내의 다른 오브젝트들로부터 오는 빛에 대한 반사를 고려하지 않습니다. 이 반사는 서피스가 완전히 부드럽다면 [24] 나 [6] 에서처럼 계산될 수 있습니다. 하지만 이러한 순수한 거울면 반사라하더라도 파장에는 종속적입니다.

 

위의 반사도 모델은 묵시적으로 몇 가지 변수들에 의존합니다. 예를 들어, 인텐서티는 파장에 의존하며, s 와 d 는 재질에 의존하며, 반사도는 이런 변수들과 함께 반사 기하구조 및 서피스 러프니스( roughness )에 의존합니다. 다음 두 섹션들은 반사도 모델의 지향성 의존 및 파장 의존을 고려합니다.

 

DIRECTIONAL DISTRIBUTION OF THE REFLECTED LIGHT

 

앰비언트 및 디퓨트 요소들은 모든 방향으로 동일하게 빛을 반사합니다. 그러므로 Ra 와 Rd 는 관찰자의 위치에 의존하지 않습니다. 반대로 스펙큘러 요소는 다른 것보다 특정 방향으로 더 많은 빛을 반사합니다. 그래서 Rs 는 관찰자의 위치에 의존합니다.

 

스펙큘러 요소가 각에 따라 퍼지는 것은 서피스가 미세면( microfacet )으로 구성되었고 각 미세면들은 거울면 반사를 수행한다는 가정에 의해 설명됩니다 [23]. 노멀이 H 방향인 미세면만이 L 에서 V 로의 반사에 대한 스펙큘러 요소에 기여합니다. 이 스펙큘러 요소는 다음과 같습니다.

 

 

프레넬( Fresnel ) 항 F 는 빛이 부드러운 미세면으로부터 반사되는 방식을 설명합니다. 그것은 입사각과 파장에 대한 함수이며, 다음 섹션에서 설명됩니다. 기하학적 감쇠( geometrical attenuation ) 요소 G 는 다른 미세면에 의해 그림자가 드리워지거나 마스킹되는 미세면을 고려합니다. 그리고 이는 [5, 6, 23 ] 에 세부적으로 설명되어 있습니다. 간단하게 말하자면, 그것은 다음과 같습니다.

 

 

미세면의 기울기 분포 함수 D 는 H 방향을 바라보는 미세면들의 양( fraction )을 표현합니다. Blinn [5, 6]에 의해 다양한 미세면 기울기 분포 함수들이 고려되었습니다. 그가 기술한 공식 중 하나는 Gaussian 모델입니다 [23].

 

 

여기에서 c 는 임의의 상수입니다.

 

Blinn 에 의해 언급된 것과 더불어, 다른 미세면 기울기 분산 모델들을 이용하는 것도 가능합니다. 특히 서피스로부터의 적외선과 레이더 산란( scattering of radar )을 위한 모델들을 이용할 수 있으며, 그것들은 가시 파장들에 적용될 수 있습니다. 예를 들어 Davies [9] 는 완벽한 전도체로 구성된 거친 표면으로부터 반사되는 전자기 복사의 공간적 분포에 대해 기술했습니다. Bennett 와 Porteus [3] 는 이 결과를 실제 금속에 대해 확장했으며, Torrance 와 Sparrow [22] 는 그것들이 비금속에도 적용됨을 보여주었습니다. Beckmann [2] 은 이러한 모든 재질들을 망라하는 포괄적인 이론을 제공했으며, 이는 부드러운 표면으로부터 매우 거친 표면까지를 포함하는 넓은 범위의 서피스 상태들에 적용됩니다. 거친 서피스의 경우, Beckmann 분포 함수는 다음과 같습니다.

 

 

이 분포 함수는 Blinn 에 의해 언급된 세 가지 함수와 그 형태가 비슷합니다. Beckmann 함수의 이점은 임의의 상수를 사용하지 않고도 반사도의 절대량을 제공한다는 것입니다; 단점은 그것이 더 많은 계산을 요구한다는 것입니다.

 

모든 미세면 기울기 분포 함수 내에서 스펙큘러 요소의 퍼짐( spread )은 root mean square ( rms ) 기울기 m 에 의존합니다. 작은 m 값은 미세면 기울기가 작다는 것을 의미하며 반사 각도 주변에서 매우 지향성있는 분포를 제공합니다. 이는 그림 3 에 나와 있는데요, 3a 는 Beckmann 분포 모델이고 3b 는 Gaussian 모델입니다. 큰 m 값은 뾰족한 미세면 기울기를 나타내는데 퍼져나가는 형태의 분포를 제공합니다. 3c3d 는 각각 Beckmann 과 Gaussian 모델을 보여줍니다. 두 모델의 유사성에 주목하십시오.

 

그림 3: (a) Beckmann 분포 m = 0.2, (b) Gaussian 분포 m = 0.2,

(c) Beckmann 분포 m = 0.6, (d) Gaussian 분포 m = 0.6.

 

SPECULAR COMPOSITION OF THE REFLECTED LIGHT

 

앰비언트, 디퓨즈, 스펙큘러 반사도는 모두 Ra, Rd, Rs 의 F 항에 의존하는데, 이것들은 재질의 적절한 반사도 스펙트럼들에서 획득될 수 있습니다. Ra 가 Rs 와 Rd 의 선형 결합으로 제한됨에도 불구하고 비균일한 재질은 세 반사도 각각에 대한 서로 다른 반사도 스펙트럼들을 가집니다.

 

[10, 17-19] 에서 수 천개의 재질들을 위한 반사도 스펙트럼들이 측정되고 수집되어 왔습니다. 반사도 데이터는 보통 수직 입사( normal incidence )에서의 조명에 대한 것입니다. 이 값들은 보통 연마된 서피스들을 위해 측정되었으며, 거친 서피스를 위한 양방향 반사도를 획득하기 위해서는 1/π 를 곱해야만 합니다 [20]. 대부분의 재질들은 가시범위 내의 적은 개수( 10 ~ 15 )의 파장들에서만 측정되었습니다. 그래서 중간의 파장들을 위한 값들은 보간되어야만 합니다( 간단한 선형 보간으로도 충분한 것으로 보입니다 ). 수직 입사를 위한 구리 거울의 가시 파장을 위한 반사도 스펙트럼은 그림 4a 에 나와 있습니다. 반사도 스펙트럼을 선택하는데 있어, 주의깊게 고려해야 할 것은 어떤 조건에서 측정이 이루어졌느냐 입니다. 예를 들어 어떤 금속들은 시간을 두고 산화막을 만들수 있는데, 이는 색상을 급격하게 변화시킵니다 [1].

 

반사광의 스펙트럼 에너지 분포( spectral energy distribution )는 입사광의 스펙트럼 에너지 분포에 서피스의 반사도 스펙트럼을 곱함으로써 구해집니다. 이것의 예가 그림 4b 에 나와 있습니다. 태양의 스펙트럼 에너지 분포와 CIE( 국제 조명 위원회 ) 표준 빛( standard illuminants )은 [7]에서 이용할 수 있습니다. CIE 표준 빛 D6500 의 스펙트럼 에너지 분포는 구름낀 날의 태양빛을 근사계산한 것으로, 이는 그림 4b 의 위쪽 커브입니다. 아래쪽 커브는 CIE 표준 빛 D6500 을 수직 입사했을 때 구리 거울로부터 반사된 빛의 스펙트럼 에너지 분포를 보여 줍니다. 이것은 그림 4a 의 반사도 스펙트럼에다가 위쪽 커브를 곱함으로써 획득된 것입니다.

 

그림 4: (a) 수직 입사에 대한 구리 거울에 대한 반사도. 파장의 단위는 micrometer.

(b) 위쪽 커브: CIE 표준 빛 D6500 의 스펙트럼 에너지 분포.

아래쪽 커브: D6500 에 의해 비춰지는 구리 거울로부터 반사된 빛의 스펙트럼 에너지 분포.

 

 

일반적으로, Rd 와 F 는 반사 기하구조에 따라 다양해집니다. 편의를 위해, 우리는 반사하는 서피스에 대한 노멀 방향으로 비추기 위한 양방향 반사도로 Rd 를 취합니다. 이는 합리적입니다. 왜냐하면 서피스 노멀에 대해 70 도 정도 안쪽에서는 반사도가 입사각에 대해 약간만 변하기 때문입니다 [21]. 우리는 F 에 대한 지향성 의존성( directional dependence )을 허용합니다. 그러나 이는 입사 방향과 반사 방향이 지표각 근처에 있을 때 색상 변화를 일으킵니다.

 

반사도 F 는 프레넬 공식으로부터 이론적으로 구해질 수 있습니다 [21]. 이 공식은 완전히 부드러운 거울같은 서피스에 대한 반사도를 굴절률( n )( index of refraction ) 항, 서피스에 대한 소광계수(k)( 흡광계수, extinction coefficient ), 조명각( θ )( angle of illumination )으로 표현합니다. 일반적으로 n 와 k 는 파장에 따라 다양하지만, 그것들의 값은 흔히 알려져있지 않습니다. 반대로 수직 입사시 경험적으로 측정된 반사도 값은 흔히 알려져 있습니다.

 

F 의 스펙트럼과 각에 대한 다양성을 획득하기 위해서, 우리는 실용적인 타협안을 수용했습니다. 만약 n 과 k 가 알려져 있다면, 우리는 프레넬 공식을 사용합니다. 만약 그렇지 않고 일반 반사도가 알려져 있다면, 우리는 프레넬 공식을 연마된 서피스를 위해서 측정된 일반 반사도에 맞춥니다. 비금속의 경우 k = 0 인데, 이것은 우리에게 굴절률 n 에 대한 추정치( estimate )를 제공합니다. 금속의 경우 k 는 일반적으로 0 이 아닌데, 우리는 k 를 0 으로 설정하고 일반 반사도로부터 n 을 위한 효과적인 값을 얻습니다. 그러면 F 에 대한 각 의존성을 프레넬 공식으로부터 이용할 수 있습니다. 앞의 방법은 수직 입사를 위한 F 의 정확한 값을 산출하며, 그것의 각 의존성에 대한 좋은 추정치를 제공합니다. 이는 소광계수 k 에 약하게 의존할 뿐입니다.

 

이 방법을 설명하기 위해서, 비편광( unpolarized ) 입사광과 k = 0 을 위한 프레넬 공식은 다음과 같습니다.

 

 

여기에서

 

 

입니다.

 

( [5] 에서 이와 유사한 표현식은 1/2 요소를 빼먹었습니다. ) 수직 입사시, θ = 0; 그래서 c = 1, g = n 입니다. 그리고

 

 

입니다.

 

n 에 대해서 풀면 다음 공식이 나옵니다.

 

 

이런 방식으로 결정된 n 값은 다른 입사각에서의 반사도 F 를 획득하기 위해서 원래의 프레넬 공식을 대체하게 됩니다. 이 방법은 반사도의 스펙트럼 및 지향성 의존성을 획득하기 위해서 다른 파장들에 대해서 반복될 것입니다.

 

파장과 입사각 상에서의 반사도에 대한 의존성은 반사광의 색상은 입사각에 따라 변경된다는 것을 내포합니다. 구리에 대한 반사도 스펙트럼들은 그림 5a 에 나와 있습니다. 입사각( θ )는 π/2 에 접근하기 때문에, 반사광의 색상은 광원의 색상에 접근합니다( since the reflectance F approaches unity ). 구리로부터 흰색 빛( CIE 표준 빛 D6500 )의 반사와 관련된 색상들은 그림 5b 에서 θ 에 대한 함수로서 나타납니다. 프레넬 공식으로부터의 색상 변화는 θ 가 π/2 에 접근했을 때만 중요하다는 것이 분명해집니다( 즉, VL 사이의 각이 π 에 접근할 때 ). 

 

색상 변화에 대한 계산은 계산적으로 비쌉니다. 그것은 두 방식 중의 하나를 사용해 단순화될 수 있습니다; 룩업 테이블( lookup table )을 생성하거나 다음 근사계산을 사용. 평균 일반 반사도와 연관된 n 의 값을 위해서 먼저 F 의 값들이 계산됩니다. 다음으로 이 값들은 θ = 0 일 때와 θ = π/2 일 때의 색상 사이를 보간하기 위해서 사용됩니다. θ = π/2 일 때의 색상은 광원의 색상과 동일한데 그 이유는 Fπ/2 는 모든 파장에서 1.0 이기 때문입니다. 예를 들어 수직 입사시 색상의 red 요소가 Red0 이라 하고 입사광의 색상의 red 요소가 Redπ/2 라고 합시다. 그러면 다른 각도에서 색상의 red 요소는 다음과 같습니다.

 

 

Green 요소와 blue 요소도 비슷하게 보간됩니다. 그림 5c 는 입사각에 대한 함수로서 구리의 색상을 추정하기 위해 근사계산 방법을 사용하는 효과를 보여 줍니다. 이 근사계산 방법은 완전한( 하지만 더 비싼 ) 방법( 그림 5b )의 결과와 비슷한 결과를 산출합니다. 앞의 근사계산은 반사광의 스펙트럼 에너지 분포가 알려지지 않았고 RGB 값들에 대한 추정치를 모두 가지고 있는 경우에는 항상 사용되어야 합니다.

 

그림 5: (a) 파장과 입사각에 대한 함수로서 구리 거울의 반사도.

(b) 입사각에 대한 함수로서 구리의 색상.

(c) 이 논문에서 논의된 기법으로 근사계산된 것으로서의 구리의 색상.

 

DETERMINING THE RGB VALUES

 

컴퓨터 함성 씬이 사실적이 되도록 하기 위해서는, 컬러 텔레비전 모니터를 통해 합성 씬을 보고 있는 관찰자의 색상 감각이 실세계에서 관련 씬을 보고 있는 관찰자의 색상 감각과 거의 비슷해야만 합니다. 이 비슷한 색상 감각을 생성하기 위해서, 반사광의 스펙트럼 에너지 분포를 특정 모니터를 위한 적절한 RGB 값으로 변환하기 위해서 3색 색상 복제 법칙( the law of trichromatic color reproduction )이 사용됩니다.

 

모든 색상 감각은 삼차원 색상 공간에서의 위치로 일관성있게 기술될 수 있습니다. 그런 색상 공간들 중 하나는 XYZ 공간이라 불립니다.이 공간에서의 점은 세 개의 좌표로 지정되는데, 이는 색상의 XYZ 3자극( tristimulus ) 값들입니다. 각각의 스펙트럼 에너지 분포는 XYZ 색상 공간의 점, 즉 3자극 값들과 연관되어 있습니다. 만약 두 개의 스펙트럼 에너지 분포가 같은 삼자극 값들과 연관되어 있다면, 그것들은 같은 색상 감각을 생성하고 이는 metamer( 조건 등색을 나타내는 색 )라 불립니다. The red, green and blue phosphors of a monitor can be illuminated in proportions to produce a set of spectral energy distributions which define a region of XYZ space called the gamut of the monitor( 역주 : Understanding the Color Gamut of an LCD monitor 참조 ). 그러면 목표는 반사광의 스펙트럼 에너지 분포의 metamer 인 스펙트럼 에너지 분포를 생성하는 인광물질 조명의 비율을 찾는 것입니다.

 

이 비율은 반사광의 스펙트럼 에너지 분포와 연관된 XYZ 3자극 값들을 계산하고 나서 이 3자극 값들을 가지고 스펙트럼 에너지 분포를 생성하는 RGB 값들을 계산함으로써 결정됩니다. 이를 위해, 반사광의 스펙트럼 에너지 분포는 모든 파장에서 ( [7]에서 가져온 ) XYZ 매칭 함수들과 곱해집니다. 그리고 나서 최종적인 스펙트럼들은 XYZ 3자극 값들을 획득하기 위해서 적분됩니다. 이 XYZ 값들은 광원 유형과 서피스 재질의 조합별로 미리 계산될 수 있는데, 이는 특정 인광물질 집합과 모니터 화이트 포인트( white point, 모니터에서 가장 흰색이 이상적으로 보이게 맞추는 상태 )를 위한 RGB 선형 휘도( luminance )에 대한 행렬 곱셈을 통해 변환될 수 있습니다. 그리고 나서 이 선형 휘도들은 RBG voltages 로 변환되는데, 이 때 모니터의 비선형성과 시청 환경 효과들을 고려하게 됩니다. 이 방법에 대한 더 정확한 설명을 원한다면 [13] 을 참조하십시오.

 

모니터는 주어진 색도( chromaticity )를 복제할 수 있는 최대 휘도를 가집니다. 이 최대값보다 큰 휘도를 표현하는 모든 XYZ 값들은 모니터 gamut 의 권한 밖입니다. 그런 색상은 모니터 내에서 어떤 휘도로도 복제될 수 없기 때문에, 그것은 반드시 모니터 gamut 내의 비슷한 색상에 의해 근사계된되어야 합니다. 이 색상은 매우 다양한 방식으로 선택될 수 있습니다; 이 논문을 위해, 우리는 같은 hue 를 유지하고 필요하면 채도를 감소시키는 것이 적절하다고 결정했습니다. 이를 위해 3자극 XYZ 값들은 색상 공간으로 변환되는데, 그것의 위치는 주요 파장( dominant wavelength )과 순도( purity )에 의해 지정됩니다. 그리고 나서 주요 파장( 그리고 거의 hue )은 색상이 모니터 gamut 내부에 놓일 때까지 유지되는 반면 순도는 감소합니다. 그리고 나서 최종 색상은 XYZ 공간으로 다시 변환됩니다. ( 주요 파장과 순도에 대한 논의를 위해서는 [12] 를 참조. )

 

APPLICATIONS

 

이 섹션은 두 개의 특별한 재질인 금속과 플라스틱에 대해 반사도 모델을 적용하는 것에 대해 논의합니다. 가장 고려해야 할 점은 재질의 균일성입니다. 서피스 위와 아래가 다른 재질로 구성된 것처럼 서로 다른 재질로 구성된 물질은 비균질하며, 이는 스펙큘러 요소와 디퓨즈 요소가 다른 색상으로 나오게 만듭니다.

 

일반적인 플라스틱은 투명하거나 흰 substrate( 기질, 도장되지 않은 표면, 접착 기면 )를 가지는데, 내부에 안료 입자들을 포함합니다 [11]. 즉 서피스로부터 직접적으로 반사되는 빛은 광원으로부터의 색상을 약간 수정하게 됩니다. 모든 색상 변경은 서피스 재질의 반사도의 결과입니다. 재질을 뚫고 들어 가는 빛은 안료와 상호작용하게 됩니다. 그러므로 내부 반사는 색이 들어 간 골고루 분포된 디퓨즈 반사를 증가시킵니다.

 

그래서 플라스틱은 색상이 있는 디퓨즈 요소와 흰 스펙큘러 요소를 사용해서 시뮬레이션 될 것입니다. 이는 그냥 Phong 과 Blinn 에 의해 사용된 모델일 뿐이며, 많은 컴퓨터 그래픽스 이미지들이 플라스틱처럼 보이는 심각한 스펙큘러 요소들을 가지고 있게 되는 이유입니다. 그림 6a 는 구리 색상 플라스틱 꽃병을 시뮬레이션한 것을 보여 줍니다. 이 그림은 다음 파라미터들을 사용해서 생성되었습니다.

 

 

그림 6: (a) 구리 색상 플라스틱 꽃병. (b) 구리 꽃병.

 

금속은 전도체입니다. 전자기파 충돌( impinging electromagnetic wave )은 서피스 근처의 전자의 활동을 활발하게 만들 수 있습니다. 이는 순차적으로 전자기파 재방출( reflection )을 유도합니다. 약간 깊은 침투( depth penetration )가 있는데, 이 깊은 침투는 소광계수( extinction coefficient ) k 의 값을 증가시키면서 감소됩니다. 결과적으로 금속으로부터의 반사는 본질적으로 서피스에서 발생합니다 [17]. 그러므로 내부 반사들은 디퓨즈 요소에 기여하지 않습니다. 이는 비금속에서는 중요할 수 있습니다. rms( root mean squre ) 러프니스 기울기 m 이 작을 때, 다중 서피스 반사들 또한 무시되고 전체 디퓨즈 요소들이 사라지게 됩니다. 그림 6b 는 구리 꽃병을 시뮬레이션한 것을 보여 줍니다. 이 그림은 다음 파라미터들을 사용해서 생성되었습니다.

 

 

 

rms 기울기에 대한 두 값들이 사실적인 거친 서피스 마무리를 위해 사용되었다는 점에 주목하십시오. 스펙큘러 반사도 요소는 구리 색상을 가집니다. 그림 6b 의 구리 꽃병은 그림 6a 에서 보이는 꽃병의 플라스틱 외형을 보여주지 않습니다. 이는 사실적인 비플라스틱 외형을 취하기 위해서 필요한 스펙큘러 요소의 색상을 올바르게 취급했다는 것을 보여 줍니다.

 

그림 7 은 다양한 재질로 구성된 꽃병들을 보여 줍니다. 모든 경우에 스펙큘러 요소와 디퓨즈 요소들은 같은 색상을 가집니다( 즉 Rd = F0/π ). 모든 꽃병에 대한 조명 조건은 그림 6a6b 를 위한 조명 조건과 동일합니다. 6 개의 금속들은 반사도 스펙트럼을 제외하고는 그림 6b 와 같은 파라미터들을 사용해서 생성되었습니다. 6 개의 비금속들은 Table I 에 보이는 파라미터들을 사용해서 생성되었습니다.

 

 

그림 7: 다양한 꽃병들.

 

그림 8 은 다양한 재질과 서피스 조건으로 구성된 시계를 보여 줍니다. 그것은 단일 광원으로부터 빛을 받습니다. 시계의 외부 밴드는 금으로 구성되었고, 내부 밴드는 스테인리스강으로 구성되었습니다. 외부 밴드의 연결부위 상의 패턴은 더 거친 서피스로 구성되어 있는데, 경계보다는 내부가 더 거칩니다. LED 는 표준 red 640 nanometer LED 입니다. 그리고 그것들의 색상은 같은 주요 파장을 가진 색상을 사용해서 근사계산되었습니다.

 

그림 8: 시계.

 

CONCLUSION

 

다음과 같이 결론을 내릴 수 있습니다.

 

  1. 스펙큘러 요소는 보통 재질의 색상이며, 광원의 색상이 아닙니다. 앰비언트, 디퓨즈, 그리고 스펙큘러 요소는 재질이 비균질할 경우에 서로 다른 색상이 될 수 있습니다.
  2. 양방향 분포의 개념은 같은 장면에서의 다양한 광원 및 재질을 시뮬레이션하기 위해 필요합니다.
  3. Blinn 에 의해 사용된 미세면 기울기 분포 모델들은 광학 문헌에서의 다른 것들과 매우 유사하며 계산하기 쉽습니다. 하나 이상의 미세면 기울기 분포 함수들이 서피스를 표현하기 위해 조합될 수 있습니다.
  4. 프레넬 공식은 지표각에서의 스펙큘러 요소의 색상 변화를 예측합니다. 이 색상 변화를 계산하는 것은 근사계산 방법이나 룩업 테이블을 사용하지 않는다면 계산적으로 비쌉니다.
  5. 특정 재질에서 반사된 빛에 대한 스펙트럼 에너지 분포는 광원의 스펙트럼 에너지 분포 재질의 반사도 스펙트럼과 함께 반사도 모델을 사용해서 획득할 수 있습니다. 3색 색상 복제 법칙을 사용해서 이 스펙트럼 에너지 분포를 특정 모니터에 적합한 RGB 값들로 변환할 수 있습니다.
  6. 페인트를 칠한 오브젝트나 플라스틱과 같은 특정 유형의 재질들은 같은 색상으로 표현되지 않는 스펙큘러 요소와 디퓨즈 요소를 가집니다. 금속들은 광원과 금속의 반사도에 의해서 결정되는 색상을 가진 스펙큘러 요소를 가집니다. 디퓨즈 요소들은 보통 금속에서는 무시됩니다.
ACKNOWLEDGEMENT
 
이 연구는 Cornell University 의 Program of Computer Graphics 에서 수행되었습니다. 이 논문을 만드는데 있어서 귀중한 기여를 해 준 Gray Meyer 에게 감사드립니다. 그의 색상 소프트웨어와 모니터들에 대한 photometric measurements 는 스펙트럼 에너지 분포를 RGB 값들로 정확하게 변환하는 것을 가능하게 해 줬습니다. 또한 연구의 각 단계마다 유용한 논의와 가치있는 제안을 해 준 Dr. Donald Greenberg 에게 감사드립니다. ( 그림 8 의 ) 시계는 Stuart Sechrest 와의 공동노력의 결과입니다.
 
REFERENCES
 
1. BARKMAN, E. F. Specular and diffuse reflectance measurements of aluminum surfaces. In Appearance of Metallic Surfaces, ASTM Special Tech. Publ. 478, American Society for Testing and Materials, Philadelphia, 1970, pp. 46-58.
 
2. BECKMANN, P. AND SPIZZICHINO, A. The Scattering of Electromagnetic Waves from Rough Surfaces. MacMillan, New York, 1963, pp. 1-33, 70-98.
 
3. BENNETT, H. n., AND PORTEUS, J.O. Relation between surface roughness and specular reflectance at normal incidence. J. Opt. Soe. Am., 51, 2 (1961), 123-129.
 
4. BLINN, Z. F., AND NEWELL, M. E. Texture and reflection in computer generated images. Commun. ACM 19, 10 (Oct. 1976), 542-547.
 
5. BLINN, J.F. Models of light reflection for computer synthesized pictures. Computer Gr. 11, 2 (1977), 192-198.
 
6. BLINN, J.F. "Coniputer Display of Curved Surfaces." Ph.D. dissertation, Univ. of Utah, Salt Lake City, 1978.
 
7. CIE INTERNATIONAL COMMISSION ON ILLUMINATION Official recommendations of the international commission on illumination. Colorimetry (E-1.3.1), Publ. CIE 15, Bureau Central de la CIE, Paris, 1970.
 
8. COOK, R.L. "A Reflection Model for Realistic Image Synthesis." Master's thesis, Cornell Univ., Ithaca, 1981.
 
9. DAVIES, H. The reflection of electromagnetic waves from a rough surface. Proceedings of the Institution of Electrical Engineers 101 (1954), 209-214.
 
10. GUBAREFF, G. G., JANSSEN, J. E., AND TORBORG, R.H. Thermal Radiation Properties Survey: A Review of the Literature. Honeywell Research Center, Minneapolis, 1960.
 
11. HUNTER, R.S. The Measurement of Appearance. Wiley, New York, 1975, pp. 26-30.
 
12. JUDD, D. B. AND WYSZECKI, G. Color in Business, Science, and Industry. Wiley, New York, 1975, pp. 170-172.
 
13. MEYER, G. W. AND GREENBERG, D.P. Perceptual color spaces for computer graphics. Computer Gr. 14, 3 (1980), 254-261.
 
14. PHONG, B.T. "Illumination for Computer Generated Images." Ph.D. dissertation, Univ. of Utah, Salt Lake City, 1973.
 
15. PHONG, B.T. Illumination for computer generated pictures. Commun. ACM 18, 6 (June 1975), 311-317.
 
16. PORTEUS, J.O. Relation between the height distribution of a rough surface and the reflectance at normal incidence. J. Opt. Soc. Am. 53, 12 (1963), 1394-1402.
 
17. Purdue University, Thermophysical Properties of Matter, vol. 7: Thermal Radiative Properties of Metals, Plenum, New York, 1970.
 
18. Purdue University, Thermophysical Properties of Matter, vol. $: Thermal Radiative Properties of Nonmetallic Solids, Plenum, New York, 1970.
 
19. Purdue University, Thermophysical Properties of Matter, vol. 9: Thermal Radiative Properties of Coatings, Plenum, New York, 1970.
 
20. SIEGEL, R. AND HOWELL, J.R. Thermal Radiation Heat Transfer. McGraw-Hill, New York, 1980, pp. 64-73.
 
21. SPARROW, E. M. AND CESS, R.D. Radiation Heat Transfer. McGraw-Hill, New York, 1978, pp. 64-68.
 
22. TORRANCE, K. E. AND SPARROW, E.M. Biangular reflectance of an electric nonconductor as a function of wavelength and surface roughness. Journal of Heat Transfer 87, series C (1965), 283-292.
 
23. TORRANCE, K. E. AND SPARROW, E. M. Theory for off-specular reflection from roughened surfaces. J. Opt. Soc. Am. 57, (Sept. 1967), 1105-1114.
 
24. WHITTED, T. An improved illumination model for shaded display. Commun. ACM 23, 6 (June 1980), 343-349.
 
25. WHITTED, T. Private communication.

 

원문 : https://cdn2.unrealengine.com/Resources/files/2013SiggraphPresentationsNotes-26915738.pdf

주의 : 번역이 개판이므로 이상하면 원문을 참조하세요.

주의 : 허락받고 번역한 것이 아니므로 언제든 내려갈 수 있습니다.

주의 : 실력이 딸려 우리말로 번역하기 애매한 것들은 원문을 그대로 보여줄 것입니다. 좋은 제안이 있으면 알려 주십시오.

주의 : 2013 년 시그래프 문서입니다. 변경사항이 없을 것 같지만 일단 참고하세요.



Real Shading in Unreal Engine 4


by Brian Karis, Epic Games


그림 1: UE4: Infiltrator demo


Introduction


일년 전쯤에, 우리는 쉐이딩 모델을 개선하고 물리 기반 재질 워크플로우를 좀 더 받아들이기로 결심했습니다. 이는 부분적으로는 좀 더 사실적인 이미지를 렌더링하고자 하는 열망에서 비롯된 것이지만, 좀 더 물리에 기반한 접근을 통해 머티리얼을 생성하고 머티리얼 레이어링( layering )을 사용하는 방법에 관심이 있기도 했습니다. 아티스트들은 이것이 워크플로우 및 품질에 막대한 증진을 주게 될 것이라고 느꼈으며, 나는 다른 스튜디오에서 이것들의 이점들을 이미 본 상태였습니다. 그 스튜디오에서 우리는 오프라인에서 조합된 머티리얼 레이어들을 전환하는 단계를 거쳤었습니다.  One of our technical artists here at Epic experimented with doing the layering in the shader with promising enough results that this became an additional requirement.


이러한 방향성을 지원하기 위해서는, 우리는 머티리얼 레이어링이 단순하고 효율적일 필요가 있음을 알고 있었습니다. 완벽한 타이밍에 Wreck-It Ralph 를 위해 사용된 물리 기반 쉐이딩 및 재질 모델과 관련한 Disney 의 프리젠테이션 [2] 이 나왔습니다. Brent Burley 은 매우 작은 머티리얼 파라미터 집합을 사용해도 오프라인 필름 렌더링을 위해서도 충분할 수 있다고 설명했습니다. 그는 대부분의 샘플링된 머티리얼과 거의 일치하는 매우 실용적인 쉐이딩 모델을 보여 주기도 했습니다. 그들의 연구는 우리에게 영감과 기반이 되어 주었으며, 그들의 "원칙들"처럼 우리는 우리만의 시스템을 위한 목표를 정의하기로 결심했습니다:


Real-Time Performance


    • 가장 먼저, 동시에 많은 광원들을 사용할 수 있도록 효율적일 필요가 있습니다.


Reduced Complexity


    • 가능하면 적은 개수의 파라미터들만이 존재해야 합니다. 파라미터들이 많아지면 결정 장애가 오고 시도를 많이 해야 하며 에러가 발생합니다. 혹은 단일한 의도를 가진 효과를 변경하기 위해서 많은 값들을 요구하는 서로 연결된 속성들이 필요합니다.
    • 우리는 IBL( image-based lighting )과 analytic light source 들을 서로 교환가능하도록 사용할 필요가 있습니다. 그래서 파라미터들은 모든 광원 유형에서 상수적으로 동작해야만 합니다.


Intuitive Interface


    • 우리는 단순하고 이해하기 쉬운 값들을 선호합니다. 굴절률( index of refraction )과 같은 물리적인 것들은 별로입니다.


Perceptually Linear


    • 우리는 마스킹을 통해 레이어링을 지원하기 원하지만, 픽셀당 한 번만 쉐이딩할 수 있는 여유가 있습니다. 이는 parameter-blended shading 이 쉐이딩된 결과를 블렌딩한 것과 가능한한 가깝게 일치되어야만 함을 의미합니다( 역주 : pixel 을 multi-pass 로 그리지 않고도, multi-pass 로 그린 것과 비슷한 결과를 내야 한다는 의미인듯합니다 ).


Easy to Master


    • 우리는 유전체( dielectrics )와 도체( conductor )에 대한 기술적 이해를 해야할 필요성을 피하고 싶습니다. 또한 물리적으로 이치에 맞는 기본 머티리얼들을 생성하기 위해서 요구되는 노력들을 최소화하기를 원합니다.


Robust


    • 실수로라도 물리적으로 이치에 맞지 않는 머티리얼들을 생성하는 것이 어려워야 합니다.
    • 파라미터들에 대한 모든 조합들은 가능한한 견고하고 이치에 맞야야 합니다.


Expressive


    • 디퍼드 쉐이딩은 우리가 가질 수 있는 쉐이딩 모델의 개수를 제한합니다. 그래서 우리의 기반 쉐이딩 모델은 실세계에서 보일 수 있는 머티리얼들의 99% 를 충분히 다룰 수 있도록 기술적( descriptive )이어야 할 필요가 있습니다.
    • 레이어링 가능한 모든 머티리얼들은 서로를 블렌딩하기 위해서 같은 파라미터 집합을 공유할 필요가 있습니다.


Flexible


    • 다른 프로젝트나 라이센시들은 실사성( photorealism )에 대한 같은 목표를 공유하지 않을 수도 있습니다. 그래서 비실사 렌더링을 충분히 가능하게 할 수 있는 유연성이 필요합니다.


Shading Model


Diffuse BRDF


우리는 Burley 의 디퓨즈 모델을 평가했지만, Lambertian diffuse( 식 1 ) 와의 사소한 차이만을 느낄 수 있었습니다. 그래서 우리는 추가 비용의 타당성을 정당화할 수 없었습니다. 게다가, 더 복잡한 디퓨즈 모델은 image-based lighting 이나 spherical harmonic lighting 을 효율적으로 사용하기 어렵게 만듭니다. 결과적으로, 우리는 다른 선택들을 평가하려는 노력을 들이지 않았습니다.


식 1


여기에서  는 머티리얼의 diffuse albedo 입니다.



Microfacet Specular BRDF


일반적인 Cook-Torrance [5,6] 미세표면 스펙큘러 쉐이딩 모델은 다음과 같습니다:


식 2


세부사항에 대해서 알고자 한다면 [9] 를 참조하십시오.


우리는 Disney 의 모델에서 시작해, 각 항들의 중요성을 더 효율적인 대안들과 비교하면서 평가했습니다. 이는 들리는 것보다는 더 어려운 일이었습니다; 각 항들을 위해 게재된 공식들을 완벽하게 비교하기 위해서는 같은 입력 파라미터들을 사용하는 것이 중요한데, 그렇지 못했습니다.


Specular D



노멀 분포 함수( NDF, normal distribution function, 역주 : 정규 분포가 아니라 노멀 분포임에 주의 )를 위해 Disney 가 GGX/Trowbridge-Reitz 를 선택한 것은 비용을 들일만한 가치가 있었습니다. Blinn-Phong 을 사용하는 것과 비교했을 때 추가적인 비용이 매우 적으며, 더 긴 "꼬리( tail )"에 의해 산출된 뚜렷하고 자연스러운 외관은 우리 아티스트들에게 ( 역주 : 그것의 장점을 ) 어필했습니다. 우리는 Disney 의  에 대한 재파라미터화( reparameterization )를 수용했습니다.


식 3



Specular G



다른 것과 비교했을 때, 우리는 기하학적 스펙큘러 감쇠( specular geometric attenuation ) 항에 대해 많은 옵션들을 평가했습니다. 결국, 우리는 Schlick model [19] 를 사용하기로 했지만,  를 사용하기로 했습니다. 그래서 GGX 를 위한 Smith model [21] 과 더 비슷합니다. 이러한 수정을 통해, Schlick model 은  을 위한 Smith model 과 정확히 일치하게 되며, 이는 [ 0, 1 ] 범위에서의 근사계산에 매우 가깝게 됩니다( 그림 2 참조 ). 또한 우리는 Disney 의 변형을 사용해 제곱하기 전에  를 사용해 러프니스 리매핑을 통해 "hotness" 를 제거하는 것을 선택했습니다. 이러한 조정은 단지 analytic light source 들에 대해서만 사용된다는 것을 기억하는 것이 중요합니다; 만약 이것이 image-based lighting 에 적용된다면, glancing angle 에서의 결과는 더욱 어둡게 되는 결과를 낳을 것입니다.


식 4




그림 2:일 때  Shclick 은 Smith 와 매우 비슷함


Specular F



프레넬( Fresnel )을 위해, Shilick's approximation [19] 을 사용하는 전형적인 선택을 했습니다. 그러나 사소한 변경이 있었습니다: 우리는 Spherical Gaussian approximation [10] 을 사용해 power 를 대체했습니다. 이것이 계산에 있어 약간 더 효율적이며, 그 차이는 인지하기 어렵습니다. 그 공식은 다음과 같습니다:


식 5


여기에서  는 normal incidence( 역주 : 법선과의 각도가 0 일 때 )에서의 스펙큘러 반사( specular reflectance )입니다.



Image-Based Lighting


Image-based lighting 과 함게 이 쉐이딩 모델을 사용하려면, 복사휘도( radiance ) 적분이 필요합니다. 이는 보통 중요도 샘플링( importance samploing )을 사용해서 수행됩니다. 다음 공식은 이 수치 적분( numerical integration )을 설명합니다:


식 6


다음 HLSL 코드는 우리 쉐이딩 모델을 사용하여 이것이 수행되는 방식을 보여 줍니다:



중요도 샘플링을 사용한다 해도, 여전히 많은 샘플들이 취해질 필요가 있습니다. 샘플 카운트는 밉맵 [3] 을 사용함으로써 매우 많이 줄어들 수 있습니다. 그러나 만족할만한 품질을 위해서는 여전히 16 보다는 큰 샘플 카운트가 필요합니다. Local reflection 을 위해서 픽셀당 여러 개의 환경 맵들을 블렌딩해야 하므로, 우리는 실질적으로는 각각에 대해 단지 한 개의 샘플만을 취할 수 있습니다.


Split Sum Approximation


이를 위해 우리는 위의 합( sum )을 두 개의 합으로 분리하여 근사계산할 수 있습니다. 그러면 각각의 합은 미리 계산될 수 있습니다. 이러한 근사계산은 정확히 상수  에 대한 것이며 보통의 환경들에 대해서는 매우 정확합니다.


식 7


Pre-Filtered Environment Map


우리는 서로 다른 러프니스 값들을 위한 첫 번째 합을 미리 계산하고 그 결과를 큐브맵의 밉맵 레벨들에 저장합니다. 이는 매우 많은 게임 산업에서 사용되는 일반적인 접근법입니다[1, 9]. 사소한 차이라고 하면, 우리는 중요도 샘플링을 사용하여 우리의 쉐이딩 모델에 대한 GGX 분산을 환경 맵에 convolve 한다는 것입니다. 그것은 미세표면 모델이므로, 분산의 모양은 표면을 바라보는 각도에 따라 변하고, 우리는 이 각도를 0 이라고 가정합니다. 즉  입니다. 이 등방성 추정( isotropic assumption )은 근사계산의 두 번째 소스이며, 그것은 아쉽게도 우리가 지표각( grazing angle )에서 긴 반사를 획득할 수 없음을 의미합니다. Compared with the split sum approximation, this is actually the larger source of error for our IBL solution. 아래 코드에서 보이듯이, 우리는 에 의한 weighting 이 더 나은 결과를 보여준다는 것을 발견했습니다[각주:1].



Environment BRDF


두 번째 합은 나머지를 모두 포함합니다. 이는 solid-white environment 를 사용해 스펙큘러 BRDF 를 적분하는 것과 동일합니다. 즉 입니다. Schlick 의 Fresnel  을 치환함으로써, 우리는  가 적분밖으로  빠질 수 있다는 것을 발견했습니다.


식 8

 

이는 두 개의 입력들( Roughness 와 cosθv )과 두 개의 출력들( scale 과 F0 에 대한 bias )을 남기는데, 그것들은 모두 다 편리하게 [0, 1] 범위를 가진다. 우리는 이 함수의 결과를 미리 계산해서 그것을 2D look-up texture( LUT )[각주:2]에 저장합니다.


그림 3: 2D LUT


이 작업을 마무리하고 나서, 우리는 우리의 해법과 거의 동일한 현존하는 동시적인 연구가 있다는 것을 발견했습니다. Gotanda 는 3D LUT [8] 를 사용하고, Drobot 은 이를 2D LUT [7]로 최적화했으며, 우리가 한 것과 매우 유사합니다. 추가적으로 - 이 코스의 일부로서 - Lazarov 는 유사한 적분[각주:3]에 대한 한 쌍의 analytical approximations 을 제시함으로써 한 단계 더 나아갔습니다 [11]. 



마지막으로 중요도 샘플링된 레퍼런스들을 근사계산하기 위해서 우리는 두 개의 미리 계산된 합을 곱합니다:

  


그림 4: 상단의 참조 이미지, 중단은 split sum approximation, 

하단은 n = v assumption 을 포함하는 full approximation.

Radially symmetric assumption 은 대부분의 에러를 보여 주지만, combined approximation 은 여전히 참조와 매우 유사합니다.


그림 5: 그림 4 와 같은 비교이지만, 유전체( dielectric )를 가지고 테스트함.


Material Model


우리 머티리얼 모델은 Disney 머티리얼 모델을 단순화한 것입니다. 그런데 실시간 렌더링을 위한 효율성을 높이는 방향으로 진행되었습니다. 파라미터의 개수를 제한하는 것은 G-Buffer 공간을 최적화하는데 매우 중요하며, 텍스쳐 저장공간과 접근을 줄여 주고, 픽셀 쉐이더에서 머티리얼 레이어를 블렌딩하는 비용을 최소화해 줍니다.


다음은 우리의 기본 머티리얼 모델입니다:


BaseColor    단일 색상. 이해하기 쉬운 개념.

Metallic       유전체와 반도체 반사에 대해서 이해할 필요가 없음. 그래서 에러의 가능성이 낮음.

Roughness   그것의 의미가 매우 명확함. 반면에 gloss 는 항상 설명을 필요로 함.

Cavity          small-scale shadowing 을 위해서 사용됨.



BaseColor, Metallic, Roughness 는 Disney 모델과 동일합니다만, Cavity 파라미터는 Disney 모델에는 없고 설명이 좀 필요합니다. Cavity 는 실시간 shadowing 시스템이 다룰 수 있는 것보다 작은 geometry 로부터의 그림자를 식별하기 위해서 사용됩니다. 이런 것은 주로 normal map 에서 제출되는 것 때문에 생기는 geometry 입니다. 예를 들면 바닥 보드 사이의 크랙( crack )이라든가 옷사이의 연결부위 등이 있습니다.


Specular 파라미터가 가장 눈에 띠게 누락됩니다. 우리는 실제로 Infiltrator 데모를 완성할 때까지 이것을 계속적으로 사용해 왔지만, 궁극적으로 우리는 이것을 좋아하지 않았습니다. 먼저, 우리는 "specular" 라는 것이 끔찍한 파라미터 이름이라 느낍니다. 왜냐하면 이는 엄청 헷갈리는 이름이며, 아티스트들이 specular intensity 제어를 roughness 제어로 옮기는데 있어 다소 악영향을 줍니다. 아티스트들과 그래픽스 프로그래머들은 보통 그것의 범위를 망각하고 기본값이 1 이라고 가정하게 되는데, 그것의 실제 기본값은 ( 4% 반사와 관련한 ) Burley 의 0.5 였습니다. Specular 가 효과적으로 사용되었던 경우는 small scale shadowing 의 목적과는 거의 배타적인 경우였습니다. 우리는 굴절률( IOR, index of refraction ) 값이 비금속을 위해서는 중요하지 않다는 것을 발견했으며, 그래서 우리는 최근에 Specular 를 이해하기 더 쉬운 Cavity 파라미터로 변경했습니다. 비금속의  는 이제 상수값이 0.04 입니다.



Disney 모델에서 다음 파라미터들은 기본 머티리얼 모델을 위해서 선택하지 않거나 특별한 경우로 취급됩니다:


Subsurface   shadow map 을 서로 다르게 샘플링합니다.

Anisotropy   많은 IBL 샘플들을 요구합니다.

Clearcoat     두 개의 IBL 샘플들을 요구합니다.

Sheen         Burley 의 표기법에서는 제대로 정의되지 않습니다.


우리는 Elemental 데모의 얼음을 위해 사용된 Subsurface 를 제외하고는 프로덕션에서 이러한 특별한 경우의 모델들을 사용하지 않았습니다. 부가적으로 우리는 피부( skin )를 위한 특별한 쉐이딩 모델을 가지고 있습니다. 나중에 우리는 하이브리드 디퍼드/포워드 접근법을 적용해서 더 많은 특별한 쉐이딩 모델들을 지원하는 것을 고려할 것입니다. 현재 우리는 순수한 디퍼드 쉐이딩 접근법만을 사용하고 있으며, 다른 쉐이딩 모델들은 G-Buffer 에 저장된 쉐이딩 모델 아이디로부터 다이내믹 브랜치를 사용해서 제어됩니다.


Experiences


내가 여러 번 봐 온 상황이 하나 있습니다. 나는 roughness 를 사용하기 시작하는 아티스트들에게 다음과 같이 이야기할 것입니다. "Roughness 를 SpecularColor 를 사용하듯이 사용하세요". 그리고 나는 곧 놀라는 소리를 듣게 될 것입니다: "그게 동작해요!". 그러나 흥미로운 답변이 뒤따를 것입니다: "Roughness 가 뒤집힌 것 같네요". 아티스트들은 그들이 작업한 텍스쳐에서 텍셀이 밝을 수록 스펙큘러 하이라이트가 더 밝아지기를 원한다는 것이 밝혀졌습니다. 만약 이미지가 roughness 를 저장한다면, bright 는 rougher 와 동일시되는데, 이것은 덜 강렬한 하이라이트를 만들게 됩니다.


A question I have received countless time is: "Is Metallic binary?" to witch I'd originally explain the subtleties of mixed of layered materials. 나는 그 때 이후로는 "네!" 라고 그냥 대답하는 것이 최선임을 배웠습니다. 그 이유는 이제 막 배우는 아티스트들은 파라미터들을 절대값으로 설정하는 것을 주저했기 때문입니다; 나는 금속들의 Metallic 값을 0.8 로 설정하는 것이 매우 흔하다는 것을 발견했습니다. 다음에 언급할 머티리얼 레이어들은 Metallic 이 0 이나 1 이 아닌 99% 의 경우를 설명하는 방법이 될 것입니다.


We had some issues during the transition, in the form of materials that could no longer be replicated. 이 머티리얼들의 가장 중요한 집합은 Fortnite 에서 비롯되었습니다. 이 게임은 현재 Epic 에서 제작중입니다. Fortnite 는 non-photorealistic art direciton 을 가지고 있으며, 일부러 디퓨즈 반사와 스펙큘러 반사의 보색( complementary color )를 사용합니다. 이는 물리적으로 타당하지 않으며 우리의 새로운 머티리얼 모델에서 표현될 수 없습니다. 오랜 논의 후에, 우리는 Fortnite 의 품질을 유지하기 위해서 예전의 DiffuseColor/SpecularColor 를 엔진 스위치로서 계속해서 지원하기로 결정했습니다. 왜냐하면 그것은 나중에 개발해야 하기 때문입니다. 그러나 우리는 새로운 모델이 Wrek-It Ralph 에서 Disney 가 사용함으로써 설명했던 것과 같은 비실사 렌더링을 불가능하게 만든다고 느끼지는 않습니다. 그래서 우리는 앞으로의 프로젝트들에서도 이 모델을 사용할 계획입니다.


Material Layering


공유 라이브러리들로부터 가져 온 머티리얼 레이어들을 블렌딩하는 것은 이전의 접근법에 비해 여러 개의 이점들을 제공합니다. 이전의 접근법이라는 것은 머티리얼 파라미터들을 특정 모델을 위해 제작된 텍스쳐로부터 가져온 값으로 지정하는 것을 말합니다:


    • 여러 개의 애셋들을 재사용할 수 있습니다.
    • 단일 애셋에 대한 복잡도를 줄일 수 있습니다.
    • 게임의 외형을 결정하는 머티리얼들을 통합하고 집중제어할 수 있습니다. 이는 아트 디렉션과 기술 디렉션을 쉽게 만듭니다.


새로운 워크플로우를 완전히 받아 들이기 위해서, 우리는 기존 툴에 대해 다시 생각해 볼 필요가 있었습니다. Unreal Engine 은 UE3 초기부터 노드 그래프 기반 머티리얼 에디터를 가지고 있었습니다. 이 노드 그래프는 입력( 텍스쳐, 상수 ), 연산, 그리고 출력 등을 지정하는데, 이것들은 쉐이더 코드로 컴파일됩니다.


머티리얼 레이어링이 이 작업의 대부분을 차지하는 주요 목표이기는 하지만, 놀랍게도 머티리얼 레이어들을 제작하고 블렌딩하는 것을 지원하기 위한 툴쪽에 추가될 필요가 있는 작업들이 매우 적었습니다. UE4 의 머티리얼 에디터에서 노드 그래프의 일부분은 이미 함수로 그룹화될 수 있었으며 다수개의 머티리얼들에서 사용되고 있었습니다. 이 기능은 머티리얼 레이어를 구현하기 위해서 자연스럽게 들어 맞았습니다. 최상위에 있는 고정 함수 시스템이 아니라 노드 기반 에디터 내부에 머티리얼 레이어를 유지하는 것은 레이어들을 프로그래밍가능한 방식으로 매핑하고 합칠 수 있게 해 주었습니다.


워크플로우를 합리화하기 위해서, 우리는 새로운 데이터 타입인 머티리얼 애트리뷰트를 추가했는데, 이는 모든 머티리얼 출력 데이터를 저장합니다. 이 새로운 타입은 다른 타입들과 마찬가지로 머티리얼 함수에서 단일 핀으로서 넘겨지거나( out ) 넘겨받거나( in ) 할 수 있습니다. 그리고 와이어를 통해 전달되거나 직접적으로 출력될 수도 있습니다. 이러한 변화때문에, 머티리얼 레이어들은 이전에 텍스쳐가 그랬던 것처럼 입력으로서 드래깅되거나 합쳐지거나 조작되거나 출력으로 나갈 수 있습니다. In fact, most material graphs tend to be simpler since the adoption of layers as the primary things custom to a particular material are how layers are mapped and blended. This is far simpler than the parameter specific manipulation that used to exist.


개념적으로 선형적인 작은 머티리얼 파라미터 집합을 가졌기 때문에, 쉐이더에서 레이어들을 블렌딩하는 것이 실제로 실용적이 되었습니다. 우리는 이것이 순수한 오프라인 편집 시스템과 비교했을 때 품질을 많이 개선해준다고 느낍니다. 텍스쳐 데이터의 해상도는 극단적으로 높아질 수 있습니다. 왜냐하면 데이터를 다양한 주파수에서 매핑하는 것이 가능하기 때문입니다; 버텍스당 혹은 저주파수 텍스쳐 데이터는 단일( unique )하며, 레이어 블렌드 마스크와 노멀맵, 그리고 구멍( cavity )맵은 메시당 지정되며, 머티리얼 레이어들은 메시의 서피스 상에서 타일링됩니다. 더 발전된 케이스들은 심지어 더 많은 주파수를 사용할 수 있습니다. 쉐이더 비용때문에 실질적으로는 몇 개의 레이어만 사용하도록 제약을 받고 있기는 하지만, 우리 아티스트들은 아직까지는 그 제약으로 인한 문제를 겪은 적이 없습니다.


그림 6: UE4 머티리얼 에디터에서의 단순한 머티리얼 레이어링.


An area that is cause for concern is that the artists in cases have worked around the in-shader layering limitations by splitting a mesh into multiple sections, resulting in more draw calls( 역주 : 여러 부분으로 나뉘어 있는 메시에 대한 레이어링은 드로 콜이 늘어나게 만들 수 있다는 의미인듯 합니다 ). CPU 측 코드 최적화로 인해 UE4 에서의 드로 콜 카운트가 개선되었기를 기대하기는 하지만, 이는 나중에는 문제의 소지가 있어 보입니다. 아직 연구하지 못한 영역은 레이어가 표면을 100% 덮고 있는 경우에 다이내믹 브랜칭( 역주 : if 같은 것 )이 쉐이더 비용을 감소시켜 줄 것이냐는 것입니다.


지금까지 머티리얼 레이어에 대한 우리의 경험은 매우 긍정적입니다. 생산성도 향상되었고 품질도 많이 개선되었습니다. 우리는 레이어를 검색하거나 미리보기하기 더 쉽게 만들어서 머티리얼 레이어 라이브러리에 대한 아티스트 인터페이스를 개선하기를 바랍니다. 또한 현재의 런타임 시스템에다가 오프라인 제작/베이킹 시스템을 추가하는 것을 연구해서 더 많은 개수의 레이어들을 지원하고 더 나은 확장성( scalability )를 제공하고자 합니다.


그림 7: 녹( rust )과 블렌딩한 머티리얼 레이어들


그림 8: 머티리얼 레이어링은 디테일의 다중 주파수들을 활용하는 결과를 산출합니다.


Lighting Model


쉐이딩과 같이 우리는 좀 더 물리에 기반한 라이팅 모델을 만들고 싶었습니다. 우리가 집중한 두 가지 영역은 light falloff 와 일반적으로 area light 라 불리는 non-punctual sources of emission 이었습니다.


Light falloff 를 개선하는 것은 상대적으로 직관적이었습니다: 우리는 물리적으로 정확한 inverse-square falloff 를 채택했으며 사진 밝기 단위를 lumens 로 변경했습니다. 그렇긴 하지만, 우리가 다뤄야 했던 사소한 문제는 이러한 종류의 falloff 는 그것이 0 이 되는 거리가 존재하지 않는다는 것입니다. 그러나 실시간 및 오프라인 계산의 효율성을 위해서 우리는 광원의 영향력이 미치는 한계를 강제로 정할 필요가 있었습니다. 이를 위한 여러 가지 방법들이 존재합니다 [4], but we chose to window the inverse-square function in such a way that the majority of the light's influence remains unaffected, whilst still providing a soft transition to zero. 이는 광원의 반지름을 수정하는 것이 그것의 유효 밝기를 변경하지 않는다는 훌륭한 특징을 가지고 있습니다. 이는 미적 관점에서 라이팅이 잠길때( locked ) 매우 중요할 수 있습니다. 그러나 광원의 크기는 성능상의 이유로 여전히 조절될 필요가 있습니다.


식 9


분모에서 1 은 광원과 가까운 거리에서의 function exploding 을 피하기 위한 것입니다. 물리적인 정확성이 요구되지 않는 경우라면 아티스트가 제어할 수 있는 파라미터로 노출될 수 있습니다.


The quality difference this simple change made, particularly in scenes with many local light sources, means that it is likely the largest bang for buck takeaway.


그림 9: Inverse square falloff 는 더 자연스러운 결과를 산출합니다.


Area Lights



에어리어 광원이 더 사실적인 이미지를 생성하는 일만 하는 것은 아닙니다. 그것들은 물리 기반 머티리얼을 사용할 때 매우 중요하기도 합니다. 우리는 에어리어 광원이 없을 때 아티스트들이 매우 낮은 러프니스 값을 칠하는 것을 직감적으로 피하게 된다는 사실을 알게 되었습니다. 왜냐하면 낮은 러프니스 값은 매우 작은 스펙큘러 하이라이트를 생성하게 되며 이는 매우 부자연스럽기 때문입니다. Essentially, they were trying to reproduce the effect of area lighting from punctual sources[각주:4].


불운하게도 이 리액션은 쉐이딩과 라이팅 사이의 결합을 유도하며, 이는 물리 기반 렌더링의 햄식 원칙 중 하나를 깨게 됩니다: 머티리얼은 그것이 생성되었던 것과 다른 환경에서 사용될 때 수정될 필요가 없어야만 합니다.


에어리어 라이트는 활발히 연구중인 분야입니다. 오프라인 렌더링에서의 일반적인 해법은 광원의 표면에 여러 개의 점 광원을 배치하는 것입니다 - uniform sampling 이나 importance sampling [12] [20] 중 하나를 사용합니다. 이는 실시간 렌더링에서는 비실용적입니다. 가능한 해법들에 대해서 논의하기 전에, 우리의 요구를 정리해 보겠습니다:


일관성있는 머티리얼 외형


    • Diffuse BRDF 와 Specular BRDF 를 사용해 평가되는 에너지의 총량이 확연히 다를 수는 없습니다.

입체각( solid angle )이 0 인것처럼 점광원에 접근합니다


    • 이를 성취하기 위해 쉐이딩 모델의 어떤 관점이라도 잃어버려서는 안 됩니다.


아무 곳에서나 사용할 수 있을만큼 빨라야 합니다


    • 그렇지 않으면, 우리는 앞에서 언급한 "biased roughness" 이슈를 풀 수 없습니다.


Billboard Reflections


빌보드 반사 [13]는 IBL 형식이며, 이는 discrete light source 들을 위해 사용될 수 있습니다. 방출된 빛을 저장하는 2D 이미지는 3D 공간에서 사각형에 매핑됩니다. 환경맵 pre-filtering 과 유사하게, 그 이미지는 다양한 크기의 스펙큘러 분산 콘( cone )들로 pre-filtered 됩니다. 이 이미지로부터 스펙큘러 쉐이딩을 계산하는 것은 콘 트레이싱( cone tracing )의 형식이라고 생각될 수 있습니다. 여기에서 콘은 스펙큘러 NDF 를 근사계산하게 됩니다. 콘의 중심에서 나가는 레이( ray )은 빌보드의 평면과 충돌하게 됩니다. 이미지 공간에서의 충돌지점은 텍스쳐 좌표계로서 사용되며, 충돌지점에서의 콘의 반지름은 적절한 pre-filtered mip level 을 유도하기 위해서 사용됩니다. 슬프게도, 이미지들은 매우 복잡한 에어리어 라이트를 직관적인 방식으로 표현해 주는 반면에, 빌보드 반사는 여러 가지 이유로 우리의 두 번째 요구를 만족시켜 주지 못합니다:


    • 이미지가 평면에서 pre-filetered 되기 때문에, 이미지 공간에서 표현될 수 있는 제한된 입체각이 존재합니다.
    • 평면에 충돌하지 않는 레이가 존재할 때 데이터가 존재할 수 없습니다.
    • 빛 벡터 l 을 모르거나 반사 벡터로 취급됩니다.


Cone Intersection


콘 트레이싱은 pre-filtering 을 요구하지 않습니다; 그것은 분석적으로( analytically ) 수행될 수 있습니다. Oat 의 cone-cone intersection 공식 [15] 를 사용해서 트레이싱 중인 콘과 구의 충돌을 실험해 본 적이 있는데, 그 비용이 너무 비싸서 실용적이지 못했습니다. 현재 Drobot [7] 에 의해 제시된 대안적인 기법은 콘을 쉐이딩 지점을 바라보는 디스크( disk )와 충돌시킵니다. 그리고 나서 NDF 를 근사계산하는 다항식은 충돌 영역 상에서 조각별로 적분( piece-wise integrated )을 수행합니다.


Drobot 의 최신 이론을 사용하면, 이는 흥미로운 연구 영역인 것처럼 보입니다. 하지만 그것의 현재 형식으로는 우리의 요구를 만족시킬 수 없습니다. 콘을 사용하기 때문에, 스펙큘러 분산은 반드시 방사상으로( radially ) 대칭이어야만 합니다. 이는 미세표면 스펙큘러 모델의 핵심적 특징인 늘어난 하이라이트를 배제합니다. 또한 빌보드 반사처럼 쉐이딩 모델에 의해 요구되는 라이트 벡터가 존재하지 않습니다.


Specular D Modification


우리가 작년에 제시한 접근법 [14] 은 광원의 입체각에 기반한 스펙큘러 분산을 수정하는 것입니다. 이것의 기반 이론은 광원의 분산은 그것과 연관된 콘 각도에 대한 D(h) 와 같다는 것을 고려하는 것입니다. 하나의 분산과 다른 분산의 convolving 은 새로운 콘을 유도하기 위해 두 콘의 각도를 더함으로써 근사계산될 수 있습니다. 이를 위해, 식 3 의 α 를 유효한 콘 각도로 변환하고, 광원의 각도를 더합니다. 그리고 그것을 다시 원래대로 변환합니다. 이 α' 는 이제 α 를 대체합니다. 우리는 이를 수행하기 위해서 다음과 같은 근사계산을 사용합니다:


식 10


이것은 효율적이기는 하지만, 이 기법은 안타깝게도 첫 번째 요구를 만족시키지 못합니다. 왜냐하면 큰 에어리어 라이트를 사용해서 빛을 비추면 매우 반짝이는 머티리얼이 거칠게 나오기 때문입니다. 이것은 헷갈릴 수 있습니다. 하지만 이 기법은 스펙큘러 NDF 가 작을 때 -- 예를 들어 Blinn-Phong -- 잘 동작합니다. 그러므로 광원의 분산과 더 잘 들어 맞습니다. 우리가 선택한 ( GGX 에 기반한 ) 쉐이딩 모델에 있어서, 이것은 실행가능하지 않습니다.


그림 10: 왼쪽은 참조. 오른쪽은 specular D modification. 

이 근사계산은 지표각과 연마된 놋쇠 머리와 같은 매끈한 머티리얼에서는 구 모양을 상실하고 거칠어 보이기 때문에 좋지 않습니다.


Representative Point


특정 쉐이딩 지점에 대해 에어리어 라이트로부터 오는 모든 빛을 광원의 서피스 상의 단일 representative point( 대표점 ) 로부터 오는 것으로 취급할 수 있다면, 우리의 쉐이딩 모델이 직접적으로 사용될 수 있습니다. 합리적인 선택은 가장 큰 기여도를 가진 점입니다. Phong 분산에 대해, 이것은 반사 레이에 대해 가장 작은 각도를 가진 광원상의 점입니다.


이 기법은 [16][22] 전에 출간되었지만, 에너지 보존은 전혀 고려되지 않았습니다. 방출된 빛의 원점을 이동시킴으로써, 우리는 라이트의 입체각을 효과적으로 증가시키지만, 부가적인 에너지를 보상하지는 못했습니다. 그것을 교정하는 것은 입체각으로 분할하는 것보다는 약간 더 복잡합니다. 왜냐하면 에너지의 차이는 스펙큘러 분산에 의존적이기 때문입니다. 예를 들어, 거친 머티리얼에 대해 입사하는 빛의 방향을 변경하하면 에너지 변화가 매우 적지만, 매끈한 머티리얼에 대해 방향을 변경하면 에너지 변화가 클 수 있습니다.


Sphere Lights


수평선 위에 존재하는 구형 라이트에 대한 복사조도( irradiance )는 포인트 라이트와 동일합니다 [18]. 비직관적이기는 하지만, 구가 수평선 아래쪽에 걸쳐 있을 때, 우리가 부정확성을 허용한다면, 스펙큘러 라이팅만을 고려할 필요가 있다는 것을 의미합니다. 우리는 반사 레이에 대해 가장 작은 각도를 가지는 점을 찾아내는 것을 근사계산하는데, 이는 레이에 대해 가장 짧은 거리를 가진 점을 찾아 냄으로써 수행됩니다. 구를 다룰 때 이것은 직관적입니다:


식 11


여기에서, L 은 쉐이딩 지점에서 라이트의 중심까지의 벡터이며, sourceRadius 는 라이트 구의 반지름이며, r 은 반사 벡터입니다. 그 레이가 구와 충돌하는 경우에는, 계산된 그 점은 구의 중심에 대해 레이상의 가장 가까운 점일 것입니다. 정규화를 하고 나면, 그것은 동일합니다.



방출된 빛의 중심을 구의 표면으로 움직임으로써, 구의 원호각( subtended angle )에 의해 효과적으로 넓어진 스펙큘러 분산을 얻게 됩니다. 그것은 미세표면 분산은 아니기는 하지만, 이는 정규화된 Phong 분산을 사용해서 최고로 잘 설명될 수 있습니다:


식 12


식 13


여기에서 φrrL 사이의 각도이며, φs 는 구의 원호각의 절반입니다. Ipoint 는 정규화되어 있으며, 이는 반구상에서의 적분의 결과가 1 임을 의미합니다. Isphere 는 명백히 더 이상 정규화되지 않으며, 파워 p 에 의존하며, 적분값은 더 클 수 있습니다.


그림 11: 식 13 에서 설명된 넓어진( widening )효과를 시각화.


이 에너지 증가를 근사계산하기 위해, 우리는 이전에 설명한 specular D modification 에 의해 사용된 것과 같은 추론을 적용합니다. 여기에서 우리는 라이트의 입체각에 기반해 분산을 넓어지게 만듭니다. 우리는 더 넓은 분산을 위한 정규화 요소( normalization factor )를 사용하고 원래의 정규화 요소를 대체합니다. GGX 의 경우에 정규화 요소는  입니다. 대표점 연산에 대한 정규화 근사계산을 유도하기 위해서, 우리는 넓어진 새로운 정규화 요소를 원래의 요소로 나눕니다:


식 14


대표점 기법의 결과는 우리의 요구를 모두 만족시킵니다. 에너지 보존을 올바로 고려함으로써, 머티리얼은 광원 크기를 고려하지 않고 동일하게 동작합니다. 매끈한 머티리얼들은 여전히 뾰족한 스펙큘러 하이라이트를 생성하며, BRDF 에 대한 입력만을 수정했기 때문에 우리 쉐이딩 모델은 영향을 받지 않습니다. 마지막으로 이것은 아티스트들이 원하는 모든 곳에 사용할 수 있을만큼 효율적입니다.


그림 12: 왼쪽은 참조, 오른쪽은 대표점( representative point ) 기법.

에너지 보존이 완벽하지는 않지만, 우리의 근사계산은 참조와 납득이 갈만큼 일치합니다.



Tube Lights


구형 라이트는 전구를 표현하는데 유용하고, 튜브 라이트( 캡슐 )는 우리가 실세계에서 매우 자주 접하는 형광등을 표현하는데 유용합니다. 시작하면서, 우리는 길이를 가지지만 반지름이 0 인, 선형 라이트라고 불리는 튜브 라이트를 해결했습니다. 라인 세그먼트에 대한 복사조도는 세그먼트가 수평선 위쪽에 존재하는 한 분석적으로 적분될 수 있습니다 [16, 17]:


식 15


여기에서 L0 과 L1 은 쉐이딩 지점에서 세그먼트의 끝점까지의 벡터입니다.


우리는 이 공식을 수정해 음의 복사조도, 0 으로 나누기를 방지했고, 길이가 0 일 때 포인트 라이트 falloff 와 일치시켰습니다.


식 16


선형적인 라이트 스펙큘러를 위해, 우리는 다음 공식들에서 t 에 대해 풀 필요가 있습니다:


식 17


Picott [16] 은 r 에 대한 가장 작은 각도를 위해 t 를 발견했습니다:


식 18


구의 경우와 같이, 우리는 가장 짧은 거리가 아니라 가장 작은 각도를 근사계산하고 풀었습니다:


식 19


There are edge cases that aren't properly handled such that this won't always find the closest point but it is little cheaper to calculate and seems to produce just as reasonable of results as Equation 18.


식 18 과 식 19 는 모두 레이 대신에 라인으로서 r 을 취급하기 때문에, 이 두 해법은 라인 세그먼트로부터 멀리 떨어진 곳을 가리키는 레이들을 제대로 다룰 수 없다는 것을 기억해야만 합니다. 이는 완벽하게 평평한 표면에서라 할지라도 한 범에서 다른 점으로 갈 때 갑작스런 변화를 발생시킬 수 있습니다. 이는 반사 레이가 라이트를 향해 가리키고 있다가 멀리 떨어진 곳을 가리키게 될 때 발생할 수 있습니다. 우리는 계산된 점과 각의 끝점들 사이에 있는 점을 선택함으로써 이 문제를 해결할 수 있지만, 그 비용은 비쌉니다. 현재로서는 우리는 아티팩트를 그냥 받아들여야 합니다.


에너지를 보존하기 위해서 우리는 구형 라이트를 위해서 사용했던 것과 같은 개념을 적용합니다. 스펙큘러 분산은 라이트의 지표각에서 넓어지지만, 이번에는 한 차원으로만 넓어집니다. 그래서 우리는 GGX 의 비등방성 버전을 사용합니다 [2]. 비등방성 GGX 를 위한 정규화 요소는 

 입니다. 여기에서 등방성의 경우에는  입니다. 이는 우리에게 다음을 제공합니다:


식 20


우리는 라이트의 원점만을 변경했고 에너지 보존을 적용했기 때문에, 이 연산들은 누적될 수 있습니다. 라인 세그먼트와 구를 사용해서 그렇게 함으로써, 튜브 라이트의 행동에 잘 맞도록 도형들과 모델들에 대한 convolution 을 근사계산합니다. 튜브 라이트의 결과는 아래 그림 13 에 나와 있습니다.


그림 13: 대표점 기법을 에너지 보존과 함께 사용한 튜브 라이트.


우리는 대표점 기법을 에너지 보존 기법과 함께 사용한 것이 단순한 도형에 대해 효율적이며 구와 튜브에 기반해서 미래에는 다른 도형들도 적용하고자 합니다. 특히, 우리는 더욱 복잡하고 다양한 색상을 가진 광원을 표현하기 위해서 텍스쳐를 입힌 쿼드를 적용할 생각입니다.


Conclusion


쉐이딩, 머티리얼, 라이팅의 영역에서 좀 더 물리에 기반한 구현으로 이동하고자 하는 시도는 매우 성공적인 것으로 증명되었습니다. 그것은 최근의 Infiltrator 데모에서의 비주얼에 크게 기여했으며, 우리는 이러한 개선을 앞으로의 프로젝트들에서 사용하려는 계획을 가지고 있습니다. In fact, in cases where it is practical these changes have been integrated into Fortnite, a project well into development before this work began. 우리는 더 많은 유연성과 확장성이라는 목적을 가지고 다양한 모든 씬과 모든 수준의 하드웨어에서 물리기반 접근법의 이점을 취할 수 있게 한다는 목적을 가지고 계속해서 이러한 영역들을 개선해 나가려고 합니다.


Acknowledgements


Epic Games 에 감사드리고 싶습니다. 특히 이 작업에 도움을 준 렌더링 팀의 모두와 방향성 및 피드백을 제공해 주고 결국에는 그것을 사용해 아름다운 것을 만들어 준 아티스트들에게 감사드립니다. Sebastien Legarde 에게 특별한 감사를 드리고 싶은데요, 그는 나의 중요도 샘플링 수학에서의 실수를 찾아 주었으며, 우리 환경 BRDF 의 개발에 도움을 주었습니다. Never underestimate how valuable it can be to have talented licensees around the world looking over the code you write. 마지막으로 가치있는 피드백을 주신 Stephen Hill 과 Stephen McAuley 에게 감사드리고 싶습니다.


Bibliography


[1] AMD, CubeMapGen: Cubemap Filtering and Mipchain Generation Tool. http://developer.amd.com/resources/archive/archived-tools/gpu-tools-archive/cubemapgen/


[2] Burley, Brent, “Physically-Based Shading at Disney”, part of “Practical Physically Based Shading in Film and Game Production”, SIGGRAPH 2012 Course Notes. http://blog.selfshadow.com/publications/s2012-shading-course/


[3] Colbert, Mark, and Jaroslav Krivanek, “GPU-based Importance Sampling”, in Hubert Nguyen, ed., GPU Gems 3, Addison-Wesley, pp. 459–479, 2007. http://http.developer.nvidia.com/GPUGems3/gpugems3_ch20.html


[4] Coffin, Christina, “SPU Based Deferred Shading in Battlefield 3 for Playstation 3”, Game Developers Conference, March 2011. http://www.slideshare.net/DICEStudio/spubased-deferredshading-in-battlefield-3-for-playstation-3


[5] Cook, Robert L., and Kenneth E. Torrance, “A Reflectance Model for Computer Graphics”, Computer Graphics (SIGGRAPH ’81 Proceedings), pp. 307–316, July 1981.


[6] Cook, Robert L., and Kenneth E. Torrance, “A Reflectance Model for Computer Graphics”, ACM Transactions on Graphics, vol. 1, no. 1, pp. 7–24, January 1982. http://graphics.pixar.com/library/ReflectanceModel/


[7] Drobot, Micha l, “Lighting Killzone: Shadow Fall”, Digital Dragons, April 2013. http://www.guerrilla-games.com/publications/


[8] Gotanda, Yoshiharu, “Practical Implementation of Physically-Based Shading Models at tri-Ace”, part of “Physically-Based Shading Models in Film and Game Production”, SIGGRAPH 2010 Course Notes. http://renderwonk.com/publications/s2010-shading-course/


[9] Hoffman, Naty, “Background: Physics and Math of Shading”, part of “Physically Based Shading in Theory and Practice”, SIGGRAPH 2013 Course Notes. http://blog.selfshadow.com/publications/s2013-shading-course/


[10] Lagarde, S´ebastien, “Spherical Gaussian approximation for Blinn-Phong, Phong and Fresnel”, June 2012. http://seblagarde.wordpress.com/2012/06/03/spherical-gaussien-approximationfor-blinn-phong-phong-and-fresnel/


[11] Lazarov, Dimitar, “Getting More Physical in Call of Duty: Black Ops II”, part of “Physically Based Shading in Theory and Practice”, SIGGRAPH 2013 Course Notes. http://blog.selfshadow.com/publications/s2013-shading-course/


[12] Martinez, Adam, “Faster Photorealism in Wonderland: Physically-Based Shading and Lighting at Sony Pictures Imageworks”, part of “Physically-Based Shading Models in Film and Game Production”, SIGGRAPH 2010 Course Notes. http://renderwonk.com/publications/s2010-shadingcourse/


[13] Mittring, Martin, and Bryan Dudash, “The Technology Behind the DirectX 11 Unreal Engine Samaritan Demo”, Game Developer Conference 2011. http://udn.epicgames.com/Three/rsrc/Three/DirectX11Rendering/MartinM_GDC11_DX11_presentation.pdf


[14] Mittring, Martin, “The Technology Behind the Unreal Engine 4 Elemental demo”, part of “Advances in Real-Time Rendering in 3D Graphics and Games Course”, SIGGRAPH 2012. http://www.unrealengine.com/files/misc/The_Technology_Behind_the_Elemental_Demo_16x9_(2).pdf


[15] Oat, Chris, “Ambient Aperture Lighting”, SIGGRAPH 2006. http://developer.amd.com/wordpress/media/2012/10/Oat-AmbientApetureLighting.pdf


[16] Picott, Kevin P., “Extensions of the Linear and Area Lighting Models”, Computers and Graphics, Volume 12 Issue 2, March 1992, pp. 31-38. http://dx.doi.org/10.1109/38.124286


[17] Poulin, Pierre, and John Amanatides, “Shading and Shadowing with Linear Light Sources”, IEEE Computer Graphics and Applications, 1991. http://www.cse.yorku.ca/~amana/research/


[18] Quilez, Inigo, “Spherical ambient occlusion”, 2006. http://www.iquilezles.org/www/articles/sphereao/sphereao.htm


[19] Schlick, Christophe, “An Inexpensive BRDF Model for Physically-based Rendering”, Computer Graphics Forum, vol. 13, no. 3, Sept. 1994, pp. 149–162. http://dept-info.labri.u-bordeaux.fr/~schlick/DOC/eur2.html


[20] Snow, Ben, “Terminators and Iron Men: Image-based lighting and physical shading at ILM”, part of “Physically-Based Shading Models in Film and Game Production”, SIGGRAPH 2010 Course Notes. http://renderwonk.com/publications/s2010-shading-course/


[21] Walter, Bruce, Stephen R. Marschner, Hongsong Li, Kenneth E. Torrance, “Microfacet Models for Refraction through Rough Surfaces”, Eurographics Symposium on Rendering (2007), 195–206, June 2007. http://www.cs.cornell.edu/~srm/publications/EGSR07-btdf.html


[22] Wang, Lifeng, Zhouchen Lin, Wenle Wang, and Kai Fu, “One-Shot Approximate Local Shading” 2006.

  1. 이 weighting 은 단순한 형태로 남겨진 식 7 에는 표현되어 있지 않습니다. [본문으로]
  2. 우리는 R16G16 포맷을 사용합니다. 왜냐하면 해상도가 중요하다는 것을 발견했기 때문입니다. [본문으로]
  3. 그들의 쉐이딩 모델은 서로 다른 D 와 G 함수들을 사용합니다. [본문으로]
  4. This tallies with observations from other developers [7, 8]. [본문으로]

주의 : 공부하면서 정리한 것이므로 잘못된 내용이 포함되어 있을 수 있습니다.


개요



UE4, Unity 5, Frostbite, CryEngine 등과 같은 유명한 상용엔진들로 만든 게임들은 이제 기본적으로 PBR( Physically-Based Rendering )을 택하고 있습니다. 많은 AAA 급 타이틀들이 PBR 의 우수함을 증명했습니다. 우리나라야 이제 게임 기술 후진국이 되어 가고 있기 때문에( 주관적 판단임 ) 인기가 시들하고 개념을 모르는 사람도 많지만, 카더라 통신에 의하면 중국마저도 다들 PBR 에 꽂혀 가고 있다고 하더군요.


아티스트가 PBR 을 처음 접하면 매우 어렵습니다. 일종의 라이팅 패러다임의 변화이기 때문입니다. 그러나 조금 익숙해지면 기존의 라이팅 모델들보다 훨씬 적은 매개변수만을 사용해 라이팅을 제어할 수 있어서 PBR 을 선호하게 됩니다. 그리고 라이팅 환경이 바뀌어도 일관된 결과를 보여 준다는 점에서 매우 매력적입니다.


하지만 프로그래머에게 있어서는 지옥의 시작입니다. 모르는 단어들도 수두룩하게 나오는 데다가, 비용도 비싸기 때문에 최적화에 어려움을 겪게 됩니다. 게다가 자료도 그리 많지 않은 편입니다. 구글링을 해 보시면 알겠지만, PBR 구현에 대해 명료하게 다루는 글들이 많지 않습니다. 특히 PBR 구현에 있어 대세인 Cook-Torrance 에서 사용하는 GGX 라는 것은 검색해도 개념을 설명하는 글들을 찾기 힘듭니다. 


그래서 이 문서에서는 GGX 라는 것이 어떻게 나오게 된 것인지 가이드를 제공하고자 합니다. GGX 에 대해서 파고 들어 설명하는 글은 아닙니다. 이것을 이해하기 위해서 봐야 될 문서를 정리했다고 생각하시면 됩니다( 제가 실무를 통해 직접 구현해 본 것이 아니기 때문에 이해도가 낮습니다 ).


Cook-Torrance



참고 자료 : Cook-Torrance

참고 자료 : Specular BRDF Reference


우리가 기존에 다루었던 라이팅 모델들은 대부분 어느 정도는 미세면( microfacet )에 대해서 고려하고 있습니다. 이 표면의 거칠기를 어떻게 근사계산하느냐에 따라서 여러 가지 모델들이 나뉘게 됩니다. 이 거칠기에 의해서 reflectance model 이 결정되는데요, 아마 PBR 을 검색해서 이 문서를 찾으실 정도의 분들이라면 BRDF( Bidirectional Reflectance Distribution Function )의 개념에 대해서는 이해하고 계실 것이라고 가정합니다. 


만약 BRDF 가 뭔지 모르겠다는 분들이 있다면 그것부터 공부하고 오시는 것이 좋을 것이라 생각합니다. 그렇지 않다면 이 문서를 더 봐도 무슨 말을 하는지 이해하기 어려울 수 있습니다. 어쨌든 미세면 개념은 매우 중요합니다. 그리고 이와 관련한 많은 쉐이딩 이론이 존재합니다. 하지만 여기에서는 Cook-Torrance 모델에 대해서만 다루도록 하겠습니다.


Cook-Torrance 는 Robert L. Cook 과 Kenneth E. Torrance 에 의해 개발된 라이팅 이론입니다. 이는 Phong 이나 Blinn-Phong 보다는 좀 더 물리적인 현실감을 제공합니다. 이 모델은 오브젝트의 표면이 매우 많은 미세면에 의해 구성되어 있다고 가정합니다. 이 미세면들은 개별적으로 들어 오는 빛을 반사하게 되는데요, 이것이 거치냐 매끄럽냐에 따라서 반사하는 패턴이 달라지게 된다는 것입니다. 물론 실제로 그것을 다 계산해 주면 좋겠지만, 컴퓨팅 파워 및 메모리의 부족으로 인해 분산함수를 사용하게 됩니다.


Cook-Torrance 에서는 대부분의 쉐이딩 모델과 마찬가지로 ambient, diffuse reflection, specular reflection 항을 사용합니다. 그 중 diffuse reflection 을 위해서는 Lambert reflection( N dot L )을 사용합니다. 대부분의 계산은 specular reflection 에 초점을 맞추고 있습니다. 이 모델의 최종 공식은 다음과 같습니다.



여기에서 k 는 diffuse 계수입니다. ( 1 - k ) 가 들어 가는 것은 에너지 보존을 위해서입니다. 그리고 rs 는 specular 항입니다.


이 specular 항은 다음과 같이 계산됩니다.



F 는 Fresnel 항이고, D 는 Distribution 항이고, G 는 Geometric shadow( Geometric attenuation ) 항입니다. 각 항에 대한 자세한 설명은 [ Cook-Torrance ]에서 확인하시기 바랍니다. 


이제 각 항에다가 어떤 공식을 넣느냐에 따라서 변종이 발생합니다. 그 변종들의 공식에 대해서는 [ Specular BRDF Reference ] 라는 기사에 잘 정리되어 있습니다. 이 중에 요새 GGX 가 대세라 하더군요. 


GGX?



참고 자료 : Microfacet Models for Refraction through Rough Surfaces


GGX 라는 것은 [ Microfacet Models for Refraction through Rough Surfaces ] 에서 처음 소개된 것으로 보입니다( 번역 : http://lifeisforu.tistory.com/352 ). 이 논문의 저자로 Kenneth E. Torrance 가 포함되어 있네요.


We also introduce a new microfacet distribution, which we call GGX, that provides a closer match for some of our surfaces than the standard Beckmann distribution function.


출처 : Microfacet Models for Refraction through Rough Surfaces


 

말 그대로 이 논문에서 새로운 미세면 분산 함수인 GGX 를 소개했습니다. 그런데 이 문서에서도 "GGX 가 뭐의 약자이다" 라는 식의 이야기는 없습니다. 그냥 제가 추측하기로는 shadow visibility 를 구할 때 G1 을 두 번 곱하게 되는데, 그래서 GG 가 아닐까 싶네요. X 는 eXtended multiply 정도의 느낌이랄까... 이것에 대해 정확하게 아시는 분이 있다면 댓글 달아 주시면 좋겠습니다.


수정: 댓글달아 주신 3D 님의 "Ground Glass Unknown" 을 힌트로 검색을 해 봤는데, 이게 GGX 가 맞더군요. http://jcgt.org/published/0007/04/01/paper.pdf


어쨌든 이 GGX 에 대한 완벽한 이해를 원하신다면 해당 문서를 보시는 것이 좋을 것 같습니다.


그리고 GGX 최적화를 위해서 [ Optimizing GGX Shaders with dot( L, H ) ] 라는 글도 참고해 보실만 할 것 같습니다. 수정 : 실제로 적용해 본 분에 의하면, instruction 수 차이도 별로 안 나고 오류가 있다고 하네요. 그래서 적용했다가 뺐다고 하는데, 자세한 내용은 기억이 안 난다고 합니다. 수정2 : 다른 분이 이 방식의 옵티마이즈를 해 보고 반론을 주셨습니다. 아래 카톡 대화를 참조하세요.

 

 

또한 [ Adopting a Physically-based Microfacet BRDF model in Three.JS ] 라는 글도 읽어 보시면 도움이 될 것 같습니다. 링크의 페이지에서는, 웹에서 PBR 을 구현하면서 만나게 된 여러 가지 이슈들에 대해 정리해 놓았습니다.


추가: UE4 문서 같은데 보면 lighting model 은 light-source 를 모델링하는 것을 의미하더군요. 예를 들어 area light 를 위해 billboard-reflections, cone-intersection, representive-point, sphere-lights, tube-lights 등의 모델을 사용할 수 있습니다( http://lifeisforu.tistory.com/348 의 lighting model 항목을 참조하세요 ).

+ Recent posts