개발/유니티

셰이더를 파티클에 적용할 때 체크해보면 좋을 것들

jeonjoy 2023. 8. 24. 17:24

최근 작업하면서 쉐이더를 파티클에 적용하던 중 문제가 생겼다. 대부분의 경우 파티클에 얹으면 예쁘게 잘 나오지만, 커스텀 쉐이더의 경우 종종 설정에 따라 작동이 안할 수도 있기 때문이다.

대부분의 셰이더가 적용된 매터리얼의 경우 이렇게 예쁘게 나오지만, 종종 파티클로 인식을 하지 못할 경우 체크해야 할 게 몇가지 있어 기록을 위해 작성해봤다.

Q. 작업 환경이 다를 경우

만약 UI Image 컴포넌트를 사용하는 캔버스를 사용 중이라면 파티클 시스템과 랜더링 지원 기반이 다르므로 사용에 제한이 가는 옵션들이 있다. 예를들면 파티클 시스템은 버텍스를 기반으로 작동하고 마스킹을 위해 Sprite Mask 를 사용해야 하는 반면, Image 컴포넌트를 사용 중이라면 Sprite Mask 만 지원하는 파티클 시스템의 경우 출력은 가능하지만 마스킹 기능이 지원되지 않는다.

A. 이럴 땐 외부 스크립트를 불러와 사용할 수 있다. UI Particles 컴포넌트를 통해 UI와 동일하게 기능하도록 해주기 때문에 Image 컴포넌트 안에서도 파티클의 마스크 기능이 적용된다. > 관련 사이트 참조 : https://github.com/mob-sakai/ParticleEffectForUGUI

 

GitHub - mob-sakai/ParticleEffectForUGUI: Render particle effect in UnityUI(uGUI). Maskable, sortable, and no extra Camera/Rende

Render particle effect in UnityUI(uGUI). Maskable, sortable, and no extra Camera/RenderTexture/Canvas. - GitHub - mob-sakai/ParticleEffectForUGUI: Render particle effect in UnityUI(uGUI). Maskable,...

github.com

 

Q. 셰이더 전처리 기반이 파티클 시스템의 전처리 기반과 다를 경우

A. 내가 겪은 문제이자 이 글을 쓰게 만든 원인이다. 파티클 자체가 나오지 않는 경우엔 출력 자체에 문제가 있는 경우가 원인일 수도 있다. 작업한 쉐이더 코드 안에 파티클이 지원하지 않는 코드가 들어있지는 않은지 확인해보자. 아래는 파티클 시스템에서 필요로 하지 않는 항목들이다. (나는 주로 UI 캔버스에서 작업했기 때문에 셰이더도 UI 와 같은 2D 이미지 셰이더의 예시가 많을 수 있다)

- Clip 관련 구문 > 마스크 기능을 담당하는 코드가 있을 경우 sprite 마스크를 지원하는 파티클 시스템과 충돌해서 출력이 안될 수 있다. 내 경우 아래 코드를 지우니 정상적인 출력이 가능해졌다.

#pragma multi_compile __ UNITY_UI_CLIP_RECT
#pragma multi_compile __ UNITY_UI_ALPHACLIP
 
 
- 스텐실 > 마찬가지로 마스킹 기능과 관련된 것인데 파티클 시스템은 스텐실을 사용하지 않는다. 이 구문도 지워서 테스트해보면 작동할 수도 있다.
 

- 그 외에도 랜더 Queue가 올바른지, 알파 블랜딩 설정이 제대로 되어 있는지 확인해보자

 
 
Q. 세팅이 다른 랜더링 방식을 사용 중일 경우 ex. 카메라
 
A. 카메라 랜더링 > 카메라 랜더 방식이 다를 경우에도 파티클 시스템 출력에 이상이 있을 수 있다. 사용하는 카메라의 랜더 방식과 라이팅 방법이 파티클 시스템에서 호환하는 지 확인해보자.
 

 

반응형