
처음 코딩을 배우면 문법은 이해했는데 막상 무엇을 만들어야 할지 막막해지는 시기가 옵니다. 수업에서는 이 시기를 짧게 넘기도록 작은 게임 하나를 정해 기능을 …
화면의 점 하나하나에 색을 정해 주는 프로그램
게임 화면은 수많은 작은 점, 즉 픽셀로 이루어져 있습니다. 매 프레임마다 이 점 하나하나가 어떤 색이어야 하는지 계산해야 화면이 완성됩니다. 셰이더는 바로 이 계산 규칙을 적어 둔 코드입니다.
쉽게 비유하면 아주 많은 화가에게 똑같은 지시서를 나눠 주는 것과 같습니다. 화가 한 명이 화면 전체를 칠하면 오래 걸리지만, 화가 수천 명이 각자 맡은 점 하나씩을 지시서대로 칠하면 순식간에 끝납니다. GPU가 이렇게 수많은 계산을 동시에 처리하는 장치이고, 셰이더가 그 지시서입니다.
이 구조 때문에 셰이더 코드는 일반 게임 코드와 생각하는 방식이 조금 다릅니다. 한 점에 대한 계산을 짧고 단순하게 쓰고, 그것이 화면 전체에서 동시에 실행된다고 상상해야 합니다. 앞뒤 점의 결과를 마음대로 참고하기 어렵다는 점도 처음에 헷갈리는 부분입니다.
정점 셰이더와 픽셀 셰이더의 역할 차이
처음 배울 때 가장 먼저 만나는 두 종류가 정점 셰이더와 픽셀 셰이더입니다. 3D 모델은 꼭짓점(정점)과 그 사이를 잇는 면으로 이루어져 있는데, 두 셰이더는 각각 다른 단계를 맡습니다.
| 구분 | 정점 셰이더 | 픽셀(프래그먼트) 셰이더 |
|---|---|---|
| 다루는 대상 | 모델의 꼭짓점 하나하나 | 화면에 그려질 점 하나하나 |
| 주로 하는 일 | 꼭짓점의 위치를 화면 좌표로 바꾸기, 형태 흔들기 | 색, 밝기, 질감 계산 |
| 게임 속 예 | 바람에 흔들리는 풀, 출렁이는 깃발 | 금속 반사, 물 표면 반짝임, 툰 셰이딩 |
정점 셰이더가 '어디에 그릴지'를 정한다면, 픽셀 셰이더는 '무슨 색으로 칠할지'를 정한다고 기억하면 쉽습니다. 실제로는 이 밖에도 여러 단계와 종류가 있지만, 처음에는 이 두 가지 흐름을 이해하는 것으로 충분합니다.
게임에서 셰이더가 쓰이는 대표 장면
가장 흔한 쓰임은 재질 표현입니다. 같은 모델이라도 셰이더에 따라 돌, 나무, 금속, 유리처럼 다르게 보입니다. 빛이 어느 방향에서 오는지, 표면이 얼마나 거친지에 따라 밝기와 반사를 계산하기 때문입니다.
그림체를 만드는 데도 쓰입니다. 애니메이션처럼 명암을 두세 단계로 딱 끊어 칠하는 툰 셰이딩, 캐릭터 외곽에 선을 그리는 효과도 셰이더로 만듭니다. 같은 3D 모델이 사실적으로도, 만화처럼도 보일 수 있는 이유입니다.
연출과 피드백에도 셰이더가 들어갑니다. 캐릭터가 맞았을 때 순간 하얗게 번쩍이는 효과, 적이 사라질 때 타들어 가듯 녹아내리는 효과, 화면 전체가 흐려지거나 색이 바뀌는 효과가 대표적입니다. 이펙트 아티스트가 셰이더를 알아야 하는 이유도 여기에 있습니다.
코드로 쓰는 셰이더와 노드로 만드는 셰이더
셰이더는 원래 전용 언어로 코드를 작성합니다. 지금도 성능을 세밀하게 조절해야 하는 경우에는 코드를 직접 쓰는 경우가 많습니다. 다만 처음 배우는 사람에게는 문법과 수학이 한꺼번에 몰려와 진입 장벽이 높게 느껴집니다.
그래서 유니티와 언리얼 같은 게임 엔진은 노드를 선으로 이어 셰이더를 만드는 시각적인 편집기를 제공합니다. 텍스처를 불러오는 상자, 색을 곱하는 상자, 시간에 따라 값이 변하는 상자를 연결하며 결과를 바로 눈으로 확인할 수 있습니다. 아티스트가 직접 재질을 만들 때 주로 이 방식을 씁니다.
두 방식은 경쟁 관계가 아닙니다. 노드로 원리를 익히면 코드에서 무엇을 하는지 이해하기 쉬워지고, 코드를 알면 노드 그래프가 무거워지는 이유를 판단할 수 있습니다. 진로에 따라 어느 쪽을 더 깊게 팔지 정하면 됩니다.
직무마다 셰이더를 알아야 하는 깊이가 다릅니다
그래픽스 프로그래머는 엔진의 렌더링 구조와 함께 셰이더를 깊이 다룹니다. 조명 모델, 그림자, 후처리 같은 기본 틀을 만들고, 기기별로 성능을 맞추는 일이 많습니다. 수학과 GPU 구조에 대한 이해가 가장 많이 필요한 쪽입니다.
일반 클라이언트 프로그래머는 셰이더를 직접 많이 쓰지 않더라도, 셰이더에 값을 넘기는 코드를 자주 작성합니다. 캐릭터 체력이 줄면 화면 가장자리가 붉어지게 하거나, 아이템 등급에 따라 빛나는 색을 바꾸는 일이 그 예입니다. 셰이더가 어떤 값을 받는지 알면 아티스트와의 협업이 훨씬 수월해집니다.
테크니컬 아티스트와 이펙트 아티스트는 노드 편집기로 재질과 효과를 직접 만들고, 아티스트들이 쓰기 편한 셰이더 도구를 정리하기도 합니다. 결국 셰이더는 어느 한 직무의 전유물이 아니라 그래픽 품질을 함께 만드는 공통 언어에 가깝습니다.
처음 배울 때 헷갈리는 점과 공부 순서
가장 흔한 고민은 수학입니다. 셰이더에는 벡터와 내적 같은 개념이 자주 나옵니다. 하지만 처음부터 수식을 다 이해하려 하기보다, 값을 바꿔 보며 화면이 어떻게 달라지는지 관찰하는 쪽이 이해가 빠릅니다. 결과를 먼저 보고 원리를 나중에 채워도 늦지 않습니다.
두 번째는 성능입니다. 셰이더는 화면의 모든 점에서 실행되기 때문에 작은 계산 하나가 쌓이면 게임이 느려집니다. 특히 모바일 게임에서는 화려한 효과보다 가벼운 셰이더가 중요할 때가 많습니다. 보기 좋은 효과를 만드는 것과 그 효과를 가볍게 만드는 것은 별개의 실력입니다.
- 엔진의 노드 편집기로 텍스처 색 바꾸기, 밝기 조절부터 해 보기
- 시간 값을 이용해 색이 깜빡이거나 텍스처가 흐르는 효과 만들기
- 빛 방향에 따라 밝기가 바뀌는 간단한 조명 계산 따라 해 보기
- 같은 효과를 코드로 옮겨 보며 노드와 코드의 대응 관계 익히기
이 순서로 작은 효과를 하나씩 만들어 보면 셰이더가 막연한 마법이 아니라 규칙의 조합이라는 것이 보입니다. 게임 클라이언트 개발을 목표로 셰이더를 어디까지 공부해 둘지 막막하다면, SBS아카데미게임학원 게임프로그래밍 과정 상담에서 지금 실력에 맞는 그래픽스 공부 범위를 물어보세요.
자주 묻는 질문
셰이더는 프로그래머만 다루나요?
아닙니다. 노드 편집기로 재질과 효과를 만드는 아티스트도 많고, 테크니컬 아티스트는 프로그래머와 아티스트 사이에서 셰이더를 주로 다룹니다.
셰이더를 공부하면 그래픽 카드 성능이 좋아야 하나요?
간단한 실습은 일반적인 노트북으로도 가능합니다. 다만 무거운 효과를 실험하거나 엔진을 오래 돌리려면 사양 여유가 있는 편이 편합니다.
가까운 캠퍼스에서 게임프로그래밍 알아보기
사는 곳과 가까운 캠퍼스를 고르면 수업 내용, 오시는 길, 상담 신청을 한 번에 볼 수 있습니다.