[Unity]02. 쉐이더 이해하기 #2 - 기초적인 서피스 쉐이더 Part1
- 게임 개발 - Unity3d
- 2019. 1. 28. 04:36
안녕하세요 유랑입니다.
오늘은 오브젝트에 머티리얼과 쉐이더를 적용해 보겠습니다.
기본적인 쉐이더를 이용해서 공부해 보겠습니다.
1. 기초적인 서피스 쉐이더
쉐이더는 물체의 명암, 재질, 색조 등을 표현합니다.
어떻게 만드느냐에 따라서 물체의 형태가 달라지겠네요.
유니티에서 제공하는 Standard Surface Shader를 사용해서 공부해 보겠습니다.
1-1) 프로젝트 생성 및 설정
프로젝트 이름과 위치를 설정한 후 생성해 주겠습니다.
쉐이더를 적용시킬 오브젝트와 머티리얼 그리고 기본 쉐이더를 만들어 주겠습니다.
- Sphere 생성
- Standard Surface Shader 생성
- Material 생성
1-2) 쉐이더 코드 - ㉠Name
쉐이더에 쓰이는 코드를 알아보겠습니다.
쉐이더를 실행시키면 맨 위에 있는 첫 줄은 쉐이더의 이름에 해당합니다.
한번 바꿔서 확인해 보겠습니다.
이름을 바꾸게 되면 머티리얼에서 선택할 수 있는 쉐이더 이름이 바뀌게 됩니다.
여기서 '/'는 트리구조라고 생각하시면 됩니다.
1-3) 쉐이더 코드 - ㉡Properties
쉐이더를 보면 여러 중괄호 {}들에 의해서 각종 기능들을 선언하는데요.
간단하게 MainTex에서 white를 red로 바꾸면 붉은색 머티리얼로 바뀐걸 확인할 수 있습니다.
이어서 쉐이더의 인터페이스인 Properties 부분을 만들어 보겠습니다.
여기에서 쓰이는 인터페이스들입니다.
- Range => 최소값과 최대값을 입력해주면 슬라이더가 나오는 명령
- Float => 한 자리의 소수점을 입력받는 인터페이스를 만들어 줌
- Color => Color 인터페이스를 만들어 줌
- Vector => float4를 직접 숫자로 입력받을 수 있는 인터페이스
- tex2D => 2D 텍스처를 받는 인터페이스를 만들어 줌
1-4) 쉐이더 코드 - ㉢색상 출력
CGPROGRAM ~ ENDCG로 끝나는 이 부분은 유니티 자체 스크립트가 아닌
CG 언어를 이용해서 쉐이더를 직접 짜는 부분입니다.
유니티 서피스 쉐이더의 특징인 '스크립트와 쉐이더 언어를 같이 섞어서 쓴다'라는 말이 이해가 되네요.
- 첫 번째 빨간박스(설정) => 쉐이더의 조명계산 설정이나, 기타 세부적인 분기를 정해주는 부분
- 두 번째 빤간박스(입력) => 엔진으로부터 받아와야 할 데이터들이 들어감
- 세 번째 빨간박스(함수) => 색상이나 이미지가 출력되는 부분을 만들 수 있음
1-5) 쉐이더 코드 - ㉣색상의 사칙연산
색상끼리의 연산은 어떻게 하는지 알아보겠습니다.
빛의 간섭이 없는 순수한 색상의 연산 결과를 보기 위해서 Emission에 빨간색을 넣어 볼게요.
여기에 녹색을 더해보겠습니다.
float(1, 1, 0)이므로 노란색이 됩니다.
이번에는 회색과 회색을 더해보겠습니다.
float3(1, 1, 1)이 되므로 흰색이 됩니다.
이번에는 특정 색을 곱하는 연산을 해보겠습니다.
빨간색과 녹색을 곱하면 float3(0, 0, 0) 즉, 검정색이 됩니다.
회색과 회색을 곱하면 어떻게 될까요?
float3(0.25, 0.25, 0.25)가 되므로 어두운 회색이 됩니다.
2. 마무리
오늘 강의는 여기까지입니다.
기초적인 서피스 쉐이더를 이용해서 쉐이더 코드를 배워보았습니다.
다음 시간에는 이어서 쉐이더 코드를 알아보겠습니다.
오늘도 고생하셨습니다.
감사합니다.
수업자료: https://github.com/YouRang12/-Tistory-Unity---Special-Shader-