Autodesk가 아놀드 랜더러를 주력으로 선택하기 전이었던, 2010년대 초반까지 Maya의 Sprites효과는 현역이었다. Mental Ray, V-ray 사이에서 Sprites를 활용한 특수효과는 꽤 괜찮은 결과를 보여줬다. 하지만 Arnold가 등장한 이후부터 Sprites기능은 퇴색되기 시작했다. Maya2012이후 버전부터 nParticle & Sprites기능에 대한 업데이트는 미미했고, Fluid, Bifrost 그리고 이를 지원하는 아놀드 쉐이더를 중심으로 업데이트가 진행됐다. 게다가 2015년 이후 MASH가 등장함에 따라 Sprites는 계륵이 됐다. 

 

 

혹시나 해서 Maya2023버전에서 nParticle & Sprites를 특수효과에 사용하려 노력했지만 역시나 쉽지 않다. GPU랜더를 지원하지 않는 Sprites의 치명적인 단점은 이제 세월 속에 깊이 묻어둬야 될 듯하다. 혹여나 Sprites를 이용해 특수효과를 구현하겠다는 분들을 위해 포스팅을 남긴다.

 

 

 

 


1 파티클 생성

'nParticles > Create Emitter'에서 n파티클을 생성한 뒤, nucleus속성에서 중력값, 'Gravity'을 -1.5~3 사이로 설정한다. 중력값이 음수가 되면 위로 솟구치는 모션이 발생한다.

 

nParticle 생성 & Nucleus중력값 설정

 

 

nParticle 속성창의 'Shading'에서 파티클 타입을 'Sprites'로 설정한다. 

 

파티클 타입: Sprites

 

 

 

 

 


2 Sprites 설정

파티클 속성창의 항목에서 파티클이 생성 ~ 소멸되는 시간(LifeSpan)과 투명도, 충돌값을 아래와 같이 설정해준다.

 

 

 

 

 

 

 


3 쉐이더 설정

Maya2015 이후 버전부터 Sprites의 활용도가 떨어진 이유는 사실상 '쉐이더' 때문이다. 마야의 sw랜더러가 아닌 아놀드를 사용함으로써 투명도 부분이 정확하게 표현되지 않는다. 어쨋든 nParticle에 aiStandardSurface 아놀드 쉐이더를 적용해보자.

 

 

 

그리고 알파값을 갖고 있는 png텍스처를 쉐이더의 색상 file값으로 넣어준다.(알파값이 반드시 있어야 됨) 현재 상황에서 아놀드 랜더링 결과는 좋지 않다.

 

sprites 아놀드 랜더링

 

 

위와 같이 sprites의 검은 배경이 나오는 이유는 file노드의 알파값이 aiStandardSurface쉐이더의 Opacity와 연결되지 않았기 때문이다. 아래와 같이 텍스처 노드의 알파값을 아놀드 쉐이더의 opacity R,G,B와 각각 연결해준다.  

 

 

 

 

텍스처의 속성값 중에서 알파 offset을 아래와 같이 (-1.0 ~ 1.0) 조절해보자. 외곽 투명도를 좀더 실사에 가깝게 표현할 수 있다. bifrost나 fluid효과에 비해 한계를 갖지만 긴급 상황에서 써먹을 수 있을 정도는 된다.

 

텍스처 Alpha offset조절

 

 

 

 

 

 


4 크기 변경

실망스러운 랜더링을 뒤로 한 채 Sprites의 크기와 회전을 적용해야 한다.(연기 효과이므로) 'Add Dynamic Attributes' > 'General'을 클릭해 'spriteScaleXPP', 'spriteScaleYPP', 'spreiteTwistPP'를 추가한다.

 

 

 

 

Sprites 크기는 램프로 조절하는 편이 쉽다. 'Sprite Scale Y PP', 'Sprites Scale X PP'항목에서 마우스 우클릭으로 'Create Ramp'를 실행한다.(램프 노드와 연결 됨) 이후, 'Edit Ramp(마우스 우클릭)'를 선택한다. 램프값은 아래 사진과 같이 '검은색 > 흰색'으로 설정하자.(0 > 1)

 

ScalePP 램프 생성 및 조절

 

 

만일, sprite scale x PP값이 변경될 때, y값도 동시에 변경되게끔 하려면, Connection Editor에서 해당 노드의 램프값( Max value)을 연결하면 된다. 이 설정은 굳이 필요없으므로 하지 않아도 된다.(필요없는 분들은 Pass)

 

Connection Editor 실행하기 > 램프 선택
램프 노드 선택 후 커넥션 에디터 왼쪽 연결(우측도 같음)

 

 

 

 

 

 


5 회전 적용

연기는 무작위로 회전하는 특성을 갖는다. 그리고 특수효과에서 '무작위'라는 수식어가 붙으면 rand()함수가 필요하다. Sprite TwistPP속성값에 익스프레션을 추가해보자.

 

 

 

 

rand(0, 360)값을 통해 sprite 덩어리 전체가 회전되지만 이는 다소 인위적이다. 따라서 파티클 덩어리가 아닌 각각 회전이 필요하므로 아래와 같이 per Particle 옵션창에서 'Sprite Twist Rand'라는 임의 속성값을 추가한다.

 

 

 

rand(-2, 2)정도 수준에서 각각 파티클을 회전시켜보면, 비교적 양호한 회전 모션을 볼 수 있다. 

 

 

 

좀더 실사를 표현하려면, 'Runtime before dynamic'값에 랜덤을 줘서 시작부터 무작위 느낌을 자아낼 수 있다.(아래 참고)

 

 

 

 

 

 

 

 


6 연기 섞기(*부록)

sprites 섞기는 굳이 권장하지 않는다. 다만, Maya에서 Arnold랜더링과 호흡이 괜찮다(?)고 설명했기에 추가했지만 절대 추천하지 않는다. 

 

Add Dynamic Attribute에서 'General'을 클릭하면 아래와 같이 속성을 추가할 수 있는 창이 나타나는데, 'particle'메뉴의 'spriteNumPP'를 추가해보자.SpriteNumPP는 각 sprite에 적용되는 텍스처의 숫자를 설정할 수 있는 기능이다. 가령, spriteNumPP값이 '3'이라면, 3개의 텍스처를 sprites로 사용할 수 있다. (3개의 텍스처가 섞여 연기 모양을 표현)

 

spriteNumPP 생성 및 Expression 적용

 

 

spriteNumPP 속성에 trunc()함수를 연결하고, 랜덤값(3)을 넣어준다. (trunc함수는 1의 자리 이하를 버려서 정수로 만들어 줌) 그리고 연기로 사용할 텍스처 노드를 추가로 2개 더 생상한 후, 'aiSwitch', 'aiUserDataFloat'노드까지 생성한다.

 

 

 

텍스처 노드의 outColor값은 aiSwitch노드의 input값에 각각 연결시켜주고, aiUserDataFloat노드를 aiSwitch노드의 index속성에 연결한다. 

 

aiSwitch노드 설정

 

 

trunc(rand(3))의 랜덤 결과값(숫자 정수)에 해당되는 각 텍스처가 각 sprite와 연결되려면, 쉐이더의 'arnold'탭에서 Export Attribute값에 "spriteNumPP"를 입력해야 한다.

 

 

 

지금껏 연결된 노드를 정리해보면 아래와 같다. 연기 텍스처 3장이 aiSwitch노드를 거쳐 쉐이더와 연결되고 있으며, 중간에서 aiUserDataFloat노드가 개입해 랜덤으로 텍스처를 선택하고 있다.

 

 

 

위의 노드대로 아놀드 랜더링을 실행했을 때, 대략 아래와 같은 느낌을 보여준다. 결론적으로 뉴스나 숏폼 콘텐츠에서 사용할 수준이며, 프로덕션용으로는 부적합하다. 

 

 

 

다만, 랜더링 시간은 fluid계열에 비해 우수하므로 스낵무비 정도에 Sprite효과를 사용하면 될 듯 하다.