
Mixamo에서 자료를 다운로드합니다.
믹사모
www.mixamo.com
먼저 Mutant 캐릭터의 Mutant Swiping 애니메이션을 받았습니다.
두 번째는 친구 Brute 캐릭터의 Standing Melee Combo Attack Ver.1 애니메이션을 받았습니다.
두 파일을 원하는 위치로 이동합니다.
앞으로는 처음부터 준비해야 할 자료가 많다.
자주 사용하는 노드 집합인 ‘a00’도 미리 정의해 두어야 하며 충돌에 유용한 데이터를 최대한 미리 불러와 작업을 진행해야 합니다.
원하시는 다른 재료가 있으시면 미리 준비해두세요!!
돌연변이를 부르자.
File 노드를 사용하여 로드하면 크기가 상당히 커집니다. 변환 노드(0.01)를 사용하여 배율을 줄입니다.
- 단, 이 경우 애니메이션은 적용되지 않습니다.

에이전트 노드를 사용하여 로드해 보겠습니다.



오늘의 포인트 ‘이 캐릭터가 다른 오브젝트와 충돌하도록 설정하는 방법’ 오전.
볼륨을 다룰 때를 생각하십시오.
볼륨의 충돌 조건은 부호 있는 거리 필드(SDF)입니다. 따라서 고품질의 결과를 얻기 위해서는 복셀의 크기를 줄이면서 결과를 얻어야 했다.
그러나 오늘날에는 이 방법을 사용할 수 없습니다.
- 리지드바디 솔버는 기본적으로 패킹된 데이터가 필요하므로 다른 방법이 필요합니다.
지금까지의 일하는 방식과 다른 결정적인 이유는,
- 지금까지의 작품 내용을 보면 각 작품의 형태가 전혀 바뀐 경우는 없었다.
- 하지만 캐릭터가 부딪치고 싶어지는 이 작품의 경우 형태가 변형하듯 계속해서 변화한다. 이로 인해 convex hull 방식으로 작업하기는 어렵지만 concave(원본) 방식으로 작업하기에는 시간 효율성이 매우 떨어집니다.
그래서 오늘은 리지드바디에서 사용하기 좋은 캐릭터의 충돌 조건 설정을 두 가지 방법으로 공부해보도록 하겠습니다.
첫 번째 방법은 캐릭터를 많은 구체로 교체하는 것입니다.
추가로 적용되는 기법으로 포인트 디폼 노드를 사용하여 구형으로 대체된 뮤턴트 캐릭터가 애니메이션에 따라 움직이도록 할 예정입니다.
- 캐릭터를 다룰 때 특히 도움이 될 것입니다.
- 방법은 간단하지만 효율성은 상당히 만족스러울 것입니다.
필요한 노드를 확인합시다.
- VDB from Polygons: 캐릭터 데이터를 볼륨 데이터로 변경하기 위해 필요합니다.
- VDB to Spheres: 볼륨 데이터 내부를 구형으로 채웁니다.
- VDB to Spheres에서 가장 중요한 것은 Max Spheres와 Point Count 간의 균형입니다.
- 포인트 카운트: 제공된 볼륨 정보를 분석하여 내부를 구체로 채우기 위해 몇 개의 포인트를 사용하는지 (포인트 수가 많을수록 캐릭터 내부를 더 고르게 구체로 채울 수 있음)
- Max Spheres: 캐릭터 내부를 채우는 데 얼마나 많은 구체가 사용됩니까?
- 포인트 수를 늘려 분석을 아무리 강렬하게 해도 사용 가능한 구체의 수가 50개로 제한되면 내부를 채우기가 어렵습니다.
- VDB to Spheres에서 가장 중요한 것은 Max Spheres와 Point Count 간의 균형입니다.

점 변형 적용 시 주의사항
- 참고로 잡는 타이밍에 캐릭터가 너무 웅크리고 있으면 포인트 데포르메가 예쁘게 나오지 않을 수 있습니다.
- 따라서 캐릭터가 최대한 몸을 쭉 펴고 있는 표준 타이밍으로 작업을 시작하는 것이 좋다.
시간 이동 노드를 사용하여 캐릭터 애니메이션을 원하는 타이밍으로 잠급니다.

그리고 폴리곤 노드의 VDB를 사용하여 볼륨 데이터(SDF)로 변환합니다.

위의 구체는 충돌 조건으로 사용할 정보입니다.
현재 블레이드 부분과 손끝 등 충돌 조건으로 사용하기에는 허전해 보이는 부분이 많습니다.
따라서 구체로 캐릭터를 얼마나 세심하게 채우느냐가 관건입니다.

포인트 수가 높을수록 최대 구로 채우려는 구가 더 많습니다.
- 분석력을 높이기 위해 포인트 수를 상당히 늘린 후 필요한 최대 구체 수를 어느 정도 조정하십시오.


VDB 변환을 사용하여 폴리곤으로 만든 후 isovalue 값을 조정하여 몸체를 약간 늘릴 수 있습니다. 이 폴리곤을 SDF 체적 정보로 다시 구하여 구면을 채우면 기존 변이 데이터보다 약간 큰 충돌 조건 데이터를 얻을 수 있다.
이제 구체가 캐릭터의 움직임에 따라 아름답게 움직여야 합니다.
점 변형 설정을 진행해 봅시다.
첫 번째 입력은 이동할 데이터입니다.
- 위에서 만든 구형 데이터를 연결합니다.
두 번째 입력은 표준 포즈를 입력합니다.
- 타임 시프트 데이터를 연결합니다.
세 번째 입력은 애니메이션 데이터를 입력합니다.
- 압축을 푼 에이전트 데이터를 연결합니다.


점 변형 노드에는 손등 돌출 부분을 잡아주는 매개변수가 있습니다.


이제 dop net 설정을 진행하겠습니다.
구에 대해 너무 어렵게 생각하지 말고 구를 여러 조각(구의 조각)의 모음이라고 생각하세요.
각 구는 리지드바디 솔버에 넣기 위해 어셈블 노드를 사용하여 패킹됩니다.
dop net이 적용되면 애니메이션 움직임을 표시하지 않고 축소됩니다.

a_a_d 설정이 필요합니다.
- i@active : 시뮬레이션에서 접히지 않기 때문에 0으로 설정
- i@deforming: 구의 위치가 시간에 따라 계속 변하기 때문에 1로 설정

이제 돌연변이와 충돌할 개체를 만들어 보겠습니다.
우리는 아직 재료를 고려하지 않았고, 오늘의 핵심은 충돌 조건이 아름답게 작동하는지 여부이므로 단순히 voronoi fracture 노드를 사용하여 충돌할 객체를 생성합니다.

결과가 너무 과장되었습니다.
박스 하단이 움직이지 않도록 a_a_d 설정을 해주셔야 합니다.



잘 작동합니다.
이 갈등의 과잉을 어떻게 잡을 수 있을까?
일반적으로 지금까지의 충돌 조건에 대처함에 있어 충격량을 조절할 수 있는 요소는 ‘질량’이었습니다.
돌연변이의 가중치를 변경해 봅시다.

생각보다 밀도의 영향을 받지 않습니다.

질량으로 환산하여 적용하는 경우에도 마찬가지이다.
오브젝트(캐릭터)를 구로 대치하여 충돌 조건을 만드는 이 방법은 매우 간단하고 편리하지만 결정적인 약점이 있습니다.
- 포스컨트롤이 사용자가 원하는대로 되지 않을 뿐입니다.
일반적으로 충격량은 질량이나 속도를 조정하여 조정했지만 현재의 경우 제대로 작동하지 않습니다.
- 물론 날아다니는 조각의 속도나 회전에 약간의 보정을 가해 충돌이 더 약한 힘으로 가해진 것처럼 기술할 수 있지만 근본적인 해결책은 아니다.
- 충격을 발생시키는 돌연변이(캐릭터)이기 때문에 다른 오브젝트가 제어의 대상이 된다는 약간 일관성 없는 이야기입니다.
글루 제약 조건의 강도를 조정해 보겠습니다.

돌연변이가 공격하는 힘이 ‘약해진 것으로 보입니다’.
이것은 또한 충격에 반응하는 규칙을 설정할 수도 있습니다.
그런데 만약 상자에 부딪힐 물체가 뮤턴트뿐만 아니라 반대편 자동차까지 이 벽에 부딪혀야 한다면? 자동차 부품의 무게가 상당히 증가해야 했을 수도 있습니다. 접착제 구속조건의 강도 값이 그렇게 높은 것은 일반적이지 않습니다.
그리고 무게가 올라가서 벽의 강도 값을 초과하는 만큼 자동차 서스펜션의 강도도 증가해야 하고, 돌연변이 캐릭터 하나 때문에 다른 값을 조정해야 하는 일도 많다.
근본적인 문제를 해결하기 위해서는 사용자가 캐릭터의 타격 강도를 낮출 수 있어야 합니다.
또 한 가지 아쉬운 점은 실제 충돌이 일어나는 순간 팔을 휘두르는 속도가 매우 빨라 프레임 사이에 빈 공간이 많다는 점이다.
- 이는 프레임 대 프레임이 계산되지 않았을 수 있음을 의미합니다.
- 이 문제를 해결하는 가장 쉬운 방법은 하위 단계의 수를 늘리는 것입니다.


결과는 팔을 휘두르며 뜯어내는 것처럼 좀 더 예쁘지만 너무 느립니다.
시뮬레이션의 품질을 향상시키기 위해 하위 단계의 수를 늘리는 것은 정말 마지막, 마지막, 마지막 수단이어야 합니다.
- 시간의 효율성을 극단적으로 포기하는 설정 방법 중 하나입니다.
- 프레임 사이에 정보를 저장하여 슬로우 모션을 표현하려는 것이 아니라면 이 방법은 다소 비효율적입니다.
하위 단계의 수를 변경하지 않고 프레임 사이에 묘사되지 않은 팔의 영향이 충돌에 올바르게 적용되어야 하며 충돌의 강도는 다른 객체를 건드리지 않고 조정(낮추거나 증가)할 수 있습니다. 하다.
캐릭터의 충돌 조건의 두 번째 방법
지금까지의 방법은 최대한 물체와 충돌 조건을 일치시키고 시뮬레이션이 끝난 후 충돌 조건이 위치한 고화질 데이터를 대체하는 방식으로 진행되었습니다.
그러나 현재 작업의 결과 캐릭터의 움직임은 모두 설정되어 있습니다.
- 문자 충돌 생성 위치이해 상충 ~의 영향을 받지 않는다.
- 미리 정해진 움직임을 따라가는 캐릭터의 경우 충돌 조건을 캐릭터에 맞추려고 집착할 필요가 없다.
- 이미 캐릭터의 이동 결과가 정해져 있기 때문이다.
- 또한 충돌하는 조건이 dop 네트워크에 지속적으로 존재할 이유가 없습니다.

위 그림의 기존 방식에서는 i@active가 1이면 중력의 영향으로 날고 떨어질 수 있으므로 @active는 0으로 설정하고 구의 위치가 이동하므로 i@deforming을 1로 설정한다. , 그렇게 위의 캐릭터로 작업했습니다.
단점은 충격력이 예상보다 너무 강하다는 것입니다. 힘의 세기도 고정되어 있어서 임팩트 그루브의 컨트롤도 다른 물체로 교체해야 했다. 기본적으로 사용자가 원하는 것은 벽이 부서지는 정도를 제어하기 위해 구체의 특정 값을 조정하여 충격의 힘을 조정하는 것입니다.
또 다른 단점은 프레임 사이에 빈 섹션이 있다는 것입니다. 위의 그림에서와 같이 프레임 14와 15 사이의 빈 공간으로 인해 구체가 벽에 부딪히지 않고 통과한 것처럼 보일 수 있습니다.
물론 Substeps의 값을 높이면 이 부분을 잡을 수 있지만 값이 커질수록 계산 시간이 기하급수적으로 늘어납니다.
새로운 방법이 필요합니다.
(선생님이 이 방법을 가짜 충돌이라고 하셨어요.)
- 가짜 충돌의 이유는 이 충돌 조건이 dop 네트워크에만 존재하고 실제 출력에 전혀 영향을 미치지 않는 데이터이기 때문입니다.
핵심은 ‘소싱’입니다.
먼저 i@active가 1로 설정된 시뮬레이션의 시작 프레임인 프레임 11에 구가 나타납니다. 그런 다음 시뮬레이션의 영향을 받아 떨어집니다. 대신 프레임 11에 나타난 구체가 프레임 12에 있어야 할 곳에 던져집니다.
(나타나고 한 번만 날아가고 사라지는) 이 루틴을 반복해
이 방법의 장점은 i@active가 1이기 때문에 질량이나 속도를 제어하여 충격의 강도를 제어할 수 있다는 것입니다.
돌연변이와 함께 일합시다.
충돌 조건이 필요하므로 캐릭터의 일부를 구로 채우겠습니다.

지금 필요한 것은 구가 아니라 점의 위치와 구가 배치된 위치만 있으면 됩니다.
구체는 dop 네트워크에서 소싱할 때 포인트에 복사로 붙여넣기만 하면 됩니다.
추가 노드로 기본 정보가 날아갔습니다.

점에 복사를 사용하여 이 점에 구체를 첨부하면?

우리가 원하는 결과를 얻지 못했습니다.
위의 구의 크기를 조절할 수 있는 속성으로 @pscale이 있는데 VDB to Spheres의 Parameter 항목에서 확인할 수 있다.


구가 @pscale에 의해 다른 크기로 조정된 것을 볼 수 있지만 구가 예상보다 너무 작습니다.
우리가 예상했던 것보다 작은 절반 크기.
이것이 의미하는 바는 VDB to Spheres 노드로 생성된 구의 반경이 점에 대한 사본에 부착될 구의 직경으로 사용된다는 것입니다. 즉, VDB의 내용을 Sphere로 복원하여 포인트로 복사하려면 @pscale을 두 배로 해야 합니다.


지금은 포인트만 남겨두자.
그리고 각 포인트에 대해 i@fid를 남겨둡니다.
그리고 타임 쉬프트를 이용하여 각 프레임 31~33에서 손의 위치에 대한 포인트의 위치를 확인해보자.

속도를 구하는 방법은 목표 위치에서 내 위치를 빼서 벡터를 구하는 것이고, 여기서 구한 방향과 dir에 약간의 효과를 주어 v로 쓸 수 있다.
현재 이 구간은 팔이 가장 빠르게 휘두르는 구간이라 가운데 빈 부분이 있다. 그 빈 공간에 루트를 만들겠습니다.
포물선을 그리면서 경로 정보를 남기는 작업을 해보자.

Trail을 사용하여 궤적을 만들어 봅시다.


이 작업(위의 정보를 흔적으로 얻는 작업)을 하게 된 이유는 ‘충격에 이은 후속작을 만들고 싶기 때문’이다.
이동이 매우 빠른 구간에서는 추가로 생성되어 트레일에 던져지는 구체의 충격으로 인해 dop 네트워크의 하위 단계가 프레임 간 정보를 획득하는 것처럼 추가적인 충돌이 발생할 수 있습니다.
이후에 생성된 구체는 움직임을 유도하기 위해 팔에 대해 생성된 구체만큼 강할 필요가 없습니다.
트레일에 부착된 구체가 dop 네트워크에서 날아가는 방향을 어떻게 알 수 있습니까?
- 트레일의 각 지점이 어느 방향으로 향하고 있는지 알아야 합니다.
그것은 쉽게 사용할 수 있습니다.
- 폴리 프레임 노드를 사용하여 탄젠트 U를 찾습니다.
- 또는 리샘플 노드를 사용할 수도 있습니다.



다음 구체는 크기가 너무 균일합니다.
@pscale을 약간 변경하고 싶습니다.
선을 기준으로 봤을 때 앞팔에 위치한 부분을 1로 하고 멀어질수록 0에 가까워지게 하여 0과 1 사이의 값으로 표현할 수 있게 하고 싶다면 curveu를 이용하시면 됩니다. .

구체가 dop 네트워크 내부로 들어가기로 결정한 후 정렬하고 dop 네트워크에 sop을 설정합니다.


구가 생성되는 즉시 수명을 추가하여 수명을 연장합니다.

그리고 라이프 카운트가 1을 초과하면 삭제되도록 설정합니다.

이제 스윙 암의 밀도를 조정하여 충격량을 제어해 보겠습니다.
위에서 만든 시스템과 결정적인 차이점은 무엇입니까?
위에서 접착제 제약 조건의 강도를 조정하여 충격량을 줄이는 것으로 설명했습니다.
이제 충격량을 제어하기 위해 충돌을 일으키는 팔에 대해 힘의 강도(질량, 속도 등)를 직접 제어합니다.
충격의 기준이 무너져야 할 벽이 되면 트윅이 복잡해진다.
조각의 흩어짐도 눈여겨볼 부분입니다.
예전처럼 제어할 수 없는 조각을 흩뿌리는 것은 좋지 않습니다.
지금의 경우처럼 작은 힘으로 덜 부러지고, 큰 힘으로 더 많이 부러지는 것이 맞다.
브루트가 일하고 있다!!!