Unity 셰이더 작성 개요
Unity의 HLSL(고수준 셰이딩 언어)을 사용하여 셰이더를 작성하는 방법에 대한 설명입니다. 이 문서에서는 Unity의 빌트인 셰이더 변수, 헬퍼 함수 및 다양한 데이터 타입을 다룹니다.
빌트인 셰이더 변수
Unity에는 셰이더에서 사용할 수 있는 여러 전역 변수가 있습니다. 이 변수를 통해 현재 오브젝트의 정보 및 렌더링에 필요한 다양한 설정을 가져올 수 있습니다.
매트릭스 변수
다음은 Unity에서 제공하는 여러 매트릭스 변수입니다. 모든 매트릭스는 float4x4 타입이며, 열 우선(column-major) 배열입니다.
| 이름 | 값 |
|---|---|
| UNITY\MATRIX\MVP | 현재 모델 * 뷰 * 투사 매트릭스 |
| UNITY\MATRIX\MV | 현재 모델 * 뷰 매트릭스 |
| UNITY\MATRIX\V | 현재 뷰 매트릭스 |
| UNITY\MATRIX\P | 현재 투사 매트릭스 |
| unity_ObjectToWorld | 현재 모델 매트릭스 |
| unity_WorldToObject | 현재 월드 매트릭스의 역 |
카메라 관련 변수
렌더링 중에 사용되는 카메라 관련 변수들도 있습니다. 이들은 렌더링 중인 카메라의 정보만을 제공합니다.
| 이름 | 타입 | 값 |
|---|---|---|
| unity_WorldSpaceCameraPos | float3 | 카메라의 월드 공간 포지션 |
| unity_ProjectionParams | float4 | 카메라의 근접 및 원거리 평면 등 추가 정보 |
| unity_ScreenParams | float4 | 카메라 타겟 텍스처의 폭과 높이 등의 정보 |
시간 및 애니메이션 관련 변수
시간을 측정하는 변수를 통해 셰이더 내에서 애니메이션 효과를 줄 수 있습니다.
| 이름 | 타입 | 값 |
|---|---|---|
| Time | float4 | 레벨 로딩 시점부터의 시간 |
| SinTime | float4 | 시간의 사인(Sin) 계산 |
| CosTime | float4 | 시간의 코사인(Cos) 계산 |
조명 변수
조명 관련 변수는 렌더링 경로 및 광원의 종류에 따라 다르게 설정됩니다.
포워드 렌더링 관련 변수
여기에는 중요하지 않은 첫 네 개 점 광원의 정보가 포함됩니다.
| 이름 | 타입 | 값 |
|---|---|---|
| _LightColor0 | fixed4 | 광원의 색상 |
| unity_WorldToLight | float4x4 | World-to-light 매트릭스 |
디퍼드 섀이딩 관련 변수
디퍼드 섀이딩에서는 다음과 같은 변수가 사용됩니다.
| 이름 | 타입 | 값 |
|---|---|---|
| _LightColor | float4 | 광원의 색상 |
| unity_WorldToLight | float4x4 | World-to-light 매트릭스 |
추가 활용 예제
- 셰이더에서 파라미터 사용하기:
- 빌트인 변수를 사용해 실시간으로 광원을 조정하거나, 시간에 따라 씬이 변화하도록 만들 수 있습니다.
- 애니메이션 효과 추가하기:
SinTime과CosTime을 사용하여 자연스러운 애니메이션 효과를 만들 수 있습니다.- 조명 효과 최적화:
- 중요하지 않은 광원 정보를 활용하여 성능을 최적화할 수 있습니다.
이 가이드를 통해 Unity에서 셰이더를 작성할 때 필요한 기초 지식을 익혔습니다. 각 변수의 사용법과 활용 방법을 이해하고, 실제 프로젝트에 응용하여 멋진 그래픽 효과를 만들어 보세요!