TWA Houdini1/Starter & Particles

TWA 후디니 1 Starter_09_02 : 고난주간 2일차

yiss09 2023. 1. 20. 01:47

 

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

 

HOUDINI1_ STARTER & PARTICLES

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

www.twahoudini.com

 

작업에 대한 접근 자체가 막막하다면 떠오르는 해결 내용을 모두 써본다. 그러다보면 작업의 순서를 어떻게 나열할지 상대적으로 떠오른다. 또한 어떤 것이 필요로하여 공부해야 하는지에 대해서도 말이다. 그리고 막상 써보면 하나하나의 내용은 해볼만한 것일 수도 있다.

어떠한 현상을 구현하고 싶다면 논리적으로 말이나 글로 표현이 가능해야 한다. 

+ Attribute Wrangle의 이름은 결과적으로 얻어낼 정보로 해주는 것이 편리하다.

 


고난주간 2일차 풀이

1.각각의 포인트가 서로다른 방향(오,왼,위,아래)으로 움직이게 한다. 방향은 solver 밖에서 vector 정보로 만들어주도록 한다.

2. Interval을 통제해준다. Interval이 3이라면 "turn → keep → keep → turn → keep → keep → turn → ... " condition이 진행될 것이다. 이때 "turn → keep → keep"을 하나의 count로 세어주는 integer 정보를 만들어준다.

3. 하나의 포인트에 대해서 Interval에 따라 랜덤하게 움직이는게 가능한 세팅을 만들어준다.

  - 방향을 꺾는 간격은 시간에 따라 정해진다. 이것이 Interval이다.

  - solver는 이전결과에 따라 나아가는 방향으로 나아갈 것인지 아니면 방향을 틀어줄 것인지 결정해야한다.

4. 여러 점에 대해 동시에 작동하도록 설정해준다. 모든 포인트가 서로 다른 seed를 가지도록 설정해준다.

5. 움직임을 디자인해준다. 움직임의 방향을 오,왼,위,아래로 설정해주고나면 움직임에서 아쉬운 부분이 생기는데 그 부분에 제한을 준다.

 

제일 먼저 point 움직임의 방향이 되어 줄 right, left, up, down엔 관한 vector 정보를 solver 바깥에서 만들어준다.

up을 upp라고 쓴 것은 @up이라는 function이 존재하기 때문에 혹시나 발생할 오류를 예방하기 위함이다.

 

그 다음 생성된 direction의 정보를 solver안에서 point function을 활용해 불러와준다. 이때 direction의 정보는 Input2를 통해 들어오게 된다.

 

i@pick의 정보를 새로 만들어준다. pick은 random한 값에 따라 move할 방향을 정해줄 조건이 될 정보이다.

pick을 조건으로 내세워 if문을 만들어준다.

 

i@pick에 대한 정보는 solver 바깥에서 만들어준다.

rand function을 사용하여 f@seed를 만든다.

i@pick 값에 다시 seed를 rand해주는데 이때에 rand function 뒤에 4를  곱해준다. 그 이유는 우리가 move에 필요한 정보는 오른쪽,왼쪽,위,아래 4개의 정보이기 때문에 0~1 사이의 값인 rand에 4를 곱해주어 0~4 사이의 값으로 만들어준다.

그 다음 floor function을 이용해 내림해주어 소숫점을 제거함으로써 integer의 값을 가지게 만든다.

 

이제 interval, count, prevcount 정보를 생성해 포인트가 계속 진행할 것인지 아니면 turn할 것인지에 관한 condition을 만들어 줄 차례이다.

 

count와 pcount의 정보는 횟수를 세는 정보이기 때문에 integer 정보로 분류된다. 하지만 (@Frame - startframe)/interval의 계산 결과가 소숫점 값이 나올 수 있기 때문에 바로 integer 정보인 count로 두기 보다는 float 정보로 구성된 fcount를 만들어준다. 그 뒤 fcount에 floor를 입혀 integer 정보로 변환시켜준다.

* 원래의 계획은 condition을 string으로 두어 "keep" 또는 "turn"의 정보를 만들어주려 하였다. 하지만 이러한 정보가 input2에 연결되어 다른 attribute wrangle에서 point function에 의해 불러졌을 때, 가끔씩 불러들인 정보에서 오류가 발생하게 된다. 이를 방지하기 위해 string이 아닌 integer 정보로 condition을 만들어주었다. 0일때 "keep", 1일때 "turn"이다.

 

 solver안에서 point function을 통해 input2로 들어온 condition의 정보를 불러들였다.

필요한 정보인 i@pick과 f@seed를 정의하여 준다.

그 다음 if문을 통해 condition이 0("keep"상태)일때 아무런 변화를 주지 않았고, else 즉 condition이 1("turn"상태)일때 앞서 solver 밖에서 만들어주었던 i@pick 정보에 랜덤한 값으로 변화를 주었다.

이러한 if문을 생성한 이유는 점이 프레임에 따라 움직일 때 만약 turn할 방향을 정해주는 조건인 pick의 내용이 변화하지 않게되면 한번의 변화 이후엔 계속 같은 방향으로 진행하는 결과가 발생하기 때문에, pick의 정보가 Frame에 따라 계속하여 변화하게 만들어주었다.

 * 이때 주의할 점은 새로운 attribute를 생성하여 input2를 사용하였다 하여도, 원래 사용하던 input2는 제거하지 않아야 direction에서의 point function이 제대로 작동한다. 그 이유는 input1으로 들어온 정보는 그대로 Attribute 상태로 남아 아래로 전달되지만 input2,3,4로 들여온 정보는 다음 node로 전달되지 않기 때문이다.

 

이제 Grid에서 Add function을 이용해 여러 점만 남긴 뒤 Trail node를 달아 원하는 방식으로 잘 작동되는지 확인해준다.

 

그 다음 Add node를 이용해 점들을 하나의 선으로 이어주려 하였다. 하지만 사진과 같이 기하학적인 모습으로 line이 연결되었다.

그 이유는  0~25까지 원래 점이 있었다면 Trail node를 사용해 점을 생성하면 그 다음 숫자인 26부터 점이 생성된다. 그리하여 0~25까지의 점들이 연결되고 26~50, 51~75...의 점들이 연결된 line이 생성된 것이다.

 

pick의 정보가 들어있던 Attribute wrangle에 i@id = @ptnum; 정보를 만들어준다.

새롭게 만들어진 id 정보를 By attribute에 기입하여 준다.

그리하면 원하던 느낌대로 line이 생성된 것을 볼 수 있다.

 

현재 생성된 line의 움직임을 보면 뒤로 움직이는 모션이 보일 것이다. 이 부분을 제거해 어떠한 곳으로 계속 나아가는 line을 만들기위해 모션을 수정해보겠다.

 

이 식에서 특이한 점이 있다면 if문 안에 if문을 사용한 점이다. 이러한 방식의 VEX Expression은 처음 사용해보기 때문에 당황스러움이 있었지만, 천천히 들여다보니 그리 어렵게 느껴지진 않았다.

식은 이러하다.

만약 condition이 1("turn")이라면 그리고 pick의 값이 0이라면, randomnum이라는 새로운 integer 정보에 random 값을 넣어준다. 이때 반대방향을 제외한 세 방향으로 움직일 예정이기 때문에 rand 값에 3을 곱해주어 0~3 사이의 값을 만들어준다.

다음 if문은 randomnum값에 따라 방향을 제시할 정보인 pick이 정해지는데, 이 pick 정보는 진행방향의 반대방향을 제외한 나머지 3방향으로 결정된다.

이렇게 마지막으로 아쉬운 움직임까지 디자인해준다면 끝이 난다.

 

 

 


고난주간 3일차

간단한 조건, 좋은 idea로 만들어야 함.

1. 어떠한 벽이 주어지는데 그 안에서 point가 튕기듯 표현되게 한다. 

2. 움직이는 방향도 변경이 가능해야 한다.

 

 

가상의 경계라는 조건을 두고 condition의 범위를 지정해주었다.

하지만 solver내에서 condition의 내용이 변하지 않는 현상이 발생하여, 수정하려 해보았지만 많은 실패 끝에 포기를 선언하였다.

고난주간을 시작하고 나서 잠들기 전까지 최대한 시도해보다보니 점점 공부인증 제출시간이 늦어지고 있다. 투자한 시간에 비해 여태 깔끔하게 성공한 부분이 없어 공부를 제대로 하고 있는건가?라는 생각이 들며 초조해지는 것 같다.

결론적으로 과제 완성은 못했지만 이것저것 시도해본 시간이 헛된 시간이 되지 않길 바란다. 후디니 실력이 언제 좋아질지 앞이 깜깜하지만 후디니에서 결과물을 만드는 것처럼 하나하나 천천히 해보려한다.

마지막으로 고민한 흔적인 메모이다. 정답을 알고 난 뒤에 내 생각과 다른점을 다시 확인해보려 한다.