쉐이더(Shader)
3D 컴퓨터 그래픽에서 최종적으로 화면에 출력하는 픽셀의 색을 정해주는 함수
렌더링 파이프라인 (렌더링 순서)
1. 오브젝트 데이터 받아오기
- 그래픽 카드가 버텍스(정점)로 이루어진 물체 데이터 값을 받아옴
- 버텍스는 버텍스의 Index number, position, normal, color 등의 정보를 갖고 있음
2. 버텍스 쉐이더 (Vertex Shader)
- 버텍스의 위치 값 변환이 이루어짐
- 로컬 좌표
- 월드 좌표계 변환 (월드 변환 행렬 곱하기)
- 카메라 중심점으로부터 좌표 계산. Orthographic Projection(카메라 행렬 곱하기)
- 원근감 부여 (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 |