그래픽스 30

[Directx12][8장][1]조명

개요 3차원 그래픽에서 사실같은 렌더링을 할때 꼭 필요한 요소는 바로 조명이다. 지금까지는 정점 별 색상을 이용해 물체의 특정 픽셀의 색상을 정했다. 하지만 이제부터는 광원과 해당 물체의 표면점의 위치와 면한 방향, 재질, 시점의 위치 등를 이용해서 해당 빛을 표면점이 반사해서 시점에 들어오며 나타나게될 색상을 정할 것이다. ​ 법선 벡터 법선 벡터는 물체의 표면점이 면한 방향을 나타내는 벡터이다. 좀 더 수학적으로는 해당 점의 접 평면에 수직인 벡터이다.(앞면 방향) 조명 렌더링을 위해선 각 표면점의 법선벡터가 필요한데 모든 점에 법선벡터를 일일히 설정할 수 없으므로 그 표면점의 삼각형을 나타내는 정점들에 정점 법선을 부여한다. 이후 래스터화 과정에서 해당 표면점에 해당하는 픽셀의 법선 벡터를 삼각형의..

[Directx12][7장]파이프라이닝2

프레임 자원 기존 방식에서는 cpu가 gpu에 명령 제출 후 flush를 통해 gpu가 명령들을 다 처리할때 까지 대기했다. 이러한 방식은 flush대기중에는 cpu가, flush후 다음 명령 제출까지는 gpu가 쉬게 된다. 이러한 성능 저하를 막기위해 프레임 자원이라는 기술을 사용한다. 기존에 flush를 통해 cpu가 gpu를 기다려줘야했던 이유는 commandAllocator 초기화 시점에 대한 이유와 매 프레임 변할 수 있는 자원들(오브젝트 위치 정보 등)을 gpu가 그리기를 처리하기도 전에 다음 프레임 값으로 바꿔버릴 위험이 있기 때문이었다. 따라서 commandAllocator 및 매 프레임 변하는 자원들을 묶어 프레임 자원이라는 것으로 만들고 이러한 프레임 자원 n개를 사용하면 기존의 방식보..

[Directx12][6장][2]파이프라이닝 구현

파이프라이닝 구현 월드 tranform이 기본값으로 고정된 박스 기하구조 하나를 렌더링하는 프로그램 기준으로 설명한다. ​ 1.초기화 단계 기본 구현의 9번까지의 초기화 다음에 다음과 같은 초기화 과정이 추가된다. ​ 1~9 기본 초기화 10. 상수 버퍼 힙 생성 11. 업로드 상수 버퍼 생성 및 힙 핸들에 뷰로 연결 12. 루트 서명 생성 (셰이더에 전달될 추가 버퍼들 나열) 13. 쉐이더 컴파일 14. 입력 배치 서술 생성 (셰이더에 전달될 정점 버퍼들의 특성 나열) 15. 기하구조 생성 (MeshGeometry를 생성하고 거기에 사용할 정점버퍼 및 색인버퍼 생성 + SubMesh 생성) 16. 파이프라인 상태 객체 (PSO) 생성 +명령 목록 제출 및 FlushQueue ​ 위 과정을 모두 수행한 ..

[Directx12][6장][1]파이프라이닝 구현 - 기본 지식

기본 지식 1.정점 특성 / 입력 배치 서술★ directX의 정점셰이더에서 처리되는 정점들은 위치정보외의 다른 정보들도 포함할 수 있다. 예를 들면 법선 벡터나 텍스처 좌표, 또는 절대 색상정보등을 가질 수 있다. ditectX에서 cpu에서의 정점 데이터들을 관리할때는 그냥 구조체로 정점들의 특성을 나열하면 된다. ex) struct Vectex1 { XMFLOAT3 Pos; XMFLOAT4 Color; } 이러한 구조체들의 배열은 바이트 그대로 gpu의 자원으로 전달 생성되어 사용된다.(void*로 전달) ​ 파이프라인이 실행될때 여러 슬롯에 등록된 정점버퍼(gpu의 정점배열데이터)들로부터 어떤 방식으로 각 정점의 특성들을 가져올지는 입력배치서술이라는 것으로 서술된다. 입력배치서술은 정점특성 입력 ..

[Directx12][5장]렌더링 파이프라인

기초 지식 1.렌더링 그래픽 프로그래밍에서 렌더링이란 점과 기하구조 등으로 표현된 3차원의 기하학적 데이터들을 특정 카메라를 기준으로 하여 그 카메라에 보이는 2차원 이미지를 그리는 것을 말한다. 우리가 실제로 2차원 이미지로 볼 때 다음과 같은 특성으로 3차원의 형태를 인식한다. 1.소실점 2.원근감 3.앞물체에 뒷물체가 가려짐 4.조명과 그림자 여기서 1과 2번은 원근 투영 변환으로 구현한다. 3번은 깊이 버퍼링으로, 4번은 각각의 조명,그림자 알고리즘등으로 구현한다. ​ 2.메시 그래픽 프로그래밍에서는 3차원 물체를 삼각형 면들의 합으로 근사하여 표현한다. 이를 삼각형 메시라고 한다. 경우에 따라서는 특정 장면을 점이나 선으로 표현할 때도 있다. ​ 3.색상 컴퓨덧셈터에서는 색상을 R,G,B 삼원색..

[Directx12][4장][2]Direct3D 기본 구조

기본 Direct3D의 구성 1.초기화 단계★ DIrectX12의 초기화는 다음의 단계를 따른다. 0.winapi를 통해 mainWindow생성 후 그 핸들 확보 1.IDXGIFactory4 생성 2.ID3D12Device 생성 3.fence생성 및 4X MSAA 품질 수준 지원 여부 점검 (지원/비지원, 최대 레벨) 4. 명령 대기열, 명령 할당자, 명령 목록 생성 5. 교환사슬 생성 (윈도우 핸들 필요) 6. 서술자 힙 생성 7. 교환사슬의 후면버퍼와 RTV서술자 힙에 대한 RTV생성 8. 깊이 스텐실 버퍼 생성 및 그 자원과 DSV 서술자 힙에 대한 DSV생성 9. 뷰포트 및 가위 직사각형 구조체 초기화 ​ 보통 함수 구조는 다음과 같이 된다. init함수() { 메인 윈도우 생성(); factor..

[Directx12][4장][1]Direct3D 초기화 - 기본 지식

기본 지식 1.Direct3D 개요 Direct3D는 윈도우의 제작사인 마이크로소프트와 여러 그래픽카드 제조사들의 직간접적인 협력으로 개발된 윈도우에서의 GPU 그래픽 인터페이스이다. C++의 API로 제공된다. ​ 2.COM 객체 ★ COM(Component Object Model)는 특정 소프트웨어의 컴포넌트에 대해 프로그래밍 언어 독립성과 하위 호환성을 가능하게하는 기술이다. DirectX에서 이러한 COM 객체는 C++ 클래스로 제공되니 그냥 한 객체라고 생각하고 사용해도 무방하다. ​ DriectX에서 COM 객체들은 대문자 I로 시작하는 클래스로 제공되는데 (ex/ ID3D12GraphicsCommandList) 이러한 객체들은 Microsoft::WRL::COMPtr이라는 전용 스마트 포인터..

[Directx12][3장]기초 수학 - 변환 및 관련 라이브러리

기초 수학 1.선형 변환 변환 t가 t(u+v) = t(u) + t(v) t(ku) = kt(u) 이 두 성질을 만족할 때 t를 선형변환이라 부른다. 이러한 선형변환은 행렬의 곱셉으로 표현할 수 있다. ​ 2.아핀 변환 ★ 선형 변환 t에 이동 벡터 b를 추가로 더한 변환을 아핀변환이라고 한다. (아핀 변환을 a라 할 때) a(u) = t(u) + b 3차원에 대한 아핀변환은 4차원 행렬과 4차원 벡터의 곱셉으로 표현 할 수 있다. a = t t t 0 t t t 0 t t t 0 bbb1 ​ 이때 곱하는 벡터의 w요소가 1이면 점, 0이면 벡터를 나타낸다. 점일때는 선형변환 후 b가 더해져 이동까지 이루어 지지만 벡터일때는 선형변환만 발생하고 b는 더해지지 않는다. 점은 이동할 수 있지만 벡터는 이동하..

[Directx12][2장]기초 수학 - 행렬 및 관련 라이브러리

기초 수학 1.행렬 m x n 행렬은 m개의 행과 n개의 열로 이루어진 실수들의 사각형 배열이다. ​ 2.행렬 기본 내용 ★ 행렬 연산 : 덧셈 뺄셈 곱셈 행렬식 전치 단위 행렬 수반 행렬(딸림 행렬) : 각 부분의 소행렬(그 행과 열을 제외한 행렬)의 행렬식 x (-1)i+j가 들어간 행렬 역행렬 : (수반 행렬)T / 행렬식 ​ 관련 라이브러리 1.행렬 타입들(XMMATRIX, XMMATRIX4X4) ★ DirectXMath에서는 XMMATRIX타입으로 4x4행렬을 표현한다. XMMATRIX는 XMVECTOR 4개로 이루어진 배열 멤버를 가진다. 행렬도 벡터와 마찬가지로 클래스멤버에서는 XMMATRIX대신 XMMATRIX4X4를 사용할 것을 권장한다. 이는 float 16개로 이루어진 struct와 ..

[Directx12][1장]기초 수학 - 벡터 및 관련 라이브러리

기초 수학 1.벡터 벡터는 크기와 방향을 가진 수량이다. 힘, 변위, 속도등을 나타낸다. ​ 2.벡터와 좌표계 벡터는 꼬리를 특정 기준계의 원점에 뒀을때 머리의 좌표를 이용하여 표현할 수 있다. 이때 어떤 기준계를 기준으로 하느냐에 따라 같은 벡터라도 다른 좌표로 표현될 수 있다. 선형대수학에서의 bais와 관련된 내용이다. ​ 3.왼손잡이, 오른손잡이 좌표계 ★ DirectX3D는 왼손잡이 좌표계를 쓴다. ​ 4.기본 벡터 연산 ★ 덧셈: u + v = (ux + vx, uy + vy, uz + vz) 뺄셈: u - v = (ux - vx, uy - vy, uz - vz) 스칼라 곱: ku = (kux , kuy , kuz) 길이: 벡터의 길이 정규화: 단위벡터화 내적: 각 벡터의 길이곱 x cos각도..