본문 바로가기
Shader

유니티 파티클 커스텀 데이터 쉐이더 : Unity Particle(Shuriken) Custom Data Shader

by 대마왕J 2017. 12. 3.

버그를 잡고 기능을 수정하였습니다 





일단 가장 기본적인 기능을 만들어 올려봅니다.


기존의 슈리켄에서는 메터리얼의 프로퍼티들을 수정할 수가 없었습니다. 그래서 따로 키 애니메이션을 줘야 했고, 그것이 파티클의 타이밍과 맞출 수가 없어서 뭔가 쭉정이처럼 이중으로 작업할 수 밖에 없었죠. 그나마도 제대로 맞지도 않고. 


그래서 언리얼에서는 일찌감찌 커스텀 데이터라는 개념이 있었습니다만 유니티는 이번에 드디어 생겼네요 


 


일단 이런게 있고




말풍선을 읽어보면 스크립트나 셰이더에서 읽을 수 있게 커스텀 데이터를 조절한다고 하네요. 

쉐이더에서 사용하려면 커스텀 버텍스 스트림을 사용해야 하고요 


그래서 만들어 봤습니다. 

커스텀 버텍스 스트림 쉐이더입니다 .

아래 쉐이더를 다운받으시면 됩니다. 





다운받아 메터리얼에 적용하시면 이렇게 됩니다. 

이 메터리얼을 파티클에 적용하시면 됩니다. 


텍스쳐는 두 개가 들어가는데, 첫 번째 텍스쳐는 이펙트용 이미지, 

두 번째 텍스쳐는 디스토션 이미지가 들어가는게 좋습니다. R 채널만 사용하며, 리니어 텍스쳐로 만들어 주는 것이 좋습니다. 



적용하면 뭔가 이상하게 보이실텐데요

이건 커스텀 데이터를 위해 잡아놓은 texcoord 에 쓰레기값이 입력되는 상태라서 그렇습니다. 제대로 연결을 안해서이죠. 연결하면 문제 없습니다만, 보기 싫으실지 몰라서 비효율적임에도 불구하고 일단 체크박스를 하나 만들어 놨습니다. 

아래 버튼을 끄면 제대로 보일겁니다. 에러인지 아닌지 확인하실 분을 위해 만든겁니다. 


이걸 꺼주시면 일단 제대로 보이실 겁니다. 

그렇지만 파티클 커스텀 데이터를 사용하시려면 꼭 켜 주십시오. 이건 임시 테스트용입니다. (사실은 파티클이 아닌 곳에도 사용 가능하게끔 만든 것이긴 합니다만... 비효율적 코드가 하나 들어가 있기 때문에 권장하는건 아닙니다. 아예 멀티 컴파일로 분기를 때리는게 낫겠지만 귀찮슈.... 웅엥웅)


이제 커스텀 파티클 데이터를 쓰기 위해서 

커스텀 버텍스 스트림을 가동시키겠습니다. 


코드 내에 커스텀 스트림을 아래처럼 만들어 놨기 때문에,




파티클에서도 커스텀 버텍스 스트림을 위 코드와 맞춰주시면 됩니다. 

필요없는건 지우시고, 필요한건 추가하시면 됩니다. 

반드시 똑같이 하시길. 




이제 기본적인 준비는 다 되었습니다. 


커스텀 데이터를 여시고, 버텍스 스트림에서 설정했던 것처럼 float4 vector 두 개를 만들어 줍니다. 

이제 우리는 8개의 조절자가 생겼습니다. 


각 조절자의 라벨링은 다음과 같습니다. 


물론 라벨링따위 안해도 됩니다만 ㅋㅋㅋ 이 글을 보시는 분은 어디가 어디랑 연결되었는지 알 수 없으니 

굳이 써 봤습니다 


그리고 위의 것은 아래의 셰이더의 이 부분에 각각 대응됩니다. 그냥 순서대로입니다. 알아보기 쉽게 만들어 봤습니다. 



맨 밑의 SrcBlend 와 DstBlend 는 역시 커스텀으로 조절할 수 있게 만들어 놓았습니다. 

저기 써진대로 구성하면 됩니다. 

즉 Add 를 만들려면 SrcAlpha 와 One 혹은 One One(Black Background) 으로, 

Alpha Blend를 만들려면 SrcAlpha 와 OneMinusSrcAlpha로

Multi를 만들려면 DstColor 와 Zero로 구성하면 됩니다. 



하여간 이렇게 만들어 놓으면... 


이제 최상단의 유투브 동영상처럼 조절하시면 됩니다. 




기능을 조금 바꾸고 버그를 수정했습니다. Fog와 충돌나던 기능을 수정하였고 ,

기존의 기능이 'UV 이동속도' 를 제어하는 기능이었다면 

이번에는 '절대 UV 위치' 를 제어하게 만들었습니다. 즉 그래프로 조절하시면 좋습니다. 

'회전' 도 마찬가지이고 모든 수치가 절대 수치로 만들어서 더 응용력이 좋아졌습니다. 



JP_Particle_FlowDistortion.shader




반응형

댓글