Unity/URP

Unity Shader Graph _ 유니티 셰이더 그래프

minquu 2022. 7. 17. 18:09
반응형

유니티 셰이더 그래프는  SRP(Scriptable Rendering PipeLine)에서 사용할 수 있는 노드 방식의 셰이더 에디터임

나의 목표는 HLSL 코드로 적성하는 게 목표이나, 셰이더 그래프도 최근에는 많이 쓰이고, 목적에 따라서

두 가지를 모두 사용하는 경우가 있으니, 기본적인 사용 방법은 정리할 필요가 있다. 

 

----

 

- 셰이더 그래프 생성 

 

기본적으로는 Project -> Create -> Shader -> Universal Render Pipeline -> 원하는 세이더 선택

 

생성 후 더블클릭을 하면 셰이더 윈도우창이 만들어진다.

 

 

유니티로 돌아와서 

 

인스펙터를 보면 

이러한 모습이 보인다. 셰이더 그래프도 사실 쉐이더 코드를 변환 한 것이기 때문에 

ViewGenerated Shader 로 현재 그래프에 들어간 코드를 볼 수 있다

*Generated 된 코드는 그래프 -> 코드 전환이기 떄문에 위치는 유니티 Temp에 들어감

  보기만을 위한 코드 인것 같음 

 

그래프는 만든 후  이걸 적용 시킬 메터리얼을 만들어준다.

 

 

 

그리고 메터리얼에 만들어준 세이더 그래프를 넣어준다. 

 

스피어 하나를 만들어주고, 방금 만들어준 매터리얼을 적용 시켜준다.

다시  셰이더 그래프 에디터로 돌아와서,

셰이더 그래프의 배치는 이렇게 되어 있다.

 

 

마스터 스택에서 

크게 Vertex 와 Fragment 영역이 보일 것이다 ..

 

 

그래픽 파이프라인에서 

Vertex shader 와 Fragment Shader에 해당하는 부분이다.

 

파란색으로 생긴 노드를 지워 줄 수 있고,

 

마우스를 가져다  댄 후 생기는 굵은 파란색에서 Space를 누르면 그 영역에 노드를 추가해줄 수 있다. 

 

또는 

 

아무것도 없는 보드에 Space를 눌러서 완전 새로운 노드를 만들어 줄 수 있다. 

 

 

Graph Inspector는 NodeSettings 과 Graph Settings 두 가지 탭으로 구성 됨

 

노드 세팅은 어떤 노드를 선택 했는지에 따라 내용이 달라짐

그래프 세팅은 마스터 스택의 속성이고, 그래프 전체의 대한 속성을 다룸

 

 

Precision 는 셰이더 그래프의 디폴트 정밀도를 결정함

Single 은 float 의 정밀도를 가짐 (32bit)

Half 는 그의 중간 정도의 정밀도를 가짐 (16bit)

Inherit은 앞선 노드의 정밀도를 이어 받아서 사용 하겠다는 의미임

 

예를 들어 

1번의 노드에 Inherit로 설정하면 앞서 받을 정밀도가 없기 떄문에 그래프 세팅에서 설정한 정밀도를 따르게 된다.

2번 노드에서 Inherit를 해주면 1번의 노드에 정밀도를 받는다.

 

그 다음 타겟 세팅은 다양한 렌더 파이프 라인과 호환되도록 도와주는 세팅이다.

타겟을 지정하면 그것에 맞는 SubShader가 생성된다.

 

평소에 메터리얼에 Lit 이나 Sample Lit를 바꾸기 위해서는 

 

인스펙터에서 쉐이더를 바꾸어주었는데 

 

그래프에서는 Universal 탭에서 Material로 바꿔줄 수 있음 

 

그 후 여러가지 세팅을 바꿀 수 있다.

 

블랙보드는 셰이더 카테고리를 변경할 수 있고,

프로퍼티와 키워드를 등록할 수 있다.

 

카테고리는 메터리얼에서 세이더를 넣을 때 노출되는 카테고리를 바꿔준다. 

 

 

 

프로퍼티는 말 그대로 프로퍼티를 만들어준다. 

 

Vec3 값을 만들어주자  

 

만들어서 드래그앤 드랍을 하면 프로퍼티를 노드로 사용 가능하다.

 

이 값은 프로퍼티이기 때문에 인스펙터에서 노출되어 보인다.

 

 

*프로퍼티 중 초록색 점이 있는 것이있고, 없는 것이 있는데

초록색 점이 있으면 에디터에서 보이고,

없으면 에디터에선 보이지 않고,

HLSL 셰이더 코드 내부에서 작동하는 프로퍼티임

 

 

 

반대로 Node 를 프로퍼티로 만들 수 도 있다. 

 

프로퍼티를 선택하게 되면 나오는 노드 세팅임

 

Name 는 인스펙터에서 보일 이름이다

Reference는 내부적으로 코드에서 인식될 이름임, 관례적으로 _BaseColor 처럼 앞에 밑줄을 침

Default는 기본값을 나타냄

Mode는 현재 노드에 모드를 고를 수 있음

Precision는 현재 노드 값에 대한 정밀도 (single[float], half)

Exposed 는 프로퍼티가 인스펙터에 보일지 말지 결정함 체크가 되어 있으면 유니티 인스펙터에 노출됨

OverridePropertyDeclaration는 최적화 관련 옵션임

 

레퍼런스 관례적 단어

레퍼런스    /   에디터 표기

_BaseColor   /   Color

_BaseMap    /   Albedo

_Smoothness / Smoothness

_Cutoff           / Alpha Cutoff

_Metallic        / Metallic

_BumpMap   / Normal Map

_ParallaxMap / Height Map

_OcclusionMap / Occlusion

_EmissionColor / Color

_EmssionMap / Emission

 

보드에서 우클릭 후 CreateStickyNote를 만들 수 있음 

 

주석 같은 느낌이라고 보면 됨

 

그래프 세이더에서 적용한 것은 바로 적용이 되지 않고, 세이브를 해줘야지 적용이 됨

 

앞서 보다 싶이 프로퍼티는 그래프세이더에서 바로 값을 바꿀수가 없고, 에디터에서 메터리얼 또는 쉐이더에서 값을 받아야함

 

프로퍼티가 아니라 노드에서 값을 바로 바꿀 수도 있긴하나, 저장을 해야지만 적용이 된다.

 

 

-----

 

기본적으로 유니티에서 세이더 그래프를 사용하는 방법을 확인 해보았따. 

반응형

'Unity > URP' 카테고리의 다른 글

Color 값 표현에 유용한 수식들  (2) 2022.07.17
ShaderGraph, Swizzling 이란?  (0) 2022.07.17
210713_ URP 쉐이더 2  (0) 2021.07.13
210712_URP 쉐이더 1  (1) 2021.07.13
0616_ UI 카메라에 포스트프로세싱 안 먹히게하기  (2) 2021.06.16