27
렌렌렌 렌렌렌렌렌 DevRookie 황황황

[0911 황대영] 렌더링 파이프라인

Embed Size (px)

DESCRIPTION

3D graphic rendering pipeline in korean

Citation preview

Page 1: [0911 황대영] 렌더링 파이프라인

렌더링 파이프라인

DevRookie 황대영

Page 2: [0911 황대영] 렌더링 파이프라인

렌더링 파이프라인 정의렌더링 파이프라인실전 코드

Page 3: [0911 황대영] 렌더링 파이프라인

렌더링 파이프라인 정의렌더링 파이프라인실전 코드

Page 4: [0911 황대영] 렌더링 파이프라인

이해 필요성 ?

셰이더 프로그래밍

렌더링 속도의 최적화

Page 5: [0911 황대영] 렌더링 파이프라인

컴퓨터는 0 과 1 만을 구분할 줄 아는 어쩌면 바보 상자

그렇다면 어떻게 3D 세계를 보여줄 수 있나 ?

Page 6: [0911 황대영] 렌더링 파이프라인

3D 세계에 주전자가 실제로 존재하는가 ?

2D 모니터 안의3D 가상세계

가짜다 !!

Page 7: [0911 황대영] 렌더링 파이프라인

3D 세계에 대한 기하학적 표현과이 세계를 바라보는 관점을 정의하는 가상카메라를 이용해 2D 이미지를 만들어내는 과정

렌더링 파이프라인 ?

Page 8: [0911 황대영] 렌더링 파이프라인

렌더링 파이프라인 정의렌더링 파이프라인실전 코드

Page 9: [0911 황대영] 렌더링 파이프라인

전체 렌더링 파이프라인

테셀레이션 클리핑 투영 뷰포트 래스터라이즈

텍스처 적용 렌더 백엔드

로컬 변환 월드 변환 뷰 변환 후면 추려내기 조명

출력

Page 10: [0911 황대영] 렌더링 파이프라인

1. 로컬 (Local) 변환

모델 하나의 고유의 좌표계 ( 모델 좌표계 )

모델 뷰어와 같이 단일 개체를 표현하는 데에는 문제 없음

Page 11: [0911 황대영] 렌더링 파이프라인

2. 월드 (World) 변환

로컬 스페이스의 개체들을 월드 좌표계로 변환

이동 , 회전 , 크기 변형

Page 12: [0911 황대영] 렌더링 파이프라인

3. 뷰 (View) 변환 ( 카메라 변환 )

카메라를 좌표계의 원점으로 변환=> 모든 개체들 변환

Page 13: [0911 황대영] 렌더링 파이프라인

4. 후면 추려내기 (back-face culling)

두르기 순서의 시계 방향에 지정된 폴리곤을 전면 (front-face) 폴리곤으로 설정

Page 14: [0911 황대영] 렌더링 파이프라인

5. 조명 (Light)

광원 벡터 , 시선 벡터 , 법선 벡터 등 조명 계산식을 이용해 정점의 색상 계산

Page 15: [0911 황대영] 렌더링 파이프라인

6. 테셀레이션 (Tesselation)

GPU 에서 정점을 자유자재로 증가 , 감소

Page 16: [0911 황대영] 렌더링 파이프라인

7. 클리핑 (clipping)

시야를 벗어나는 폴리곤잘라냄

시야 절두체 기준

Page 17: [0911 황대영] 렌더링 파이프라인

8. 투영 (projection)

3 차원에서 2 차원을 얻는 과정

원근투영 / 직교투영

Page 18: [0911 황대영] 렌더링 파이프라인

9. 뷰포트 (viewport) 변환 (screen map-ping)

윈도우 화면 좌표로 변환

Page 19: [0911 황대영] 렌더링 파이프라인

10. 래스터라이즈 (triangle setup)

변환이 끝난 폴리곤을 화면에 보여줄 픽셀로 계산

결과물 - 모니터에디스플레이 될 2D 이미지

Page 20: [0911 황대영] 렌더링 파이프라인

11. 텍스처 적용UV 좌표계 이용 (0~1)

Page 21: [0911 황대영] 렌더링 파이프라인

12. 렌더 백엔드

비디오 메모리에 써넣어도 좋을 것인가 ?• 알파 테스트 (Alpha Test)• 스텐실 테스트 (Stencil Test)• 깊이 테스트 (Z buffer Test)

Page 22: [0911 황대영] 렌더링 파이프라인

12. 렌더 백엔드

비디오 메모리에 어떻게 써넣을 것인가 ?• 알파 블렌딩 (Alpha Blending)• 안개 (Fog)• 안티앨리어싱 (Anti-aliasing)

Page 23: [0911 황대영] 렌더링 파이프라인

렌더링 파이프라인 정의렌더링 파이프라인

실전 코드

Page 24: [0911 황대영] 렌더링 파이프라인

VOID SetupMatrices(){

// 월드 변환D3DXMATRIXA16 matWorld;D3DXMatrixIdentity( &matWorld );g_pd3dDevice->SetTransform( D3DTS_WORLD, &matWorld );

// 뷰 ( 카메라 ) 변환D3DXVECTOR3 vEyePt( 0.0f, 3.0f,-5.0f ); // 눈의 위치D3DXVECTOR3 vLookatPt( 0.0f, 0.0f, 0.0f ); // 눈이 바라보는 위치D3DXVECTOR3 vUpVec( 0.0f, 1.0f, 0.0f );// 천정방향을 나타내는 상방벡터D3DXMATRIXA16 matView;D3DXMatrixLookAtLH( &matView, &vEyePt, &vLookatPt, &vUpVec );g_pd3dDevice->SetTransform( D3DTS_VIEW, &matView );

Page 25: [0911 황대영] 렌더링 파이프라인

// 투영 변환D3DXMATRIXA16 matProj;// matProj : 값이 설정될 행렬// D3DX_PI/4 : FOV ( 시야각 )// 1.0f : 종횡비 ( 가로세로의 비율 )// 1.0f : 근접 클리핑 평면 (near clipping plane)// 100.0f : 원거리 클리핑 평면 (far clipping plane)D3DXMatrixPerspectiveFovLH( &matProj, D3DX_PI/4, 1.0f, 1.0f, 100.0f );g_pd3dDevice->SetTransform( D3DTS_PROJECTION, &matProj );

}

Page 26: [0911 황대영] 렌더링 파이프라인

리뷰

Page 27: [0911 황대영] 렌더링 파이프라인

참고자료• Windows DirectX Graphics 문서• DirectX 9 를 이용한 3D GAME 프로그래밍 입문• 3D 게임 프로그래밍 ( 개정판 )• 알로샤님의 블로그 http://bit.ly/9vtHSg• 조해성 ( 켈 ) 님의 데브루키 발표자료