일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | |||
5 | 6 | 7 | 8 | 9 | 10 | 11 |
12 | 13 | 14 | 15 | 16 | 17 | 18 |
19 | 20 | 21 | 22 | 23 | 24 | 25 |
26 | 27 | 28 | 29 | 30 | 31 |
- UE4
- C언어
- Direct3D
- 세팅
- DirectX12
- vertex
- GPU
- DirectXTK
- engine
- Direct3D Init
- View
- 다이렉트X
- 동기화
- Input Assembler
- 프로그래밍
- 전처리문
- 다중표본화
- 다이렉트 초기화
- CPU
- CommandList
- C++
- DirectX
- RenderTargetView
- swapchain
- 게임수학
- 코딩
- c
- Direct Init
- DESC
- 다이렉트X 튜토리얼
- Today
- Total
목록DirectX12 (42)
비타Cpp
벡터 집합 {v0,v1, ... vn-1}의 n개의 모든 벡터가 단위 길이이고 서로 직교일때 그러한 벡터 집합을 정규직교(Orthonormal) 집합이라고 한다. 주어진 벡터 집합을 정규직교 벡터 집합으로 만드는 것을 직교화(Orthogonalization)라고 한다. 간단한 이해를 위해 2차원의 경우 부터 살펴보자. 위의 왼쪽 그림은 벡터 집합 {v0, v1}을 직교화 해서 정규 직교 집합 {w0, w1}을 얻는 과정이다. w0 = v0으로 시작해서, 벡터 v1이 w0과 직교가 되도록 w0의 방향으로 작용하는 부분을 v1에서 뺀다. w1 = v1 - projw0(v1) 이제 서로 직교인 벡터들의 집합 {w0, w1}이 만들어졌다. 마지막으로 w0과 w1을 정규화해서 단위 벡터로 만들면 정규직교 집합이 ..
점곱(dot product)이라고도 부르는 내적(inner product)은 스칼라값을 내는 벡터 곱셈의 일종이다. u = (ux, uy, uz)이고, v = (vx, vy, vz)라고 했을때, 내적은 다음과 같이 정의된다. u · v = uxvx + uyvy + uzvz 다른 말로하면 "내적은 대응되는 성분들의 곱들의 합" 이다. 내적의 기하학적 의미는 코사인 법칙을 적용해보면 알수 있다. u · v = ||u|| ||v|| cosθ θ는 두 벡터 u, v 사이의 0≤θ≤π를 만족하는 각도이다. 따라서 위 식은 두 벡터의 내적이 두 벡터 사이의 각도의 코사인을 벡터 크기로 비례한 것임을 뜻한다. 특히 u,v 둘다 단위 벡터일 때 경우 u · v는 두벡터 사이의 각도의 코사인이다. 이를 통해 내적의 유용..
복잡한 게임은 텍스처, 3차원 메시 등 많은 자원들을 사용한다. 그런데 그 자원들 중 항상 GPU에 상주해 있어야 하는것들은 많지 않다. 즉, 필요한 자원은 GPU의 메모리에 '입주' 시켜야 하고, 반대로 한동안 필요 없는 자원은 GPU의 메모리에서 '퇴거' 시킴으로써 자원의 상주성(Residency)를 관리할 필요가 있다. 예를들어, 게임에서 숲과 숲 속에 있는 큰 동굴이 있을때, 숲에서 동굴안을 표현하는 자원은 필요 없으며, 동굴 안에서도 숲의 자원이 필요 없을때 상주성 관리가 필요하다. 상주성 관리의 핵심은 응용 프로그램이 사용하는 GPU 메모리의 양을 최소화 하는데에 있다. 게임에서 사용되는 모든 자원이 메모리에 들어갈수 없을수도 있고, 다른 응용프로그램도 메모리를 사용 해야 할 수도 있기 때문에..
ID3D12Device::CheckFeatureSupport 메서드는 지원여부를 점검할 수 있는 메서드이다. 이 메서드의 서명은 다음과 같다. HRESULT CheckFeatureSupport( D3D12_FEATURE Feature, void *pFeatureSupportData, UINT FeatureSupportDataSize ); 1. Feature: 이 매개변수는 이 메서드로 지원 여부를 점검할 기능들의 종류를 나타낸다. D3D12_FEATURE 열거형의 다음과 같은 멤버 중 하나를 지정해야 한다. (a) D3D12_FEATURE_D3D12_OPTIONS : Direct3D 12의 여러 기능. (b) D3D12_FEATURE_ARCHITECTURE : 하드웨어 아키텍처 기능들. (c) D3D12..
모니터의 픽셀들이 무한히 작지는 않기 때문에, 모니터에 임의의 선을 완벽하게 표현할 수는 없다. 흔히 '계단현상'이라고 하는 앨리어싱(Aliasing) 효과가 아래의 그림이다. 선을 픽셀들의 배열로 '근사'하다 보면 이런 현상이 생긴다. 삼각형의 변에서도 이와 비슷한 앨리어싱 효과가 나타난다. 이러한 계단현상을 바로잡을 수 있는 기법이 안티앨리어싱(Anti-Aliasing)기법이다. 이러한 기법의 하나가 초과 표본화(Supersampling)이다. 초과 표본화에서는 후면 버퍼와 깊이 버퍼를 화면 해상도보다 4배(가로, 세로 두 배씩) 크게 잡고, 3차원 장면을 4배 크기의 해상도에서 후면 버퍼에 렌더링 한다. 이미지를 화면에 제시할 때가 되면 후면 버퍼를 원래 크기의 버퍼로 환원(Resolving)한다...
렌더링 과정에서 GPU는 자원들에 자료를 기록하거나 자원들에서 자료를 읽어 들인다. Draw() 명령을 호출하기 전에, 먼저 참조할 자원들을 렌더링 파이프라인에 묶어야(Bind) 한다. 이를 가리켜 자원을 파이프라인에 "연결한다(link)" 또는 "바인딩한다"라고 말한다. 하지만 GPU자원들이 파이프 라인에 직접 묶이는 것은 아니다. 실제로 파이프라인에 묶이는 것은 해당 자원을 참조하는 서술자(Descriptor) 객체이다. 서술자 객체는자원을 GPU에게 서술해주는 경량의 자료구조라고 할 수 있다. 이는 하나의 간접층(level of indirection)이다. 이처럼 간접층을 두는 이유는, GPU자원이라는 것이 사실상 범용적이므로, 같은 자원을 렌더링 파이프라인의 다른 단계(Stage) 에서 사용할수 ..
깊이 버퍼(depth buffer)는 이미지 자료를 담지 않는 텍스처의 한 예이다. 깊이 버퍼는 각 픽셀의 깊이 정보를 담는다. 픽셀의 깊이는 0.0에서 1.0까지의 값으로 0.0은 시야 절두체(View Frustum) 안에서 관찰자에 최대한 가까운 물체에 해당하고 1.0은 시야 절두체 안에서 최대한 먼 물체에 해당한다. 깊이 버퍼의 원소들과 후면 버퍼의 픽셀들은 일대일로 대응된다(즉, 후면 버퍼의 i,j번째 원소는 깊이 버퍼의 i,j번째 원소에 대응). 예를 들어 후면 버퍼의 해상도가 1280X1024라면 깊이 버퍼는 1280X1024개의 원소들로 구성된다. 한 물체의 픽셀들이 다른 물체보다 앞에 있는지 판정하기 위해, Direct3D는 깊이 버퍼링 또는 z-버퍼링이라는 기법을 사용한다. 여기서 중요한..
애니메이션이 껌뻑이는 현상을 피하려면 SwapChain을 이용하는 것이 최선이다. SwapChain은 애니메이션의 한 프레임 전체를 화면 바깥의(off-screen) 텍스처에 그린다. 이런 텍스처를 후면 버퍼(back buffer)라고 부른다. 주어진 한 프레임을 위해 장면 전체를 후면 버퍼에 그린다음에는, 그후면 버퍼를 하나의 완전한 프레임으로서 화면에 표시한다. 이렇게 하면 화면을 보는 사용자는 프레임이 그려지는 과정이 나타나지 않고 완성된 프레임만 보이게 된다. 이러한 기법을 이중 버퍼링이라고 부른다. 이중 버퍼링을 효율적으로 구현 하려면 하드웨어로 관리되는 두 개의 텍스처 버퍼가 필요한데, 하나는 전면 버퍼(front buffer)이고 다른 하나는 앞에서 말한 후면 버퍼이다. 화면에는 전면 버퍼에..