이 페이지에서

Qt 3D Animation C++ Classes

Qt 3D 애니메이션 모듈은 Qt 3D 사용을 시작하는 데 도움이 되는 미리 구축된 요소 모음을 제공합니다. 더 보기...

이 모듈은 6.8 버전부터 더 이상 사용되지 않습니다. 새로운 코드에서는 이 모듈을 사용하지 않는 것을 강력히 권장합니다.

네임스페이스

클래스

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에 대한 채널을 정의합니다. 애니메이션 시스템은 각 채널 구성 요소를 독립적으로 보간하지만, QChannel이 "Rotation"(대소문자 구분)인 경우는 예외입니다. 이 경우 4개의 QChannelComponent가 있으며, 각 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 ` 클래스를 사용하십시오.

기본적으로 키 프레임 데이터는 3차 베지어 곡선을 사용하여 지정됩니다. 이를 통해 소수의 키 프레임 데이터 포인트로도 부드러운 애니메이션을 생성할 수 있습니다. 다른 보간 유형은 추후 추가될 예정입니다.

애니메이션 재생

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

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

간단한 애니메이션 재생

Qt3DAnimation::QClipAnimator 클래스를 사용하면 한 번에 하나의 Qt3DAnimation::QAbstractAnimationClip 만 재생할 수 있습니다. 엔티티에 애니메이션을 추가하려면, 해당 엔티티의 components 속성에 Qt3DAnimation::QClipAnimator 클래스의 인스턴스를 추가하기만 하면 됩니다.

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

이를 통해 애니메이션 값을 계산할 수 있지만, 이러한 값을 객체의 속성에 매핑하기 위해서는 추가 정보가 필요합니다. 이는 Qt3DAnimation::QChannelMapping 객체 목록을 포함하는 Qt3DAnimation::QChannelMapper 를 통해 수행됩니다. Qt3DAnimation::QChannelMapping 는 애니메이션 클립의 특정 채널을 대상 객체의 명명된 속성에 매핑하는 데 사용됩니다. 이와 같이 애니메이션 데이터와 속성 매핑을 분리함으로써, 애니메이션 데이터나 객체의 복사본을 여러 개 만들 필요 없이 동일한 애니메이션을 여러 객체에 적용할 수 있습니다. 또한 애니메이션 데이터를 다른 객체로 쉽게 재지정할 수 있습니다.

블렌딩된 애니메이션 재생

Qt3DAnimation::QBlendedClipAnimator 컴포넌트는 대상 속성에 속성 변경 사항을 적용하기 전에 여러 애니메이션 클립을 혼합함으로써, Qt3DAnimation::QClipAnimator 로 가능한 범위를 뛰어넘는 기능을 제공합니다. 이 animator 컴포넌트는 표준 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초 사이에서 선형 보간됩니다.

사용자 정의 블렌드 트리를 정의하면, 입력 애니메이션 클립 모음을 결합하는 방식을 완전히 제어할 수 있습니다. 블렌드 트리는 블렌드 노드의 속성을 통해 구성할 수 있습니다. 또한 블렌드 노드 자체의 속성은 표준 속성이므로, 원하는 경우 다른 애니메이션에 의해 제어될 수도 있습니다.

참고

© 2026 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.