쉐이더(Shader)

3D 컴퓨터 그래픽에서 최종적으로 화면에 출력하는 픽셀의 색을 정해주는 함수

 

렌더링 파이프라인 (렌더링 순서)

1. 오브젝트 데이터 받아오기

  - 그래픽 카드가 버텍스(정점)로 이루어진 물체 데이터 값을 받아옴 

  - 버텍스는 버텍스의 Index number, position, normal, color 등의 정보를 갖고 있음

 

2. 버텍스 쉐이더 (Vertex Shader)

  - 버텍스의 위치 값 변환이 이루어짐

  1. 로컬 좌표
  2. 월드 좌표계 변환 (월드 변환 행렬 곱하기)
  3. 카메라 중심점으로부터 좌표 계산. Orthographic Projection(카메라 행렬 곱하기)
  4. 원근감 부여 (Projection 행렬 곱하기) Perspective 프로젝션일 경우에만 일어남

 

3. 래스터라이져 (Rasterizer)

  - 좌표를 조정한 버텍스들을 픽셀 단위로 변환하는 과정

 

4.픽셀쉐이더(Pixel Shader) / 프레그먼트 쉐이더(Fragment Shader)

  - 픽셀에 조명, 텍스쳐, 그림자, 특수효과 등을 연산하여 최종 픽셀 색상을 결정함


모니터 색은 가산혼합으로 만들어짐

* 가산혼합 - RGB로 이루어진 색을 더할수록 밝아짐

* 컬러 모니터는 RGB로 구성된 3개의 서브픽셀로 이루어져 있음 (설계에 따라 아닌 경우도 있음)

 

R(100%) G(100%) B(100%) => 흰색

 

R(0%) G(0%) B(0%) => 검은색

 

R(50%) G(50%) B(50%) => 회색

 

R(0%) G(0%) B(100%) => 파란색

 

 

컬러를 Float 단위로 나타내기

100%를 1, 50%를 0.5, 0%를 0으로 나타냄

R(100%) G(50%) B(0%) => Float3(1.0, 0.5, 0.0)

 

 

컬러 연산

덧셈

float3(0.5, 0.5, 0.5) + float3(0.5, 0.5, 0.5) = float3(1,1,1)

 

뺄셈

float3(1, 1, 0) + float3(1, 0.5, 0) = float3(0 ,0.5, 0)

 

곱셈

float3(0.5, 0.5, 0.5) * float3(0.5, 0.5, 0.5) = float3(0.25, 0.25, 0.25)

 

나눗셈은 상대적으로 계산이 느리고 곱셈 연산으로 대치 가능해서 잘 안씀

 

 

값이 0 이하 1이상일 경우 =>  숫자 값은 유지되어도, 0 미만, 1 초과의 값은 모니터에서 표현할 수 없음

 

float3(1, 1, 0) + float3(1, 0, 0) = float3(2, 1, 0) => 숫자만 2로 존재할 뿐, 실제로 보이는 건 (1, 1, 0) 

float3(1, 0, 0) - float3(0, 0, 1) = float3(1, 0, -1) => 숫자만 -1로 존재할 뿐, 실제로 보이는 건 (1, 0, 0) 

 

 

컬러 반전(Invert)

1에서 어떤 색을 빼면 그 색이 반점됨

빨간색을 반전하면 하늘색이 됨

1 - float3(1, 0, 0) = float3(0, 1, 1)

 

 

'Unity > Shader' 카테고리의 다른 글

Surface Shader 작성하기  (0) 2025.09.28
ShaderLab을 이용한 제작 방식  (0) 2025.09.28

+ Recent posts