본문 바로가기
유니티/폴리 브러쉬

유니티 폴리 브러쉬 URP ShaderGraph 03, 셰이더 작성, 버택스 칼라, 버택스 칼라 기반 택스쳐 페이팅, 하나의 채널로 여러 택스쳐 그리기

by NGVI 2021. 4. 22.

유니티 폴리 브러쉬 URP ShaderGraph 03, 셰이더 작성, 버택스 칼라, 버택스 칼라 기반 텍스처 페이팅, 하나의 채널로 여러 텍스처 그리기

유니티에서 제공하는 폴리브러쉬의 기본적인 기능들은 다 본듯합니다.

 

약간 어려울수 있는 내용을 해봅시다.

 

ShaderGraph를 직접 만들어 보고, 개선해보도록 합시다.

 

먼저 칼라를 버택스 칼라를 그대로 출력하는 쉐이더

 

Lit shader Graph를 하나 생성합니다.

Graph inspector는 처음 생성 설정 그대로 사용합니다. 건드린 거 없음

 

vertex color 노드를 바로 Base color에 넣어주는 구성

노드구성

노드구성

vertex color 노드를 바로 Base color에 넣어주는 구성

적당히 잘 됩니다.

그럼 우리가 칠한 칼라와 텍스처가 대응되도록 구성해 봅시다.

노드구성

일단 두장만 해봅니다.

 

텍스처를 두장 불러옵니다.

 

vectex color의 split 시켜 r만 추출하여 해당 값으로 두 텍스처를 lerp 시킵니다.

r은 유니티에서 볼 때 0~255의 수치를 가지는데요.

칼라값

각 R, G, B, A 채널 모두

0~255에 대응하는 수치를 가집니다.

 

하지만 ShaderGraph에서는 이 수치가 remap 되어 0.0~1.0 범위가 됩니다.

 

그리하여 우리가 빨간색을 어느 강도로 칠함에 따라 강하면 두 번째 텍스처가 올라오게 되는 것입니다.

 

칼라 선택과 진함정도의 차이를 보세요

 

텍스처를 추가하고 각 채널에 대응시켜 줍니다.

노드 구성을 아래와 같습니다.

노드구성

기존 합성 값에 다시 채널 값으로 합성하는 방법을 사용합니다.

A 채널 또한 사용할 수 있지만 일단 4장까지만 사용해 봅니다.

 

참고로 색을 칠할 때 힌트

칼라 마스크를 설정해서 쓰면 다른 채널에 침법 하지 않고 칼라를 넣을 수 있습니다.

칼라 마스크를 쓰도록 하자.

실행결과

실행결과

요기 가지 내용은 딱 기본 예제가 알려주는 내용이기도 합니다.

이걸 만들어 본 것이고,

 

추가로 더 해볼 만한 게

만약 텍스처를 더 사용하고 싶다. 10장씩 사용하고 싶다는 생각이 들 때 적용해볼 만한 아이디어

를 구현해 봅시다.

r, g, b, a 4 채널이니까 기본 1장 해서 +4 해서 총 5장의 텍스처를 올릴수 있겠죠.

 

어떻게 택스쳐를 더 사용할 수 있을까요?

 

하나의 채널의 나눠 쓰는 것입니다.

 

0~255, 셰이더에서는 0.0~0.1

 

이걸 범위를 0~25 , 25~50, 50~75, 75~100, 100~125, 125~150, 150~175, 175~200, 200~225, 200~255

셰이더에서는 0.0~0.2, 0.2~0.4, 0.4~0.6, 0.6~0.8, 0.8~1.0

 

하나의 채널을 나눠서 텍스처를 표현하는 것이죠.

하지만 당연히 이렇게 하면 정밀도 문제는 생깁니다. 기존 0~255 구간으로 표시되던 정밀 독, 0~25의 구간으로 출소되는 거니까요? 그래도 구현해봅시다.

 

R 채널 정보로 텍스처링 구성하기

노드구성

R 값의 각 범위로 쪼개고, 그걸 다시 remap으로 0~1 범위로 만들어 준다. Saturate도 해줍니다.

 

요걸 위에 만들어둔 녀석에 각 채널에 들어가던 값에 대응시켜 줍니다.

전체노드 정보

실행결과

실행결과

좀 개선해야겠지만, 한 채널로 여러 텍스처를 올려보았습니다.

 

버택스 칼라를 이렇게 저렇게 쓸 수 있다고 생각해 두시면 

하다 보면 뭔가 할만한 게 많으실 겁니다.

 

봐주셔서 감사합니다.

댓글