https://www.slideshare.net/SukwooLee4/2017-12-09-85033171
[기본설명]
컴퓨터 그래픽스 |
||
CG |
벡터 그래픽스 |
레스터 그래픽스 |
방식 |
기하학적인 방법 |
레스터라 불리는 2차원 그리드에 색 저장 |
해상도 |
해상도 무한 |
해상도 유한 |
확대시 |
그대로 |
퀄리티 떨어진다. |
속도 |
느리다 |
- |
지원 |
완벽하게 지원하는 장비 없다. |
컴퓨터 하드웨어는 레스터 그래픽스를 지원한다. |
[레스터 기반 리얼타임 렌더링]
CG에서 렌더링 이란?
- 컴퓨터 상에서 이미지를 생성하는 것
리얼타임 붙는 이유는?
|
실시간 |
비실시간 |
정의? |
실시간으로 이미지를 생성하고 화면에 보여주는 것 |
이미지를 생성하는 모든 작업을 먼저 완료 후, 완성된 이미지를 순서대로 화면에 보여준다. |
퀄리티 |
- |
높다 |
예 |
게임 |
애니메이션 |
플레이타임 |
무한 |
유한 |
콘티 |
유저의 input에 따라 |
존재 |
장면 |
확정되지 않음 |
확정 |
모든 장면을 미리 알고 개발 & 시간이 정해져 있어 = 비실시간 렌더링 가능!
[모델링]
1. 모델 = 폴리곤 메쉬(모델의 형상) + 텍스쳐(입힐 색상) + 골격(리깅:캐릭터에 움직임을 넣기 위해 필수)
2. LEVEL OF DETAIL (LOD) 조정: 게임의 퀄리티와 컴퓨터의 성능을 고려.
3. 저장 :
컴퓨터가 읽을 수 있는 형태로! 버텍스(VERTEX : 모델을 구성하는 최소한의 단위: 위치, 노멀벡터, 텍스쳐 좌표)
단, 폴리곤 메쉬 인식 = 위치 정보(버텍스) + 선 정보
/*************************************************************************************
따라서, NON-INDEXED TRIANGLE LIST (Vertex Buffer에) 버텍스 담는 버퍼에 삼각형 연결 순(=좌하부터 돌고와 우상 순)으로 버텍스를 채워넣는다.
그러나, 중복되는 데이터가 많아 비효율적. 이 중복 문제 해결을 위해
INDEXED TRIANGLE LIST// INDEXED BUFFER. 버텍스버퍼의 인텍스를 이용해 각 점을 이어준다. //
(앞에 두개의 선만 연결시키면 마지막 연결할 선이 무엇인지 알기에 마지막 연결 정보는 인덱스 버처에 저장하지 않는다.
**************************************************************************************/
4. EXPORTING
모델링 프로그램과 그래픽 API 좌표계가 다르기 때문에 주의! (우)
RHS in 3DS MAX |
RHS in OpenGL |
LHS in Direct3D |
^ |
< |
> |
예1 ) MAX > OpenGL : YZ축 대칭이동 ( Flip YZ....)
예2 ) MAX > Direct3D : YZ축 대칭이동 > ㅡZ >
(컬링) > 뒷면제거 설정:D3DCULL_CW : 왼손좌표계로 시계방햐으로 감긴 삼각형을 정면으로 판별하기에...
5. 렌더링
렌더링은 CPU 아닌 GPU에서 수행된다.
CPU > 테이터 > VRAM > GPU > Rendering !
**테이터 > VRAM :
CPU에서 모델 데이터를 로드 후 VRAM으로 보낸다.(데이터 이동 매우 느림)
// CPU와 GPU가 메모리를 공유하지 않기 때문에
** GPU > Rendering !
GPU에서 렌더링을 수행한다.
//병렬작업이 월등히 유리하게 설계되었기 때문에 (CPU는 커다란 코어를 2-8개 넣지만, GPU는 작은 코어를 수백개씩 넣는다)
픽셀단위의 레스터 이미지는 퀄이 높아질수록 픽셀의 개수도 많아진다.
따라서, 픽셀 한번에 하나씩 채우기보단 한번에 여러 픽셀을 채우는 것이 가능한 GPU에서 수항하는 게 훨씬 빠르다.
//*************************************************
** > Rendering
_1. 장면이 화면에 표시
백버퍼 초기화 > 데이터 설정(렌더링에 필요한) > 렌더링(장면의 객체들을) > 화면
****백버퍼 초기화 : 렌더링의 출력을 백버퍼라고 한다.
백버퍼는 레스터 이미지가 데이터화하며 저장된 형태
백버퍼의 데이터는 화면 표시 단계에서 이미지 형태로 변화하여 화면에 표시된다.
랜더링 작업에는 두가지 버퍼(더블 버퍼링)를 이용한다.
프론트 버퍼는 화면에 보여지는 것
백 버퍼는 렌더링 작업이 진행되고 있는 것
두 가지 버퍼를 사용하지 않으면, 테어링(이전장면과 현재장면이 섞이는 현상)이 일어남.
****렌더링
: 랜더링 파이프라인(렌더링 구간의 과정을 단계별로 묶는 것)
버텍스* 처리 > 레스터화* > 프래그먼트 처리 > 출력 병합
(처리) 프로그래머가
(나머지) 하드웨어가
버텍스* 처리
: 모델의 공간을 변환. 버텍스 쉐이더에서 프로그래머가 처리!
: Object -(transform : world)-> World -( : view)-> Camera -( =: projection)-> Clip space
: (AFFINE : 이동, 회전, 스케일) 변환
-(transform : world) : 객체공간에 있는 객체를 게임 월드 공간으로 배치하는 것_행렬
-(transform : view) : 게임 월드 공간에 있는 객체들을 뷰 공간으로 변환하는 것. 유저가 바라보는 시점으로 바뀐것(카메라 위치, 카메라 방향, 카메라 윗 방향벡터)
-(transform : projection) : 뷰 공간에서 원근법이 적용된 공간.
레스터화*
: 공간변환된 버텍스는 삼각형으로 조림되고 레스터로 변형된다.
: 점, 선, 면으로 이루어진 폴리곤 메쉬를 레스터로 변형시키는 단계
: 삼각형을 조립 > 모델 예외 폴리곤 제거 > 원근감 적용 > 시야범위 예외 폴리곤 제거2 > 스크린 공간으로 변환 > 레스터화한 프래그먼트 생성!
//...//
텍스쳐링
: 프레그먼트(3차원 폴리곤 메쉬를 2차원 데이터로 변형한 형태)에 텍스쳐를 입히는 것이라 설명. 텍스쳐좌표를 이용해 텍스쳐를 입힌다.
**텍스쳐 좌쵸 : 텍셀은 2차원 배열상의 자신의 위치를 나타내는 인덱스를 가지고 있다. 텍셀 어드레스가 아닌 정규화된 텍스쳐 좌표(UV)를 사용한다. (텍셀 사용하면, 같은 해상도를 가진 텍스쳐만 매칭가능하기 떄문, 텍스쳐좌표는 해상도에 영향받지 않고 표현에 붙엉)
**Suarface Parameterization : 텍스쳐 좌표는 모델링 단계에서 생성되는데, 폴리곤 메쉬의 버텍스에 텍스쳐 좌표를 해당하는 작업을 표현 파라미터화라 한다.
//....//
'공부' 카테고리의 다른 글
NDC2012이은석_게임회사 취업특강(커리어세션) (0) | 2018.01.26 |
---|---|
노트쓰기로 당신의 천재성을 끌어내세요_세바시890 (0) | 2018.01.18 |
배틀그라운드 : 실패를 성장과 성공으로 만드는 법 (0) | 2018.01.17 |
[NDC14] 모바일 게임의 다음 혁신 - 야생의 땅 듀랑고의 계산 프로세스 중심 게임 디자인_정리 (0) | 2017.12.30 |
NDC 2014 [야생의 땅: 듀랑고]에서의 유니티를 이용한 렌더링 개발 이터레이션과 최적화_정리. (0) | 2017.12.30 |