그래픽스
그래픽스 API 정의와 비교 분석
로우 레벨 그래픽스 API들(Vulkan, DirectX, Metal, WebGPU)은 GPU와 구조 모델이 비슷하다. GPU는 원래 고정적인 코드들을 가졌었으며 수정 또한 불가능에 가까워서 성능이 떨어졌다. 이를 극대화 시키기 위해서 드라이버라는걸 새로 개발했다. 호출 순서 API 초기화 : GPU와 통신하기 위해 틀대를 만듬. 에셋 로딩 : 렌더링에 필요한 데이터 (셰이더) 또는 GPU와 통신하기 위한 명령들. 에셋 업데이트 프레젠테이션 : 커맨드 버퍼를 커맨드 큐에 보낸 후 스왑체인을 활용해서 렌더링. 2 3 4 반복 (프로그램 종료할 때 까지) GPU가 작업이 끝날 때까지 대기하고 사용한 모든 포인터들을 해제하고 데이터를 초기화한다. 비교 분석 라이브러리 파일을 가져올 시 API를 사용하기 위해선..
멀티 스레드 렌더링 (Multi Thread Rendering)
왜 해야할까? Direct3D 11 이전의 그래픽스 API는 단일 스레드에서 실행되는 것을 중점으로 두고 설계되었다. 암시적인 동기화 지점이 존재해서 API를 호출하고 난 다음 GPU의 처리가 완료 되었을 때 이후의 코드가 실행된다, 문제는 이렇게 순서를 맞춰서 진행하는 방식은 CPU와 GPU를 최대로 활용하지 못하는 점이다. CPU 계산 중에 GPU는 제출된 명령이 없기 때문에 아무런 일도 하지않고 CPU의 처리를 기다리게 되고 렌더링 중에는 동기화 지점으로 인해서 CPU는 GPU의 처리가 끝날 때 까지 기다리게 된다. 따라서 CPU와 GPU가 비효율적으로 사용되지 않도록 스레드를 분리하여 렌더링과 CPU 계산이 동시에 이뤄지도록 해야한다. GPU가 무언가를 그리도록 요청하기 위해서 그래픽스 API를 ..
폴리곤 메쉬 (Polygon Mesh)
1. 폴리곤 메쉬(Polygon Mesh)란? 그래픽스에서 렌더링(표현)할 물체의 표현을 만드는 작업을 "모델링"이라고 한다. 한 예로 구를 표현하려면 좌측 그림처럼 구의 중점과 반지름을 가지고 우리가 아는 구의 방정식을 세울 수 있다 흔히 이런 형태의 함수는 음함수(Implicit Function)라고 하는데, 음함수는 GPU로 표현하기 어렵다. GPU에서 표현하기 어렵다는 이유 때문에 이런 음함수 표현 대신 부드러운 평면의 개수를 샘플링한다. 그러면 일정한 꼭지점이 샘플링 되는데, 그 꼭지점들을 선으로 이어서 다각형으로 만든 것을 대신 표현한다. 이렇게 도형 그 자체를 표현한 것이 아니라, 꼭지점을 샘플링해 선으로 이은 다각형을 폴리곤 메쉬라고한다. (GPU는 이러한 폴리곤 메쉬를 처리하는데 아주 최..
선형 보간법 (linear, bilinear, trilinear interpolation)
1D 선형보간법(linear interpolation)을 2D로 확장한 bilinear interpolation과 3D로 확장한 trilinear interpolation이 어떤 식으로 이루어지는지와 이러한 interpolation 기법이 히스토그램(histogram)에 적용된다. 1. Interpolation과 Extrapolation Interpolation(인터폴레이션, 보간)이란 알려진 지점의 값 사이(중간)에 위치한 값을 알려진 값으로부터 추정하는 것을 말한다. Extrapolation은 알려진 값들 사이의 값이 아닌 범위를 벗어난 외부의 위치에서의 값을 추정하는 것을 말한다. 예를 들어, 어떤 사람이 20살일때 키와 40살에서의 키를 보고 30살에서의 키를 추측하는 것은 interpolatio..
사원수 (Quaternion : 쿼터니언)
1. 사원수 (Quternion)이란? 3차원 그래픽에서 회전을 표현할 때, 행렬 대신 사용하는 수학적 개념으로 4개의 값으로 이루어진 복소수(Complex Number) 체계이다. 사원수는 행렬에 비해 연산 속도가 빠르고, 차지하는 메모리의 양도 적으며, 결과의 질에 있어 오류가 날 확률이 적다. 3개의 축에 대한 회전 연산을 동시에 적용하는 경우에 행렬을 사용하면 한 축이 소실되는 짐벌락 현상이 발행할 수 있는데, 사원수를 사용하면 이 현상을 막을 수 있다. 2. 사원수의 정의 사원수는 4차원 복소수 공간(Complex Space)의 벡터로서 다음과 같이 나타낸다. 사원수를 q = s + v 형태로 쓰기도 하는데, 여기서 s 는 q의 w 성분에 해당하는 스칼라(Scalar) 값이고, v는 q의 x, ..
짐벌락 & 오일러 각 (Gimbal Lock & Euler Angle)
1. 짐벌이란? 그림에서는 roll pitch yaw 세개가 바로 그 단일축이다. 자세히 보면 각각의 고리는 본인이 가진 축을 기준으로만 회전한다.각각의 고리는 각자의 단일축으로 회전하는데도 불구하고 파란 고리가 축에 관계없이 모든 방향으로 회전하는 것처럼 보이는 이유는 바로 고리들이 서로 연결되어있기 때문이다. 고리가 다른 고리에 자식으로 붙어있는 관계이기 때문에 각 축은 서로 종속적이다. 실제로 이러한 구조물을 선박에서는 자이로스코프, 나침판, 난로, 그리고 컵홀더까지 전후좌우로 흔들리더라도 수평을 이루도록 할 때 많이 쓰인다고 한다. 2. 오일러 각이란 오일러 각이란 오일러가 도입한 강체(rigid body)의 회전 시스템이다. (강체란 평행이동과 회전만 가능한 물체) 어떠한 강체가 3차원 공간 상..
절두체 컬링 (Frustum Culling)과 클리핑 (Clipping)
정의 3D 공간에는 다양한 오브젝트가 들어갈 수 있다. 360도로 오브젝트가 배치된 일반적인 상황이라 생각할 때, 시야 안에 있는 오브젝트는 전체 공간에 있는 오브젝트에 비해 굉장히 한정적이므로 절두체 컬링은 시야 밖에 있는, 렌더링 되지 않는 오브젝트를 걸러내기 위한 기법이다. 1. 여섯 개의 평면을 이용한 가장 기본적인 컬링 방식 카메라 시야 상, 하, 좌, 우 방향으로의 경계선이 되는 평면, 카메라 시야에 수직하며 가장 가까운 곳과 먼 곳의 시야 범위를 나타내는 평면으로 총 6개의 평면을 이용해 오브젝트가 절두체에 포함되는지를 계산하는 방식. 이름 정의 근평면(Near Plane) 카메라와 수직하며 제일 가까운 곳의 시야 범위를 나타내는 평면 원평면(Far Plane) 카메라와 수직하며 제일 먼 곳..
[DX11 물방울책] 챕터 5 - 렌더링 파이프라인
카메라의 위치와 비추는 방향을 가지고 있는 3D 화면 정보를 가지고 2D 이미지를 만드는 과정을 통틀어서 렌더링 파이프라인이라고 칭한다. 1. 3D 환각 어떻게 깊이와 볼륨을 지닌 3D를 2D 스크린에 그릴 수가 있을까? 그건 바로 상대적으로 멀리있는 사물을 더 작게 하는 것이다. 2. 모델 송출 3D 오브젝트는 예측된 삼각형 메쉬로 구성 되어있으며 이 연속적인 삼각형들이 폴리곤을 만든다. 모델의 퀄리티를 향상시키기 위해 삼각형 늘릴 수는 있겠으나 퍼포먼스 저하 우려가 있으므로 점이라던지 직선으로도 대체가 가능하다. 3. 컴퓨터 기본 색상 컴퓨터는 각 픽셀마다 (r,g,b,a)를 비춘다. // ARGB Color; 8-8-8-8 bit unsigned normalized integer components..
DirectX 11 프레임워크 환경 설정하는 방법
SDK 다운로드 사이트 https://www.microsoft.com/ko-KR/download/details.aspx?id=6812 Download DirectX SDK from Official Microsoft Download Center 중요! 아래에서 언어를 선택하면 전체 페이지 내용이 해당 언어로 신속하게 변경됩니다. 네덜란드어독일어러시아어스웨덴어스페인어영어이탈리아어일본어중국어(간체)중국어(번체)체코어포 www.microsoft.com https://github.com/jjuiddong/Introduction-to-3D-Game-Programming-With-DirectX11 GitHub - jjuiddong/Introduction-to-3D-Game-Programming-With-DirectX..
[DX11 물방울책] 챕터 4 - Direct3D 초기화
1. Direct3D는 무엇인가? 로우레벨 그래픽스 API이며 3D 그래픽을 구현해서 화면에 출력할 수 있게끔 os와의 중간 다리 역할을 해준다. 2. COM 객체 컴포넌트 오브젝트 모델 (COM)은 독자적으로 그 전 버전들과 호환이 가능한 포인터이며 인터페이스다. COM 객체 포인터를 획득하기 위해선 특수 함수로부터 가져와야 한다, new 불가능. 다 사용했다면 Release 함수를 통해 제거해준다. delete 하면 뻥 날 수가 있다. 3. 텍스처와 데이터 리소스 확장명 2D 텍스처는 데이터의 행렬이다, 사용 용도 중 하나는 이미지 데이터 용이다. (이미지의 각 픽셀 색상에 대한 정보 저장) 매핑이라는 고급 기술에는 색상 대신 3D 벡터를 저장한다. 그리고 오직 DXGI_FORMAT형만 저장이 가능하..