본문 바로가기
Shader

Unity 2018 built-in particle shaders 유니티 2018 내장 파티클 쉐이더_1

by 대마왕J 2018. 9. 22.

한동안 다른 공부좀 하느라고 블로그 업데이트를 전혀 못했었습니다. 다른 공부라면 우후후... 쉿


하여간 유니티 파티클에 파티클 셰이더들이 좀 업데이트 된 것 같은데 이게 또 설명이 없단 말이죠 (일해라 유니티!) 

뭐 사실 이펙트 아티스트 분들이 별로 관심 안가진 이유가 당연하게도 '어차피 이펙터들은 쉐이더를 만들어서 쓰니까' 였습니다 


맞아요... 쉐이더는 만들어 써야 합니다. 

특히 이펙트용 쉐이더는 더더욱 말이죠


일단 유니티는 재밌는게 '아티스트가 쉐이더를 만든다' 라는걸 배제시켜놓고 시작을 했어요

그래서 '쓸 법한 쉐이더를 잔뜩 미리 만들어 놓고 골라서 쓰게 한다' 라는 프리셋 정책을 시행하고 있지요 



이렇게 여러 종류의 프리셋을 만들어 두는 이유를 솔직히 모르겠어요. 외우기만 힘들지 사실 별 것도 아닌데.


그런데 언리얼은 '그런 거 없다' 는 정책입니다. 

'쉐이더를 노드로 짤 수 있게 해줄테니 아티스트가 다 짜라' 라는 거지요 

그래서 프리셋따위는 없습니다. 예제가 있긴 하지만. 


장단점이 있긴 하지만, 큰 의미에서는 언리얼쪽이 맞다라고 생각하긴 합니다. (사실 궁극적으로는 중간을 선택해야 한다고 봅니다만) 

쉐이더를 프리셋으로 만들어 놓으면, 몇 가지 문제가 생깁니다 

1. 왠지도 모르고 아무거나 쓴다 

2. 아예 모르는건 안쓴다


어쨌건  누구나 다 쉐이더를 짤 수 있는건 아니고

유니티는 프리셋을 만들어 놨으니까 간단하게 이펙트용 프리셋 쉐이더를 소개해 봅지요 다른 쉐이더는 메뉴얼에 살짝 언급이라도 되어 있는데 이펙트용은 아예 없어서 말이죠!  


사실 전통적으로는 - 특별히 쉐이더를 짤 수도 없고 짤 필요도 없는 환경이라면 - 이중에서 딱 3개만 쓰면 됩니다. 


Additive 밝게

Multiply 어둡게

Alpha Blended 알파 뚫리게


이렇게 말이죠 


요게 순서적으로 언리얼의 블렌드 모드로는

 


Additive 

Modulate

Translucent

와 동일하다고 생각하시면 편합니다. 


사실 여태까지 저렇게 쓰고 있던게 맞고요. 대부분의 책이나 강좌에서도 저거 세 개만 말합니다. 

여기서 말하는건... '그럼 나머지는 뭐냐' 라는 겁니다. 

2017인지 18인지부터 파티클에 난데없이 Standard Surface가 생기질 않았나 .. Standard Unlit도 생기고 말이죠 

궁금하잖아요. 뭔가 새로운 기술이 있을지 


그래서 한 번 소개해 봅니다. 


별 필요 없으신 분들은 위에 말한 3 개만 써도 되어요. 



그럼 일단 소개를 하나씩.. 


"Particles/~Additive-Multiply"


이건 뭘까. Add와 Multi가 같이 있다니...

블렌딩은 

Blend One OneMinusSrcAlpha

서피스 계산은 

col.rgb = _TintColor.rgb * tex.rgb * i.color.rgb * 2.0f;

col.a = (1 - tex.a) * (_TintColor.a * i.color.a * 2.0f);

인게 특징인 놈입니다 


이 녀석은 재미있게도 ADD와 Multi가 같이 가능한 녀석이지요 

아래 그림처럼된 텍스쳐를 넣는다면 


제어는 TintColor로 합니다. 


파티클용 쉐이더가 다 그렇듯 기본색은 회색인데, Tint 칼라 설정의 알파의 위치에 따라 ADD 쉐이더가 되기도 하고 Multi 쉐이더가 되기도 합니다. 

즉 이 쉐이더를 사용하기 위해서는 알파 채널이 반드시 있어야 합니다 


사실 Mulit 쉐이더 구문은 원래 사용하는 Multi와 느낌이 다릅니다만 그저 '같이 된다' 라는데 의의가 있는 듯 합니다. 

꽤 특이할 때만 쓸 수 있겠군요 







"Particles/Additive"


평범한 ADD 쉐이더입니다

블렌딩은 Blend SrcAlpha One 이라서

텍스쳐에 알파가 계산이 되기는 하지만 사실상 전혀 필요없고, (물론 결과물은 알파가 있고 없고에 따라 약간 차이가 납니다) 

텍스쳐의 RGB가 검은색이면 투명해질 뿐입니다 

사용방법이 매우 쉽고 많이 사용됩니다 



"Particles/Additive (Soft)"


ADD와 동일합니다만, ADD의 블렌딩은 

Blend SrcAlpha One

인데 비해 이 녀석은 

Blend One OneMinusSrcColor

입니다 


덕분에 소스에 알파를 곱하고 배경에 더하는게 아니라,

소스는 그대로 두고 배경에 소스의 칼라를 뒤집은 것을 곱합니다. 

그래서 결과적으로 좀 소프트한 결과물이 나오게 됩니다...만 사실 실제 쓰다 보면 차이를 느끼기 쉽지 않을겁니다. 

이 쉐이더 역시 알파가 필요 없습니다만 계산이 되긴 됩니다. 


"Particles/Alpha Blended"


알파가 반드시 필요한 쉐이더이며, 절대적으로 텍스쳐의 알파값에 따라 블렌딩 되는 정도가 변합니다. 

겹쳤을때 밝아 지거나 어두워지거나 하지 않고 그냥 자기 색이 나옵니다. 



나머지는 이어서.. 


반응형

댓글