본문 바로가기
튜터리얼_스터디

(셰이더 그래프)아티스트를 위한 URP 셰이더 Shader #3 - 프로퍼티스 2

by 대마왕J 2021. 7. 20.

다른 프로퍼티 만들기

Float 하나 만들었으니까, 다음 진도는 좀 더 빠르게 나갑시다. 
이게 프로퍼티가 생각외로 심오하게 되어 있어요. 게다가 아직도 발전해 나가는 느낌입니다. (발전이라고 쓰고 미완성이라고 읽지 말기...!)
제법 깊은 영역까지 다루게 되어 있는데, 그걸 지금 다 배우는건 의미가 없습니다. 

그러므로 지금은 초 빠르게 자주 쓰는 것만!!! 

후다닥 후다닥

이겁니다. 일단 이것만 알면 돼요. Gradient나 Sampler State는 사실 프로퍼티라고 부르기도 그렇고.. 
Texture2D Array나 Texture3D, Virtual Texture 는 그냥 상쾌하게 바로 쓸 수 있는 것도 아니고... 특별한 프로그램 거쳐야 하고 특별한 상황에서 써야 하는거고  .. Matrix도 프로퍼티라고 부르기 힘들고 수학이고.. Keyword는 ... ㅋㅋㅋ 이거 왜 여기 있냐고!!!!! 이거 셰이더 베리언트 쪽이잖아!!! 여하간 나머지들은 엔진부터 설명해야 하는 것들이라서!  

 

자 그래서 안하는 겁니다. 알겠죠? 가끔 초보자를 위한다고 넘어가도 된다고 하는데 그게 더 신경쓰이는 분들을 위해서
뭐야 왜 넘어가는데 말해줘요 TMI 떠들어 봤습니다. 자 그럼 시작하죠  

Vector2  Vector3  Vector4 

이 3개는 걍 하나라고 생각해도 됩니다. 
읭? 하시겠지만 맞습니다. 저도 이걸 왜 만들어 놨는지 알겠는데 왜 만들어 놨는지 모르겠어요 (읭?)

일단 만들어보죠. 

Vector2는 두 자리 숫자고요 

Vector3 는 세 자리 숫자예요 

Vector4 는 네 자리 숫자입니다. 

다르잖아!!!! 네 그래요. 좋아요. 아 좀 진정해 봐요. 앉으라고. 워워
그럼 Save Asset 버튼을 누르고 저장한 후 메터리얼로 가서 적용된 프로퍼티를 보세요 
그리고 Vector2 Vector3 Vector4 를 보세요옹

똑      같      잖      아

뭐야 Vector2 랑 3랑 4랑 왜 똑같은데? 

이거 얘기가 좀 길어져요. 그래도 좀 짧게 설명하자면 
원래 똑같아요. 네. 캬캬캬 아니 말 잘못했다. 똑같은게 아니라, 원래  Vector4 밖에 없어요. 
아니아니 사실 Vector4라고 부르는 것도 좀 그래요. 저건 스크립트에서 말하는 구조체명 같은거고, 셰이더에서는 저렇게 말하는 것 보다 사실 Float4 라고 말하는게 더 잘 어울려요 

생각해 보세요. 한 자리 숫자는 Float 이었으면 4자리 숫자는 Float4 여야 할거 아냐!!! 
실제로 코드에서도 그렇게 쓰고 ... 

그래서 저는 Vector4라고 부르기보다 Float4라고 부르는 일이 더 많을겁니다. 

그리고 원래 프로퍼티에서는 Float과 Float4만 있는게 정상이예요. 이거 이유까지 설명하는건 패스. 사실 나도 잘 모름 

'저기 그럼 Vector2 (Float2) 는 뭐냐!!! ' 라고 하시겠지요? 왜 2자리 숫자인데 프로퍼티 적용시키면 4자리냐!
Vector3(Float3)도 3자리인데 프로퍼티 적용시키면 역시 4자리냐!!!

간편하게 생각하면 이렇습니다. 

심플해요. 앞에서부터 씁니다. 
그리고 남는건? 걍 버립니다 (안쓴다에 가깝습니다. 버리긴 뭘 어떻게 버려 쓰레기통도 없는데)

그럼 사실 좀 그렇죠? Vector2 같은 경우는  XY만 쓰고 ZW는 안쓴다니 아깝잖아요? 어차피 셰이더 안에서 나눠서 쓸 수도 있으니 Vector4만 만들어 놓으면  Vector2 2개로 나눠서 쓸 수도 있거든요. 
네 그렇습니다 .진실을 알려 드리죠. Vector4 외엔 안쓰시는걸 추천합니다. 별 의미 없어요

그럼 왜 만들어 놨냐!!! 이건 셰이더 그래프의 태생적 문제때문에 그러는데.. 
프로퍼티를 여기서 만들어서 쓰는 법이 있지만... 사실 여기 블랙보드말고도... 
아직 설명 안했지만, 여기 그냥 노드를 만들고 
이놈을 프로퍼티로 등록시키는 방식으로 할 수도 있거든요. 
실제로 Vector2(float2) 는 코드에서 사주 쓰이는 방식이예요. float3도 마찬가지. 

그런데 코드에서는 float2나 float3를 프로퍼티로 연결할 일도 없고 필요도 없는데
셰이더 그래프에서는 이렇게 만든 float2나 float3를 '강제로' 프로퍼티로 올려 버리는 기능이 있거든요. 
프로퍼티 -> 노드 가 아니라 노드 -> 프로퍼티라는 개념이 있어서 그래요. 코드에는 없고 셰이더 그래프에만 있는 기능이죠. 
그래서 어쩔 수 없이 만들어 놓은 겁니다. 
사실 좀 이른 설명이라 못 알아 들으시겠다면...

이렇게 그냥 정리하시면 됩니다. 
아 거 블랙보드에서는 걍 Vector2랑 Vector3는 만들지 말아요 걍 다 Vector4니까!!! 

즉 약간 이런 분위기 라는 거예요. 
그거나 그거나

Graph Inspector 에서의 노드 세팅은 뭐 저번 시간에 설명한 것과 똑같으니 넘어가도 되겠습니다.

 

Color

와... 드디어 심플한거 나왔다.. 힘들었어요. 
이건 그냥 칼라예요. 그래요 칼라입니다. RGBA로 이루어진 칼라입니다. 

일케 나와요. (하하하 vector2랑  vector3는 스리슬쩍 없애버렸다)

사실 이것도 Vector4와 Color와의 관계와 차이가 있는데 이건 뭐 나중에 .. 

 

Boolean 

불린입니다. On Off만 표현하는 그거요. 
사실 이거 Float이예요. CPU에는 True False 라는 개념이지만 GPU에서는 걍 1과 0입니다. 
즉 그냥 Float으로 0과 1로 나온다고 생각하시면 끝입니다. 

 

Texture2D

오 이거입니다. 이거. 말그대로 텍스쳐. 
엄청 많이 쓰고 쓸 수 밖에 없는 그거요. 
이렇게 하고 저장하면 텍스쳐를 입력받을 수 있게 됩니다. 

여기의 Default는 적용해도 프로퍼티에 적용되어 있진 않습니다. 이건 셰이더 그래프 내부에서만 사용하는 디폴트 텍스쳐예요. 무슨 얘기인지 모르겠으면 일단 넘어가도 오케이. 

오히려 여기의 Mode에 있는 White가 우리가 생각하는 초기값인데요. '아무것도 안 넣었을때에는 흰색 텍스쳐를 넣은것으로 생각해라' 라고 하는 겁니다. 

 

Cubemap 

큐브맵이라 불리는 이 프로퍼티는 말그대로 큐브맵 텍스쳐만 받을 수 있습니다. 

큐브맵은 이렇게 반사맵이나 스카이박스에 많이 사용하는 맵으로, 게임 그래픽 텍스쳐에서 사용하는 특별한 형식입니다. 텍스쳐 한 장에 360의 주변을 다 저장하는 방법이죠.  

아 뒤로 갈수록 간편하네. 

 

이 정도면 일단 기본 프로퍼티 설명은 끝납니다. 더 복잡한 설명은 언젠가로 기약하기로 하죠.. 내 할말이 아주 많어 

 

기본 프로퍼티들은 이것으로 끝냅니다. 다음 내용을 제대로 완성해 보세요. 
물론 셰이더 디스플레이 이름과 변수 이름도 제대로 정해야 해요! 아래처럼 대충 하지 말고 

 

블로그 주인장에게 커피값을 후원할 수 있습니다! 

donaricano-btn

반응형

댓글