TWA Houdini1/Starter & Particles

TWA 후디니 1 Particle_09 : 폭죽 만들기, POP에서 Stream이란

yiss09 2023. 2. 9. 10:34

https://www.twahoudini.com/course/starterparticles1

 

HOUDINI1_ STARTER & PARTICLES

1️⃣ 후디니 작업을 위한 기본 프로세스 이론을 공부합니다. SOLVER 작동 개념을 훈련하고 PARTICLE 시스템을 구현합니다.

www.twahoudini.com

 

Particle09는 Particle 강좌의 마지막 파트이다. 힘내서 마무리짓자!

 

1. Stream & POP Replicate

2. 빗방울 만들기

3. 폭죽 만들기

 

 


1. Stream & POP Replicate

 

먼저 여태 해왔던 것과 같이 기본 셋팅을 해준다.

point를 만들어 속도를 준다. DOP Network의 StartFrame을 11로 설정해준다.

DOP Network 안에서는 POP Object, POP Solver, POP Source를 만들어준 뒤 Source의 Emission Type을 All points로 설정해준다.

 

그 다음 하나의 이동하는 point만으로 작업하기위해서 Switch node를 활용해 11 Frame에서는 0, 12 Frame에는 1의 Animation을 주었다. 11 Frame에서 생성된 하나의 point가 @vel의 값에 따라 이동하게 된다.

 

Stream은 해당 결과가 어디서부터 출발한 Particle인지를 나타내는 Label이다.

Particle 강의에서 지금까지 배워온 대부분의 node들은 Stream이 존재하지 않았다.

하지만 POP Source, POP Location, POP Replicate에는 Stream이 존재한다. 이 node들에는 points를 생성하는 Birth 탭이 공통적으로 존재한다. 즉, points를 직접적으로 생성해낼 수 있는 node만이 Stream 탭을 갖는 것이다.

Stream Name을 수정해 해당 스트림의 고유한 이름을 가질 수 있다.

만약 이름을 바꾸지 않는다면 $OS에 의해 node의 이름을 그대로 가져가게 된다.

 

만약 두 개의 다른 Stream을 구분지어 보고 싶다면, DOP Import에 Blast node를 달아 확인이 가능하다.

이때 Stream Name에서 지어준 이름 앞에 "Stream_"이  붙게된다.

 

POP Replicate는 Particle을 복사함으로써 Particle을 생성해준다. points를 생성해주는 Birth 탭을 가지고 있기에 Stream을 가지고 있다.

1. POP Replicate가 복사할 Stream을 불러와준다.

2. POP Replicate로부터 나올 Particle에 Stream Name을 정해줄 수 있다.

3. Const로 points가 생성될 경우 굉장히 많은 양의 points가 생성되기 때문에 후디니가 엄청 무거워진다. Impulse Count로 그 수를 조절해주도록 하자.

A stream에 의해 생성되는 point는 POP Force에 의해 포물선을 그리며 아래로 떨어지고 있다. 그 때 POP Replicate에 의해 매 Frame마다 복제된 points는 POP Force의 영향을 받지 않기 때문에 등속도 운동을 하게 되어 위와 같이 세로로 긴 points 형태로 복제되게 된다.

 

앞선 Replicate가 Stream A의 포물선을 따라 Trail처럼 흔적을 남기도록 변경해보겠다.

1. Shape을 Sphere에서 Point로 변경해 point가 지나간 지점을 정확하게 따라가도록 해주었다.

2. Attributes에서 Inherent Attributes의 정보를 모두 지워 외부로부터 어떠한 정보도 얻지 않도록 만들어주었다.

3. Initial Velocity를 Set Initial velocity로 설정해 POP Replicate만의 Velocity를 갖도록 해주었다. Variance 값도 0으로 만들어 point가 흔들리지 않고 지나간 길을 그대로 따라가도록 해주었다.

 

이제 포물선을 그리는 Stream A에 조건을 주어 특정 Frame의 Points를 그룹화시키겠다.

1. %(modulo)를 이용해 10 Frame 마다 point가 "twa"라는 그룹에 속하도록 하였다.

2. 조건에 만족하지 못한 points는 setpointgroup function의 value를 0으로 두어 "twa" 그룹에 속하지 않도록 하였다.

 

새로운 POP Replicate를 생성해준다.

1. 방금 POP Wrangle에서 생성한 그룹 "twa"를 복사해준다. Stream Name은 apickup으로 정해주었다.

2. 지금은 Trail과 같은 효과가 아닌 무언가 터지는 듯한 효과를 내주려 한다. Impulse가 아닌 Const.를 사용해주자.

3. twa 그룹에 속한 Particle들이 위로 올라가면서 터지는 효과를 내고 싶다. Velocity의 y의 값을 올려주고 varience를 0보다 큰 값으로 설정해주자.

마지막으로 apickup 스트림에 POP Force를 달아 중력을 주었고, POP Color로 색을 입혔다.

 

 


2. 빗방울 만들기

 

이제 지금까지 배웠던 Collision, Reap, Replicate를 활용해 빗방울이 바닥에 튀어 퍼지는 효과를 만들어볼 예정이다.

 

새로운 Geometry를 만들어주자.

add node로 생성된 point에 y축에 5를 입력하였다. velocity 값은 {1,0,0}을 주었다.

Attribute Wrangle에서 If를 활용해 @Frame%invterval == 0 이 아닐때 모든 point가 삭제되게 하였다.

즉, interval 파라미터의 수의 배수의 Frame에서만 point가 생성된다.

 

DOP Network 안에서 POP Solver의 Collsion Behavior를 활성화 시켜준다.

지금의 Particle은 단순히 빗방울이 떨어지는 모습을 묘사 해주고 있다.

이제 빗방울이 여러갈래로 튀어오르게 만들어주자.

 

1. @hittotal을 활용해 point에 충돌이 일어날 때 "ahit" 그룹으로 포함되게 해주었다. 이때 바닥에 닿았을 때의 정보를 얻기 위해서 POP Solver에서 Reap At Frame End를 꺼주어 사라지기 직전의 point를 남겨주도록 하자.

2. Reap Particles를 활용해 @dead = 1로 조건에 따라 튀어오른 후의 points를 전부 제거해주었다.

 

POP Replicate로 "ahit" 그룹의 point를 복사해주었다.

Birth에서 points 생성 수와 life, Attributes에서 Velocity를 조절한 뒤, POP Force로 중력을 주어 물이 튀기는 듯한 느낌을 만들어주었다. 이때 Shape의 형태는 반드시 Point로 두어야 한다.

Sphere로 둔다면 원하는 느낌이 아니라 복사된 points가 서로 교차하는 듯한 효과가 만들어지게 된다.

 

마지막으로 땅에서 튀겨진 물이 line의 형태를 가지게 만들어 주었다.

DOP Import를 활용해 Blast로 필요한 부분만 떼어내어 작업해주었다.

 

 

 


3. 폭죽 만들기

 

velocity 값에 {0,5,0}을 주고 Switch node를 활용해 단 하나의 point만이 생성되게 하였다.

 

POP Source에서 Varience, POP Force를 건드려 위로 올라갔다가 떨어지는 point를 만들어준다.

POP Source의 Stream Name은 A로 설정해준다.

 

Stream A에 POP Wrangle을 달아준다. 위로 날아가는 폭죽을 만들 예정이기 때문에 아래로 떨어지기 직전의 point 정보가 필요하다. 즉, 제일 높은 지점의 point의 정보가 필요한 것이다.

1. @v.y가 0보다 작아진다는 것은 velocity가 음수 값을 가져 point가 아래로 떨어진다는 것이다. 이때의 조건을 활용하여 @v.y가 0보다 작아질 때의 point를  "top" 그룹으로 만들어준다.

@dead를 통해 제일 높은 곳의  점을 제외한 쓸모 없는 점들은 제거해준다.

이때 반드시 Reap At Frame End를 꺼주도록 하자.

2. Cd 값을 여기서 주지 않은 이유는 "top"에 색상이 들어감으로써 이후 POP Replicate로 복사해줄 points에도 색상이 들어가기 때문이다.

 

POP Replicate로 제일 고점에서 폭죽이 터지는 듯한 느낌을 주었다.

1. Stream A에서 최고점의 point를 가진 "top" 그룹을 가져와 복사해주었다.

2. 이제 Stream B의 Impulse Count를 조절함으로써 폭죽이 터질 때 나오는 갈래를 조절해줄 수 있다.

다음은 POP Replicate를 활용해 폭죽에 두께를 넣어줄 예정이다.

 

Trail 느낌의 작업은 생각보다 쉬웠다.

POP Replicate에서 Impulse가 아닌 Const를 사용해 points를 무작위로 많이 늘려 두께를 주었다.

Set initial velocity를 활용해 독자적인 Varience를 주었다. 이때 반드시 Inherit Attributes의 내용은 제거해주도록 하자.

 

이제 폭죽이 날아가면서 생기는 공백을 Substeps를 높여 제거해줄 예정이다. 

 

그런데 만약 Substeps를 그냥 이 상태에서 올려주게 된다면 원했던 결과와는 다르게 두 개로 나뉘어진 폭죽을 얻게될 것이다.

그 이유는 앞서 우리는 point가 11 Frame에서만 생성되고 12 Frame 부터는 Null에 의해 생성되지 않도록 설정해두었다.  Substeps에 의해서 11 Frame과 12 Frame이 4등분으로 나누어질 때 4개의 points는 각각 11, 11.25, 11.50, 11.75 Frame에 생성되게 된다. 12 Frame부터 point가 생성되지 않게 해두었기 때문에 11~12 Frame 사이에서는 point가 생성되게 되는 것이다. 이에 의해 폭죽이 여러 개로 발생하게 된다.

 

조건에 의해 단 하나의 point만이 생성되게 만들기 위해 Detail(only once)로 작업해주었다.

Frame이 정확하게 11인 경우에만 포인트가 생성되도록 해주었다.

이때 addpoint(0,vector)를 입력해야 하지만 0을 입력한다면 {0,0,0}과 같은 의미를 같게 된다.

만약 이렇게 하나의 폭죽이 아닌 여러갈래의 폭죽을 얻고 싶다면 어떻게 해야 할까?

 

먼저 add node와 vel을 연결해준다. 아무 조건도 없이 그냥 연결했을 경우 사진과 같이 너무 많은 양의 갈래가 생기게 된다.

여기서 random한 값에 의해 폭죽이 날아가길 원하기 때문에 DOP Network 안에서 Stream A에 Wrangle 작업을 해주겠다.

 

POP Source 바로 아래에 Wrangle을 달아주었다.

limit을 두어 그 값보다 작은 random한 id값에 의해 포인트들이 제거되게 된다. 아주 적은 양의 point가 random하게 생성되게 만들었다.

 

 

굵은 폭죽 터지는 효과

 

 

두번 터지는 효과

 

이번 Paticle 강의에서는 렌더링을 제외하고는 전부 재밌다고 느껴졌다. 컴퓨터 사양이 좋지 못해 렌더링 작업때마다 고초를 겪었다. 아직 완성하지 못한 공부일지가 남아 있으므로, 조금 더 힘내서 Particle 파트를 마무리 지어야겠다.