원문 : 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 는 유사한 적분에 대한 한 쌍의 analytical approximations 을 제시함으로써 한 단계 더 나아갔습니다 [11]. 3
마지막으로 중요도 샘플링된 레퍼런스들을 근사계산하기 위해서 우리는 두 개의 미리 계산된 합을 곱합니다:
그림 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
여기에서 φr 은 r 과 L 사이의 각도이며, φ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.
'Graphics' 카테고리의 다른 글
Texture Size 와 MipMap Level (4) | 2018.06.02 |
---|---|
[ 번역 ] 실제 이미지에서 specular 와 diffuse 분리하기 (0) | 2017.09.03 |
[ 질문 공유용 ] dead-end detection 에 대한 질문 (0) | 2017.05.04 |
[ 번역 ] Terrain Synthesis from Digital Elevation Models (0) | 2017.04.15 |
[ 번역 ] Signed Distance Fields (3) | 2017.01.20 |
[ 번역 ] Improved Alpha-Tested Magnification for Vector Textures and Special Effects (0) | 2017.01.20 |
[ 번역 ] Microfacet Models for Refraction through Rough Surfaces (0) | 2016.12.02 |
[ 번역 ] Physically-Based Shading at Disney (2) | 2016.11.30 |
[ 번역 ] A Reflectance Model for Computer Graphics( Cook-Torrance ) (2) | 2016.11.29 |
GGX 라는 용어에 대해 (4) | 2015.12.14 |