물체를 화면에 렌더링 하기 위해서는 Shader 를 거쳐 화면에 나타나게 된다. 유니티를 사용함에 있어서도 내장 쉐이더를 사용하거나 용도에 따라 새로 쉐이더를 만들어 사용하는 방법이 있다.
아웃라인 쉐이더를 만들고 싶어서 새로 쉐이더를 만들어보려 시도를 하는데 있는 것도 모르면서 새로 만드는건 건방진거같아서 우선 유니티에 있는 기본 Lit shader 에 대해 각 프로퍼티들의 역할을 공부해 보았다.
기본적으로 Lit Shader 은 빛의 영향을 받는 물리기반 렌더링( Physically Based Rendering )이고 URP 혹은 HDRP 에서 사용시 더 다양한 효과를 볼수 있다. URP 에 있는 기본 Lit shader 이다. 순서대로 설명해볼까 한다.
1. Base Map
- Diffuse Map, Albedo map 등 으로 불리며 물체의 표면이 흡수한 빛을 모든 방향으로 고르게 뿌린다. 현실에서 난반사의 속성을 가지고 있다.
- 이름 그대로 기본색상을 나타내며 어두운 부분에 그림자가 지고 밝은 부분은 잘보이는 것에 영향을 준다.
Unity Base map 설명
2. Metalic Map
- 얼마나 금속같은지를 결정하는 부분이다.
- 곧 설명할 Specular 와 비슷하다고 생각 할수도 있지만 metalic 의 경우에는 환경보다 base map 색상에 더 많은 영향을 받는다 라는 것이 specular 랑은 다르다는 것을 보여준다.
- 흑백이미지를 사용하는데 하얀색일수록 더 금속같음을 의미한다.
3. Specualr Map
- 물체의 표면에서 특정 각도로 빛이 반사되는 정도를 나타낸다. Base Map 과는 달리 정반사에 해당되는 특징을 가진다.
- 물체 표면에서 빛이 특정 각도로 반사되는 부분으로 물체의 표면에서 빛이 반사되어 광택이 표현된다
4. Normal Map
- 적은 폴리곤으로 더 세세한 입체감을 나타내기 위해 사용한다.
- RGB가 방향 벡터 형태로 저장되며 입사방향을 계산하여 입체감을 보여줄 수 있다.
- 물체의 표면에서 빛의 방향이 어떻게 바뀌는가에 대해 정의한 이미지 파일이다
- 일반적으로 사실적인 물체 표현을 위해 요즘나온 3D 게임에서는 사용하고 있다.
- 우측 결과물은 좌측 노멀맵을 중간 폴리곤에 Normal Map 을 적용한것이다.
- 정면에서 보았을때 엠보싱되어 보이는 효과가 있다.
- 비교적 적은 비용으로 물체의 디테일한 입체감을 표현할 수 있다는 점에서 이득인 부분이 많다.
5. Height Map
- Normal Map 과 언뜻 비슷한 역할을 하지만 Normal map 은 빛의 벡터만으로 물체의 입체감을 표현하지만 Height map 은 실제 높낮이에 따라서 입체감을 표현하는 역할을 한다.
- 흑백이미지로 되어있으며 흰색에 가까울수록 높고 검은색에 가까울수록 낮음을 나타낸다.
- 높낮이 정보를 이용해서 입체감을 얻기 때문의 광원효과를 이용한 Normal 맵과는 달리 가려짐도 표현 가능하기 때문에 좀더 디테일하게 표현이 가능하다.
1번 사진 : Normal map 과 Height Map 을 이용 x / 2번사진 : Normal Map 만 이용 / 3번사진 Normal map 과 height map 둘다 사용
- 확실히 2번의 경우에는 옆에서 봤을때 가려지는 부분에대해서는 가려지지 않지만 3번의 경우에는 높낮이에 따라 가려지는 모습을 볼 수 있다.
6. Occulusion Map
- 간접 조명의 영향을 받을지 말지 결정
- 조명에 가려지는 것을 흑백이미지로 표현한다. 검은색에 가까울수록 간접조명에 영향을 받지 않는다.
7. Emission Map
- 어두울때 발광 효과를 나타낼 부분을 표시하는 매핑이다.
- 주로 RGBA 이미지로 표현한다.
주변환경 Bake 까지 한다면 주변까지 빛에 영향을 받는것처럼 보이게 할 수 있다.
휴 드디어 모든(surface 부분만) 기본 쉐이더 프로퍼티에 대해 알 수 있게 되었다.
사실 작동원리가 궁금했지만.. 내장쉐이더라 볼수 없어서 아쉽다.
참고 및 이미지 출처 : https://docs.unity3d.com/kr/2022.3/Manual/StandardShaderMaterialParameters.html
반응형
'엔진공부 > 유니티 공부' 카테고리의 다른 글
transfrom.Find("name") vs Inspector 에서 GameObject 넣기 (2) | 2023.11.21 |
---|---|
신입 개발자가 유니티 공부하고 포트폴리오 준비한 방법 (게임 개발 취업 준비) (1) | 2023.05.31 |
Addressable PatchSystem 이란 (0) | 2023.04.17 |