SYeonni Study Room
렌더링 파이프라인 정리 본문
- 메쉬 삼각형을 참조하는 용어로 다각형(polygon) 기본형 (primitive)
다각형에서 두 개의 변이 만나는 지점을 버텍스(꼭지점)라 한다.
하나의 삼각형을 만들기 위해서는 삼각형의 세 버텍스에 해당하는 세 개의 포인트 위치를 지정해야 한며 이 삼각형을 지정하여 물체를 묘사
버텍스 포맷만들기
1. 버텍스 데이터를 포함할 구조체 만들기
2. 버텍스가 포맷팅되는 방법을 지정
FVF(Flexible Vertex Format) //해석하자면 유연한 정점 형식
FVF는 사용자가 직접 정점의 구조를 정의해서 사용할 수 있도록 DirectX에서 제공하는 기능이다. 사용자가 필요로 하는 정점 포맷을 선택하여 조합할 수 있다.
유연한 정점 포맷 (FVF)은, 단일의 데이터 스트림에 인터리브 되어 저장 되고 있는 정점의 내용을 기술하기 위해서 사용된다. FVF 코드는, 보통, 고정 기능의 정점 처리에 의해 처리되는 데이터를 지정하기 위해서 사용된다.
한가지 기억할 점 > 버텍스 구조체에 정의된 데이터의 순서와 FVF (유연한버텍스포멧) 의 정의된 순서는 반드시 일치해야한다.
삼각형의 버텍스를 지정하는 순서는 매우 중요하며 이를 두르기 순서(winding order)라고 부른다.
사각형을 만들고싶으면?
삼각형을 2개로 나누고 각각의 삼각형을 구성하는 버텍스(꼭지점)을 지정해야한다.
ex)vertex rect[6] = {}
이처럼 3D 물체를 구성하는 삼각형들은 동일한 버텍스를 공유함 모델의 복잡성과 세밀함이 증가할수록 중복되는 버텍스의 수 역시 증가
상당수의 버텍스 중복의 문제를 해결하기 위해 인덱스의 개념을 이용
예)사각형을 구성했다하면
버텍스 리스트 = 0,1,2,3
인덱스 리스트 = 0,1,2,0,2,3 //삼각형1,2 중복되는거 다넣음
-가상카메라
카메라는 관찰자가 볼 수 있는 세계의 부분을 지정하는 것으로 2D이미지를 생성하기 위해 세계의 어떤 부분이 필요한지를 결정, 세계 내에 위치하며 보여질 공간의 부피 정의
공각의 부피는 절두체(frustum) 시야각과 가까운 평면, 먼 평면에 의해 정의
위 공간에 포함되지 않는 물체들은 보여지지 않으며 이후에 처리에서 제외되어야한다.
이와 같은 데이터의 제외 처리를 클리핑(clipping)이라 부른다.
투영 윈도우는 3D 장면의 2D 표현을 만드는 데 이용될 절두체 내부에 있는 3D 기하의 2D영역.
투영 윈도우는 min=(-1, -1)과 max = (1,1) 로 정의하여 만든다는것을 기억하자
Direct3D는 투영 평면이 평면 z=1이 되도록 정의한다는것도 기억하자
- 렌더링 파이프라인
> 3D 세계에 대한 기하학적 표현과 이 세계를 바라보는 관점을 정의하는 가상 카메라를 이용해 2D 이미지를 만들어내는 과정
(요약한 랜더링파이프라인) 로컬스페이스>월드스페이스>뷰 스페이스 > 후면추려내기>조명>클리핑>투영>뷰포토>래스터라이즈
하나의 좌표 시스템에서 다른 시스템으로 기하물체를 변환하는 과정이 이루어진다. 이때 행렬이 이용되고 Direct3D의 책임하에 이루어진다.
변환을 이용하기 위해서 원하는 변환 행렬을 지정(IDirect3DDevice->SetTransform)을 통해서 행렬을 전달할수있다.
*로컬스페이스 : 좌표시스템
모델링 과정을 쉽고 단순화게 만들어주며, 자체의 로컬 좌표 시스템을 이용하는 것이 월드에서 직접 모델을 구성하는 것보다 쉽다.
*월드 스페이스 : 로컬스페이스의 물제들은 월드 변환(이동,회전,크기 변형등)이라는 작업을 거쳐 월드 스페이스로 옮겨진다.
월드변환은 위치와 크기, 방위를 포함하는 각 물체 간의 관계를 정의함으로써 이루어진다.
월드 변환은 하나의 행렬로 표현
*뷰스페이스 : 카메라에 맞추어 월드 내의 모든 기하물체를 변환하는과정 (기하물체 = 공간물체)
작업의 수월 함을 위해 카메라를 월드 시스템의 원점으로 변환하고, 카메라가 양의 z-축을 내려다 보도록 회전시켜야 한다. 이때 월드에 대한 관점이 바뀌지 않도록 하기 위해서
위 변환을 거친 뒤 기하물체는 뷰 스페이스 내에 위치함
*후면추려내기(backface culling)
폴리곤이란?
- 두개의 면을 가지고 있으며 하나의 면을 전면, 다른면을 후면이라고 한다.
일반적으로 폴리곤의 후면은 절대 보여지지 않는데 물체의 내부로 카메라를 넣는것이 허용되지 않기 때문, 즉, 카메라는 절대로 폴리곤의 후면을 보지 못한다. 폴리곤의 후면을 볼 수 있는경우 후면 추려내기가 작동하지 않기 때문에 중요하다.
관찰점에서 보여지는 전면 > 전면폴리곤
관찰점에서 안보여지는 후면 > 후면 폴리곤
후면 폴리곤을 추려냄으로 상당한 이득을 취함
후면을 추려낸 뒤 동일한 물체를 보여주고 있다.
추려내는 3가지 방법
1. D3DCULL_NONE - 후면 추려내기를 완전히 끈다.
2. D3DCULL_CW - 시계 방향 두르기를 가진 삼격형을 추려낸다.
3. D3DCULL_CCW - 시계 반대방향 두르기를 가진 삼각형을 추려낸다. 디폴트 상태
*조명
광원은 월드 스페이스 내에 정의되지만 뷰 스페이스 변환에 의해 뷰 스페이스로 변환된다.
*클리핑 : 시야 볼륨 외부의 기하 물체를 추려내는 과정
- 완전한 내부 - 삼각형이 완전히 절두체 내부에 위치하면 그대로 보존되어 다음 단계로 진행한다
- 완전한 외부 - 삼각형이 완전히 절두체 외부에 위치하면 추려내어진다‘
- 부분적 내부 부분적 외부) - 삼각형이 부분적으로 절두체 내부에 위치하면 삼각형을 두 개의 부분으로 분리한다 절두체 내부의 부분은 보존되며 , 나머지는 추려내어진다
*투영
3D 장면의 2D표현을 얻는 과정 즉 이와 같이 n차원에서 n-1차원을 얻는 과정을 투영(projection)이라고 한다.
원근투영 (perspective projection)원근법을 이용하여 기하 물체를 투사
> 카메라에서 멀리 떨어진 물체는 가까운 물체에 비해 작게 나타난다.3D장면을 2D 이미지로 표현하는데 가장 적합
종횡비란? 화면의 가로와 세로의 비율
종횡비 = 화면너비 / 화면높이
*뷰포트: 프로젝트 윈도우의 좌표를 뷰포트라 불리는 화면의 직사각형으로 변환하는 과정
*래스트라이즈 : 각각의 삼각형을 그리는데 필요한 픽셀 컬러들을 계산하는 과정 (픽셀을 만드는 과정 / 픽셀의 색상을 채우는 과정은 아니다. )
***********요약
★3D 물체들은 로컬 스페이스 내에 정의되며 모두 하나의 월드 스페이스 시스템으로 옮겨진다 투영을 위
해 서는 추려내기와 같은 다른 작업이 필요하며 , 이어 뷰 스페이스로 물체를 변환하고, 카메라를 원점으
로 옮기고 앙으I z 축을 내려다보도록 하는 과정이 진행된다 뷰 스페이스 내에 놓여진 물체들은 투영 윈
도우로 투영되며 1 뷰 포트 번환을 통해 투영 윈도우의 기하물체가 뷰포트로 변환된다 이제 최종적으로
래스터라이즈를 거쳐 최종 20 이미지를 구성하는 각각의 픽셀 컬러가 계산된다,
★3D 물체들은 물체의 모양과 외각을 묘사하는 삼각형들의 리스트인 삼각형 메쉬들로 표현된다.
★가상 카메라는 절두체로 모델링되며 절두체 내의 공간이 카메라가 “보는” 것이 된다.
참고
https://hellowoori.tistory.com/30
정점(vertex) / 폴리곤(polygon) / 변(edge) / 메시(mesh)
정점(vertex) / 폴리곤(polygon) / 변(edge) / 메시(mesh) 장면(scene)은 물체나 모델의 모음이다. 물체는 상단의 주전자처럼 삼각형 메시의 묘사로 이루어지는데, 메시의 삼각형은 우리가 모델링하는 물체
hellowoori.tistory.com
'게임제작 > 3D' 카테고리의 다른 글
SR팀플 시작 (기획서 작성) (2) | 2021.10.05 |
---|---|
빌보드 적용했을때와 안했을때 차이 (0) | 2021.09.23 |
역행렬 만들기 (D3DXMatrixInverse()) , 빌보드 하기위해서 (0) | 2021.09.23 |
사진 여백 없애기 (0) | 2021.09.20 |
평면 점프 (0) | 2021.09.20 |