후디니에는 딱 하나의 정답만이 존재하는 것이 아니다.
오늘의 강의 순서
- character 준비 & 데이터 정리
- smoke solver setting
- 전기 효과
- 몇가지 추가적인 particles
- cache 정리
Mixamo 페이지에서 애님 데이터를 다운받는다.
- 이번에는 애님 데이터와 T 포즈 데이터도 받는다.
Agent 노드를 이용해서 캐릭터를 불러온다.
- 애님 데이터와 T 포즈 데이터를 다 불러온다.
- point deform 노드에 활용해볼 예정이다.
Point Defome Node
- polygon의 규칙이 같은 두 정보를 기준으로 포인트를 이동시켜준다.
- 첫번째 인풋
- 변화를 주고싶은 대상
- 두번째 인풋
- 기준
- 두번째 인풋의 위치를 기준으로 첫번째 인풋의 상대적 위치가 정해진다.
- 세번째 인풋
- 어디로 어떻게 변화를 주고 싶은지에 대한 인풋
- 두번째 인풋과 세번째 인풋은 프리미티브 규칙이 같아야한다.
- Capture > Radius
- 값을 낮춰주면 조금 더 디테일한 결과를 얻을 수 있다.
빨간색 sphere를 brute의 손등쪽 손목 위치에 있도록 배치했다.(손목의 point를 따오고, copy to points로 sphere를 포인트에 붙였다.)
우리가 현재 하고 싶은 것은, brute의 손목 위치에 있는 저 빨간 sphere가 움직이는 brute의 손목에도 트랙킹 되어서 따라가듯이 sphere의 위치를 바꾸고 싶은 것이다.
이번에는 scatter로 점을 뿌려보자.
머리 위에 angel ring을 달아보자.
두번째 인풋의 포즈를 기준으로 첫번째 인풋의 상대적 위치를 잡아주고, 두번째 인풋과 세번째 인풋의 내용으로 첫번째 인풋의 위치가 변화한다.
point deform을 알아보는 이유
- 정지 상태에서 만든 효과를 움직이는 상태에 덮어씌우고 싶어서
- 애니메이션의 움직임을 쫓아가되, 포인트의 위치규칙은 깨지지 않기를 바라기 때문
T 포즈를 복사해서 노이즈를 추가해준다.
(SDF VDB를 만들어주고, 다시 polygon으로 변환해준다.)
이 정보를 point deform 노드의 첫번째 인풋으로 넣어준다.
도끼의 끝, 오른쪽 가슴, 왼쪽 하박쪽의 하얀 부분을 잘 보자.
움직이는 상태로 덮어씌워도 노이즈 패턴의 깨짐이 발생하지 않는다.(패턴이 그대로 유지된다)
노이즈 효과는 정지상태의 T 포즈를 기준으로 만들었지만, 애니메이션이 적용된 움직이는 brute에 같은 노이즈 효과를 덮어씌워줄 수 있었다.
그냥 움직이는 상태에 노이즈 효과를 주면 되는 것이 아닌가? 할 수 있지만, 다르다.
두 결과의 노이즈 패턴이 다르다.
좌측의 point deform을 활용한 결과는 노이즈 패턴이 마치 몸에 딱 달라붙은 느낌이다.
하지만 우측의 그냥 노이즈 효과를 적용한 결과는 마치 노이즈 패턴이 허공에 뿌려진 어느 공간 안에서 캐릭터가 움직이고, 그곳의 노이즈가 몸에 투영되는 느낌이다. 캐릭터가 움직임에 따라 몸에 투영되는 노이즈 패턴이 달라진다.
두번째 이유(애니메이션의 움직임을 쫓아가되, 포인트의 위치규칙은 깨지지 않기를 바라기 때문)에 대해서도 설명이 가능하다.
point deform을 사용한 좌측 결과는 시간이 변함에 따라 point 위치규칙이 바뀌지 않고, 모양의 형태를 유지한다. 하지만 캐릭터에 노이즈를 적용한 우측 결과는 point의 위치규칙이 시간에 지남에 따라 깨지고 있다.
만약 위의 두개의 메시로 collision velocity를 구한다고 가정하자. trail을 활용해서 compute velocity를 적용하게 될 때 확연한 차이가 보인다.
trail 노드로 v를 계산해준 결과이다. 오른쪽 결과를 가지고서는 collision velocity로 사용이 불가능해보인다.
이제 본격적으로 source 준비를 해보자.
우리에게 필요한 정보
density
temperature
col(collision 정보)
colvel(collision velocity 정보)
brute 원본을 가지고 collision velocity를 구하려고 하면, 고르지 않은 정보를 얻게 된다. 그 이유로는 현재 얼굴같은 부분은 포인트가 몰려있지만, body 나 pants 쪽은 상대적으로 적은 포인트를 가지고 있기 때문이다. 이 부분을 해소하기 위해서 point deform을 활용한다. 그리고 remesh를 사용해서 면을 재정비해줄 것이다.
원본 brute에 scatter로 점을 뿌려줄 경우, 아래와 같이 허리띠 쪽이 끊어져있는 것처럼 보이게 된다. 또한 몸통 / 바지 / 부츠의 포인트 분포가 다른 것도 확인할 수 있다. 그 이유로는 원본의 면들이 하나로 이어져있지 않기 때문이다.
SDF VDB를 만들어주고 Convert VDB로 Polygon으로 전환해준 뒤, remesh로 면을 고르게 분포시키면, 그 결과에 scatter로 점을 뿌렸을 경우, 전반적으로 점이 고르게 분포되는 것을 확인할 수 있다.
T 포즈로 vdb from polygons - convert vdb(polygon) - remesh 노드 콤보를 적용한 결과를 point deform 노드의 첫번째 인풋에 넣고, 애니메이션 brute에 덮어씌운다.
가랑이 사이가 너무 가까운 관계로 붙거나 늘어나는 것 처럼 보이게 되었다. 두번째 인풋으로 들어갈 다른 기준 포즈가 필요하다.
brute anim 데이터를 첫번째 인풋과 두번째 인풋에 연결을 해주고, clip offset을 조절해서 최대한 이쁘게 remesh가 먹는 시점을 찾는다.
그렇게 찾아낸 포즈를 기준에 넣고, 포즈에 노이즈 효과를 추가해준 것을 point deform 노드를 이용해서 anim brute에 덮어씌운다.
필요한 경우, Agent 노드의 Clip offset에 key animation을 줘서 brute의 애니메이션 타이밍을 조절할 수 있다.
기본적인 smoke solver의 세팅을 진행한다.
연기의 증발을 위한 velocity update 세팅을 추가해준다.
temperature에 노이즈를 추가해서 어느 부분은 좀 더 뜨겁고, 어느 부분은 조금 덜 뜨거운 것들을 묘사해보자.
그리고 gas turbulence를 추가해준다.
volume visualization 노드를 사용해서 density에 대해 색을 변경해줄 수 도 있다.
도끼가 휘둘러지는 모션에 의해 속도가 발생하는 것을 더 크게 할 수 있도록 volume source의 scale 값도 조절해줄 수 있다.
바람을 추가해보자.
연기가 나오는 구간을 감싸줄 수 있는 박스를 만들고 그 박스를 reference로 활용해서 wind 라는 이름의 VDB를 만들어줬다. 바람의 방향과 약간의 노이즈를 volume VOP으로 추가해주고 이것을 dop network 안에서 새로운 volume source로 불러왔다.
이런 지속적인 바람을 원하는 것은 아니다. 수정을 해보자.
volume vop에서 마지막 단에 multiply를 추가해주고, parameter를 연결해줬다. 그리고 약간의 key animation을 적용해서 바람이 brute의 앞에서 뒤쪽으로 불다가 방향이 바뀌어서 약한 바람이 잠시 불고, 바람이 멈췄다가 다시 -z 방향으로 아주 약한 바람이 불도록 적용해줬다.
또한 초반의 뜨거운 부분의 연기를 Gas shred를 활용해서 좀 더 자잘하게 흩어줬다.
그리고 Gas Disturb를 추가해서 전체적인 형태는 유지하되 아주 약간의 흩어놓는 자연스러운 느낌을 추가했다.(Gas Disturb의 스케일은 매우 작은 수치로 적용했다)
한가지 매우매우 심각한 이야기
선생님은 작업 과정중에서 발생되는 모든 tweak들을 수업을 준비하는 과정에서 이미 해봤기 때문에 쉽게 쉽게 판단을 내리고 다음 단계로 넘어가는 것이다. 이 수많은 노드들의 작은 값들을 하나하나 미세하게 조절해가면서 이쁜 연기 shape을 얻어내는 과정, 작업자가 직접 해보면 토나오게 힘들 것이다. 이것은 버텨내고 이겨내야할 부분이다.
오해하면 안된다. 선생님은 왜 이 과정이 슥슥 하면 그럴싸한 결과들이 툭툭 나올까? 절대 아니다. 선생님도 수업을 준비하면서 좋은 결과를 위한 값, 그럴싸한 값들을 찾기 위해 애를 엄청 쓰고 보여주는 것인지라 강의를 보면서 오해할 수도 있다. 쉬운 과정 아니다. 직접 값을 다뤄봐야한다. 선생님의 가이드 없이 이런 smoke shape을 잡아나가는 것은 한두시간은 쉽게 쓰게 될 것이다. 그런데, 그런 시간들을 들이면서 값들의 뉘앙스를 스스로 터득해야 쉬워진다. 나중에 선생님이 왜 Gas Disturb노드를 불러오자마자 scale 값이 크다고 하는지, Gas Shred 노드를 불러오면서 Scale 값이 크다고 표현하는지 우리 스스로가 그 뉘앙스를 찾아야한다. Gas Dissipate에서 Evaporation Rate가 어느정도 값일 때 빠르게 smoke가 사라지는지, 혹은 어느정도 값일 때 smoke가 어느 정도가 남아있는지 느끼는 것들, 스스로가 찾아내야한다. 선생님이 말하는 값을 외우는 것은 의미가 없다.
볼륨 정보를 저장할 캐시를 만들자.
- 해상도 0.02 버젼1과 0.01 버젼2를 구비해두자.
v02를 뽑는 중에 컴퓨터 용량 부족으로 몇번 터졌다...
하... 이젠 컴퓨터 사양이 아니라 하드 용량으로도 속을 태우는구나 ㅠㅠ
선생님이 하신 말이 너무 와닿는다. 직접 해봐야한다고, 토나올 정도의 그 과정 버티고 이겨내야한다고..
컴퓨터 사양이 좀 그래서 시간이 걸린다는 핑계로 트윜에 진심을 다하지 않은것은 아닌가 고민하게 되는 이 밤이다.
'Houdini > Houdini1_Volumes' 카테고리의 다른 글
11_part2. 캐릭터 움직임에 따른 전기 효과 (0) | 2023.03.08 |
---|---|
11_part1. 전기 만들기 (0) | 2023.03.07 |
09_충돌 세팅 2가지, VDB FROM PARTICLES(숙제는 진행중) (0) | 2023.03.02 |
08_연기 모양에 영향을 미치는 것들, POP ADVECT BY VOLUME 적용 (0) | 2023.03.01 |
07_SMOKE SOLVER 기본기 (0) | 2023.02.27 |