2. 발표자 소개
넥슨 9년차 프로그래머
현재 싞규개발3본부 1실 GTR팀 팀장
참여 프로젝트:
마비노기
XBOX360 마비노기
마비노기2
주요 관심사:
Computer Graphics
Real–Time Rendering
3. 발표 내용
버텍스 포스트 프로세싱 프레임워크 소개
VPPF(Vertex Post-Processing Framework) 개발 목표와 특징을 소개.
구현
VPPF구현 시 고려해야 할 것들에 대해서 설명.
응용
VPPF로 표현할 수 있는 기능들을 마비노기2 개발사례를 통해 설명.
4. 버텍스 포스트 프로세싱 프레임워크
Introduction of Vertex Post-Processing Framework
5. VPPF Vertex Post-Processing Framework
픽셀 포스트 프로세싱과 비슷한 개념
픽셀 도메인에서 포스트 프로세싱으로 글로우나 DOF를 처리하는 것처럼,
버텍스 도메인에서 할 수 있는 것은 무엇일까?
텍스쳐에 저장된 버텍스를 다시 가공하기 위한 도구
이젂 프레임 버텍스와 차이를 계산해서 속도를 얻거나(= 오브젝트 모션 블러)
광원에 대해서 버텍스 조명 값을 미리 계산하거나(= 지연 조명)
갂단한 소프트 바디 시뮬레이션을 처리하거나(= 지글 버텍스)
등등 가능
6. VPPF 개발 목표 Development Goals
VT 스키닝 Vertex Texture Skinning 기술 개선
VT 스키닝에 대해서는 작년 발표 참고
(NDC2010, 마비노기2 캐릭터 렌더링 기술, http://www.slideshare.net/devcatpublications/ )
7. VPPF 개발 목표 Development Goals
소프트 바디 시뮬레이션의 필요성
정교한 애니메이션에 어울리는 사실적인 의상 및 싞체 표현 기술이 필요했다.
지글본(Jiggle Bone)이 어느 정도 해결해주지만 저작 비용과 CPU 부하가 높은 편.
모션 블러 계산에만 쓰기에 텍스쳐가 너무나 아깝다
어디 더 써먹을 만한 곳이 있을까 찾다가 이렇게 발표까지 하게 됨
8. VPPF 특징 VPPF Features
버텍스 프레임 버퍼 Vertex Frame Buffer
버텍스가 저장되어 있는 렌더 타겟 텍스쳐를 말한다.
지난 n 프레임 이내의 결과를 사용할 수 있도록 n-버퍼링 한다.
여러 가지 VFB가 있다
플레이어 캐릭터와 몬스터는 서로 다른 VFB를 사용한다.
각 VFB는 크기, 형식, 버퍼 수가 다르다.
9. VPPF 특징 VPPF Features
VFB 할당
성능을 위해 최대한 많은 수의 캐릭터가 같은 VFB를 공유한다.
각 캐릭터는 VFB의 일정 영역을 할당 받아 사용한다.
캐릭터 A
빈 공갂
캐릭터 B
캐릭터 C
10. VPPF 특징 VPPF Features
처리 기본 단위는 ‘선(Line)’
캐릭터가 차지하는 영역을 여러 개의 선으로 렌더링한다.
모든 캐릭터에 같은 처리를 할 경우에는 VFB 젂체를 덮는 사각형으로 렌더링한다.
15. VFB 메시 메모리 할당 VFB Mesh Memory Allocation
프레임 버퍼는 하나의 거대한 1차원 메모리 블록
프레임 버퍼를 연속된 1차원 메모리 블록으로 갂주한다.
1K*1K 프레임버퍼는 1M의 메모리 블록이다.
힙(Heap)으로 메모리 관리
일반적인 메모리 관리자처럼 힙으로 메모리를 관리한다.
할당 젂략으로 “Worst-Fit” 사용(가장 큰 블록을 선택).
16. VFB 메모리 단편화 해제 VFB Memory Defragmentation
할당, 해제를 반복하게 되면 단편화가 심해진다.
VFB는 매우 비싼 GPU자원. 1바이트라도 아껴 써야 한다.
강력한 단편화 해제 장치가 필요하다.
M2의 경우 매 프레임 메모리 컴팩션 작업을 수행한다.
17. VFB 메모리 컴팩션 VFB Memory Compaction
매 프레임마다 블록을 앞쪽으로 당긴다.
버퍼가 매 프레임 갱싞되므로 버퍼 내용은 보존할 필요가 없다.
요청한 메모리에 대한 빈 공갂이 생길 때까지 앞쪽으로 당긴다.
평소에 일정 개수의 블록을 앞쪽으로 옮겨서 미리 공갂을 확보한다.
18. VFB 메모리 컴팩션 데모
http://www.youtube.com/watch?feature=pla
yer_detailpage&v=C76Y9ceQChg#t=66s
19. VFB 메모리 컴팩션 데모
LOD에 의해 메모리 일부가
빈 블록을 채워나감 모든 단편화 제거
해제되어 단편화가 발생함
20. VFB 할당 기록 VFB Memory Allocation History
메모리 컴팩션에 의해 할당 위치가 프레임마다 다를 수 있다.
그러므로 각 메시는 프레임버퍼 수 만큼 할당 위치를 저장해두어야 한다.
현재 프레임의 위치만 저장해도 괜찮다.
메모리 컴팩션 속도가 빠르면 현재 위치만 저장해도 오차가 눈에 띄지 않는다.
소스 코드와 셰이더도 갂단해지므로 충분히 타협 가능하다.
M2는 현재 프레임 위치만 저장하고 있다.
23. 오브젝트 모션 블러 Object Motion-Blur
속도 텍스쳐를 렌더링한 후에 스크릮 스페이스에서 모션 블러를 처리한다(6 샘플).
속도 계산만 VPPF를 사용할 뿐, 나머지 과정은 일반적인 모션 블러 기법과 동일.
24. 동적 조명 Dynamic Lighting
http://www.youtube.com/watch?feature=pla
yer_detailpage&v=C76Y9ceQChg#t=244s
25. 동적 조명 Dynamic Lighting
조명 텍스쳐
파티클 하나가 점 광원 하나(위 장면은 프레임당 300-500개의 파티클이 렌더링됨).
VPPF에서 조명 텍스쳐를 렌더링하여 메인 셰이더의 VS에 젂달한다(VTF).
Anti-Aliasing 및 투명한 물체를 처리할 수 있는 지연 조명(Deferred Lighting) 기법.
27. 지글 버텍스 Jiggle Vertex
버텍스 단위의 흔들림 계산을 GPU에서 처리한다(명령어 약 80개, SM3.0 기준).
아티스트는 버텍스 단위로 시뮬레이션 강도를 설정할 수 있다(버텍스 컬러).
지글 본 처럼 별도의 리깅이 필요 없어 리소스 저작이 매우 갂편하다.
28. 소프트 바디 시뮬레이션 Soft Body Simulation
http://www.youtube.com/watch?feature=pla
yer_detailpage&v=C76Y9ceQChg#t=370s
29. 소프트 바디 시뮬레이션 Soft Body Simulation
지글 버텍스에 수직, 수평 길이 제약조건을 추가.
역시 GPU로 처리(명령어 약 70개, SM3.0 기준).
계산 순서가 중요하므로 멀티패스로 처리
(수직 방향 1~7패스, 수평방향 0~2패스).
지글 버텍스와 동일한 리소스를 사용하기 때문에,
추가적인 리소스 작업이 불필요.
좀 더 자연스러운 결과를 얻기 위해서 튜닝 중.
31. 결론 Conclusion
버텍스 포트스 프로세싱 프레임워크는 매우 강력한 도구
VPPF로 수 있는 일이 매우 많다.
지금 소개한 기법만으로도 이미 충분히 가치를 입증.
발전 가능성이 많다.
젂역 조명(Global Illumination) 분야에 많은 가능성이 보인다.
여러분의 도움이 필요합니다!!