“상상력의 논리적 구현”
TWA R04에서 RBD에 필요한 정보를 알아봅니다.
https://www.twahoudini.com/course/rigidbody1
소스 설정
dopnet 내의 개체
초기 상태
육체적으로
dopnet 내에서 개체는 소스의 컨테이너입니다.
RBD BODY에서 가장 중요한 것은 충돌 조건입니다.
RBD와 총알이 있습니다.
강체에서 프록시 지오와 하이 지오를 완벽하게 대체하는 것이 중요합니다.
시뮬레이션이 안정적이고 빠르게 작동하려면 약간의 충돌 조건이 필요합니다.
세부 정보가 많은 데이터라도 좋은 결과를 얻으려면 완벽하게 인스턴스화해야 합니다.
또한 쉽게 시뮬레이션할 수 있어야 조정 횟수를 늘릴 수 있습니다.
* 빛의 데이터로 시뮬레이션을 해보고, 원하는 시뮬레이션을 찾으면 원본으로 교체해 드립니다!
1. 소스 설정
강체 시뮬레이션의 소스를 설정합니다.
강체 라이트 프록시 소스의 결과를 얻어 원하는 결과를 얻기 위해 높은 데이터로 대체하는 것이 중요합니다.
이를 염두에 두고 원본을 있는 그대로 사용하는 것과 프록시 압축 상태의 결과를 사용하는 것의 차이점을 살펴보겠습니다.
1. 상자의 위치를 변형하고 입력합니다.
2-1 상자를 잡고 변신하고 들어갑니다.
2-2 이동(변형) 상자를 잡고 입력합니다.
2-1과 2-2의 결과가 같은가요? 다를까요?
1은 보편적이다 rbd 객체사용
2-1과 2-2는 압축된 소스이므로 rbd 패킹된 객체사용
강체 솔버열거 방법 사용
* 함께 보기 쉽게.
모두 다른 결과를 보여줍니다.
목적지 위치를 저장하고 불러오는 과정에서 오류가 발생했기 때문입니다.
이것은 rbd 객체와 rbd 패킹된 객체로 프레임을 시뮬레이션하는 과정입니다.
*Houdini는 우리가 사용하는 0~360도가 아닌 Vector4 방향을 인식하고 사용합니다.
-rbd 객체
먼저 사용할 col 데이터를 패킹합니다.
이때 Pivit(회전 중심), P(위치 정보), Orient(방향)가 있습니다.
시뮬레이션은 압축된 상태에서 실행됩니다.
시뮬레이션 결과 새로운 피벗, 다음 프레임의 P 방향이 결정되면 원본을 위치가 변경된 열 데이터로 교체돌려 줘
압축하지 않고 시뮬레이션을 계속하면 소스의 모든 지점을 시뮬레이션하므로 오류로 인한 변형이 발생합니다.
시간이 지나면 원본이 손상될 수 있습니다.
-rbd 패킹된 객체
rbd 객체와 달리 패킹 과정이 없기 때문에(이미 패킹되어 있음) 오류가 발생합니다.
따라서 다른 결과가 표시됩니다.
2-1과 2-2가 다른 이유는 피벗이 다르기 때문입니다.
지오메트리 테이블 프리미티브의 내장 함수를 보면 피벗 포인트를 확인할 수 있습니다.
2-1 박스 상태로 전환되었습니다.
따라서 피벗 포인트는 (0,0,0)입니다.
그러나 2-2는 변환된 상태에서 패킷이 되므로 이동한 위치에 받침점이 있다.
따라서 (4,4,0)의 피벗입니다.
2-1은 다른 결과를 보여줍니다.
2. dopnet 내의 객체가 인식하는 소스
우리가 기억해야 할 것은 소스가 dopnet 외부에서 패키징되는 방식입니다.
방법에 따라 dop 네트워크 내에서 객체가 인식되고 솔버의 계산이 결정됩니다.
rbd 패키지 개체는 소스를 포함하는 컨테이너입니다.
dopnet 외부에는 세 가지 소스가 있습니다.
하나)
각 소스는 별도로 패키징되어 3개의 소스로 입력됩니다.
이 경우 rbd 압축 객체가 필요합니다.
그리고 모두가 별도로 작동합니다.
2)
각 소스는 별도로 패키징되어 하나의 소스로 입력됩니다.
각 소스를 패키징한 후 하나로 병합합니다.
그리고 소스로 사용합니다.
이 경우 rbd 패킹된 개체가 필요합니다.
그릇에 담긴 소스는 rbd 포장된 개체로 제공됩니다.
그러나 이러한 소스는 3개의 재료 팩이며 별도로 작동합니다.
삼)
세 개의 소스가 동시에 하나의 패키지로 병합됩니다.
그리고 소스로 사용합니다.
이 경우 rbd 압축 객체가 사용됩니다.
함께 묶인 세 가지 소스가 하나로 작동합니다.
2) 및 3)
rbd 패킹된 객체에서 초기 상태를 변경하면 이를 더 자세히 볼 수 있습니다.
z축에서 40도 회전시켰습니다.
2)에서 세 개체는 모두 개별적으로 패키지되어 하나의 소스로 입력됩니다.
따라서 각 팩에 40도 z축 회전이 적용됩니다.
3) 한 번에 3개의 개체로 병합되었습니다.
따라서 하나의 패킷으로 인식되어 Z축을 40도 회전시켰을 때 결과가 다르게 나타납니다.
3. 초기 상태
3-1 dopnet 내에서 결정된 초기 상태
위의 1)의 경우와 같이 rbd 패킹된 객체의 초기 상태를 사용해 봅니다.
각 품목에는 고무 장난감이 포함되어 있습니다.
그리고
고무장난감 A는 x축으로 40도 회전, 속도(0,0,5)
고무장난감 B가 z축에서 40도 회전, 속도(0,10,0)
고무장난감 C는 기본
고무장난감 A와 B는 꼬인 상태로 속도가 있다.
예상과 다른 결과를 보여줍니다.
고무장난감 B는 z축에서 40도 회전했지만 (0,10,0)의 속도로 y축에서 위로 올라갈 것으로 예상할 수 있습니다.
그러나 z축을 40도 회전시키면 축이 변경되고 해당 축 방향으로 속도가 생성되어 예상과 다른 결과가 나타납니다.
예상과 달리 개체의 초기 상태는 직관적이지 않습니다.
외부에서 변형을 이용하여 고무장난감 B를 z축으로 40도 회전시킵니다.
그리고 초기 상태의 회전을 원래 상태로 되돌립니다.
그리고 그것이 어떻게 작동하는지보십시오.
외부에서 회전 값을 주면 원하는 결과를 얻을 수 있습니다.
고무장난감 A Z축 각속도 200
고무장난감 B는 기본
고무장난감 C는 z축에서 60도, y축에서 400의 각속도로 회전합니다.
고무장난감 C는 축을 회전시키면서 비스듬히 회전한다.
*회전은 쿼터니언 방식으로 수행됩니다.
방향이 지정되면 방향에 대한 회전이 지정됩니다.
다시 배워야겠다는 생각이 들었다.
dop 메쉬 내부에 초기 상태를 설정하면 회전에 따라 축이 변경되어 회전에 영향을 미칩니다.
dopnet 외부에서 초기 상태를 설정하면 전역적으로 방향과 회전을 지정할 수 있습니다.
3-2 dopnet 외부에서 결정된 초기 상태
Attribute Wrangle로 조정할 채널 매개변수를 생성합니다.
지리적 위치 -> @P+=chv(“이동”);
속도 정보 -> v@v = chv(“vel”);
회전 속도 -> v@w = chv(“w”);
이때 dopnet 내에서 외부 정보를 받아들이려면 포인트 속도에서 속도 상속을 체크 해봐
위의 속도와 RPM을 소스의 경우 1)과 2)에 적용합니다.
1) 소스 3개씩 포장
2) 개별적으로 래핑 및 병합된 소스 1개
지난 동역학 강의에서 우리는 물체에 이름을 붙였습니다.
이름을 제공하면 dopnet 외부에서 원하는 것만 볼 수 있으며 소스를 바인딩하는 방법에 따라 원하는 개체를 볼 수 있습니다.
TWA는 물리적 탭을 다루기 전에 직접 해보라고 제안했습니다.
총 2~3개 정도입니다.
1. 공이 벽에 부딪히고 공이 튕겨 나옵니다.
2. 다수의 공과 벽이 충돌하고, 질량의 차이에 따라 다른 결과가 나타납니다.
3. 벽은 원형 도미노로 무너집니다.
하나)
값을 엉성하게 설정해야 했기 때문에 처음 시도에서 제어할 수 없었습니다.
그래서 다음 시도에서 나는 그것을 더 크게 만들기로 결정했습니다.
공의 충격을 중력 거리의 힘과 더 많은 충격으로 줄입니다.
그리고 공의 밀도는 벽의 1/5로 설정했습니다.
각도는 z축 기준으로 -40 정도이므로 원하는 선에서 벽과 충돌한 후 튕깁니다.
원하는 정도로 나왔지만 문제는 볼에 색을 입히는 것이다.
회전을 시각화하려면 예제와 같이 줄무늬에 색상을 넣어야 합니다.
나는 그것을 상상할 수 없다.
삼)
원형 경로로 도미노를 만든다고 합니다.
소스 배치에서 막힘.
쉬운 해결책은 원을 점으로 만들고 그것을 점으로 복사하는 것이라고 생각했습니다.
그러나 이 경우 간격 및 회전 문제가 발생했습니다.
따라서 Resample에서 N으로 탄젠트를 회전하고 90도 회전하여 원하는 배열을 얻을 수 있었습니다.
그런데 왜?!
겹치는 단면이 생성됩니다.
이유를 알 수 없습니다.
강의 진행 상황을 보면 긴 설명이 다음 강의로 이어질 것 같아서 내일까지 고민을 계속 해야겠습니다.
오늘 한번!
공과 벽의 충돌까지!
4. 육체적으로
입자 시스템과 마찬가지로 물리적 요소는 개체의 물리적 탭에서 조작할 수 있습니다.
상자를 만들고 포장하십시오.
구는 섹션으로 그룹화되고 색상이 지정됩니다.
그리고 팩.
dopnet 설정을 가져옵니다.
1) 충돌 상태를 확인합니다.
충돌하는 총알을 조심하십시오.
소스와 dopnet에서 감지한 물체의 모양이 다릅니다.
우리가 사용하고 있는 것은 기하학으로 대체되는 스토리 데이터를 인식합니다.
이때 볼록한 껍질을 사용하고 충돌 패딩 값 때문에 원본보다 면적이 더 넓습니다.
따라서 먼저 충돌 쿠션을 0으로 변경합니다.
그리고 convex hull 방식 대신 sphere 방식을 사용한다.
이것은 범위를 사용하여 볼록 껍질을 이해하는 과정에서 본 것입니다.
*충돌을 생각했을 뿐인데, 좋은 시뮬레이션을 실행하기 위해서는 충돌 조건을 자세히 살펴봐야 합니다.
2) 초기 상태
소스 초기 설정.
점에 압축 상태를 추가하는 점에 복사를 사용하십시오.
그리고 wrangle 속성을 이용하여 초기 상태와 물리적 값을 복사할 지점으로 설정합니다.
* 즉시 패킹된 객체에 값을 부여하지 않고 copy to point를 사용하는 것은 그것을 두 번 교체하여 더 가볍게 만들려는 시도입니까?
위치 정보, 속도 및 각속도는 Wrangle 속성으로 설정됩니다.
@P += chv(“이동”);
v@v=chv(“벨”);
v@w=chv(“w”);
회전할 때 움직이도록 각속도를 조정해 보십시오.
회전 방향에 따라 충격 후 이동 방향이 다릅니다.
3) 신체적
상자의 밀도를 조정합니다.
f@density = chf(“밀도”);
공의 마찰력을 조정하십시오.
f@friction = chf(“마찰”);
마찰이 없기 때문에 끝까지 뒤로 미끄러지는 것을 볼 수 있습니다.
If v@w (-5,0,0)마찰계수가 0일 때
문워크처럼 뒤로 흐르다가 앞으로 돌고 있는 것을 볼 수 있다.
마찰 계수가 0.5일 때
자연스럽게 굴러가는 모습을 볼 수 있습니다.
공이 더 빨리 회전하면 마찰로 인해 공이 위로 튀어오를 수 있습니다.
나가는 바운스를 조정합시다.
f@bounce = chf(“바운스”);