45
지지 texturing 지 지지지 지지지 Shader Study NCDC 2010 KGC 2010 Mega Splatting

지형 texturing 의 최적화

  • Upload
    xanthe

  • View
    184

  • Download
    0

Embed Size (px)

DESCRIPTION

Mega Splatting. 지형 texturing 의 최적화. 노동진 Shader Study NCDC 2010 KGC 2010. 시작하기. 지형 – Outdoor 표현의 핵심. 지형은 3D 게임에서 outdoor 를 구성하는 중요한 요소 중 하나 효율적인 지형 렌더링의 구현은 아직까지도 여전히 쉽지 않은 도전. 시작하기. 여기서는 지형 렌더링 기법 중 표면 texturing 에 대한 기법을 다룸. 멋진 지형을 표현하기 위해서는 다양한 기법이 요구됨. - PowerPoint PPT Presentation

Citation preview

지형 texturing 의 최적화노동진

Shader StudyNCDC 2010KGC 2010

Mega Splatting

시작하기

지형은 3D 게임에서 outdoor 를 구성하는 중요한 요소 중 하나효율적인 지형 렌더링의 구현은 아직까지도 여전히 쉽지 않은 도전

지형 – Outdoor 표현의 핵심

멋진 지형을 표현하기 위해서는 다양한 기법이 요구됨

여기서는 지형 렌더링 기법 중 표면 texturing 에 대한 기법을 다룸

우리의 관심은 오로지‘표면 texturing’

화려한 렌더링 효과에 대해서는 다루지 않습니다 .

시작하기

배경지형 표현 방법은 지금까지 많은 발전을 해왔습니다 .

지형 texturing 기법의 발전 : 통맵 → 타일맵 → Splatting → Clipmap

배경통맵은 texture 한 장에 지형의 모든 표면을 다 그려 넣어 표현하는 방식임

가장 단순한 방식가장 성능이 빠르다한 장의 texture 로 표현하기 때문에 , 작은 지형에 적합넓은 지형을 표현하게 되면 , texturing 퀄리티가 급격히 떨어진다 .

배경타일맵은 조각 texture 를 이어 붙이는 방식임

조합 가능한 모든 조각 texture 를 디자이너가 미리 제작함미리 준비된 조각 texture 를 맵 tool 에서 이어 붙여 , 전체 지형을 완성함2D 게임에서 가장 많이 활용되는 방식

조각 texture

이어붙이기 규칙조합된 전체 맵

배경Splatting 은 각 layer 마다 색상맵과 알파맵을 혼합하여 표현하는 방식임

색상맵 알파맵 생성된 layer texture

완성된 지형 texturing

맵툴에서 , layer 의 알파맵을 칠해서 지형을 편집하는 과정

배경Clipmap 은 아주 큰 텍스쳐 하나만 사용하며 , 필요한 부분만 로딩하는 방식

Christopher C. Tanner 등에 의해 고안됨아주 큰 한 장의 텍스쳐로 표면을 표현한다 .John Carmack 은 Mega Texturing 이라고 명명하고 , 독자적으로

구현하였다 .

Geographic Information System Quake Wars

배경Clipmap 은 H/W 가 지원하는 해상도 보다 훨씬 더 큰 텍스쳐도 표현할 수 있다

통맵 방식의 한계를 극복한 방식모든 맵을 로딩하는 것이 아니라 , 필요한 부분만 로딩하여 렌더링을 한다 .Hardware 에서 표현하지 못하는 엄청나게 큰 크기의 텍스쳐도 , virtual

mipmap 개념을 사용하여 , 가상적으로 지원한다 .

큰 텍스쳐를 가상 mipmap 화 하여 필요할 부분만 로딩

장점 단점 사용하기 좋은 곳통맵 구현이 쉽다

성능이 빠르다큰 지형을 표현하기 어렵다너무 큰 하나의 텍스쳐를 요구한다퀄리티가 떨어진다 맵이 작은 게임

타일 맵 성능이 빠르다적은 리소스를 요구한다

아티스트가 조합 가능한 타일을 다 만들어야 한다표현에 한계가 있다 일반 3D 게임

Splat-ting

아티스트 편집이 자유롭다적은 리소스를 요구한다

구현이 어렵다렌더링 성능이 가장 낮다딱 끊어지는 경계의 표현이 어렵다 일반 3D 게임

Clip map 표현에 제약이 없다렌더링 성능도 나쁘지 않다

구현이 어렵다아티스트 작업량이 너무 많아진다하드디스크 용량이 너무 크다잦은 디스크 swapping 발생

항공 사진 등 실사 데이터를 사용한 GIS

배경각 방식은 장단점이 있으며 , 현재는 splatting 기법이 가장 많이 사용되고 있음

기존 기법에서 가능한 장점만을 취하고 , 단점을 해결한 기법 제안

적은 리소스를 사용한다성능이 빠르다아티스트의 제어가 쉽다

목표

취할 장점 해결하지 않을 점

구현은 어려워도 된다표현의 자유도는 적절한

수준이면 된다

새로운 기법 - Splatting 과 통맵의 결합

성능이 빠르다

목표

적은 리소스를 사용한다아티스트의 제어가 쉽다

통맵Splatting

Splatting 은 지형 표면 texturing 의 한 기법으로 가장 널리 사용됨Splatting texturing 은 현재 3D

게임에서 가장 널리 사용되는 지형 표면 표현 방법임

여러 개의 Layer 를 사용하여 , 지형 표면을 표현함

적은 리소스만으로도 넓은 지형 표면을 표현할 수 있음

아티스트가 편집하고 제어하기 쉬움

Splatting 기법 고찰

Splatting 기법 고찰Splatting 은 같은 자리에 layer 를 여러 번 그립니다 .

색상맵 알파맵 생성된 layer texture

완성된 지형 texturing

위 그림은 같은 geometry 를 다른 texture 로 두 번 렌더링 한다Layer 의 개수가 많아 질수록 , 중복 렌더링이 더 많이 발생한다증가한 DP call 횟수도 부담을 준다 .통맵 , 타일맵 , clipmap 은 이런 문제가 존재하지 않음

Layer 1

Layer 2

Splatting 기법 고찰특히 Layer 가 blending 되는 부분이 겹쳐 그려지게 됩니다 .

기본 layer 위에 다른 detail layer 를 그린다 .

기본 layer 의 geometry detail layer 의 geometry

Overwriting 의 도식화

녹색 : detail layer 영역노랑 : 기본 layer 와 detail layer 가 둘다 그려지는 영역

빨강 : 기본 layer 영역

Splatting 은 Depth complexity 가 매우 높음

다른 방식Splatting 방식

Splatting 기법 고찰

① Frame buffer bandwidth

② Geometry overdraw

③ Duplicated shader computations

④ Increasing DrawPrimitive Call

Splatting 기법 고찰성능 저하 원인

Splatting 기법 고찰Pixel shader 를 사용한 간단한 최적화가 존재함 .

Pixel shader 을 사용하여 , 한 번에 4 개의 layer 를 그리는 최적화 기법이

존재함Frame buffer 에서 행하는 계산을 pixel shader 에서 하도록 바꾼 것DP call 횟수와 geometry 중복 계산량을 줄여줌

Splatting 기법 고찰Pixel shader 를 사용한 최적화도 근본적인 해결책은 아닙니다 .

다중 texture 접근과 blending 계산량은 줄이지 못함Layer 개수가 많아지면 , 다시 multi-pass 렌더링을 수행함문제를 경감해주기는 하지만 , 근본적 해결은 아님

복잡한 layer 사용시 , 다시 문제점 노출

Splatting 최적화 의미낮은 성능에도 불구하고 , 다른 장점 때문에 많은

게임에서 활용되고 있다 .

따라서 , 성능 문제를 해결하면 그 가치는 더욱 높아질 것이다 .

최적화 전략전체 지형은 여러 개의 Sector 로 분리됩니다 .

원 알고리즘에서 terrain 은 일정 크기의 sector 로 분할하여 , 렌더링 한다 .각 sector 는 culling 의 단위가 된다 .

전체 지형은 여러 개의 Sector 로 분리됩니다 .

각 Sector 마다 다른 방식으로 렌더링 한다 .아주 가까운 Sector 만 원래 방식 대로 splatting texturing 한다 .그 외의 Sector 는 한 번만 렌더링 한다 . → 어떻게 ?

최적화 전략

시도 1) 먼 거리의 sector 는 Base layer 만 그린다

Base layer 만 그림 원 texturing 과 비교base layer 만 texturing 한다 .성능 증가 효과 : 95 fps → 317 fpsTexturing quality 는 현저히 저하

최적화 전략

Qulaity 저하 없는 최적화 방법을 찾아야 한다Sector 를 overdrawing 없이 한번만 렌더링 할 때 , 성능

증가가 엄청나다개발할 최적화 기법은 Quality 저하가 없거나 거의 눈에 띄지

않아야 한다 .

최적화 전략

시도 2) 먼 거리의 sector 는 미리 준비한 통맵으로 그린다

미리 준비한 통맵으로 한번만 렌더링한다Texture 메모리 사용량이 엄청나게 증가한다잦은 texture swapping 으로 fps 도 저하된다

최적화 전략

Quality 저하도 없고 , memory 소비도 적은 최적화 방법을 찾아야 한다준비된 통맵 texture 를 사용하면 , quality 저하는 없다각 sector 의 통맵 texture 의 전체 크기는 너무 크다Memory 사용량이 적으면서 , quality 저하 없이 , 성능을 향상시켜야 한다

최적화 전략

시도 3) 먼 거리의 sector 는 통맵을 실시간 생성하여 그린다

통맵을 실시간 생성하여 한번만 렌더링한다통맵 해상도는 sector 가 거리가 멀수록 작게 만든다Clipmap 의 virtual mipmap 개념과 비슷한 점이 있다

최적화 전략

데모 시연

최적화 전략

추가 소요되는 Video memory 는 최소화 하였습니다

Sector 의 거리에 따라 , 통맵 텍스쳐를 가능한 작게 만든다Perspective view 에서 , 거리가 먼 sector 개수가 훨씬

많다따라서 작은 해상도의 통맵 texture 가 훨씬 더 많이 쓰인다

구현 결과 분석

Memory 사용량 – Nvidia PerfHUD 측정

추가로 소요되는 texture memory 는 5mb많은 sector 가 통맵을 생성함에도 불구하고 , 적은 용량의 추가

memory 만 요구된다

Splatting tex-turing

Mega Splat-ting texturing

Texture 25 mb 30 mbRender-target 20 mb 20 mbBuffer 10 mb 10 mb

구현 결과 분석추가로 소요되는 video memory 량 측정

구현 결과 분석실시간 sector 통맵 생성은 quality 저하도 거의 없고 , 성능도 비약적으로 향상

FPS : 95 fps → 317 fpsTexture memory : 25 mb → 30 mbQuality 저하 : 거의 눈에 띄지 않음

Splat-ting

이름은 ?새 기법의 명칭은 ?

Mega Texturing

Mega Splat-ting

=

Sector texture 해상도 결정

구현 내용

Splatting 으로 그린다

멀리 있나 ? 통맵 생성 되어 있나 ?No Yes

통맵으로 그린다

통맵 생성No

Yes

Quality 저하가 없는 범위에서 , 가장 작은 해상도를 결정하여야 한다

원래 splatting sector texture 해상도가 너무 작은 경우

구현 내용

X 해상도

Y 해상도

Sector 를 화면에 투영하여 , 그 크기로 해상도를 결정합니다근사치 계산이면 , 충분하다Sector 의 밑면을 화면에 투영하여 , 투영된 크기로 해상도를

계산한다

구현 내용

구현 내용계산된 해상도가 일정 크기 이내일 때만 , 통맵 렌더링을 수행합니다 .

적절한 기준 해상도를 정합니다계산된 통맵 해상도가 기준 해상도와 비교합니다통맵 해상도가 더 크면 , 원래의 splatting 방식으로 렌더링

합니다기준 해상도보다 작으면 , 통맵을 생성하여 렌더링합니다기준 해상도는 VGA 가 지원하는 최대 texture 해상도의

1/16 이 적절합니다이는 경험적인 값입니다

Sector texture 에는 원래의 splatting 기법으로 렌더링한다

sector texture

각 layer tex-ture

생성된 sector texture를 render target 으로 설정

여기에 원래의 splatting 기법으로 렌더링

구현 내용

Sector texture 는 단순한 diffuse texture 만 생성하면 된다따라서 sector 의 geometry 를 무시하고 단순히 rectangle 로

렌더링한다모든 lighting 등의 외부 요소는 무시한다이렇게 생성된 sector texture 는 sector 의 거리가 크게

바뀌거나 , 메모리가 모자라는 등의 이유가 없는한 계속 유지된다유지되는 동안 이 texture 는 다시 렌더링할 필요가 없으므로 , 추가의 연산이 필요 없다

구현 내용

Sector texture 를 통맵으로 사용하여 , 원래의 Sector 를 렌더링합니다

sector texture

생성된 sector texture 를 통맵으로 사용하여 , sector 를 렌더링한다

원래의 sector geometry 를 사용하여 렌더링 한다이 통맵 렌더링은 하나의 DP call 만 요구한다

구현 내용

Sector texture 는 자주 update 되지 않지만 , 자주 사용됩니다Sector texture 는 cache 방식으로 사용되므로 , sector texture

의 update 는 자주 일어나지 않는다이미 만들어진 sector texture 를 통맵으로 렌더링하는 단순한

작업은 매 frame 마다 수행된다적절한 해상도 threshold 를 정하면 , 화면에 보이는 거의 대부분의

sector 가 이 방식으로 렌더링 된다

구현 내용

데모 시연

FPS : 90Polygon : 60 만 여개DP call : 2242 번 Overdrawing 매우 심각

결론원래의 splatting 기법렌더링 결과 Depth complexity

FPS : 328Polygon : 24 만 여개DP call : 506 번 Overdrawing 거의 없음

결론Mega splatting 기법렌더링 결과 Depth complexity

결론Splatting 기법의 장점을 그대로 유지하면서 ,

렌더링 성능을 크게 높였다테스트 머신에서 , 성능은 약 세배 이상 향상되었다Clipmap 과 비교하면 ,

가상의 큰 텍스쳐를 렌더링한다는 지향점은 비슷Mega Splatting 이 더 적은 리소스를 사용하고 , 더 제어가

용이한 편집 기능을 제공Clipmap 이 표현의 자유도가 더 높음Clipmap 은 아직 단점이 많음 →게임보다 GIS 더 적합 ?

참고 자료[Charles Bloom] Terrain texture compositing by blending in the

frame-buffer[Christopher C. Tanner, Christopher J. Migdal, Michael T. Jones] The

Clipmap : a virtual mipmap[Alex Holkner] Hardware based terrain clipmapping[Roger Crawlfis, Eric Noble, Frederic Kuck] Clipmapping on GPU[Antonio Seoane, Javier Taibo 등 ] Hardware-independent clipmap-

ping[John Carmack] Mega Texturing[www.beyond3d.com] Mega texture in quake wars[Johan Andersson] Terrain rendering in Frostbite using procedural

shader splatting[Michael F. Cohen, Jonathan Shade, Stefan Hiller, Oliver Deussen]

Wang tiles for image and texture generation