키프레임 애니메이션은 값이 시간에 따라 어떻게 변하는지를 정의합니다. 예를 들어, 애니메이션 시작 시 객체가 위치해야 할 위치와 다음에 이동할 위치를 지정하고, 그 키프레임 사이의 어느 시점에서도 위치를 계산할 수 있습니다. 이는 모션 곡선을 검사하고, 애니메이션 타이밍을 확인하며, 추가 분석을 위해 샘플링된 값을 내보내는 데 유용합니다. Aspose.3D for Python via .NET은 3D 씬을 렌더링하지 않고도 지정된 타임스탬프에서 키프레임 시퀀스를 샘플링할 수 있게 해줍니다. 이 튜토리얼에서는 간단한 위치 애니메이션을 만들고, 0.5초마다 보간된 값을 평가한 뒤, 결과를 CSV 파일로 저장합니다.
설치 Aspose.3D for Python
pip를 사용하여 버전 26.10의 Aspose.3D for Python via .NET을 설치합니다:
pip install aspose-3d==26.10.0
이 예제는 aspose.threed.animation 모듈과 Python의 내장 csv 모듈만 사용합니다. 코드는 이미지 렌더링이 아니라 애니메이션 계산을 수행하므로 GLB/GLTF 파일이나 Vulkan 호환 그래픽 카드가 필요하지 않습니다.
플랫폼 및 설치 정보는 Aspose.3D for Python 문서를 참조하십시오.
Python에서 키프레임 애니메이션 생성 및 평가
예제는 객체의 X 위치를 모델링합니다. 위치는 0에서 시작하여 2초 후에 10 단위에 도달하고, 5초 후에 다시 0으로 돌아옵니다.
| 시간 (초) | X 위치 | 동작 |
|---|---|---|
| 0 | 0 | 시작 |
| 2 | 10 | 최대 위치에 도달 |
| 5 | 0 | 시작점으로 복귀 |
이 키프레임 사이의 값은 선형 보간법을 사용하여 계산됩니다. 샘플은 독립적인 숫자 애니메이션 곡선을 생성하며, 실제 씬 객체에 시퀀스를 연결하지 않습니다.
전체 Python 코드 예제
다음 스크립트는 KeyframeSequence를 생성하고, 세 개의 키프레임을 추가하며, 열한 개의 타임스탬프를 평가하고, 키프레임 값을 검증한 뒤, 결과를 keyframe_animation.csv에 내보냅니다.
import csv
from aspose.threed.animation import (
KeyframeSequence,
Interpolation
)
OUTPUT_FILE = "keyframe_animation.csv"
# Create an animation curve
sequence = KeyframeSequence("PositionX")
# Define keyframes using linear interpolation
sequence.add(0.0, 0.0, Interpolation.LINEAR)
sequence.add(2.0, 10.0, Interpolation.LINEAR)
sequence.add(5.0, 0.0, Interpolation.LINEAR)
# Display the defined keyframes
print("Keyframes:")
for key in sequence.key_frames:
print(
f"Time: {key.time:.2f}s, "
f"Value: {key.value:.2f}"
)
# Evaluate the animation every 0.5 seconds
start_time = 0.0
end_time = 5.0
step = 0.5
records = []
print("\nEvaluated animation values:")
print("---------------------------")
print("Time (s) | X Position")
sample_count = int(
round((end_time - start_time) / step)
) + 1
for i in range(sample_count):
time = float(start_time + i * step)
# Evaluate the animation at this timestamp
value = float(sequence.evaluate(time))
records.append([time, value])
print(f"{time:8.2f} | {value:10.3f}")
# Verify values at known timestamps
assert abs(sequence.evaluate(0.0) - 0.0) < 1e-5
assert abs(sequence.evaluate(2.0) - 10.0) < 1e-5
assert abs(sequence.evaluate(5.0) - 0.0) < 1e-5
# Export animation data to CSV
with open(
OUTPUT_FILE,
"w",
newline="",
encoding="utf-8"
) as file:
writer = csv.writer(file)
writer.writerow([
"Time (seconds)",
"X Position"
])
writer.writerows(records)
print(f"\nAnimation data saved to {OUTPUT_FILE}")
print("Keyframe validation passed.")
키프레임 평가가 어떻게 작동하는지 이해하기
키프레임 시퀀스 정의
KeyframeSequence 클래스는 특정 시점에 정의된 값을 가진 수치 곡선을 나타냅니다. 이 줄은 PositionX라는 시퀀스를 생성합니다:`
sequence = KeyframeSequence("PositionX")
이름은 시퀀스를 식별하는 데 도움이 됩니다. 시퀀스가 메시나 노드 속성에 자동으로 바인딩되지 않습니다. 자세한 내용은 KeyframeSequence API 참조 를 확인하십시오.
선형 보간을 사용하여 키프레임 추가
각 add() 호출은 타임스탬프, 값 및 보간 유형을 제공합니다:
sequence.add(0.0, 0.0, Interpolation.LINEAR)
sequence.add(2.0, 10.0, Interpolation.LINEAR)
sequence.add(5.0, 0.0, Interpolation.LINEAR)
Interpolation.LINEAR는 시퀀스가 키프레임 사이의 중간 값을 비례적으로 계산하도록 합니다. 그 결과, 값은 처음 2초 동안 0에서 10으로 꾸준히 증가하고 다음 3초 동안 10에서 0으로 꾸준히 감소합니다.
타임스탬프에서 값 계산하기
핵심 작업은:
value = sequence.evaluate(1.5)
이 예제에서 1.5초에 예상되는 결과는 7.5입니다. 선형 보간은 다음 공식을 따릅니다:
[ v(t) = v_0 + \frac{t - t_0}{t_1 - t_0}(v_1 - v_0) ]
여기서 t는 요청된 타임스탬프이며, t0와 t1은 주변 키프레임 시간이고, v0와 v1은 각각의 값을 나타냅니다.
첫 번째 두 키프레임 사이에서 1.5초에 평가하면 다음과 같습니다:
[ v(1.5) = 0 + \frac{1.5 - 0}{2 - 0}(10 - 0) = 7.5 ]
이 공식을 직접 구현할 필요가 없습니다. KeyframeSequence.evaluate()는 시퀀스의 보간 설정에 따라 계산을 수행합니다.
평가된 값 확인
샘플 키프레임에 대한 출력은 다음과 같습니다:
Keyframes:
Time: 0.00s, Value: 0.00
Time: 2.00s, Value: 10.00
Time: 5.00s, Value: 0.00
Evaluated animation values:
---------------------------
Time (s) | X Position
0.00 | 0.000
0.50 | 2.500
1.00 | 5.000
1.50 | 7.500
2.00 | 10.000
2.50 | 8.333
3.00 | 6.667
3.50 | 5.000
4.00 | 3.333
4.50 | 1.667
5.00 | 0.000
Animation data saved to keyframe_animation.csv
Keyframe validation passed.
assert 문은 정의된 세 개의 키프레임 타임스탬프에서 값을 확인합니다. 직접적인 부동소수점 동등성 대신 작은 허용 오차를 사용합니다.
키프레임 사이의 변화하는 값은 시퀀스가 전체 시간 범위에 걸쳐 샘플링되고 있음을 확인합니다.
키프레임 값을 CSV로 내보내기
시퀀스를 평가한 후, 스크립트는 Python의 csv 모듈을 사용하여 시간과 계산된 X 위치를 keyframe_animation.csv에 기록합니다. 파일은 다음과 같이 시작됩니다:
Time (seconds),X Position
0.0,0.0
0.5,2.5
1.0,5.0
1.5,7.5
2.0,10.0
이 CSV 파일을 스프레드시트 애플리케이션에서 열거나, 결과 모션 곡선을 플롯하거나, 분석을 위해 Python으로 다시 읽어들일 수 있습니다. 보다 세밀한 결과를 얻으려면 step을 0.5에서 더 작은 간격으로 줄이고 원하는 시간 범위를 조정하십시오.
실용적인 고려 사항
샘플은 의도된 시간 범위 내에서만 적용됩니다. 이 튜토리얼은 0초부터 5초까지의 시간을 평가합니다. 정의된 키프레임 외의 값은 키프레임 사이의 보간과는 별개인 사전 및 사후 외삽 동작에 의해 제어됩니다.
보간을 신중하게 선택하십시오. 선형 보간은 각 구간 내에서 일정한 변화를 생성합니다. 다른 보간 스타일은 다양한 움직임 특성을 만들 수 있으며 추가 키프레임 설정이 필요할 수 있습니다. 보간 모드를 변경하기 전에 애니메이션 API 참조를 참조하십시오.
애니메이션 평가와 씬 애니메이션을 구분하십시오. 코드는 숫자 곡선만 평가합니다. 씬 노드의 X 위치를 업데이트하거나 렌더링된 애니메이션을 생성하지 않습니다. 3D 객체를 이동하려면 시퀀스를 씬의 적절한 애니메이션 속성에 연결해야 합니다.
GPU 렌더링은 필요하지 않습니다. Scene.render() 호출이나 렌더링 백엔드가 사용되지 않습니다. 이는 Vulkan 호환 GPU가 없는 머신에서도 애니메이션 값을 작업하기에 샘플이 적합함을 의미합니다.
무료 임시 라이선스 받기
무료 30일 임시 라이선스를 요청하여 Aspose.3D for Python via .NET를 평가 제한 없이 사용해 보세요. 라이선스를 애플리케이션에 적용하려면 Aspose.3D licensing guide를 참고하세요.
무료 학습 자료
Python에서 3D 애니메이션 및 파일 처리 워크플로를 계속 작업하려면 다음 리소스를 살펴보세요.
- Aspose.3D for Python Developer Guide – 3D 씬을 로드하고, 생성하며, 처리하기 위한 문서.
- Aspose.3D Animation API Reference – 키프레임, 보간, 애니메이션 클립 및 속성 바인딩을 위한 클래스.
- Free Online 3D Applications – 지원되는 3D 파일 작업을 위한 브라우저 기반 도구.
- Aspose.3D Tutorials and Articles – 3D 포맷 작업을 위한 보다 실용적인 예제.
결론
KeyframeSequence.evaluate()를 Aspose.3D for Python via .NET에서 사용하여 모델을 렌더링하지 않고 특정 시간에 애니메이션 값을 계산할 수 있습니다. 이 예제에서는 세 개의 키프레임이 X-위치 곡선을 정의하고, 평가자는 중간 위치를 계산하여 CSV로 내보냅니다. 예제를 적용하려면 키프레임 값이나 샘플링 간격을 변경하십시오. 모델 수준 애니메이션의 경우 다음 단계는 애니메이션 곡선을 씬 속성에 바인딩하고 객체에 적용하는 것입니다.
