원문 : http://www.elopezr.com/the-rendering-of-rise-of-the-tomb-raider/
제 이해를 위한 야매번역이므로 의역이 판을 칩니다. 이런거,,, 아무도 번역 안해주는걸,,,,!
Rise of the Tomb Raider는 완벽한 Tomb Raider 리부트의 시퀄입니다. 저는 개인적으로 툼 레이더가 정체된 오리지널 시리즈로부터 벗어나 크로프트의 스토리를 다시 이야기함으로써 신선함을 발견했습니다. 게임은 스토리에 초점을 맞춘것 뿐만 아니라 그것의 프리퀄처럼 즐길만한 크래프팅, 사냥, 등산과 탐험 메카닉을 제공합니다.
툼레이더는 데우스 엑스:Human Revolution의 개발에도 사용된 크리스탈 다이나믹스 사가 개발한 크리스탈 엔진을 사용했습니다. 후속작에는 라라 크로프트와 오시리스의 신전(2014)를 위해 개발된 Foundation이라는 새로운 엔진이 사용되었습니다. 파운데이션의 렌더링은 tiled light-prepass engine으로 널리 분류될 수 있으며, 우리는 그것이 무엇을 뜻하는지 보게 될 것입니다. 엔진은 DX11과 DX12 렌더러를 선택할 수 있습니다.(나는 이 뒤에 우리가 보게될 이유를 위해 후자DX12를 선택했습니다) 나는 프레임을 캡처하기 위해 지포스980Ti위에서 Rednerdoc 1.2를 사용했습니다. (and turned on all the bells and whistles는 무슨뜻인지 몰라서 생략)
<The Frame>
스포일러없이 나는 이 장면에서는 나쁜 사람들이 라라가 그들이 찾고있는 아티팩트를 찾고있기 때문에 라라를 쫓는다고 말할 수 있습니다, 이런 이해 관계의 충돌에서 그녀는 반드시 무기를 들 수 밖에 없습니다. 라라가 야음을 틈타 적진 안에 있는, 엔진이 보여줄 수 있는 대기와 대조적인 라이팅이 있는 장면을 사용하였습니다.
<Depth Prepass>
많은 게임에서의 관례적인 최적화 기법인 작은 depth prepass또한 여기서 볼 수 있습니다.(~100draw calls) 게임은 GPU의 Early - Z capability의 이점을 취하기위해 큰 오브젝트(스크린에서 가장 많은 공간을 차지하는 오브젝트에 가깝다)를 먼저 그립니다.(참조: https://software.intel.com/en-us/articles/early-z-rejection-sample 에서 자세한 설명) 요약하자면, GPU는 이전 픽셀 뒤에 가려져있는 여부를 판단할 수 있다면 픽셀 쉐이더를 수행하지 않을 수 있습니다. It’s a relatively cheap pass that will pre-populate the Z-buffer with depth.
여기서 나는 LOD(level of detail)이라는 테크닉이 fizzel 또는 checker board라는 이름으로 불린다는 흥미로운 사실을 발견했습니다. 거리에 따라 오브젝트를 fade하거나 low quality의 메쉬로 대체, 또는 완전히 사라지게 하는 것은 보통의 방법입니다. 이 장면의 트럭을 보십시오. 이것은 두번 렌더링되어진 것처럼 보이지만, 실제로 이것은 high LOD와 low LOD를 same position에 렌더링하고 있습니다. 픽셀에 렌더링되는 각각의 렌더링은 렌더링이 되지않은 픽셀에 렌더링합니다.(겹치지 않게 렌더링 된다는 뜻인듯) 첫번째 LOD는 182226의 버텍스들을, 반면에 두번째 LOD는 47250의 버텍스들입니다. 그것들은 시각적으로 멀리서 구별할 수 없지만, 3배나 비용이 쌉니다. 이 장면에서 LOD1이 fully rendered 되어있다면 LOD 0은 거의 사라져있습니다.
pseudorandom texture와 확률 요소(probabillity factor)는 threshold를 통과하지 못하는 픽셀들을 무시할 수 있게 해줍니다. 당신은 이 텍스쳐가 ROTR에서 사용되는것을 볼 수 있습니다. 왜 알파 블렌딩을 사용하지 않을까요? fizzle fading에 알파블렌딩을 사용하는것은 많은 단점을 가지고 있습니다.
1. Depth prepass -friendly: By rendering it like an opaque object and puncturing holes, we can still render into the prepass and take advantage of early-z. Alpha blended objects don’t render into the depth buffer this early due to sorting issues.
2. Needs extra shaders: If you have a deferred renderer, your opaque shader doesn’t do any lighting. You need a separate variant that does if you’re going to swap an opaque object for a transparent one. Aside from the memory/complexity cost of having at least an extra shader for all opaque objects, they need to be accurate to avoid popping. There are many reasons why this is hard, but it boils down to the fact they’re now rendering through a different code path.
3. More overdraw: Alpha blending can produce more overdraw and depending on the complexity of your objects you might find yourself paying a large bandwidth cost for LOD fading.
4. Z- fighting: z-fighting is the flickering effect when two polygons render to a very similar depth such that floating point imprecision causes them to “take turns” to render. If we render two consecutive LODs by fading one out and the next one in, they might z-fight since they’re so close together. There are ways around it like biasing one over the other but it gets tricky.
5. Z-buffer effects: Many effects like SSAO rely on the depth buffer. If we render transparent objects at the end of the pipeline when ambient occlusion has run already, we won’t be able to factor them in.
LOD 테크닉의 한 가지 단점은 알파 페이딩보다 더 보기 안좋아보일 수 있다는 것이지만, 적절한 노이즈 패턴, post-fizzle blurring 또는 temporal AA는 이러한 단점을 보완할수 있습니다. ROTR은 이 관점에서 할 수 있는 것이 없군요
<Normals Pass>
크리스탈 다이나믹스는 이 뒤, lighting pass에서 설명할 게임들에 적용된 상대적으로 특이한 조명 scheme을 사용합니다. For now suffice it to say that there is no G-Buffer pass, at least not in the sense that other games have us accustomed to. 대신, 이 패스에서 오브젝트는 노멀정보와 깊이 정보만을 출력합니다. 노멀은 공간 좌표계에 RGBA16_SNORM 방식으로 쓰여집니다. 의아하게도, 크리스탈 엔진은 다른 엔진또는 모델링 패키지에서 볼 수 있는 Y-up과 반대로 Z-up을 사용합니다. 알파 채널 glossiness를 포함합니다(exp2(glossiness *12 +1.0)으로 decompress). Glossiness 값은 재질이 금속인지 아닌지를 판단하기 위한 지표로 사용되기 때문에 실질적으로 음수값을 가질 수 있습니다.
위에서 볼 수 있듯이, 알파채널에서의 어두운 부분은 metalic 재질을 가지고있습니다.
Depth Prepass Benefits
픽셀 연산 비용을 절감하기 위해서 Depth Prepass가 어떻게 작동하는지를 기억하시나요?
...(추가중)
...
'2020 이전 > 프로그래밍 외적인 것들' 카테고리의 다른 글
Vulkan 튜토리얼 0. Overview (0) | 2019.06.12 |
---|---|
[190323] 볼륨메트릭 라이팅1 (0) | 2019.03.23 |
[190315] 인테리어 매핑 셰이더 (0) | 2019.03.15 |
노래 (0) | 2019.01.23 |
스카이캐슬 장례식 (0) | 2019.01.08 |