TWA 후디니 1 Volume_12 : 전기에 의한 스파크

  • by

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

앞의 강의에서 만든 준비 자료를 가지고 Volume12 강의를 실시했다.

불꽃을 만드는 순서다.

1. 시작점과 끝점이 가진 기본 방향이 각 포인트 위치에서 Normal 방향이 되도록 합니다.

2. @N 방향으로 결정된 Velocity에 Random 값을 더해 불규칙하게 튀는 느낌을 준다.

3. 큰 스파크를 먼저 만든 후 작은 스파크를 만들어 준다.


스파크를 만들기 위해 소스에서 준비합시다.

새로운 지오메트리를 만들고 이름을 Spark라고 부릅니다.

스파크를 만들기 위해서는 Electric_line에서 시작점과 끝점이 필요합니다.

Electric_line에서 큰 전기와 작은 전기의 효과를 가져옵니다.

확인을 위해 Character도 임포트한다.

Unpack된 부분까지만 가져오도록 한다.

먼저 빅 노드 정보를 살펴보겠습니다.

big의 Node info에는, electric를 만들 때에 사용한 정보가 그대로 남아 있는 것을 알 수 있다.

파티클로서 정보를 작성해, 포인트를 선으로 그려 주었으므로, 파티클로부터 얻어지는 정보가 남아 있는 것을 알 수 있다.

그 큰 지오메트리 스프레드 시트를 보면 N의 정보 값이 너무 작습니다.

이러한 값이 작은 이유는 Electric을 작업하는 과정에서 어떠한 계산에 의해 값이 작아졌다는 것이다.

이렇게 값이 너무 작으면 우리가 원하는 속도감이 나오지 않을지도 모르기 때문에 다시 Normal을 요구해 줄 예정이다.

먼저 Clean node에서 불필요한 정보(Attributes, Strema)를 모두 날려버린다.

이제 시작점과 종점만을 분리해 줄 예정이다.

중간 점은 쓰지 않습니다.

그리고, 분리된 점에 대해서 Character와 Grid로부터 Normal 정보를 취득합니다.

For-Each Connected Piece를 사용하여 하나에 연결된 선들 각각에 작업을 해 갑시다.

우선, 접속되어 있는 것만을 각각 따로 보기 위해서 싱글 패스로 확인해 봅시다.

선의 포인트 번호를 확인해 보면, 0회의 시점과 100회의 종점을 확인할 수 있습니다.

Blast에서 0번 포인트와 100번 포인트를 제외해 준다.

이 때 100점의 경우, 단지 100을 입력해 분리할 수도 있지만, Sort 를 이용해 point number 를 reverse 한 후 0번으로서 꺼내 준다.

이 방법의 장점은 기하학에서 프레임당 발생 포인트의 개수가 다른 경우 같은 부분의 포인트를 이용할 수 있다는 점이다.

Single Pass를 끈 후 다른 점도 함께 확인한다.

시작점과 끝점만 잘 분리되어 있는지 확인할 수 있습니다.

현재, 포인트에는 Normal 정보 없이 위치만이 존재하고 있다.

이제 꺼낸 점에 Normal 정보를 찾아 보겠습니다.

Character를 가져와 Grid를 생성합니다 (rows, columns : 100×100). 각각 Normal node를 붙여 Points에 관한 Normal 정보를 요구해 준다.

이것으로 얻은 Normal 정보가 시작점과 끝점의 Reference가 됩니다.

Attribute Transfer를 생성해, 시점과 종점을 Input 1에, Reference의 정보를 Input 2에 연결해 준다.

Attribute Transfer로 Reference로부터 Points에서의 Normal 정보만을 취득하도록 설정해 준다.

Condition에서 Distance Threshold 값을 낮춥니다.

시점과 종점에 기대했던 Normal 정보가 잘 들어온 것을 확인할 수 있다.

For-Each Connected Piece와 그 안의 정보를 복사하여 Small에 붙여넣습니다.

Character의 Normal 정보가 포인트에 잘 적용되어 있음을 알 수 있습니다.

Particle을 만들기 전에 규칙을 결정해 봅시다.

큰 전기에서 발생하는 파티클은 크고 폭발적으로 나올 것입니다.

작은 전기로 발생하는 파티클은 그 크기가 작고, 너무 폭발적인 느낌으로 할 예정이다.

먼저 Attribute Wrangle을 통해 가지고 있는 Normal 정보를 바탕으로 Initial Velocity를 작성합니다.

이제 Dop Network를 만들고 Particle 설정을 잡습니다.

source로 지금 만든 big와 small 정보를 사용합시다.

결과를 보면 깨끗한 느낌은 아니지만, 원했던 것처럼 노멀 방향으로 파티클이 날아가는 것을 확인할 수 있다.

POP Force를 붙여 중력을 주고 스파크의 느낌을 갖게 해준다.

Spark가 튀어나오는 Ground Plane도 달려준다.

너무 오랫동안 파티클이 살아있는 것처럼 느끼고 삶의 가치를 낮추십시오.

이제 POP Source에서 Initial Velocity를 사용하지만 다른 값을 추가합니다.

솔직히 나온 파티클이 사방으로 퍼져 스파크 같은 느낌을 갖게 해줬다.

Birth rate를 조절하여 Points의 개수를 줄인다.

이제 Particle에서 Character의 충돌 설정을 만들 예정입니다.

Brute의 Unpack까지의 정보를 col, Brute의 SDF까지의 정보를 col_sdf라고 한다.

Dopnet Work에서 Static Object node 를 생성해 col_sdf 를 충돌에 대한 Volume Sample 로서 활용해 준다.

이때 Brute Animation을 Static Object에서 작동시키기 위해 Use Deforming Geometry를 확인하십시오.

Dop import에서 Dop Network의 정보를 Geometry 단계로 호출합니다.

Dop import 아래에 Trail과 Add를 연결하여 Particle을 선으로 해준다.

한 번 큰 불꽃의 형태가 완성된 것을 볼 수 있다.

이제 디테일을 변경해 봅시다.

스파크를 Smoke, Electric line과 같이 점등시키고, 그 타이밍을 맞추어 보자.

마지막으로 불꽃이 너무 늦을 때까지 살아있는 느낌이 아쉽다.

POP Source에서 Birth Rate에 Animation을 주고, 어느 시점부터 스파크가 적게 되도록 설정해 준다.

지금 작은 불꽃을 만들 예정이다.

앞의 큰 스파크에서는 크기가 클수록 무게가 있다고 가정해, Character의 움직임에 의한 Velocity에 영향을 받지 않도록 묘사해 주었다.

하지만 이번 만드는 작은 스파크는 그 크기가 작기 때문에 팔을 휘두르고 있어 그 바람에 영향을 받도록 해준다.

첫째, Smoke에서 Volume Visualization의 Density Scale을 낮추어 작은 크기의 Particle이 더 잘 보이도록 해 주었다.

그런 다음 s_big에서 수행한 것처럼 Attribute Wrangle에서 Initial Velocity 값을 Normal로 정의합니다.

이때 전기의 크기가 작기 때문에 너무 빠르지 않고 소수치를 곱하여 그 속도를 느리게 해준다.

이것을 s_small로 두십시오.

Dop Network를 새롭게 생성해 Particle 세팅을 해 주었다.

Birth rate에서 값을 처음부터 적게 주어 값을 조정할 수도 있지만 다른 방법을 시도해 보겠습니다.

Birth rate에서 값을 매우 크게 둡니다.

그런 다음 Dop Import 아래에 Attribute Wrangle을 붙여 확률로 그 수를 줄이십시오.


이제 Character의 움직임에 따라 Velocity를 이용해주는 차례입니다.

가볍게 작업하려면 Smoke에서 저해상도 파일 캐시를 가져옵니다.

Blast를 활용하여 가져온 정보에서 필요한 velocity 정보만 제거한다.

Convert VDB에서 velocity를 VDB 정보로 변환합니다.

VDB Vector from Scalar에서 Scalar 정보를 하나의 Vector로 결합합니다.

자, 그 정보를 Smoke_vel이라고합니다.

Dop Network에서 POP Advect by Volumes를 생성하고 앞서 만든 Smoke_vel의 정보를 활용해 준다.

Advection Type을 Update Position으로 변경합니다.

이대로 끝나면 좋지만, Simulation을 되돌아보면 아쉬운 부분을 확인할 수 있다.

우리가 만든 Smoke에서 온도에 따라 위쪽으로 올라가는 Velocity가 발생했습니다.

이 부분을 POP Advect by Volumes의 Velocity Scale에 Animation을 줌으로써 해결할 수 있었다.

위로 올라가는 Velocity가 발생했을 무렵 Veloctiy Scale 값을 0으로 했다.

결과를 보면,

에 오르는 느낌 없이 Particle이 뒤로 잘 날아가는 모습을 볼 수 있다.

뭔가 유감스러운 일이 있다면, 뒤로 날아가는 놈이 바람의 영향을 받아 뒤와 아래로 땀을 흘리는 듯한 느낌이 있으면 좋겠다.

POP Wind를 부착하여 y축과 z축에 마이너스 값을 부여했다.

완성된 Particle을 Dop Import, Trail, Add, Carve로 선으로 해, 그 길이를 큰 스파크보다 짧게 해 주었다.

File Cache에서 오늘 만든 결과를 따로 저장해 주었다.

Brute, Smoke, Electric_line, Spark를 함께 본 결과다.