Qt 3D Animation C++ Classes

Qt 3D 애니메이션 모듈은 Qt 3D 을 시작하는 데 도움이 되는 미리 빌드된 요소 세트를 제공합니다. 더 보기...

이 모듈은 6.8부터 더 이상 사용되지 않습니다. 새 코드에 사용하지 않는 것이 좋습니다.

네임스페이스

Qt3DAnimation

Qt3DAnimation 모듈의 클래스를 포함합니다.

클래스

Qt3DAnimation::QAbstractAnimation

Qt3D 애니메이션을 위한 추상 베이스 클래스

Qt3DAnimation::QAbstractAnimationClip

키 프레임 애니메이션 데이터를 제공하는 타입의 베이스 클래스

Qt3DAnimation::QAbstractClipAnimator

애니메이션 재생 기능을 제공하는 형의 베이스 클래스

Qt3DAnimation::QAbstractClipBlendNode

애니메이션 블렌드 트리를 구성하는 데 사용되는 타입의 베이스 클래스

Qt3DAnimation::QAdditiveClipBlend

가산 계수를 기반으로 두 애니메이션 클립의 가산 블렌드를 수행합니다.

Qt3DAnimation::QAnimationAspect

다음에 키 프레임 애니메이션 기능을 제공합니다. Qt 3D

Qt3DAnimation::QAnimationCallback

애니메이션 콜백 객체를 나타냅니다.

Qt3DAnimation::QAnimationClip

키 프레임 애니메이션 데이터를 지정합니다.

Qt3DAnimation::QAnimationClipData

애니메이션 데이터를 포함하는 클래스

Qt3DAnimation::QAnimationClipLoader

파일에서 키 프레임 애니메이션 데이터를 로드할 수 있습니다.

Qt3DAnimation::QAnimationController

애니메이션을 위한 컨트롤러 클래스

Qt3DAnimation::QAnimationGroup

애니메이션을 함께 그룹화하는 클래스

Qt3DAnimation::QBlendedClipAnimator

블렌드 노드 트리의 애니메이션 재생 기능을 제공하는 컴포넌트

Qt3DAnimation::QCallbackMapping

클립 내의 채널을 콜백 객체의 호출에 매핑할 수 있습니다.

Qt3DAnimation::QChannel

QAnimationClipData의 채널을 정의합니다. 애니메이션 시스템은 각 채널 컴포넌트를 독립적으로 보간하지만, Q채널이 "회전"(대소문자 구분)으로 호출되고 각 Q채널 컴포넌트에 대해 동일한 수의 키프레임을 갖는 경우를 제외하고는 각 채널 컴포넌트를 독립적으로 보간합니다(예: 4개의 QChannelComponent). 이 경우 보간은 SLERP를 사용하여 수행됩니다.

Qt3DAnimation::QChannelMapper

클립 내의 채널을 애플리케이션의 오브젝트 프로퍼티에 매핑할 수 있습니다.

Qt3DAnimation::QChannelMapping

클립 내의 채널을 애플리케이션의 오브젝트 속성에 매핑할 수 있습니다.

Qt3DAnimation::QClipAnimator

간단한 애니메이션 재생 기능을 제공하는 컴포넌트

Qt3DAnimation::QClipBlendValue

블렌드 트리에 클립을 포함시키는 데 사용되는 클래스

Qt3DAnimation::QKeyFrame

키프레임 처리를 위한 베이스 클래스

Qt3DAnimation::QKeyframeAnimation

간단한 키프레임 애니메이션을 QTransform에 구현하는 클래스

Qt3DAnimation::QLerpClipBlend

정규화된 계수를 기반으로 두 애니메이션 클립의 선형 보간을 수행합니다.

Qt3DAnimation::QMorphTarget

블렌드 셰이프 애니메이션에 모프 타깃을 제공하는 클래스

Qt3DAnimation::QMorphingAnimation

블렌드 셰이프 모핑 애니메이션을 구현하는 클래스

Qt3DAnimation::QVertexBlendAnimation

버텍스 블렌드 모핑 애니메이션을 구현하는 클래스입니다.

상세 설명

이 모듈은 아직 개발 중이지만 기술 프리뷰로 제공됩니다. 즉, 불안정하고 변경될 가능성이 있으며 편의상 제공되는 것입니다.

#include <Qt3DAnimation>

해당 C++ 라이브러리에 연결하려면 qmake 프로젝트 파일에 다음을 추가하세요:

QT += 3danimation

클래스, 유형 및 함수는 Qt3DAnimation 네임스페이스에서 선언됩니다.

개요

Qt 3D 애니메이션 모듈은 시뮬레이션의 오브젝트 프로퍼티에 적용할 수 있는 애니메이션을 지정하고 사용하기 위한 지원을 추가합니다. 처음에 이 모듈은 키 프레임 기반 애니메이션을 지원합니다. 즉, 프로퍼티에는 특정 시간에 '키'가 지정된 값이 있으며 재생 시 키 프레임 내에서 알려진 값 사이를 보간하여 프로퍼티 값을 계산합니다. Qt 3D 애니메이션 모듈 내의 모든 애니메이션 평가는 Qt 3D 스레드풀에서 이루어집니다. 이를 통해 애니메이션을 원활하게 실행하고 높은 처리량까지 확장할 수 있습니다.

애니메이션 데이터

키 프레임 애니메이션 데이터는 Qt3DAnimation::QKeyFrameData와 같은 Qt 3D 애니메이션 API를 통해 프로그래밍 방식으로 생성하거나 Blender, Maya 또는 3D Studio Max와 같은 디지털 콘텐츠 제작(DCC) 도구에서 가져올 수 있습니다. Qt 3D 에서 Blender용 애니메이션 데이터 내보내기 스크립트 예시를 제공합니다. 현재 Qt 3D 애니메이션에서 사용하는 형식은 간단한 JSON 기반 형식입니다. 따라서 개발자와 아티스트 모두 애니메이션 데이터로 쉽게 작업할 수 있습니다. 런타임 소비에 최적화된 더 많은 포맷이 추후 추가될 예정입니다.

키 프레임 애니메이션 데이터는 Qt3DAnimation::QAnimationClipLoader 클래스를 사용하여 파일에서 로드할 수 있습니다. 애니메이션 데이터를 프로그래밍 방식으로 지정하려면 Qt3DAnimation::QAnimationClip 클래스를 사용합니다.

기본적으로 키 프레임 데이터는 큐빅 베지어 커브를 사용하여 지정됩니다. 이를 통해 적은 수의 키 프레임 데이터 포인트로 부드러운 애니메이션을 만들 수 있습니다. 다른 보간 유형은 나중에 추가될 예정입니다.

애니메이션 재생

키 프레임이 포함된 애니메이션 데이터 외에도 Qt 3D 애니메이션은 애니메이션을 재생하고 결과 속성 값을 시뮬레이션의 오브젝트 속성에 매핑하기 위한 API도 제공합니다. 현재 애니메이션을 재생하는 방법은 두 가지가 있습니다:

두 가지 모두 Qt3DCore::QComponent 의 서브클래스로 구현되어 있으므로 이러한 유형의 객체를 Qt3DCore::QEntity 객체로 집계하여 시뮬레이션된 엔티티에 애니메이션 기능을 추가할 수 있습니다.

간단한 애니메이션 재생

Qt3DAnimation::QClipAnimator 클래스는 한 번에 하나의 Qt3DAnimation::QAbstractAnimationClip 재생을 허용합니다. 엔티티에 애니메이션을 추가하려면 엔티티의 components 속성에 Qt3DAnimation::QClipAnimator 클래스의 인스턴스를 추가하기만 하면 됩니다.

Qt 3D 애니메이션 모듈은 QPropertyAnimationAbstractAnimation 과는 약간 다른 접근 방식을 취합니다. 이러한 애니메이션 프레임워크에서는 애니메이션이 애니메이션 값과 대상 개체 및 속성을 모두 지정합니다. Qt 3D 의 애니메이션 컴포넌트는 이 두 가지 직교 개념을 분리합니다. 예를 들어 Qt3DAnimation::QClipAnimator 컴포넌트에는 애니메이션 데이터(Qt3DAnimation::QAnimationClip 또는 Qt3DAnimation::QAnimationClipLoader)를 지정하기 위한 clip 속성이 있습니다.

이를 통해 애니메이션 값을 계산할 수 있지만 이러한 값을 객체의 속성에 매핑하려면 더 많은 정보가 필요합니다. 이는 Qt3DAnimation::QChannelMapping 객체 목록이 포함된 Qt3DAnimation::QChannelMapper 을 사용하여 수행됩니다. Qt3DAnimation::QChannelMapping 은 애니메이션 클립의 특정 채널을 대상 개체의 명명된 프로퍼티에 매핑하는 데 사용됩니다. 이렇게 애니메이션 데이터와 프로퍼티 매핑을 분리하면 애니메이션 데이터나 오브젝트의 복사본을 여러 개 보유할 필요 없이 동일한 애니메이션을 여러 오브젝트에 적용할 수 있습니다. 또한 애니메이션 데이터를 다른 오브젝트에 쉽게 리타기팅할 수 있습니다.

블렌디드 애니메이션 재생

Qt3DAnimation::QBlendedClipAnimator 컴포넌트를 사용하면 대상 프로퍼티에 프로퍼티 변경 사항을 적용하기 전에 여러 애니메이션 클립을 블렌딩하여 Qt3DAnimation::QClipAnimator 에서 가능한 것 이상을 구현할 수 있습니다. 애니메이터 컴포넌트는 여전히 표준 Qt3DAnimation::QClipAnimator 컴포넌트와 마찬가지로 채널 매퍼를 사용합니다. 하지만 단일 애니메이션 클립을 지정하는 대신 blendTree 프로퍼티가 블렌드 트리의 루트 노드를 가리키도록 설정해야 합니다.

블렌드 트리는 블렌드 트리 노드의 프로퍼티 함수로 애니메이션 클립이 집계되거나 블렌딩되는 방식을 나타내는 데이터 구조입니다. 현재 지원되는 블렌드 트리 노드 세트는 다음과 같습니다:

소스 애니메이션 클립 입력은 Qt3DAnimation::QClipBlendValue 클래스의 인스턴스를 사용하여 블렌드 트리에서 리프 노드로 지정됩니다. 이러한 애니메이션 클립은 다양한 방법으로 결합할 수 있습니다. 현재 Qt3D 애니메이션 모듈은 선형 보간(LERP) 및 가산 블렌드 연산을 제공합니다. 시간이 지남에 따라 더 많은 블렌드 노드 유형이 추가될 예정입니다. 여기에는 최소한 일반화된 LERP 노드와 이원 중심 LERP 노드가 포함될 것으로 예상됩니다.

다음 블렌드 트리를 예로 들어 보겠습니다:

Clip0----
        |
        Lerp Node----
        |           |
Clip1----           Additive Node
                    |
            Clip2----

Clip0 이 3초 길이의 걷기 애니메이션 사이클을 나타내고 Clip1 이 2초 길이의 달리기 애니메이션 사이클이라고 가정해 보겠습니다. 이는 모두 Lerp 블렌드 노드의 입력(및 종속성)입니다. Lerp 노드를 평가한 결과는 Lerp 노드의 blendFactor 속성에 따라 달라집니다. 예를 들어 이 속성은 휴머노이드 캐릭터 엔티티의 속도에 바인딩될 수 있습니다. 캐릭터의 속도가 증가함에 따라 애니메이션은 Clip0 의 걷기 애니메이션에서 Clip1 의 달리기 애니메이션으로 점차적으로 교차 페이드됩니다.

또한 Clip2 에 팔을 흔들거나 고개를 흔드는 등의 애니메이션을 추가할 수 있다고 가정해 보겠습니다. 추가되는 이 애디티브 클립의 양은 Additive 블렌드 노드의 additiveFactor 프로퍼티로 제어할 수 있습니다.

블렌드 트리를 평가할 때 정규화된 시간(또는 위상)이 사용되므로 길이가 다른 클립을 문제 없이 블렌딩할 수 있습니다. 예를 들어, 걷기 및 달리기 애니메이션 클립의 길이가 다르더라도 애니메이터가 발걸음이 같은 위상에 맞춰 정렬되도록 만든 클립이라면 보간이 잘 이루어질 수 있습니다.

이는 블렌딩된 클립의 길이가 실제로 트리에 있는 노드의 블렌드 계수의 함수라는 것을 의미합니다. 위 예시에서 Lerp 노드만 고려할 때 Lerp 노드의 블렌드 계수가 0이면 Clip0의 걷기 애니메이션만 사용되어 지속 시간이 3초가 됩니다. 블렌드 계수가 1이면 결과 지속 시간은 2초가 됩니다. 중간 블렌드 계수의 경우 지속 시간은 3초에서 2초 사이에서 선형 보간됩니다.

블렌드 트리를 직접 정의하면 입력 애니메이션 클립 모음을 결합하는 방법을 완벽하게 제어할 수 있습니다. 블렌드 트리는 블렌드 노드의 프로퍼티로 구성할 수 있습니다. 블렌드 노드의 프로퍼티 자체는 표준 프로퍼티일 뿐이므로 원하는 경우 다른 애니메이션에 의해 구동될 수 있다는 점도 참고하세요.

참조

© 2025 The Qt Company Ltd. Documentation contributions included herein are the copyrights of their respective owners. The documentation provided herein is licensed under the terms of the GNU Free Documentation License version 1.3 as published by the Free Software Foundation. Qt and respective logos are trademarks of The Qt Company Ltd. in Finland and/or other countries worldwide. All other trademarks are property of their respective owners.