일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
- OS
- 병행성 관련 오류
- Direct12
- DirectX 12
- 다이나믹프로그래밍
- 타입 객체
- 알고리즘
- 프로그래머스
- I/O장치
- 그리디알고리즘
- 백준
- codility
- 운영체제
- 컨디션 변수
- 스케줄링
- 병행성
- 자료구조
- 렌더링 파이프라인
- 다이나믹 프로그래밍
- 디자인패턴
- 쓰레드
- 그리디 알고리즘
- 멀티쓰레드
- DirectX12
- 멀티프로세서
- 동적계획법
- 락
- 영속성
- 파일시스템 구현
- directx
- Today
- Total
목록directx (10)
기록공간

테셀레이션 단계들 테셀레이션은 주어진 메시의 삼각형들을 더 잘게 쪼개서 새로운 삼각형들을 만드는 과정을 말한다. 새 삼각형들을 새로운 위치로 이동함으로써 원래 메시에 없는 세부적인 특징을 만들어 낼 수 있다. 테셀레이션은 여러 장점이 있다. 1. 카메라에 가까운 삼각형들에는 테셀레이션을 적용해서 세부도를 높이고, 먼 삼각형들에는 테셀레이션을 적용하지 않는 방식의 세부 수준(Level-Of-Detail, LOD)을 구현할 수 있다. 이렇게 하면 관찰자가 실제로 볼 수 있는 부분에만 많은 삼각형을 사용하게 되므로 효율적이다. 2. 적은 수의 삼각형들로 이루어진 메시를 메모리에 담아두고 즉석으로 삼각형을 추가하여 메모리를 절약할 수 있다. 3. 애니메이션이나 물리 처리 같은 연산들을 단순한 저 다각형 메시에 ..

우리가 사용하는 컴퓨터의 모니터는 평면이다. 홀로그램이 아닌 이상은 직접 3차원의 세계를 모니터에 그대로 구현할수 있는 방법은 없다. 카메라에 비친 3차원 장면을 2차원 이미지로 생성하는 데 필요한 일련의 단계들을 렌더링 파이프라인(rendering-pipeline)이라고 부른다. 위 그림에서 왼쪽 이미지는 3차원 세계에 배치된 물체들과 그것을 바라보는 카메라를 옆에서 본 모습이고, 중간 이미지는 위쪽에서 바라본 모습이다. 그리고 오른쪽 이미지는 카메라 시점에서 바라본 3차원 세계를 2차원으로 만들어낸 모습이다. 3차원의 환상 3차원 그래픽을 살펴보기 전에 간단하지만 중요한 질문 하나에 답할 필요가 있다. 바로, "3차원 세계의 깊이와 부피를 어떻게 평평한 2차원 모니터 화면에 나타낼 것인가?"라는 질문..

기능 수준이라는 개념은 Direct3D 11에서 도입된 것으로, 코드에서는 D3D_FEATURE_LEVEL이라는 enum형으로 대표된다. 기능 수준들은 대략 버전 9에서 11까지의 여러 Direct3D 버전들에 대응된다. 기능 수준들은 GPU가 지원하는 기능들의 엄격한 집합을 정의한다(각 기능들이 지원하는 구체적인 내용은 SDK를 참고). 예를들어 기능 수준 11을 지원하는 GPU는 반드시 Direct3D 11의 기능 집합 전체를 지원해야 한다. 이러한 기능 수준은 응용 프로그램 개발을 편하게 해주는 요인이다. 현재 GPU의 기능 수준을 파악하기만 하면, 구체적으로 어떤 기능을 사용할 수 있는지를 확실히 알 수 있기 때문이다. 사용자의 하드웨어가 특정 기능 수준을 지원하지 않는 경우 응용 프로그램이 실행..

모니터의 픽셀들이 무한히 작지는 않기 때문에, 모니터 화면에 선을 완벽하게 나타내는 것은 불가능하다. 모니터에 선을 출력했을때 흔히 나타나는 현상이 있는데 이것을 '계단 현상' 또는 앨리어싱(Aliasing) 효과라고 부른다. 삼각형 변에서도 이와 비슷한 효과가 나타난다. 모니터의 해상도를 키운다면 이런 현상이 줄어들긴 하겠지만 완벽하게 없애기란 불가능하다. 그래서 이를 해결하기 위한 여러 기법이 있다. 이를 보통은 계단 현상을 제고 한다고 하여 '안티 앨리어싱(Antialiasing)' 이라고 부른다. 한번 알아 보도록 하겠다. 우선 첫번째 기법은 슈퍼샘플링(초과표본화)(Supersampling)이라는 기법이다. 우선 그릴 후면 버퍼를 화면 해상도의 4배 (가로, 세로로 2배씩)로 잡고, 장면을 후면 ..
랜더링 과정에서 GPU는 자원들에 자료를 기록하거나 (예를들어 후면버퍼나 깊이 스텐실 버퍼와 같은 자원들) 자원들에서 자료를 읽어 들인다(예를들어 표면의 모습을 서술하는 텍스처나 장면 안의 기하구조의 3차원 위치들을 담은 버퍼). 그리기 명령을 제출하기 전에, 먼저 해당 그리기 호출이 참조할 자원들을 렌더링 파이프라인에 묶어야(Bind)한다. 이를 가리켜 자원을 파이프라인에 "연결(Link)한다" 또는 "바인딩(Binding)한다"라고 말하기도 한다. 그리기 호출마다 달라지는 자원도 있으며, 필요에 따라 그리기 호출마다 그런 자원들의 바인딩을 갱신해주어야 한다. 그런데 GPU 자원들이 파이프라인에 직접 묶이는 것은 아니다. 실제로 파이프라인에 묶이는 것은 해당 자원을 참조하는 서술자(Descriptor)..

깊이 버퍼(Depth Buffer)는 앞서 텍스처 형식에서 잠깐 다루었듯이 이미지 자료를 담지 않는 텍스처의 한 예이다. 깊이 버퍼는 각 픽셀의 깊이 정보를 담고 있다. 픽셀의 깊이는 0.0에서 1.0사이의 값으로 0.0은 시야 절두체(View Frustum)안에서 가장 가까운 물체에 해당하고 1.0은 절두체 안에서 가장 먼 물체에 해당한다. 깊이 버퍼의 원소들과 후면 버퍼의 픽셀들은 일대일로 대용된다. 예를 들면 후면 버퍼의 해상도가 1280 x 1024라면 깊이 버퍼 또한 1280x1024개의 원소들로 구성된다. 몇몇 물체가 다른 물체들을 가리고 있다고 해보자 한 물체의 픽셀들이 다른 물체보다 앞에 있는지 판정하기 위해 Direct3D는 깊이 버퍼링 또는 z-버퍼링이라는 기법을 사용한다. 깊이 버퍼링..

예를 들어 모니터에 하나의 프레임 버퍼를 가지고 게임 세상을 표현한다고 생각해보자. 매 프레임마다 버퍼를 지우고 그리거나 이미 그려진 버퍼에 덮어 쓰게 될것이다. 전자 같은 경우에는 지우고 다시 그리다보니 찰나의 시간에 지워진 버퍼가 보여지게 되고 이것이 화면 깜빡임(Screen Flickering)현상으로 보여지게 될것이다. 그리고 후자 같은 경우에는 덮어 쓰는 도중에 현재 그리는 프레임 데이터와 이전 프레임 데이터가 같이 보이는 순간이 생겨 화면 찢어짐(Screen Tearing) 현상이 생길 것이다. 결국 그려지는 과정이 보이다보니 보는 사람 입장에서는 불편할 수 밖에 없을것이다. 이러한 현상들을 피하고자 사용하는 방법이 바로 2개의 프레임 버퍼를 이용하는 것이다. 2개의 프레임 버퍼는 각각 화면 ..

2차원 텍스처는 자료 원소들의 행렬(2차원 배열)이다. 2차원 텍스처의 용도 중 하나는 2차원 이미지 자료를 저장하는 것인데, 이때 텍스처의 각 원소는 픽셀 하나의 색상을 담는다. 하지만 텍스처가 꼭 이미지 자료의 저장만을 위해 사용되는 것은 아니며 훨씬 범용적으로 사용된다. 예를 들면 법선 매핑 같은 경우 텍스처에 각 원소의 색상이 아닌 3차원 벡터를 담는다. 텍스처에는 아무 자료나 담을 수 있는 것은 아니다. 텍스처에는 특정 형식(format)의 자료 원소들만 담을 수 있는데, 구체적인 형식은 DXGI_FORMAT이라는 열거형으로 지정한다. 자료 원소 형식들을 나열하면 다음과 같다. 이 형식들이 뜻하는 것을 확인하는 방법은 다음과 같다. 그리고 무형식(typeless) 텍스처들도 있는데, 이런 텍스처..