Unity 표면 셰이더 가이드
이 문서는 Unity의 표면 셰이더와 커스텀 조명 모델에 대한 설명과 다양한 예제를 포함하고 있습니다.
목차
- 개요
- 표면 셰이더와 조명 모델
- 조명 모델 선언
- 커스텀 글로벌 일루미네이션(GI)
- 예제
1. 개요
Unity의 내장 조명 모델은 디퓨즈 조명(Lambert)과 스페큘러 조명(Blinn-Phong) 두 가지로 구성되어 있습니다. 이 모델들은 Lighting.cginc 파일에 정의됩니다. 사용자가 커스텀 조명 모델을 구현하는 데 있어 표면 셰이더를 사용할 수 있습니다.
2. 표면 셰이더와 조명 모델
표면 셰이더를 사용하여 사용자 정의하는 조명 모델은 기본적으로 몇 가지 규칙을 준수하는 Cg/HLSL 함수들로 구성됩니다.
| 기능 이름 | 내장 렌더 파이프라인 | 유니버설 렌더 파이프라인(URP) | 고해상도 렌더 파이프라인(HDRP) | 커스텀 SRP |
|---|---|---|---|---|
| 표면 셰이더 지원 | 지원 | 지원 안 함 | 지원 안 함 | 지원 안 함 |
지원되지 않는 경우
URP 및 HDRP에서 셰이더 오브젝트를 보다 간단하게 만드는 방법으로는 셰이더 그래프를 이용할 수 있습니다.
3. 조명 모델 선언
조명 모델은 "Lighting"으로 시작하는 일반 함수로 구성됩니다. 셰이더 파일의 어디에서든 모델을 선언할 수 있으며 포함된 파일에서도 선언할 수 있습니다. 주요 함수는 다음과 같습니다:
half4 Lighting<Name>(SurfaceOutput s, UnityGI gi);- 뷰 방향을 사용하지 않는 모델.half4 Lighting<Name>(SurfaceOutput s, half3 viewDir, UnityGI gi);- 뷰 방향을 사용하는 모델.half4 Lighting<Name>_Deferred(SurfaceOutput s, UnityGI gi, out half4 outDiffuseOcclusion, out half4 outSpecSmoothness, out half4 outNormal);- 디퍼드 셰이팅 경로에 사용되는 모델.
뷰 방향을 사용하거나 사용하지 않도록 조명 모델을 선택하면 됩니다.
4. 커스텀 글로벌 일루미네이션(GI)
디코딩된 라이트맵 데이터와 프로브를 커스터마이징하는 방법은 다음 함수를 선언하여 가능하다:
half4 Lighting<Name>_GI(SurfaceOutput s, UnityGIInput data, inout UnityGI gi);
다양한 내장 함수를 사용할 수 있으며 그 예시는 Unity의 UnityGlobalIllumination.cginc 파일에서 확인할 수 있습니다.
5. 예제
표면 셰이더와 관련된 다양한 예제는 다음 문서들을 참조하십시오:
- 표면 셰이더 예제
- 표면 셰이더 조명 예제
이 문서는 Unity Technologies의 저작권을 반영합니다. 2022.3 버전이 출판되었습니다.
추가적인 질문이나 커뮤니티의 답변에 대한 정보는 Unity 포럼이나 기술 자료에서 확인할 수 있습니다.