[언리얼 서밋] 2022_3 카오스 물리엔진

    • 카오스 물리엔진
      • 리지드 바디 시뮬레이션 (Rigid Body Simulation)
      • 콜리전 디텍션 (Collision Detection)
      • 피직스 컨스트레인트 (Physics Constraints)
      • 비동기 쿼리 (Async Query)
    • 랙돌 (Ragdoll)
    • 비히클 (Vehicle)
    • 카오스 디스트럭션 (Destruction)
    • 카오스 클로스 (Cloth)

    언리얼 엔진 5의 카오스 피직스

    PhysX 에서 달라진 부분

    • 비동기 물리 시뮬레이션 지원 (실험 기능)
    • Double Precision 지원 (Origin Shift 미지원)
    • 낮은 프레임율에서의 안정성 개선, 길게 연결된 체인의 안정성 개선
    • PhysX 비주얼 디버거 미지원 (새로운 물리 디버깅 도구 지원 예정)

    리지드 바디의 피직스 타입

    • 기본 (Default)
      • 시뮬레이션 되지 않고 정지된 상태에서 단방향으로 상호작용
      • 무한한 질량을 가지는 벽, 바닥, 랜드스케이프
    • 키네마틱 (Kinematic)
      • 애니메이션 되어 움직이면서 단방향으로 상호작용
      • 무한한 질량을 가지고 움직이는 플랫폼, 엘리베이터
    • 다이내믹 (Dynamic)
      • 물리법칙에 따라 시뮬레이션 되고 상호작용 가능한 오브젝트
      • 액터의 디테일 설정에서 Simulate Physics를 체크

    피지컬 머터리얼의 파라미터를 조절하여 원하는 물리법칙을 만들수 있다.

    • 질량 (Mass) 단위는 kg이며 수동으로 직접 입력할 수 있다.
    • 마찰력 (Friction) 정지상태/운동상태의 마찰력을 따로 설정할 수 있다. 두 물체 사이의 마찰력은 평균값으로 사용이 된다.
    • 복원력 (탄성계수) 물체가 충돌 했을 때 어느정도 에너지가 유지되는지를 나타낸다.
    • 댐핑 (Damping) 운동 에너지를 스스로 잃어버려서 정지하는 정도를 나타낸다. 선형운동과 회전 운동에 대한 댐핑을 따로 설정 가능
    • 관성 텐서 (Inertia Tensor) 외부 힘에 의해 발생되는 회전 운동에 대한 저항값, 질량과 부피가 클수록 관성 텐서도 커진다. 관성 텐서가 클수록 움직임이 더 무거워 보이게 된다.

    콜리전 디텍션 (Collision Detection)

    • Broad Phase
      • BVH (Bounding Volume Hierarchy)를 활용해서 AABB트리를 빠르게 탐색
      • 넓은 물리 월드에 분산된 오브젝트 처리에 유리
    • Narrow Phase
      • Broad Phase 를 통과한 오브젝트를 대상으로 최단거리 계산
      • 성능 비용이 큰 단계이므로 최적화에 주의
        • 단순화된 콜리전 사용
        • 많은 다이내믹 바디가 같은 시뮬레이션 아일랜드로 그룹화 되지 않도록
      • 컨벡스 콜리전 연산
        • GJK(Gilbert-Johnson-Keerthi) + EPA(Expanding Polytope Algorithm) 활용
        • 정점 개수에 비례한 성능, 복잡한 형태를 빠르게 계산 가능

    충돌 메시 설정 (Collision Mesh)

    • 심플 콜리전(Simple Collision)메시 설정
      • 스피어(Sphere)
      • 캡슐 (Capsule)
      • 테이퍼드 캡슐 (Tapered Capsule for Cloth)
      • 컨벡스 (Convex)
      • 박스 (Box)
    • Tri Mesh, HeightField, SDF 지원

    콜리전 필터링 (Collision Filtering)

    미리 지정된 콜리전 채널에 대해서만 컬리전 디텍션이 되도록 할수 있다. 자주 사용되는 물리타입들에 대해서는 콜리전 프리셋이란 이름으로 미리 필터링 정보가 세팅되어있다. 커스텀 콜리전 프리셋을 통해서 최대 18개까지 추가하여 사용할 수 있다.

    피직스 컨스트레인트 (Physics Constraints)

    운동의 자유도에서 일부를 제약하는 기능. 체인이나 랙돌에 주로 사용된다.

    • 랙돌 바디 설정 팁
      • 바디 개수 최소화
      • 심플 콜리전 메시만 사용
        • 스피어, 캡슐, 컨벡스, 박스
      • 바디와 바디 사이에 겹쳐진 영역이 있도록 크기 및 위치 조절
      • Root 에서 Leaf로 줄어들도록 질량 배분

    랙돌이 이상하게 튀는 현상을 오버 리액션이라고 한다. (에픽에서 말한거니 정식 명칭이겠지)

    리지드 바디 애님 노드 (Rigid BOdy Anim Node)

    독립적인 물리 월드에서 시뮬레이션 되는 결과를 애니메이션 그래프에서 제어하기 위한 기능. 세컨더리 모션을 위해서 주로 활용됨

    • 컨스트레인트로는 Locked 또는 Limit로 최대한 잠그거나 제한값을 적게 사용
    • 길게 늘어지는 연출이 필요한 경우만 컨스트레인트의 Soft Limit 사용
    • 크기자 아주 작거나 가늘고 긴 콜리전 메시는 피하자
    • 질량과 관성텐서는 되도록 낮은 값으로 사용
    • 컨스트레인트로 연결된 바디들의 질량 차이가 크지 않도록 주의
    • 박스보다는 스피어 또는 캡슐을 사용하자
    • 움직임을 확인할때는 프레임 변화가 없도록 고정

    피직스 트러블 슈팅

    • Bullet Through Paper 이슈
      • 작고 빠르게 움직이는 리지드 바디와 얇은 콜리전 메시 사이에서의 콜리전 미스
    • 깊은 관통으로 인한 과민 반응
      • 질량이 큰 리지드 바디들 사이의 충돌 상황에서 가벼운 바디가 중간에 끼여있는 경우
      • 무한한 힘 또는 무한한 질량을 가진 리지드 바디에서 자주 발생
      • 좁은 공간에 끼인 상태에서 리지드 바디들의 운동은 안정화되기 어렵다
    • 길게 연결된 컨스트레인트 체인의 관절 부위에서의 떨림 현상
      • 컨스트레인트의 자유도를 너무 타이트하게 사용하면 안정화가 어려움
      • 가벼운 질량이 큰 리지드 바디가 조인트에 지속적으로 큰 힘을 가하는 경우

    캐릭터와 수풀의 상호작용

    • 물리 시뮬레이션 대신 머티리얼에서 WPO로 상호작용 구현
    • 마켓플레이스에서 Stack O Bot 에서 샘플을 확인 할수 있음

    시뮬레이션 시작시 안정화

    캐릭터가 최초로 스폰 될 때 물리 상태가 최초로 초기화가 되면서 움직임이 과하게 튀는 현상이 있다. 이럴때는 물리 시뮬레이션과 애니메이션과의 블렌딩 알파값을 사용해서 타임라인으로 천천히 반영되도록 하면 과민 반응이 발생하지 않게 된다.

    카오스 디스트럭션

    언리얼 엔진 5에서

    • PhysX 기반에서 카오스 기반으로 물리 엔진 교체
    • 성능과 안정성 개선 위주로 작업
    • 사용자 편의성 개선
    • 캐싱된 시뮬레이션을 시퀀서에서 편집하는 기능 개발 중
    • 지오메트리 컬렉션에 나나이트 적용

    카오스 비히클

    카오스에서 새롭게 구현된 기능

    • 기존 PhysX 기반의 비히클과 유사한 워크 플로
    • 바퀴의 개수에 제한없이 설정 가능
    • ControlRig를 활용한 서스펜션 움직임 연출
    • 비히클 다이내믹스를 연출하기 위한 다양한 물리 파라미터 제공

    카오스 클로스

    NvCloth 에서 카오스 클로스로 변경

    • 의상 시뮬레이션에 최적화된 새로운 CPU 기반의 Solver 구현
    • Position 기반의 솔버(Solver)사용
    • 클로스 당 지원되는 콜리전 메시 개수 제한 해제 (기존 32개)
    • 클로딩 툴 워크플로 개선
    • 질량 : 클로스를 구성하는 파티클의 질량을 입력하는 것 보다는 밀도를 사용하는 것이 권장됨
    • 에지 강성(Edge Stiffness) : 클로스의 원형이 어느정도 유지되도록 하기 위해 기본적으로 사용되어야 하는 스프링 대체로 1로 고정
    • Long Range Attachment : 빠른 속도로 이동하거나 강한 바람에 의해 클로스의 전체적인 길이가 늘어나지 않도록 방지

    끝내며

    • 랙돌의 튀는 현상이 오버리액션이라는 용어를 알수 있었다.
    • 시뮬레이션 시작시 안정화는 실제 프로젝트에서 적용하여 유용(?)했지만 아쉬웠다. (이슈가 발생하지 않도록 처리를 못하나?)
    • 카오스 클로스의 각 항목들에 대한 설명을 들을 수 있어서 좋았다.

    영상

    https://www.youtube.com/watch?v=gISPJjU3uOo

    반응형

    댓글

    Designed by JB FACTORY