TWA Houdini1/Starter & Particles

TWA 후디니 1 Starter_09_05 : 고난주간 5일차

yiss09 2023. 1. 27. 04:20

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

 

HOUDINI1_ STARTER & PARTICLES

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

www.twahoudini.com

Solver는 이전 Frame이 가진 정보를 활용해서 규칙에 맞게 새로운 결과를 낸다. 그리고 원하는 규칙을 추가해준다.

 


고난주간 5일차 풀이

1. 중력에 대한 셋팅 잡기

2. Solver에서의 Substeps 이해하기

3. File Cache를 활용해 적절한 Substeps 찾기

4. Gravity와 Substeps를 bounce 프로그램에 적용하기

 


1. 중력에 대한 셋팅 잡기

 

중력을 받아 Bounce가 작용하는 시스템이다.

현재  Frame의 point가 다음 Frame으로 넘어갈 때 gravity 값이 더해짐에 따라 진행방향(vel)이 바뀌게 된다. 이를 이용해 Bounce에 중력의 느낌을 주려한다.

 

고난주간 3일차의 Bounce 프로그램을 활용하였다.

2번째 인풋으로 들어갈 자리에 v@gravity를 생성해준다.

 

진행 방향 vel에 중력 gravity 값을 더해주게 된다면, 이제 Solver에 의해 매 Frame 마다 gravity의 값의 영향을 받게 된다.

 

 

 


2. Solver에서의 Substeps 이해하기

 

StartFrame이 5인 Solver를 null node로 풀어서 해석한 모습이다.

Switch node는 파라미터에 쓰이는 Integer 수에 따라 정보가 바뀌기 때문에 Frame의 역할을 하게 된다.

첫번째 null은 0 Frame의 결과이며 이를 검정색으로 둔 이유는 모든 Frame은 1에서 시작하기 때문에 표면상에 드러내지 않게 하기 위해서이다.

각각의 Frame은 이전 Frame의 output에서부터 새로운 결과를 불러오게 된다.

 

Substeps를 설명하기위해 For Loop with Feedback을 사용하였다.

Gather Method가 Merge Each Iteration이 아닌 Feedback Each Iteration이기 때문에 마지막 결과를 도출하게 된다.

따라서 사진에선 Iteration이 2이기 때문에 6 8 10 12로 프레임들이 2번씩 반복한 다음 그 결과가 다음 프레임으로 넘어가게 된다. 따라서 2 프레임씩 건너뛰게 되는 것과 같은 결과를 가지게 된다. 이러한 메커니즘을 Substeps라 한다.

 

Substeps를 활용해 그림과 같이 Point가 경계를 넘어가는 범위를 줄여줄 예정이다.

 

 


3. File Cache를 활용해 적절한 Substeps 찾기

 

Substep의 수가 늘어날수록 디테일이 늘어나 경계를 넘는 부분이 줄어들 것이다. 

 

Substeps의 정보인 i@SS를 만들어준다.

point function을 이용해 solver의 Substeps에 i@SS의 정보를 연결시켜준다.

 

Substeps 사용의 잘못된 예시

그 다음 solver 안에서 vel의 값에 substeps를 나누어주어야한다.

하지만 그림과 같은 방식에는 vel의 값이 SS에 의해 계속하여 나누어지기 때문에 결국 point가 움직이지 않는 결과가 발생한다.

 

Substeps 사용의 첫번째 방법

Substeps를 solver 안에서 활용하는 방법은 두 가지가 있는데 그 중 쉬운 것이다.

원래 만들어져 있던 move에 관한 attribute wrangle에 바로 SS에 대한 정보를 불러들인다.

@P에 @vel/SS를 더해주는데, 이 방법이 위의 방법과 다른 점은 @vel의 값이 변하지 않아 계속하여 같은 값이 @P에 더해진다는 점이다.

 

Substeps 사용의 두번째 방법

그 다음 방법은 바로 v@ssvel 이라는 새로운 정보를 생성해 그 정보가 @vel/SS의 값이 되게 한다.

바로 그 v@ssvel을 move의 정보에 넣어 @P에 더해준다.

이 ssvel에 의해 vel은 한 프레임 내에서 고정된 값을 가지게 된다.

 

그 다음 적합한 결과를 찾기 위해 File Cache를 활용해 Substeps 1,2,3,32로 animation을 저장하였다.

각각의 정보를 구분하기 위해 color를 다르게 입혔으며, trail node를 달아 흔적을 길게 남긴 뒤 merge로 합하여 같이 보았다.

 

이렇게 Substeps에 따라 결과가 전부 다르게 나온 것을 볼 수 있다.

Substeps를 늘리면 detail이 늘어나는 것과 같아 file cache에 정보를 저장하는데에 시간이 오래 걸리게 된다. 이후 큰 작업을 할 때에는 적당히 substeps를 주는 것을 추천한다.

 

 


4. Gravity와 Substeps를 bounce 프로그램에 적용하기

 

이제 bounce 프로그램에 앞서 배운 gravity와 substeps를 적용시켜줄 것이다.

gravity의 정보는 substeps 정보 앞에 오게 된다.

 

중력에도 substeps 효과를 주기 위해 gravity를 SS로 나누어준다.

 

P.y 경계에 관한 if문을 활용하여 지면쪽 경계에 닿을 때 튀어오르는 높이가 프레임마다 줄어들게 하기 위해 vel의 값에 0.8을 곱해주었다.

 

완성되었다.

 

연휴를 보내고 다시 고난주간에 들어가면서 어쩌다보니 밤낮이 바뀌게 되었다. 밤낮이 바뀐만큼 늦게 공부일지를 제출하고 있는데 잠을 좀 줄이고 어서 진도를 따라잡아야겠다.

 

 

 


고난주간 6일차

 

 

gravity 값으로 원 운동을 하는 좌표를 만들어주었다.

 

그 다음 solver 안에서 gravity 정보를 활용하여 vel을 업데이트하였다.

vel의 값을 @P에 더해주었다.