Graphics와 DirectX 개요

이승덱·2021년 7월 27일
0

Graphics&DirectX

목록 보기
1/37

Graphics 와 DirectX 개요

상용엔진만 학습하여 게임을 만드는 것으로 프로그래밍 실력을 판단할 수 없다.

그래픽스를 아는 것은 게임 엔진을 바라보는 시야를 넓히는 것

면접때 자주 기출되는 질문들

- 렌더링 파이프라인?

- diffuse, ambient, specular

- double buffering

- tangent space

- 그림자 원리

- 짐벌락 현상

- quaternion

질문에 대답하기 위해선 그래픽스 기본에 대한 지식을 알아야한다.

Graphics와 DirectX를 공부할 때는 나무가 아니라 숲을 보듯 공부해야한다. ( 각 함수의 세세한 것을 알기 보다는 사용 법을 아는 것을 우선시하자, 엔진을 지탱하는 기반 지식을 쌓는 것)


우리는 결국 다이렉트 x를 이용하여 그림을 그리는 것이다.

게임은 영화촬영과 유사하다!

조명(Light)도 있고~ 카메라도 있고~ 배우,세트장(Object)도 있고~

즉 게임 제작은 영화를 촬영하는 것과 비슷하다.

결국엔 화면은 2D다.

하지만 원근법과 그림자 등 물리규칙을 통해 3D를 보는 것처럼 표현된다.

픽셀이란? -> 우리가 보는 화면이 무수히 많은 점으로 표현됨

각각의 점이 픽셀. 4K의 경우 4천개의 점으로 이루어져 있다는 뜻

영화와 게임, 애니메이션의 차이는?

영화는 실제 세상에서 자연적인 물리규칙을 사용하여 촬영

게임, 애니메이션은 가상 세상에서 수학적으로 물리 규칙을 만들어 줘야함

게임과 애니메이션의 차이는?

애니메이션은 딱 한번만 찍으면 끝!

게임은 카메라, 오브젝트가 고정이 아니고 유저의 조작 혹은 게임의 흐름에 따라 변함

  • 실시간으로 계속 연산이 필요함.

  • 따라서 게임은 하드웨어적 문제 때문에 최신 그래픽스 기술를 사용하진 않는다.

3d 화면이 2d화면으로 어떻게 변환하는지, 각 오브젝트들의 구현 방식을 공부하는 것이 direct x와 게임수학


GPU와 렌더링 파이프라인

우리는 영화 촬영과는 달리 수학적 계산을 토대로 세상을 그려야함.

삼각형 단위로 Object를 구현하고 위치와 색상 관련 계산을 한다.

캐릭터의 경우 수천개의 포인터 정점으로 이루어짐

연산 - CPU, 변환연산 - GPU

  • 고전게임(정점 개수가 많이 없는..)의 경우 GPU 연산 까지 필요가 없다.

  • 정점 개수가 많이 필요로 하는 최신 게임은 GPU연산이 필요.

즉 CPU가 모든걸 떠맡아 하지 않고 GPU를 사용하여 노가다 연산을 처리

CPU와 GPU 의차이
  • CPU: 고오급 인력, 복잡한 연산, 기억력이 뛰어남 , 그러나 ALU(실질적으로 계산을 하는 역할)가 많이 않다.

  • GPU: ALU가 매우 많다(계산이 매우 빠름), 노가다 작업에 유리, GPU로 연관성이 없는 일들을 서로 병행하여 진행

  • 결론: 독립적인 일들을 병렬로 진행하는 것은 GPU가 매우 유리하다

각각의 도형들은 서로에게 영향을 주지 않는다, -> 따라서 서로 독립적이다. ->  GPU로 연산
  • 픽셀의 색깔, 도형구현 등은 GPU로 계산하여 결과물을 합쳐줌

메모리 정보를 토대로 2D화면으로 출력하기 위한 일련의 단계를 '렌더링 파이프라인' 이라고 한다

출처:https://docs.microsoft.com/ko-kr/windows/win32/direct3d12/pipelines-and-shaders-with-directx-12
  • input-Assembler Stage : 정점 정보 전달(정점들의 연결 관계)

  • Vertex Shader Stage: 정점들을 대상으로 연산 = 정점 변환(카메라의 각도에 따른 정점들의 위치 변화를 공식으로 계산)

  • Hull Shader Stage: 새로운 정점을 생성(거시적)

  • Tessellator Stage: 새로운 정점을 생성(거시적)

  • Domain Shader Stage: 새로운 정점을 생성(거시적)

  • Geometry Shader Stage: 새로운 정점을 생성(Direct x 10에서 등장),(위 3총사보다 세밀한 작업에 사용)

    • 정점을 만드는 이유: 보정이 필요한 경우 새로운 정점을 늘려줘야함.(ex 지형을 구현할 때 멀리있는 지형은 자세히 구현할 필요가 없고 가까이 있는 지형은 자세히 구현해야함(정점 추가).

-------------여기까지 정점단위의 계산------------------

  • Rasterizer Stage: 정점 데이터를 기반으로 픽셀로 변환, 내부 점들 보간

  • Pixel Shader Stage: 최종적으로 색상을 입히는 단계, 색상 조절, 강제 색 변환

  • Output Merger Stage: 마무리 단계 모든 정보를 조합하여 색상을 결정

결론: 렌더링에는 정해진, 단계적인 프로세스가 있다

direct x 는 마이크로소프트가 제공하는 gpu 활용 라이브러리기 때문에 우리는 그래픽카드의 종류와 상관 없이 direct x에 맞춰서 설계를 하면 되고, 나머지 세부적인 호환은 제조사와 마이크로소프트가 알아서 해준다!

profile
공부 기록용 블로그입니다

0개의 댓글