TWA Houdini1/Volumes

TWA 후디니 1 Volume_11_02 : 캐릭터 움직임에 따른 전기 효과

yiss09 2023. 3. 7. 23:24

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

 

HOUDINI1_ VOLUMES

2️⃣ 볼륨의 기초이론과 응용 그리고 SIMULATION까지 경험해보세요.

www.twahoudini.com

 

Volume11_part2에서는 캐릭터의 몸에 흐르는 전기효과가 Character Animation을 따라가도록 만들어볼 예정이다.

 

전기 효과를 두 가지로 나눠줄 것이다.

1. Object의 표면을 따라 흐르는 전기 효과

2. 지면과 반응하는 전기 효과

 

전기 효과를 만들기위한 작업 순서이다.

1. line Animation 생성

2. line Animation에 전기와 같은 느낌의 Noise 효과 주기

 

 


1. Object의 표면을 따라 흐르는 전기 효과

 

지금 상황에서 line Animation을 만드는 방법이 두 가지가 있다.

1. 움직이는 물체 자체에 line Animation을 주는 방법

2. 정지되어 있는 물체에 Animation을 만들어주고 여기서 발생된 효과를 Point Deform으로 다시 변형시켜주는 방법

 

먼저 움직이는 물체에 line Animation을 만들어보겠다.

물체 표면에서 points가 발생되게 만들 것이기 때문에, Brute를 가져와 Dop Network에서의 source로 이용해준다.

null node를 달아 anipos의 이름을 붙여주겠다.

Dop Network 안에서 POP Solver 세팅을 해주었다.

POP Source에서의 Birth rate가 크기 때문에 100으로 낮춰주었다.

Life 값을 1,1로 두어 point가 조금 있다가 사라지게 해주었다.

 

퍼져있는 Particle들이 Brute의 가슴 앞쪽으로 모이게 만들고 싶다. 새롭게 POP Attract node를 사용해주겠다.

Goal에 적힌 vector 좌표로 Particle들이 모이게 될 것이다.

 

이때 Attraction Type을 Postion으로 두는게 아니라 Points로 바꿔주게 되면, Particle이 모이게 될 좌표를 SOP Path로 불러올 수 있다.

Geometry 단계로 돌아가서 Blast로 Brute 가슴 앞쪽의 point를 하나 떼어낸다. 떼어낸 포인트에 Null node를 달아 target이라는 이름을 달아주었다.

target의 위치좌표를 SOP Path로 불러내었다.

Particle들이 target을 향해 날아가는 것을 볼 수 있다.

 

Dop Import로 Dop Network 안에서의 내용을 Geometry 단계로 불러와주었다.

Dop Import 아래에 Trail과 Add를 달아 Particle을 line으로 만들어주었다. 이때 id 정보를 이용해 line으로 만들어주었다.

 

이제 만들어준 line Animation을 Ray node로 Brute 표면에 붙여주었다.

Brute의 몸 전체에서 중앙으로 향하는 line Animation이 완성되었다.

전기처럼 묘사하기 위해서 이전 강의에서 만들어둔 Noise 정보를 가져와 활용해주었다.

 

예상대로 Noise 패턴이 지금의 line Animation에 적절하게 Tweak되어 있지 않은 것을 볼 수 있다.

Subnetwork 안으로 들어가 수정해주겠다.

line Animation의 시작점과 끝점에 들어갈 Noise는 필요가 없으니 없애주도록하겠다.

그 다음 Attribute Vop으로 들어가 Noise에 곱해진 Constant 값을 조절해 Noise의 세기를 줄여주고, Roughness 값을 조절해 더욱 거칠거칠한 느낌의 전기를 만들어주겠다.

Shapemult에 곱해져 높이를 결정해주었던 float 값을 줄여 더욱 표면에 가깝게 움직이도록 해주었다.

 

이제 POP Source의 Birth rate에 Animation을 주어 Particle이 어느 시점에 사라지도록 해주겠다.

Brute가 팔을 뻗다가 내리는 순간이 올때부터 점점 생성되는 points의 수가 줄어들도록 해주었다.

이때 points가 완전히 사라지는 것보다 어느정도 남아서 전기가 남아있는 것처럼 만들어주고 싶다면, Animation의 마지막에 0의 값을 주는 것이 아니라 5 정도의 작은 값을 주면 해결이 된다.

전기가 줄어들다가 몇 가닥 살아서 남아있는 것을 확인할 수 있다.

Noise Pattern을 바꾸고, 묘사를 바꾸는 것은 쉬운 일이다. 이러한 Tweak은 작업이 최종에 가까워졌을 때 조금만 손보길 바란다. 그것보다 그 앞에서 line Animation을 잘 만들어주는 것이 훨씬 중요하다.

 

이번에는 Point Deform을 이용해보겠다. 정지되어 있는 Brute에 효과를 만들어준 다음, 움직이는 Character에 적용시켜 보겠다.

앞에서 만든 내용 중 필요한 내용을 가져와주겠다. anipos와 target, Dop network를 가져와주었다. Dop Network의 경우 POP Object에서의 Object Name 그리고 POP Source와 POP Attract의 SOP Path를 수정해주도록 하자.

Dop Import를 생성해 Particle의 내용에 Trail과 Add를 붙여 line Animation으로 만들어주었다.

완성된 line Animation을 Ray node로 Brute의 표면에 붙여주었다.

 

이제 Point Deform을 이용해 Animation에 따라 움직이는 Brute에 line Animation이 따라가도록 만들어준다.

Input 1에 방금만든 line Animation이 들어가고, Input 2에는 line Animation을 만들 때 이용된 정지된 Brute, Input 3에는 Animation이 있는 Brute를 넣어주었다.

정지상태에서 만들어준 line Animation 효과가 동일한 Primitive 규칙을 가진 움직이는 Brute를 잘 따라가는 것을 볼 수 있다.

 

Noise Subnetwork의 Input 1에는 방금 만든 line Animation을 넣어주고, Input 2에는 움직이는 Brute를 넣어주었다.

Point Deform으로 만든 결과가 앞서 만든 움직이는 Object에 만든 결과와 같은 것을 볼 수 있다.

여기서 Detail을 추가해주고 싶다면, 굵기에 대한 묘사와 출력을 위해서 면이나 색깔에 대한 구체적인 묘사도 필요해질 것이다. 이러한 Detail은 나중에 따로 다루도록 하겠다.

 

 


2. 지면과 반응하는 전기 효과

 

이번에는 Start point와 End point를 따로 만들어 작업해보겠다.

먼저 Start point가 생성될 지면을 만들어주겠다. ZX Plane의 Radius 1x0.7의 Circle을 하나 생성해준다. Circle은 Source의 정보가 된다.

이제 Circle 위에서 움직이는 Particle들을 만들어주겠다. Particle의 양이 많을 필요도, 과하게 움직일 필요도 없다.

Dop Network를 만들어 POP Solver 세팅을 해준다. Birth rate를 10으로 줄이고, Life 값을 줄여주었다.

 

POP Wind를 달아 Velocity 없이 Noise만을 적용해 Particle들이 Noise에 따라 움직이도록 해주었다.

이때 Noise에 의해 위아래로도 움직임이 발생하는 것을 볼 수 있다.

Geometry 단계에서 Circle보다 더 큰 Grid를 생성해 Ray로 Circle에서 발생되는 Particle을 Grid에 붙여주었다.

위아래의 움직임이 사라진 상태로 Grid에 붙어 움직이고 있는 Particle들을 볼 수 있다.

 

Start point의 정보를 만들어주었으니, 이제 End point가 될 정보를 만들어주려한다.

방금 만든 Dop Network의 세팅을 복사해 End point에서 그대로 이용해주겠다.

End point의 Source는 움직이는 Brute로 지정해주겠다. Dop Network 안에서의 SOP Path를 변경해준다.

Ray node로 Brute의 몸 전체에서 바깥으로 퍼져나가는 Particle을 Brute의 표면에 붙여주었다.

 

Start point의 정보와 End point의 정보를 Merge하여 Add로 id에 따라 선으로 만들어주었다.

이때 선들이 꼬여있다는 느낌이 든다. 우리는 아래에서 위로 가깝게 올라가는 듯한 선들을 원한다.

이를 해결하기 위해서 만들어준 point들의 순서를 바꿔주겠다.

 

Ray node를 Display해 point들의 number를 확인하면, point의 순서가 오른쪽 왼쪽 규칙 없이 꼬여있는 것을 볼 수 있다.

Sort node로 point들의 순서를 변경해주겠다. Sort를 Ray node 아래에 달아주겠다. 이때 Sort node에서의 Point Sort는 By X로 두는데, 이는 X축 방향에 따라 순서대로 Point number를 정해주겠다는 것을 뜻한다.

Start point와 End point 둘 다 Sort node로 순서를 변경해준다.

만약 지금 Point number의 순서가 변경되었다고 바로 line으로 만들어준다면 결과는 변하지 않았을 것이다. line을 만들어주는 메커니즘이 현재 id에 의존하고 있기 때문에, Attribute Wrangle을 달아 @id = @ptnum으로 id의 순서도 변경해준다.

 

원하는 느낌대로 깔끔하게 연결된 line들을 볼 수 있다.

하지만 이때 실제로 Noise를 주고 Tweak를 마치고 나면, 이러한 깔끔한 line보다 이전의 꼬여있는 line이 더 예쁜 결과를 낼 수도 있다. 절대 정해진 정답은 없다는 것을 명심하자.

 

Noise를 가져와 연결해준다. Noise Subnetwork에서 필요없는 부분을 제거해주고 수정할 부분은 수정해주도록한다.

Start와 End point를 미리 규정해두었기 때문에 Ray_object에 대한 내용은 필요가 없다. 또한 Ray_object와 연결된 Ray node도 지워준다.

표면에서 움직이는 전기가 아니기에 전기의 높이를 정하는 Attribute Wrangle도 필요가 없다. curveu 값을 구해주던 Resample도 따라서 지워준다. Subdivide도 필요가 없으니 지워준다.

Noise의 세기가 너무 적다. Attribute Vop 안에서 Noise에 곱해지는 Constant의 값을 올려준다. Noise의 Amplitude, Roughness, Frequency 값을 조절해주었다.

결과를 보면 아직 엉성한 부분이 보인다. 너무 많은 전기가 발생되었고, 생각보다 Start point의 움직임이 적은 것도 아쉽다. 

 


3. Let's Tweak

 

이제 Tweak을 해주며 아쉬운 부분을 고쳐나갈 예정이다.

강의에서 바꾸게 되는 Parameter 값에 집중하기보다는, 언제 어떠한 이유로 어떠한 부분의 값들을 변경하는지에 초점을 두도록 하자.

 

먼저 지면에서 올라는 전기 효과에서의 points의 생성에 관해 수정해주겠다.

Brute가 팔을 펼 때 전기가 방출되고, 팔을 다시 접는 순간부터 점점 전기가 줄었으면 한다.

POP Source의 Birth rate에 Animation을 준다. 

Start point에서의 Birth rate를 Copy Parameter해 End point의 Birth rate에 붙여넣어준다.

전기가 생각보다 너무 오래 살아있는 느낌이 든다면 Life Expectancy와 Life Varience 값을 낮춰주도록 하자.

 

또한 땅에서 발생한 Particle 즉, Start point에서의 Particle이 가운데로 모일 수 있게 만들어주겠다. POP Attract를 만들어준다. Force scale을 높여 중앙으로 이동하는 속도를 높여주겠다.

 

바닥에서의 point는 잘 움직이고 있는 데에 반해 Object에서의 point는 움직이지 않는 것이 아쉽다.

End point의 Dop Network 안에서 POP Wind를 달아 1만큼 y축으로 바람이 불도록 해주었다.

전기가 위로 올라가는 느낌이 발생되었다.

 

아까 만들었던 깔끔한 line의 효과를 키고 꺼보면서, 어떠한 효과가 더 나은지를 비교해보았다.

생성되는 line의 수가 줄어서인지 꼬여있는 느낌의 효과가 좀 더 예쁜 결과를 만들어내고 있다.

 

line이 너무 한쪽으로 몰려있다는 느낌이 든다.

Start point의 POP Source에서 Seed를 변경해 생성되는 point의 위치를 바꿔주겠다.

이때 Start point나 End point 한쪽에서만 Seed를 변경해준다면, point가 생성되는 순간이 바뀌어 id가 일치하는 경우가 적어지게 된다. 이에 따라 line의 갯수도 적어지게 된다.

만약 이와 같은 효과를 의도한 것이 아니라면 둘의 Seed 값을 맞춰주도록 하자.

 

충분히 자연스러운 전기 효과를 만들어주었다면, 이제 Volume10에서 만들었던 연기 효과와 오늘 만들어주었던 전기 효과를 같이 Display하며 전기 효과의 Birth rate의 Animation을 Smoke 효과와 조화롭게 연결되도록 조절해주겠다.

 

 


4. 다음 강의 준비

 

다음 수업에 필요한 내용을 미리 준비해보겠다.

좀 더 자연스러운 느낌을 위해 Start point와 End point에서 Spark가 발생했으면 한다. 

이때 고려해줄 사항으로는 몸통과 충돌에 대한 조건이 필요할 것이고, 연기가 발생되면서 나오는 속도값도 활용해줄 것이다.

 

다음 작업을 위해 필요한 내용은 File Cache로 저장하고, 불필요한 부분은 지워주도록 하겠다.

File Cache로 저장해줌으로써 Simulation의 작동에 불필요한 영향을 줄여줄 수 있다.

오늘 만들어둔 전기 효과를 File Cache로 저장해주겠다. 또한 빠른 작업을 위해서 Smoke에서 해상도를 낮춰준 결과를 File Cache로 저장해준다.

 

새롭게 Houdini를 실행해 File Cache로 저장된 결과를 새로운 Geometry에 저장해준다. Smoke 따로 Eletric 따로이다.

또한 Smoke에서 만들어둔 Smoke Source를 가져와 또 다른 Geometry에 넣어주며 마무리한다.