본문 바로가기

Academy I/Windows

[Windows10]다이렉트X 기초용어 해설

[나무위키 다이렉트X]


https://namu.wiki/w/DirectX





나는 머리가 좋은편이 아니어서 공부를 하면 나 스스로가 쉽게 이해하도록 바꾼다.


예전에는 렌더링이 뭔지도 모르고 , 게임을 그렇게 좋아하면서 프레임이 뭔지도 모르고 그래서 용어를 햇갈려하거나 예전에 나처럼 잘 몰랐던 사람들이 좀더 쉽게 이해했으면 해서 쓴다.




1) 렌더링


렌더링이란 단어를 들으면 참 와닿지도 않는다


뭔가 많이 들어보긴 했는데 뭔지 몰랐었는데, 쉽게 말하면 장면 하나를 그리는것을 렌더링이라고 한다.


흔히 게임이라는것은 배경도 있고, 탁자, 집, 몬스터 , 캐릭터 등도 있다.


이런것들은 가상의 3차원 공간에 존재하는데, 이것을 우리가 볼수 있는 2차원화면(왜 2차원화면이냐면 지금 우리가 보고있는 모니터가 바로 2차원이다. 홀로그램이면 3차원이 겠지?)


으로 만들어야 하는데, 이것의 일련의 과정을 통틀어 렌더링 이라 한다.


그럼 렌더링은 어떻게 되는가?





2) DC


이 DC라는녀석은 차후에 더 적을건데, 쉽게 말하면 그림 공장이다.


공장은 제품을 만들어내는데, 그림공장의 제품은 당연히 그림이다.


즉 그림공장은 곧 그림을 만들어 내므로, 렌더링을 실행시키는 녀석이 바로 DC 이녀석이다


렌더링은 하나의 행위(그리기)이고 DC는 그 그리기 함수를 할 수 있는 COM객체 라는 녀석이다.





3) COM 객체


하드웨어를 추상화 하여 하드웨어의 기능을 쉽게 사용하도록 도와주는 고마운 객체다.


쉽게 말하면 그래픽카드의 기능을 사용하려면 우리가 직접 조종하기에는 복잡하니까 다이렉트X에서 지원해주는 이 특수한 클래스를 사용하면 아주 쉽게 그래픽카드의 기능(그리기)을 사용할수 있다.


DC는 그래픽카드의 그리기 기능을 쉽게 사용하도록 도와주므로 COM객체 중 하나이다.



COM이란 객체는 아주 독특한데


1. 반드시 동적할당이여야 함

2. 정해진 방법으로 생성해야함. new 이런거 쓰면 안됨

3. 마찬가지로 제거할때도 delete 쓰면안됨. release라는 메소드를 사용해야함


이 3가지는 반드시 지켜져야한다.





4) 쉐이더


2번의 DC에서 그림공장이라고 했는데 이 공장이 돌아가려면 기계가 필요하다. (자동 무인기계라고 생각하자 노동자는 생략!)


쉐이더는 하나의 기계라고 생각하면된다. 각 쉐이더(기계) 들은 이전 쉐이더(기계)에서 작업한 결과물을 가지고 처리하며 최종적으로 완성된 그림(렌더링 결과)을 생성한다.


예를들어 라면공장이라 치면


첫번째 쉐이더에서는 라면의 봉지를 열어 놓고


두번째 쉐이더는 해당 열린 봉지에 라면을 넣고


세번째 쉐이더는 스프를 넣고


마지막 쉐이더는 봉지를 닿으면 완성된 라면봉지가 된다.


이것과 마찬가지다.


좀더 복잡하게 말하면 쉐이더는 GPU에서 처리되는 함수이며, 렌더링의 처리단위이다.





5) 쉐이더 모델


쉐이더 모델이란것은 공장의 버전을 생각하면 된다.


예를들어 60년대 라면공장이랑 현대의 라면공장이랑 공정 처리 방식이 다를것이다.


이 처리방식을 쉐이더 모델이라고 한다.


쉐이더 모델의 레벨이 높을수록 좀더 최신화된 공정 처리 방식이다.





6) 버텍스 ( 정점 )


렌더링을 하려면 공장과 기계만 있으면 될까? 아니다.


재료가 있어야 한다. 재료가 있어야 가공을 하던 할거 아닌가?


이 재료는 상당히 많다. 텍스처도 있고 , 버퍼도 있고 흔히 리소스라 불리는 것이 재료다.


근데 이 재료중 가장 근본적으로 중요한 게 바로 정점 이다.


모든 3차원 오브젝트는 정점으로 구성되어있다.


이 정점들로 구성된 오브젝트를 적당한 위치로 가공하고, 색상을 입히고, 빛을 쬐이고, 그림자를 만들고 한 뒤 그림을 저장하면 완성이다.



이게 바로 렌더링의 가장 원초적인 내용이다.