[ 게임 개발 ] 유니티 쉐이더 그래프 2 - 시작하기

2024. 5. 25. 17:21게임개발

쉐이더 그래프로 쉐이더를 만들기에 앞서

쉐이더그래프를 만들려면 URP로 프로젝트를 만들어 열어주어야 한다

빌트인 렌더파이프라인과 URP의 차이점은 전 글에서 설명한 적이 있으니

생략하도록 하겠다.

 

프로젝트를 만들고 나서

쉐이더를 위한 폴더를 하나 만든 후 프로젝트 창에 우클릭,

Create > ShaderGragh > URP로 와주면

 

뭔가 많다

 

이것들이 무엇인지 알기 위해서는 Lit과  Unlit이 무엇이고 뭐가 다른지 알아야한다


 

Lit빛 연산의 영향을 받아 명암이 존재하는 메테리얼의 종류이다

Unlit은 주변 광원의 영향을 받지 않고, 보통 광원으로 사용하거나 빛나야 하는 오브젝트에 사용한다.

왼쪽이 Lit 메테리얼을 적용시킨 오브젝트이고

오른쪽이 Unlit 메테리얼 오브젝트이다

 

둘 다 기본색이 흰색으로 설정되어 있지만

왼쪽 Lit 오브젝트만  회색에 가깝게 보이는 이유는

씬 전체에 적용시키는 광원(Global Light)밝기(Intensity)가 낮기 때문이다

 

그러나 Unlit 메테리얼의 오브젝트는 광원의 영향을 받지 않아 밝기가 낮음에도 밝아 보인다

이렇게 Lit과  Unlit의 차이를 알아보았다.

 


 

Sprite쉐이더나 Decal 같은 건 넘어가고

일단 Unlit으로 쉐이더 그래프를 하나 만들어보자

 

이제 진짜 본격적으로 

알아두어야 할 쉐이더그래프의 기능들과 자주 쓰는 주요 노드들을 설명할 것이다

 

쉐이더 그래프를 만들어서 키면 이러한 창이 열린다

 

 

 

우선 이렇게 생긴 창은 프로퍼티들을 생성하는 창으로

외부에서 쉐이더 내부에 필요한 값들을 받아올 때 사용한다

 

또한 Ctrl + S나SaveAsset 버튼을 눌러 저장해야 한다

 

슬프게도 쉐이더그래프에는 자동저장이 없어서

저장을 하지 않고 있다가 갑자기 예기치 못한 

유니티 폭발이나 각종 사고가 발생 시 모두 날아가게 되므로

저장을 꼭 습관화하여 사용하도록 하자

 

 

 

 

이것은 그래프 인스펙터.

Gragh Sertting은 쉐이더그래프의 전체적인 설정들을 다룬다

 

Material 세팅이나 알파클리핑 또는 알파값에 따라 투명배경(Surface Type:Transparent)을

적용할지를 포함한 여러 기능들을 설정할 수 있다.

 

Node Setting프로퍼티를 만들어 선택할 경우

그것의 설정 기본값이나

값 변경방식등을 지정하거나 노드들의 몇 가지

설정을 건드릴 수 있다.

 

얘는 그냥 최종적으로 나온 메테리얼의 모습을 미리 보기 할 수 있다.

 

기본적인 UI 설명은 여기까지 하고 노드에 대해 설명하겠다.


우선 쉐이더그래프를 처음 만들었을 때 있는 이 기본노드는 마스터 스택이라는 것인데,

우리가 여러 과정을 거쳐 만들어낸 결과물을 외부로 가져와주는 역할을 한다.

 

Vertex(정점 쉐이더)에 해당하는 부분은, 이 쉐이더로

만든 메테리얼을 적용시킨 메쉬의 버텍스값들에

변형을 주는 쉐이더이다. 따라서 정적 오브젝트에는

적용시킬 수 없는 기능이다.

 

아래 Fragment(픽셀 쉐이더) 부분이 어찌 보면

쉐이더그래프로 간단한 이펙트 같은 걸 만들 때 가장 많이 쓰는 기능들의 집합이다.

 

마스터 스택을 선택하고 노드를 추가하는 것과 동일한

방법으로 아래와 같이 스택에 들어갈 블록노를 추가할 수 있다.

 

 

노드는 공백을 우클릭하여 Create Node버튼으로 생성할 수 있지만

계속 만들어야 해서 Space키만 눌러도 자동으로 노드 생성창을 띄워준다

 

우선 이 노드들의 카테고리들을 보면 되게 다양한데

굳이 찾아들어가서 노드를 만들기보단 그냥 이름을 검색해서 엔터 치는 게 빠르다


 

우선 쉐이더그래프를 하기 위해서는

색을 숫자로 인식하고 Vector와 같은 수치를 색깔로 인식하는 능력을 필요로 한다.

 

예를 들면 이런 것이다

 

UV라는 노드를 만들어보면 이런 색이 그러데이션을

이루고 있는 것을 볼 수 있다.

이것이 무엇을 의미하는가 라 한다면

 

이것은 색이 아니라 위치를 의미하는 것이다

우리가 색을 만들 때 Color(R, G, B)를 사용하는데

이를 벡터에 대입하면 된다

UV의 왼쪽 아래를 (0,0)로 정하여

x축에 해당하는 R을 그리고

y축에 해당하는 G를 그린 것이다

 

 

 

이제 이를 분리하여 R이라는 실수의 값과 

G라는 실수의 값을 따로 보면 저렇게 보인다


 

노드에 관련한 내용은 유니티 공식 문서에 멋지게 정리되어 있으니 한 번씩

보면서 각 노드들이 어떤 기능을 가지고 있는지 확인해 보자

https://docs.unity3d.com/kr/Packages/com.unity.shadergraph@10.8/manual/Node-Library.html

 

노드 라이브러리 | Shader Graph | 10.8.0

노드 라이브러리 설명 노드 라이브러리에는 셰이더 그래프의 모든 개별 노드에 대한 문서가 포함되어 있습니다. 여기에는 설명, 포트, 파라미터, 셰이더 코드, 예제 이미지가 포함되어 있습니다

docs.unity3d.com

 

다음 글에는 쉐이더그래프를 활용하여 각종 기능들을 구현해 볼 것이다.