COM
COM(Component Object Model)은 DirectX의 언어 독립성과 하위 호환성을 가능하게 하는 기술이다.
이게 뭔가 해서 GPT한테 물어보니...
COM은 Windows 운영 체제에서 구성 요소를 만들고 통신하는 데 사용되는 기술이고,
개발자가 구성요소를 쉽게 생성하고 관리할 수 있게 도와준다고 한다..
그리고 COM 인터페이스들은 이름이 대문자 I로 시작한다.
텍스처
2차원 텍스처는 사실상 자료 원소들의 행렬이다.
2차원 텍스처는 다양한 용도로 쓰이는데,
대표적으로 2차원 이미지 자료를 저장하거나,
텍스처의 각 원소가 3차원 벡터를 담을 수도 있다.
이후에 나올 깊이 버퍼도 텍스처의 한 종류이다.
swap chain과 페이지 전환
애니메이션이 끊기지 않고 이어지기 위해,
전면 버퍼(front buffer)와 후면 버퍼(back buffer)를 사용한다.
전면 버퍼에는 현재 프레임의 모습을 담고 있고,
다음 애니메이션의 프레임을 후면 버퍼에 미리 그려놓는다면
사용자 입장에서는 프레임이 그려지는 과정이 보이지 않는다.
다음 애니메이션을 보여줘야 할 때 후면버퍼와 전면버퍼의 역할을 맞바꾼다면
끊기지 않고 자연스러운 애니메이션을 볼 수 있을 것이다.
이렇게 후면 버퍼와 전면 버퍼를 교환해서 화면에 표시되게 하는 것을 presenting이라고 하는데,
이때 버퍼의 내용을 맞바꾸는 것이 아니라
포인터만 맞바꾸기에 효율적인 연산이다.
여기서 전면 버퍼와 후면 버퍼는 swap chain을 형성한다.
그리고 이렇게 두 개의 버퍼를 사용하는 것을 이중 버퍼링이라고 한다.
버퍼를 세 개를 쓰기도 하지만, 일반적으로는 두 개로 충분하다고 한다..
깊이 버퍼링
깊이 버퍼는 0.0에서 1.0까지의 깊이 정보를 담는 텍스처이다.
0에 가까울수록 관찰자와 가까운 픽셀이고, 1에 가까울수록 먼 픽셀이다.
Direct3D에서는 픽셀들이 다른 물체보다 앞에 있는지 판정하기 위해,
깊이 버퍼링 또는 z-버퍼링 이라는 기법을 사용한다.
사실 지금까지 뒤에 있는 물체를 먼저 렌더링 하는줄 알았는데..
깊이 버퍼링에서 물체를 그리는 순서는 중요하지 않다고 한다.
이러한 깊이 버퍼링 알고리즘을 요약하자면,
후면 버퍼의 특정 위치에 기록될 픽셀들의 깊이를 비교해서,
가장 가까운(0에 가까운) 픽셀을 해당 픽셀에 그린다.
다중표본화
다중표본화란 한마디로 에일리어싱을 제거하기 위한 기법이다.
에일리어싱(aliasing)은 선을 픽셀로 근사할 때 생기는 계단 현상이다..
이러한 에일리어싱을 없애기 위한 기법으로 초과표본화라는 것이 있다.
초과 표본화란 후면 버퍼를 4배 크게 잡고, 4배 크기의 해상도에서 렌더링 한 다음에
프레임을 화면에 출력할 때는 원래 크기로 환원하는 것이다.
이런 초과표본화는 (당연히) 픽셀 처리량과 메모리 소비량이 4배라서 비용이 큰데,
이런 비용을 줄이기 위해 Direct3D에서 제시하는 기법이 다중표본화이다.
다중표본화도 초과표본화처럼 4배 크기의 해상도를 사용한다.
그러나 초과표본화는 각 부분픽셀마다 계산하지만,
다중표본화는 이미지 색상을 픽셀의 중심에서 한번만 계산하고, 가시성과 포괄도를 이용해서 최종 색상을 결정한다.
'컴퓨터 그래픽스 > DirectX' 카테고리의 다른 글
Tutorial02 코드 분석2 (0) | 2023.05.26 |
---|---|
4. Direct3D의 초기화와 Tutorial02 코드 분석1 (0) | 2023.05.12 |
DirectX11 개발 환경 설정 (0) | 2023.05.12 |