오늘은 자동차 충돌에서 모래와 먼지를 추가적으로 만들어봤습니다.
모래와 먼지는 파티클과 볼륨을 추가한 내용입니다.
가장 중요한것은 어디서 파티클과 볼륨이 발생할지에대한 부분입니다.
추가하기에 앞서 조각들이 너무 멀리 날아가지 않도록 세팅을 잡아보았습니다.
멀리 날아가는 정도에 limit을 걸어주는것입니다.
왼쪽처럼 limit을 주지않아 멀리 날아간다면 이질감이 들것입니다.
frac쪽에 sopsolver세팅을 넣어주는데 sopnet에서 아무런 변화도 주지 않았습니다.
이 때 새로운 노드인 popspeedlimit을 달아주면 제한이 생기게 됩니다.
우리가 각 조각을 pack해줬기 때문에 파티클스러운 면모를 가지고 있어서 popspeedlimit노드를 사용할 수 있습니다.
max speed와 max spin을 설정해서 최대 속도와 회전값을 정해줄 수 있습니다. 둘다 6.5정도로 설정하고 각각 cash를 구워줬습니다.
저는 차가 두대여서 캐시를 따로 더 구워줬습니다.
frac도 proxy도 따로 구워서 새로운 후디니파일에 가져와봤습니다.
이 노드는 필요하다고 판단되는곳에 파티클 소스를 만들어주는 편리한 친구인데 이친구를 사용 안했습니다.
이친구를 사용하면 시뮬레이션을 맞춰줘야해서 제약이 걸리고
사용하지 않고 만들었을 때 얻어갈 수 있는 아이디어가 있습니다.
그리고 이친구 없이 만드는과정이 어렵지 않습니다.
모래부터 만들어볼것인데 모래가 생성될곳은 아래사진처럼 부서진 단면에서 만들어질것이고
모든 단면이 아닌 충돌이 일어난 곳에서 나올것입니다.
단면만 가져오기위해서 aout을 떼어냈습니다.
그리고 충돌이 발생했음을 기록해주기 위해서 전프레임과 v, 속도를 비교할 수 있게 세팅했습니다.
아래는 twa님이 그림을 그려서 설명해주셨습니다.
파란색 화살표는 매프레임 진행 방향 v 방향이고
분홍색은 힘의 작용입니다. 계속해서 분홍색 화살표가 아래를 향하는 이유는 중력이 작용하기 때문이고 위로 크게 나온 화살표는 어떤 작용으로인해 힘의 방향이 바뀌는 순간입니다.
힘의 방향이 바뀌는것을 잡아낸다면 충돌 순간을 기록할 수 있을것입니다.
식을 써본다면 전프레임에서 현프레임의 vel값을 빼주고 그 길이를 length 값으로 구해줍니다.
만약 limit보다 이 length가 크다면 이것은 충돌이고 빨간색을 부여할것입니다.
전프레임에서 trail로 가져온 v값과 현프레임의 v값을 계산해주고 @acc에 저장해서 조건문에 활용했습니다.
이 때 우리는 prim에 색을 부여해줄것이기 때문에 v값을 prim으로 옮겨주고 atw의 runover를 prim으로 해주었습니다.
충돌할때 빨간색으로 바뀌는것을 확인할 수 있습니다.
이 부분은 limit값을 통해서 그 정도를 조절해줄 수 있습니다.
그리고 오랜만에 solver를 썼는데
시간이 지날수록 빨간색 영역이 적어질 수 있도록 update해주었습니다.
그리고 Cd값만 업데이트 되고 있어서 Cd값을 1번인풋 원본에 받아줬습니다.
그리고 f@density값을 @Cd.x로 받아주면 빨간색인 부분을 소스로 받아줄 수 있을것입니다.
그리고 다시 v값을 point정보로 옮겨주고 빨간면에 scatter로 점을 뿌려서 소스로 만들었습니다.
Force Toatal count가 아닌 density attrib을 사용해서 그 정도를 정해줄 수 있습니다.
그리고 오랜만에 파티클 시스템을 잡아줬습니다.
bounce와 friction값 등 트윅을 해서 모래느낌을 살려주었습니다.
근데 현재는 어떠한 충돌조건 없이 파티클이 뿌려지고 있습니다.
frac과 충돌조건을 staticobject로 만들어주었습니다.
convexhull이기 때문에 아래와같은 결과를 볼 수 있습니다.
효율이 가장 안좋은 Concave를 사용했습니다.
볼륨으로 바꿔줄수도 있는데 볼륨으로 바꿔주는 작업이 더 오래걸리고 애초에 콘크리트의 충돌자체를 캐쉬로 구워왔기 때문에 이 방법을 사용해서 충돌조건을 만들어줄 수 있습니다.
그리고 저는 충돌이 47프레임에 시작되기 때문에 start frame을 46프레임으로 설정했습니다.
이번에는 멀리 떨어진 조각에서 너무 많은 모래가 생성돼서 이 부분을 수정해보았습니다.
density정보를 활용해서 거리에따라 줄어들도록 만들었습니다.
점으로 벽의 위치로 기준을 잡아주고
현재 P에서 점위치를 빼줄것입니다.
@density값을 collen으로 나눠준다면 거리가 멀면 멀수록 더 작아질것이고 collen을 제곱으로 사용하고 뒤의 숫자를 붙여주면 가까운거리에서만 크게 모래가 생성되고 멀어졌을때 매우 적은 모래가 만들어질것입니다.
이 부분에 의해서 scatter값을 다시 조절해줄 필요가 있습니다.
나중에 캐시를 다 구워서 쉽게 줄여줄 수 있기 때문에 많은 양을 만들어두면 좋습니다.
그리고 날아가는 속도에 atrib rand를 줘서 약간 랜덤값을 줬습니다.
다음은 볼륨을 만드는데 불필요한 계산을 빼주기 위해서 캐시를 구워줬습니다.
첫번째 redarea를 구해주는 solver와
최종파티클 결과를 캐시구워줬습니다.
그리고 볼륨작업을 위해서 필요한 부분만 복사해왔습니다.
연기는 면 밖에서 날수도 있으니 aout을 blast해준것을 지웠습니다.
그리고 다시 이름을 바꿔서 캐시를 바로 구워줬습니다.
그리고 볼륨을 만들어줄것인데 scatter를 기준으로 vdb from particle노드를 활용해서 만들었습니다.
이 부분은 voxel size * point radius scale을 해줘서 조절할 수 있습니다.
표면을 기준으로 얇은 막을 만들어줄 수 있습니다.
그리고 속도정보를 받아와서 geo를 지워주고 vector필드정보를 만들어줬습니다.
그리고 파티클에 의해서도 볼륨이 영향을 받도록 세팅을 잡아줬습니다.
자동차의 영향도 받으면 좋을거같아서 추가해봤는데 너무 오래걸려서 뺐습니다.
그리고 dopnet세팅을 잡아줬습니다. 우리가 사용할 바운딩박스의 크기를 조절하기위해 밖에서 box를 만들어서 smoke object에 넣어줬습니다.
각각 density, temp, vel 필드에 정보를 넣어줬습니다.
그 뒤로는 source scale의 키를줘서 트윅하는 과정입니다.
velmult의 값에 키를줘서 처음에는 밀리다가 0을지나 -1값으로 갔다가 다시 0으로 오도록 해보았습니다.
볼륨을 dopimportfield로 가져와서 VV를 적용해주고
high결과를 가져와서 합쳐보았습니다.
볼륨의 해상도를 낮춰서 비교해봤습니다.
확실히 트윅을하면서 캐시도 굽고 하다보니까 시간이 많이 걸리는거 같습니다.
씬을 가볍게 만드는것도 중요하고 트윅을 할 때 해상도 낮은결과를 보면서 높은결과를 예상하는것도 연습이 필요할듯 합니다.
숙제로 브루트가 기둥세개를 부시는게 있는데 이 부분은 오늘 해보고 내일 업데이트 해보도록 하겠습니다.
오늘도 좋은 강의와 아이디어 제공해주시는 TWA에 감사드리며 내일 공부일기로 찾아 뵙겠습니다:D
https://www.twahoudini.com/start
'HOUDINI1_RIGIDBODY' 카테고리의 다른 글
Houdini1_RigidBody_18_part09 (0) | 2023.05.04 |
---|---|
Houdini1_RigidBody_18_part08 (0) | 2023.05.03 |
Houdini1_RigidBody_18_part06 (0) | 2023.04.27 |
Houdini1_RigidBody_18_part05 (1) | 2023.04.27 |
Houdini1_RigidBody_18_part04 (0) | 2023.04.25 |