안녕하세요! 요즘 게임 엔진 개발 공부를 하면서 새롭게 시작한 공부가 있는데요.

바로, DirectX와 Driect3D(일명, D3D) 입니다! 오늘은 Direct3D라는 기술이 무엇인지, 그리고 왜 게임 업계에서 이 기술을 왜 중요하게 생각하는 건지 정리해보려고 합니다~

DirectX는 간단히 말하면 마이크로소프트가 개발한 API 모음집으로, 게임 개발에 필수적인 다양한 기능을 제공해줘요.(마쏘만세~!~!) 그중에서도 우리가 집중할 것은 Direct3D예요. Direct3D는 3D 그래픽을 GPU로 렌더링할 수 있게 해주는 API로, 게임에서 보는 캐릭터, 배경, 이펙트 같은 시각적 요소들을 다룹니다.
쉽게 말해, Direct3D는 우리가 만든 3D 모델이 화면에 실제로 보이도록 도와주는 기술이에요. 만약 Direct3D가 없다면 게임 화면은 텅 빈 공간일지도 몰라요~!
3D 그래픽은 수학에 기반해요. 벡터, 행렬 연산, 좌표 변환 같은 개념은 기본 중의 기본이에요. 예를 들어, 캐릭터가 이동하거나 회전하는 것을 수학적으로 계산하는 게 바로 이 부분입니당.

GPU는 데이터를 병렬로 처리하는 강력한 칩셋이에요. 여기서 칩셋이란, GPU 내부에서 다양한 기능을 제어하는 전자 회로 집합을 말해요. 쉽게 말해 칩셋은 데이터를 효율적으로 처리하고 전달하는 "교통 정리자" 역할을 해요. 게임에서 수많은 객체를 빠르게 렌더링하는 데 GPU의 역할이 필수적인 이유도 바로 이 병렬 처리 능력 덕분이에요.
Direct3D는 GPU가 버텍스(vertex) 와 픽셀(pixel) 정보를 처리하여 화면에 출력하는 모든 과정을 제어해요. 예를 들어, 캐릭터의 위치, 광원 효과, 그리고 텍스처가 GPU를 통해 렌더링되어 실시간으로 화면에 보이게 되죠.
렌더링 파이프라인은 대략 이렇게 진행돼요 :)
- 버텍스 셰이더: 3D 모델의 점(버텍스)을 GPU가 변환합니다.
- 래스터화: 변환된 데이터를 2D 픽셀로 변환합니다.
- 픽셀 셰이더: 각 픽셀에 텍스처나 조명 효과를 입힙니다.
셰이더는 GPU에서 실행되는 작은 프로그램이에요. 버텍스 셰이더는 모델의 각 점이 어디에 위치해야 하는지 계산하고, 픽셀 셰이더는 그 점에 어떤 색을 입힐지 결정해요.
셰이더 프로그래밍 언어로는 여러 가지가 있는데, 대표적으로 HLSL(High-Level Shader Language), GLSL(OpenGL Shading Language), 그리고 Metal Shading Language가 있어요.
HLSL은 Direct3D용 셰이더를 작성하는 데 사용되고,
GLSL은 OpenGL 환경에서,
Metal Shading Language는 애플의 Metal API에서 사용돼요.
이 중 HLSL은 Windows 플랫폼의 DirectX 개발에서 매우 널리 쓰이고 있어요.
💡 비유하자면, GPU는 빵집🥐🏚️이고, 셰이더는 빵을 구워주는 레시피📝예요. 어떤 빵을 만들지 결정하는 건 바로 저희의 코드에 달렸죠ㅎㅎㅎ
Direct3D의 동작을 쉽게 이해하기 위해 영화 제작 과정과 비유해 볼게요.

입력 처리 (시나리오 작성): 영화의 각 장면을 구상하듯이, 3D 모델 데이터를 준비하는 과정이에요.
버텍스 셰이더 (배우 연기): 시나리오에 따라 배우들이 정해진 위치에서 연기하듯, 3D 모델의 각 점(버텍스)을 변환해요.
래스터화 (카메라 촬영): 배우의 연기를 카메라로 촬영하는 것처럼, 3D 공간의 데이터를 2D 픽셀로 변환해요.
픽셀 셰이더 (후반 작업): 촬영한 장면에 색감 보정이나 특수 효과를 추가하는 것처럼, 각 픽셀에 텍스처와 조명을 적용해요.
출력 (영화 상영): 후반 작업이 완료된 장면을 관객에게 보여주듯이, 화면에 최종 이미지를 렌더링해요.
저는 원래 클라이언트 프로그래머 직무를 준비하다가 최근 물리 엔진 프로그래머에도 관심이 생겼어요!🥰 d3d는 이제 막 공부를 시작한 단계이지만, 앞으로 차근차근 관련 지식을 더 쌓아가보려고 합니다.
클라이언트 프로그래머는 게임의 UI, 캐릭터, 배경 등 눈에 보이는 모든 시각적 요소를 다뤄요. 이때 Direct3D는 중요한 역할을 해요. 예를 들어, 캐릭터의 움직임, 파티클 효과(폭발이나 불꽃 등) 등이 Direct3D의 힘으로 화면에 표현돼요.
Direct3D 같은 기술은 게임업계의 다양한 시각적 요구를 충족하기 위해 필수적이에요. 실제로 많은 게임 회사들이 클라이언트 프로그래머 채용 시 이와 관련된 역량을 요구하고 있어요.
- 넥슨: 클라이언트 개발 직군에서 DirectX 및 3D 그래픽 렌더링 경험을 요구하는 경우가 많아요.
- 엔씨소프트: Direct3D를 활용한 실시간 렌더링 최적화 경험이 우대 조건으로 명시됩니다.
- 크래프톤: 물리 기반 렌더링과 DirectX 기술을 사용해 대규모 월드의 시각적 디테일을 구현할 수 있는 능력을 요구해요.
이처럼 주요 대기업 및 중견 게임사들의 채용 공고에서는 Direct3D, 셰이더 프로그래밍, 렌더링 최적화 등의 역량이 필수 또는 우대 조건으로 자주 등장해요. 이 기술을 잘 다루는 인재는 게임의 시각적 품질과 최적화에 큰 기여를 할 수 있기 때문에 매우 매력적으로 평가받죠.
물리 엔진 프로그래머는 충돌, 중력, 힘의 작용 등 물리적 이벤트를 처리합니다. 그런데 물리 계산의 결과를 시각적으로 보여주는 것도 매우 중요해요. 이때 Direct3D가 그 결과를 화면에 정확히 반영합니다.
물리 엔진 프로그래머에게도 Direct3D 기술은 필수적이에요. 많은 게임 회사들이 물리 기반의 시뮬레이션과 그 시각적 반영을 위한 역량을 요구하고 있죠.
- 펄어비스: 물리적 충돌과 파괴 효과의 시각적 구현을 위한 Direct3D와 셰이더 프로그래밍 경험을 중시해요.
- 크래프톤: 실시간 물리 시뮬레이션의 결과를 그래픽적으로 표현할 수 있는 능력을 필수 조건으로 명시하는 경우가 많아요.
- 스마일게이트: 게임 환경에서 파괴 가능한 오브젝트와 상호작용하는 시스템 개발 시 Direct3D 렌더링 최적화 경험을 요구해요.
이처럼 물리 엔진 프로그래머가 게임에서 시뮬레이션의 결과를 잘 시각화하고 최적화하는 역량은 실제 채용 과정에서도 큰 가치를 인정받고 있어요.
다음은 d3d 기술을 공부하는데 필요한 환경과 도구에 대한 설명이에요.
Visual Studio: C++ 개발에 가장 적합한 IDE예요. 참고로 저는 현재 2022 버전을 사용하고 있어요. 설치할 때는 각종 필수 컴포넌트(예: C++ 개발 워크로드, Windows SDK)를 잘 체크해서 설치해야 나중에 발생할 수 있는 오류를 방지할 수 있어요.
Windows SDK: Direct3D API를 사용할 수 있도록 지원해요.
DirectX Debug Layer: 디버깅 시 렌더링 오류를 찾는 데 매우 유용해요.
"Introduction to 3D Game Programming with DirectX 11" by Frank Luna: Direct3D를 처음 시작하는 사람들에게 가장 추천하는 책이래요.
Microsoft Docs (DirectX 공식 문서): 최신 API 정보와 예제가 포함되어 있어요.
LearnOpenGL.com: 비록 OpenGL 기반이지만, 그래픽스의 개념을 이해하는 데 큰 도움이 될거예요.
이렇게 보니, 정말 개발을 잘하려면 영어 실력도 필수인 것 같아요..ㅎㅎㅎ 다음은 커뮤니티에요!
Stack Overflow: 프로그래머들이 질문하고 답을 찾는 데 가장 활발한 공간 중 하나예요.
Reddit의 r/gamedev: 게임 개발자들이 모여 있는 커뮤니티로, 다양한 경험을 공유할 수 있어요.