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

Post on 25-May-2015

3.217 Views

Category:

Technology

8 Downloads

Preview:

Click to see full reader

DESCRIPTION

3D graphic rendering pipeline in korean

TRANSCRIPT

렌더링 파이프라인

DevRookie 황대영

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

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

이해 필요성 ?

셰이더 프로그래밍

렌더링 속도의 최적화

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

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

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

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

가짜다 !!

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

렌더링 파이프라인 ?

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

전체 렌더링 파이프라인

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

텍스처 적용 렌더 백엔드

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

출력

1. 로컬 (Local) 변환

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

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

2. 월드 (World) 변환

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

이동 , 회전 , 크기 변형

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

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

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

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

5. 조명 (Light)

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

6. 테셀레이션 (Tesselation)

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

7. 클리핑 (clipping)

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

시야 절두체 기준

8. 투영 (projection)

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

원근투영 / 직교투영

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

윈도우 화면 좌표로 변환

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

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

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

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

12. 렌더 백엔드

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

12. 렌더 백엔드

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

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

실전 코드

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 );

// 투영 변환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 );

}

리뷰

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

top related