Keyframe 動畫定義了值如何隨時間變化。例如,您可以指定物件在動畫開始時的位置以及接下來的移動位置,然後計算在這些關鍵幀之間任意時刻的位置信息。這對於檢查運動曲線、驗證動畫時序以及匯出取樣值以進一步分析非常有用。Aspose.3D for Python via .NET 允許您在不渲染 3D 場景的情況下,於指定的時間戳對關鍵幀序列進行取樣。在本教程中,您將建立一個簡單的位置動畫,每半秒評估一次其插值值,並將結果保存為 CSV 檔案。
安裝 Aspose.3D for Python
使用 pip 安裝 Aspose.3D for Python via .NET 版本 26.10:
pip install aspose-3d==26.10.0
此範例僅使用 aspose.threed.animation 模組以及 Python 內建的 csv 模組。您不需要 GLB/GLTF 檔案或相容 Vulkan 的顯示卡,因為此程式碼執行的是動畫計算,而非圖像渲染。
有關平台和安裝資訊,請參閱 Aspose.3D for Python 文件。
在 Python 中建立和評估關鍵幀動畫
此範例模擬物件的 X 位置。位置從 0 開始,兩秒後達到 10 單位,五秒後返回 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 告訴序列在關鍵幀之間按比例計算中間值。結果,該值在前兩秒內從 0 穩步增至 10,然後在接下來的三秒內從 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 許可指南以將許可證套用到您的應用程式中。
免費學習資源
探索這些資源,以便在 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 格式。
結論
您可以在 Aspose.3D for Python via .NET 中使用 KeyframeSequence.evaluate() 來計算特定時間點的動畫值,而無需渲染模型。在此範例中,三個關鍵影格定義了 X 位置曲線,評估器計算中間位置並將其匯出為 CSV。若要調整範例,請更改關鍵影格的值或取樣間隔。對於模型層級的動畫,下一步是將動畫曲線綁定到場景屬性並套用到物件上。
