본문 바로가기

유니티 쉐이더 스타트업

[ 유니티 쉐이더 스타트업 ] 07 . 버텍스 컬러 이용하기

[ 버텍스 컬러 적용하기 ]

[ Vertex Color ]

UV와 같이 버텍스 내부에 내장된 값Input구조체에 정해진 약속을 통해 받아왔다 .

UV외에도 위치 (Position),컬러(Color),노멀(Normal),탄젠트(Tangent) 등이 있다 . 

이중 버텍스 컬러를 사용해보자 .


[ Vertex Color의 적용 ]

아무것도 하지 않은 버텍스의 컬러는 White : float4 (1,1,1,1) 이다 .

버텍스 컬러의 적용법은 두가지이다 .

  1. 3dsMax등의 3D DCC를 통해 그리기
  2. 엔진의 자체 기능 이용하기

유니티에서는 PolyBrush를 통해 칠할 수 있다 .

https://unity.com/kr/features/polybrush

 

Polybrush

Polybrush의 다양한 기능에 대해 알아보세요. Unity 에디터에서 텍스처와 컬러를 블렌딩하고, 메시를 만들거나, 오브젝트를 흩뿌릴 수 있습니다. 이제 ProBuilder, ProGrids와 함께 Unity에 속하게 되었습니

unity.com

 

 


 

[ 버텍스 컬러 출력하기 ]

[ Vertex Color ]

현재 해당 오브젝트에는 버텍스 컬러가 칠해져있지만 보이지 않는다 .

먼저 , 텍스쳐만 출력하는 쉐이더를 작성한다 . 이때 , ambient color의 영향을 없애서 온전한 색상이 보이게

noambient 옵션을 추가하였다 .

Input 구조체안에 color 변수를 만들고 , COLOR 태그를 달아주었다 .

이후 , 버텍스 컬러를 Emission의 값으로 사용하였다 .

버텍스 컬러가 출력되었다 .

 

다음과 같이 버텍스 컬러를 더하여 밝게 사용할 수 도 있다 .

혹은 곱하여 어둡게 사용 할 수도 있다 .

이와 같이 잘 응용한다면 라이트 맵을 베이크 못하는 상황에서 엠비언트 오클루젼처럼 이용하거나

저렴한 라이트맵처럼 이용 가능 할 것이다 .


[ 버텍스 컬러로 마스킹하기 ]

[ Vertex Color의 장점 ]

버텍스 컬러는 일반적인 컬러와 동일하게 RGBA로 구성되어 있지만 ,

일반적인 텍스쳐와 다르게 UV와 관계없기활용 범위가 매우 다양하다 .


[ Vertex Color로 마스킹 하기 ]

먼저 텍스쳐 4장을 받는 쉐이더를 생성한다 .

그리고 4장의 텍스쳐를 넣어준다 .

위와 같이 두 이미지가 버텍스 컬러의 값에 따라 lerp되어 마스킹 됨을 볼 수 있다 .

또한 이렇게 3번의 lerp를 통해 4개의 이미지를 모두 출력 할 수 도 있다 .

혹은 다음의 방식으로 lerp 없이 동일한 결과를 낼 수 있다 .

위의 방식의 쉐이더 구현은 버텍스 컬러를 다르게 칠함으로 실시간 텍스쳐 블렌딩 효과를 구현 할 수 있다 .

이 방식은 지형 뿐 아니라 먼지가 묻거나 파손된 재질의 오브젝트를 표현하는등 다양하게 사용 가능하다 .

 

출처

https://celestialbody.tistory.com/8

 

유니티 쉐이더 Unity Shader - 04. 버텍스 컬러

버텍스에는 다양한 정보가 들어있습니다. 대표적으로 1. Index 2. Position 3. UV 4. Normal 5. Color 등이 있죠. 이 5개만 알고 있어도 어디가서 욕먹지는 않을 겁니다. 오늘 저희가 오늘 주목할 건 이 5개의

celestialbody.tistory.com