[Unity/Shader] 1단계. Unity Shader 소개

Jaeyoung Ko·2025년 5월 15일

팀의 프로젝트를 위해 필요한 셰이더를 개발할 필요성이 생겼다.

물론 학부 과정에서 그래픽스를 공부한 적도 있어서 스스로에게도 흥미로운 부분이라고 생각이 들었다.


Shader

셰이더는 modern CG에서 그래픽 랜더링에 매우 중요한 것으로,

화면에 출력할 Pixcel에 대해 위치와 색상을 계산하는 함수이다.

그래픽 랜더링 파이프라인은 보통

3D Object를 2D Image로 변환하기 위해,

Vertex Shader > Rasterizer > Fragment Shader > Output Merger 과정을 거친다.


(1) Vertex Shader

Vertex Shader 는 이름에서 알 수 있듯, 각 정점 vertex에 대해 작업을 수행한다.

Model-view 변환과 Projection

모델의 local transform > world transform > camera의 view transform으로 변환시키며, 최종적으로 3D 의 view를 2D 평면으로 Projection 시킨다.


(2) Fragment Shader

Fragment Shader 는 rasterizer 에 의해 생성된 각 fragment에 대해 작업을 수행한다.

여기에 앞 과정에서 거쳐 interpolated 된 transform, normal map 등의 입력을 받아 lighting 조명 등에 대한 계산, 색상 혼합등을 거쳐 최종적인 픽셀의 색상 을 결정한다.


즉 단순히 말해,

Vertex Shader는 정점에 대한 위치와 속성 데이터를,

Fragment Shader는 픽셀의 최종적인 색상을 결정한다.



이 같이, 그래픽 랜더링을 위해 정점 정보와 색상 정보를 위한 Shader를 유니티에서 시각적 속성을 제어하는 방법은 두 가지이다.

(1) HLSL 코딩 (native)

HLSL, 즉 High-Level Shading Language를 통해 스크립팅을 하듯 셰이더 언어로 셰이더 로직을 구현하는 방식이다.

(2) Shader Graph

언리얼 엔진의 블루프린트처럼, 네이티브 언어 대신 노드-링크 기반의 비주얼 스크립팅이다.

위의 이미지는 필자가 예시로 작성해 본 Unity Shader Graph이다.



다음 포스팅은 셰이더 그래프에 조금 더 알아볼 예정이다.

profile
안녕하세요, 고재영입니다. 언제나 즐겁게 살려고 노력합니다.

0개의 댓글