테드옹의 VFX
Guided simulation 본문
destruction 쪽을 공부하면서 가장 알고 싶은건 크게 3가지다
1. guided sim
2. constraints
3. clump or cluster
사실 저것들을 정확히 이해하고 있다면 굉장히 현실적이고 멋진 장면을 연출할 수 있겠지만
고작 학생인 나에겐 하나하나가 굉장히 까다롭다..
guided sim은 사실 큰 셋업해서 해본 적이 없어서 어떤 버그가 나올지 모르겠고
constraints는 solver를 이용하여 적당한 타이밍과 조건문을 통해 깰 수 있지만, 그게 다른 name을 가진 조각들, 다른 group을 가진 조각들끼리의 constraints라면 너무 복잡해진다. 그리고 프리뷰하는데 걸리는 시간 또한 오래 걸리고
clump는 그냥 큰 조각으로 뭉쳐놓고 평생 안깨질거라면 쉽다. 하지만 문제는 서로 충돌을 하는데 더 작은 조각으로 안쪼개질 수가 없기 때문에, 깨지고 나서 name attribute를 어떻게 관리할 것인지, debris source와 smoke source의 inside 그룹은 어떻게 관리할 것인지 등등의 문제에 봉착하게된다. 아마 name까지 정확하게 관리하려면 dynamic fracture를 통해 시뮬레이션 내부에서 깨야지 싶은데.. 최대한 우회할 방식을 찾고싶다
아무튼 디버깅을 할 수 있는 방법 혹은 좋은 아이디어가 떠오르면 나중에 적어보도록 하고, 일단은 Guided simulation에 대해서 적어볼 생각. 왜냐하면, 정말 멋진 twist같은 효과를 굳이 복잡한 세팅을 거치지 않아도 이루어낼 수 있기 때문! 실제 어벤져스 인피니티워에서 guide simulation을 사용한 장면을 보면 정말 멋졌다. 이 모든게 가능했던 이유는 바로 point deform이라는 정말 활용방식이 무궁무진한 노드덕분
특히 point deformation에 관한 내용은 행렬, 4원수 등등 테크니컬한 내용이 많이 등장한다.
컴퓨터공학쪽 백그라운드가 부족한 나와 같은 사람들은 진~~~~~짜 저런 내용이 나오면 나올수록 자신감이 뚝뚝 떨어지지만, sidefx가 너무 잘 정리를 해준 탓에 적당한 선에서만 개념정리를 해보려한다
point deform : 3개의 인풋을 받는다
첫 번째는 deform을 할 지오메트리, 두 번째는 rest상태에 있는 lattice 세 번째는 가장 중요한 Deformed point lattice이다. deform이 적용된 lattice의 모션을 캡쳐하여 첫 번째 인풋 지오메트리에 적용시킨다. (lattice에 가까울 수록 더 많은 영향을 받음)
capture모드로 실행할 시 pCaptPts라는 배열과 pCaptWeights라는 배열을 생성한다
CaptPts배열의 원소는 deformed 지오메트리의 pt number이다.
sidefx가 정한 워크플로우에 따르면 capture모드를 통해 pCaptPts배열을 구하고, name 어트리뷰트를 통해 1차적 수정을 거친 후, 그 다음에 deform을 실행한다.
시뮬레이션에 쓸 geometry를 준비한 후
deform 애니메이션이 시작되는 프레임에 timeshift를 해놓고
orient attribute를 설정해준다. 아마 point deform노드 내부에서 사용되는 듯
이후 pack을 한 다음, extract centroid노드를 이용하여 센터값을 구한 후 intrinsic pivot을 설정한다
그 후, name attrib을 point로 올린 원본 지오메트리를 2번째에, rest 원본 지오메트리를 3번째에 넣고 point deform노드를 사용한다 (capture모드)
위에 기술했던 것처럼 pCaptPts배열을
name 어트리뷰트의 일치여부를 확인한 후 배열을 업데이트를 하고, point deform을 deform모드로 진행한다
8번째 줄의 조건문은, 찾은 포인트들의 name이 너무 중복되어 인덱스가 충분하지 않으면 원소를 채워넣겠다는 의미 같은데 정확히 무슨 의도인지는 잘 모르겠다 (개발자님 각주 좀 달아주시지..ㅠㅠ)
여기까지가 sidefx에서 제시한 guide geometry만들기이다.
pCaptPts의 배열을 확인하고 해당되는 ptnum을 삭제해보면
이렇게 됨! 고스트 오브젝트가 pack된 piece이고 동그라미쳐진 부분은 캡쳐된 원본 지오메트리이다
폴리곤은 의미가 없지만, 포인트 위치값을 보면 비슷한 위치의 deformation을 캡쳐한 것을 확인할 수 있음
이 후에 rbdguidesetup노드를 이용하여 시뮬레이션에 필요한 여러가지 어트리뷰트를 설정한다
여기까지가 SOP에서 할 일이고 이제 DOP으로 이동하여
rbd_guide노드를 이용하여 시뮬레이션에 적용한다
pre-solve엔 guide를 하고, post-solve에 unguide를 적용한다.
constraints랑도 엮어보고 싶지만.. 아무튼 guide sim에서 사용되는 여러 종류의 어트리뷰트 중 몇가지를 이용하여 코드를 작성할 수도 있다
영상을 보면 unguide가 아예 되질 않아서 공중에 떠 있는 piece들, 뒤늦게 풀려서 모션이 부정확한 piece들이 있는데
이것은 충분히 unguide옵션, geo wrangle들을 통하여 해결할 수 있을 것 같다.
문제는 더 복잡한 세팅에서 작동하느냐인데.. 일단은 개념적인 내용은 여기까지
'Houdini' 카테고리의 다른 글
point cloud (0) | 2021.12.06 |
---|---|
그래픽스 이론 관련 (0) | 2021.11.27 |
그리드마켓 사용시 주의사항 (0) | 2021.11.07 |
렌더 패스를 어떻게 나눠야 할까 (0) | 2021.11.05 |
합성 툴 (0) | 2021.10.29 |