[ 버텍스 컬러 적용하기 ]
[ Vertex Color ]
UV와 같이 버텍스 내부에 내장된 값은 Input구조체에 정해진 약속을 통해 받아왔다 .
UV외에도 위치 (Position),컬러(Color),노멀(Normal),탄젠트(Tangent) 등이 있다 .
이중 버텍스 컬러를 사용해보자 .
[ Vertex Color의 적용 ]
아무것도 하지 않은 버텍스의 컬러는 White : float4 (1,1,1,1) 이다 .
버텍스 컬러의 적용법은 두가지이다 .
- 3dsMax등의 3D DCC를 통해 그리기
- 엔진의 자체 기능 이용하기
유니티에서는 PolyBrush를 통해 칠할 수 있다 .
https://unity.com/kr/features/polybrush
[ 버텍스 컬러 출력하기 ]
[ Vertex Color ]
현재 해당 오브젝트에는 버텍스 컬러가 칠해져있지만 보이지 않는다 .
먼저 , 텍스쳐만 출력하는 쉐이더를 작성한다 . 이때 , ambient color의 영향을 없애서 온전한 색상이 보이게
noambient 옵션을 추가하였다 .
Input 구조체안에 color 변수를 만들고 , COLOR 태그를 달아주었다 .
이후 , 버텍스 컬러를 Emission의 값으로 사용하였다 .
버텍스 컬러가 출력되었다 .
다음과 같이 버텍스 컬러를 더하여 밝게 사용할 수 도 있다 .
혹은 곱하여 어둡게 사용 할 수도 있다 .
이와 같이 잘 응용한다면 라이트 맵을 베이크 못하는 상황에서 엠비언트 오클루젼처럼 이용하거나
저렴한 라이트맵처럼 이용 가능 할 것이다 .
[ 버텍스 컬러로 마스킹하기 ]
[ Vertex Color의 장점 ]
버텍스 컬러는 일반적인 컬러와 동일하게 RGBA로 구성되어 있지만 ,
일반적인 텍스쳐와 다르게 UV와 관계없기에 활용 범위가 매우 다양하다 .
[ Vertex Color로 마스킹 하기 ]
먼저 텍스쳐 4장을 받는 쉐이더를 생성한다 .
그리고 4장의 텍스쳐를 넣어준다 .
위와 같이 두 이미지가 버텍스 컬러의 값에 따라 lerp되어 마스킹 됨을 볼 수 있다 .
또한 이렇게 3번의 lerp를 통해 4개의 이미지를 모두 출력 할 수 도 있다 .
혹은 다음의 방식으로 lerp 없이 동일한 결과를 낼 수 있다 .
위의 방식의 쉐이더 구현은 버텍스 컬러를 다르게 칠함으로 실시간 텍스쳐 블렌딩 효과를 구현 할 수 있다 .
이 방식은 지형 뿐 아니라 먼지가 묻거나 파손된 재질의 오브젝트를 표현하는등 다양하게 사용 가능하다 .
출처
'유니티 쉐이더 스타트업' 카테고리의 다른 글
[ 유니티 쉐이더 스타트업 ] 09 . Lambert / Blinn Phong (0) | 2023.08.26 |
---|---|
[ 유니티 쉐이더 스타트업 ] 08 . SurfaceOutputStandard 사용하기 (0) | 2023.08.18 |
[ 유니티 쉐이더 스타트업 ] 06 . UV를 이용하는 법 배우기 (0) | 2023.08.10 |
[ 유니티 쉐이더 스타트업 ] 05 - 2 . Surface Shader를 활용한 텍스쳐 제어 (0) | 2023.08.07 |
[ 유니티 쉐이더 스타트업 ] 05 - 1 . 기초적인 Surface Shader (0) | 2023.08.02 |