ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • 랜더링 파이프라인
    프로그래밍/3D게임프로그래밍 2014. 4. 20. 16:39
    반응형

    기하학적으로 3D 장면을 구성하고 가상 카메라를 설정한 뒤에는 모니터에 2D 표현을 만들어내는 과정을 수행해야 한다. 이와 같은 일련의 과정을 렌더링 파이프라인 이라 한다. 간단하게 파이프라인을 보여주고 있다. 각각의 과정은 이어지는 섹션을 통해 알아보자.


    로컬 스페이스  -> 월드 스페이스 -> 뷰 스페이스 -> 후면 추려내기 -> 조명 -> 클리핑 -> 투영 -> 뷰포트 -> 래스터라이즈


    1. 로컬 스페이스


    모델링 스페이스라고도 불리는 로컬 스페이스는 우리가 물체의 삼각형 리스트를 정의하는 데 이용하는 좌표 시스템이다. 로컬 스페이스는 모델링 과정을 쉽고 단순하게 만들어주며, 자체의 로컬 좌표 시스템을 이용하는 것이 월드에서 직접 모델을 구성하는 것보다 훨씬 쉽다. 예를 들어, 로컬 스페이스를 이용하면 위치나 크기 , 월드내의 다른 물체와의 관계 등을 고려하지 않고도 모델을 구성할 수 있다.


    2. 월드 스페이스

    자체의 로컬 좌표 시스템 내에 다수의 모델을 구성한 다음에는 이를 전역 좌표 시스템으로 옮겨 하나의 장면을 구성해야 한다. 

    로컬 스페이스의 물체들은 이동 , 회전, 크기 변형 등을 포함하는 월드 변환이라는 작업을 거쳐 월드 스페이스로 옮겨 진다. 월드 변환은 위치와 크기, 방위를 포함하는 각 물체 간의 관계를 정의함으로써 이루어진다.



    3. 뷰 스페이스 

    월드 스페이스 내에서 기하물체와 카메라는 월드 좌표 시스템과 연계되어 정의된다. 한편, 카메라가 월드 내 임의의 위치나 방위를 가진다면 투영이나 그 밖의 작업이 어렵거나 덜 효율적이 된다. 따라서 작업의 수월함을 위해 카메라를 월드 시스템의 원점으로 변환하고, 카메라가 양의 z - 축을 내려다 보도록 회전시켜야 한다. 이때 월드에 대한 관점이 바뀌지 않도록 하기 위해서는 카메라에 맞추어 월드 내의 모든 기하물체를 변환해야 하는데, 이와 같은 변환을 뷰스페이스 변환이라 하며, 이 변환을 거친 뒤의 기하물체는 뷰 스페이스 내에 위치한 다고 말할 수 있다.


    4. 후면 추려내기 


    폴리곤은 두 개의 면을 가지고 있으며 하나의 면을 전면, 다른 면을 후면이라 부른다. 일반적으로 폴리곤의 후면은 절대 보여지지 않는데 , 이는 장면 내의 물체들이 대부분 박스나 원기둥, 탱크, 캐릭터 등과 같은 채워진 볼륨이며 , 채워진 물체의 내부로

    카메라를 넣는 것이 허용되지 않기 때문이다. 즉, 카메라는 절대로 폴리곤의 후면을 보지 못한다. 이와 같은 사실은 매우 중요한데, 왜냐하면 폴리곤의 후면을 볼 수 있는 경우에는 후면 추려내기가 작동하지 않기 때문이다.


    전면의 방향을 화살표로 표시한 물체의 예를 보여준다. 카메라에 전면을 향하고 있는 폴리곤을 전면 폴리곤이라 하며, 후면을 향하고 있는 폴리곤을 후면폴리곤이라 한다.


    전면을 향하고 있는 폴리곤들이 뒤쪽의 후면 폴리곤들을 가리고 있음을 알 수 있다. Direct3D는 후면 폴리곤을 추려냄으로서 상당한 이득을 취한다. 이와 같은 과정을 후면 추려내기(backface culling)이라 한다. 


    5. 조명


    광원은 월드 스페이스 내에 정의되지만 뷰 스페이스 변환에 의해 뷰 스페이스로 변환된다. 광원은 물체에 명암을 추가하여 장면에 사실감을 더해준다. 고정 기능 파이프라인 내의 조명에 대해서는 5장에서 좀더 자세히 다루어질 것이다. 이후에 파트 IV 에서는 프로그래머블 파이프라인을 이용해 조명 구성을 직접 구현하는 방법을 살펴볼 것이다.


    6. 클리핑

    이제는 시야 볼륨 외부의 기하물체를 추려내야 한다. 이 과정을 클리핑이라 한다. 시야 절두체에서의 삼각형 위치는 다음과 같이 세가지로 분류할 수 있다.


    7. 투영 

    뷰 스페이스에서는 3D 장면의 2D 표현을 얻는 과정이 남아있다. 이와 같이 n 차원 에서 n - 1 차원을 얻는 과정을 투영(projection)이라 한다. 투영을 수행하는 방법에는 여러가지가 있지만 관심을 가지고 잇는 것은 원근 투영(perspective projection) 이라는 방법으로 , 원근법을 이용하여 기하물체를 투사한다. 즉, 카메라에서 멀리 떨어진 물체는 가까운 물체에 비해 작게 나타난다. 


    8. 뷰포트 변환


    뷰포트 변환은 프로젝트 윈도우의 좌표를 뷰포트라 불리는 화면의 직사각형으로 변환하는 과정을 말한다. 게임에서의 뷰포트는

    보통 직사각형의 전체 화면이 되지만, 윈도우 모드에서 실행하는 경우 클라이언트 영역이나 화면의 일부가 될 수도 있다. 뷰포트 사각형은 이를 포함하고 있는 윈도우와 상대적이며, 윈도우 좌표를 이용해 지정된다. 


    9. 래스터 라이즈

    스크린 좌표로 버텍스들을 변환한 다음에는 2D 삼각형들의 리스트를 가지게 된다. 래스터 라이즈 단계는 삼각형을 그리는 데 필요한 픽셀 컬러들을 계산하는 과정이다.

















    반응형

    '프로그래밍 > 3D게임프로그래밍' 카테고리의 다른 글

    로테이션 함수  (0) 2014.04.24
    지형 높이 구하기  (0) 2014.04.24
    3. 뷰 행렬  (0) 2014.04.16
    2. 카메라 클래스  (0) 2014.04.16
    1. 카메라 기초  (0) 2014.04.16
Designed by Tistory.