VFX

[VFX] [Maya] 불꽃 폭죽 만들기 (1)

by MoGL3D 2020. 2. 15.

 Emitter와 n파티클을 이용한 특수효과 불꽃을 만들어보자. 


1 Emitter 생성

먼저 Emitter를 생성한다. Type은 'Directional'로 선택하고, 수치는 '15'정도로 설정한다.


처음부터 수치를 너무 높이면, 이후 파티클로부터 또다시 파티클을 만드는순간 컴퓨터가 뻗어버릴 수가 있다. 따라서 수치는 반드시 10~20단위로 설정을 하도록 하자.  


2 Emitter 설정

불꽃을 만드려면, 순간적으로 입자들이 위로 튀어나가는 효과를 만들어야 한다.  이는, 순간 가속도가 높아야 한다는 의미다. 순간 가속도가 높이기 위해서는 'speed'수치를 활용할 수 있다. 


그리고 불꽃은 speed뿐만 아니라 speed random을 조절해서 퍼뜨려야 의미가 있기 때문에 speed수치를 너무 과하지 않은 20정도로 설정하고, random수치를 5정도로 넣어서 불꽃이 순식간에 뻗어나가면서 옆으로 퍼지도록 만든다. 


3 다이나믹 프로퍼티 설정

이제 본격적으로 다이나믹 프로퍼티를 설정해보자. 다이나믹 프로퍼티를 설정하면, 파티클 입자들의 성질을 조절할 수 있다. 일단 particle size를 조절해서(랜더링할 때는 사실상 필요없음) 입자의 모양을 'sphere'로 설정하자. (잘 보이기 위해서)


4 파티클별로 색 설정하기 

파티클별로 색상을 설정하려면, per particle 오브젝트를 활용해야 한다.  


"Per particle Attribute" 설정에서, 'Add'를 선택한 이후에 'per particle Attribute'를 추가한다. 그리고 "per particle attribute"에서 아래와 같이 설정을 추가하면, 각 파티클별로 설정이 가능해진다.


만일 per particle에 체크하지 않으면, 파티클들이 덩어리 하나로 적용이 돼서 적용이 된다. 


* 파티클별로 색상 지정하기 

if( fire0Shape01.particleId % 2 ){ 

fire0Shape01.rgbPP = << rand( 0, 1), 0 , rand( 0, 1)  >>;

 }else { 

fire0Shape01.rgbPP = << 0 , rand( 0, 1), 0 >>;

}


위의 Mel 스크립트 코드에서 "fire0Shape01"은 파티클 shape을 지정한다는 의미이다. 여기서는 파티클 shape의 이름이 "fire0"이므로 "fire0"을 앞에 붙이고, 뒤에 "Shape01"을 입력한다. "fire0Shape01"은 하나의 객체인 셈이다. 


"fire0Shape01"객체가 갖고 있는 많은 매서드(기능) 중에서,  particleId(각 파티클별로 id가 있는데 각 파티클을 모두 선택하는 기능)  rgbPP(각 파티클별로 색을 지정하는 기능)를 사용하기로 한다. 그리고 rgbPP의 값에는 벡터값(x,y,z 3가지 값)이 오는데, 벡터의 표시는 << 값1, 값2, 값3 >> 방식으로 지정한다. 


// fire0Shape01.particleId % 2 코드의 의미는, %2(2로 나눈 나머지가 제로) 짝수 id를 갖고 있는 파티클일 때  if 아래의 구문을 실행하고, 그 이외의 구문(파티클 id가 홀수)일때, rgbPP값은 << 0 , rand(0,1), 0 >>가 된다. 여기서 << 빨강, 그린, 파랑 >>이 벡터값이 되므로, 중간에 rand( 0 , 1)이라면 particle ID값이 홀수일 때는 블랙<< 0 , 0 , 0 >>에서 녹색<< 0 , 1,  0 >> 사이의 값이 파티클 알갱이의 색깔이 된다. 


5 per파티클 항목으로 'velSpeed'(가속도)항목 넣기 

velSpeed값을 항목으로 추가해보자. add dynamic attribute항목에서 'general' 항목을 클릭해서 add한다. 또, float항목을 선택한 뒤, per particle을 선택한다. 


아래와 같이 가속도 벡터 값을 실수값으로 바꿔보자. 


fire0Shape1.velSpeed = mag( fire0Shape1.velocity ); 


참고로 mag함수는 벡터를 실수형으로 바꿔주는 역할을 해주는 함수이다. 


content타입으로 numeric을 선택한 후에 velSpeed를 이름으로 넣으면, 현재 값이 나타난다. 


velocity를 numeric값으로 넣으면, 벡터값이 숫자로 나타난다. 


가속도가 특정값 이하로 떨어지면, 파티클의 생명주기를 삭제하여 파티클을 삭제하는 방식을 만들어보자. 


특정 가속도 이상에서 파티클 각각 입자들이 모두 사라지도록 만들고 싶다면 어떻게 해야할까? 아마도 파티클 emitter로 생성된 파티클shape의 입자 하나하나의 영향값을 계산해야 할 것이다. 이를 위해 'lifespanPP'모드를 선택한다. 


파티클 타입을 'sphere'로 선택해서 파티클이 보일 수 있도록 한다.


다음 포스팅에서는 폭발하면서 흩어지는 파티클 입자를 통해 마무리해보자.