Hoạt ảnh keyframe xác định cách một giá trị thay đổi theo thời gian. Ví dụ, bạn có thể chỉ định vị trí của một đối tượng ở đầu một hoạt ảnh và vị trí nó sẽ di chuyển tiếp theo, sau đó tính toán vị trí của nó tại bất kỳ thời điểm nào giữa các keyframe đó. Điều này hữu ích cho việc kiểm tra các đường cong chuyển động, kiểm tra thời gian hoạt ảnh và xuất các giá trị mẫu để phân tích sâu hơn. Aspose.3D for Python via .NET cho phép bạn lấy mẫu một chuỗi keyframe tại một thời điểm xác định mà không cần render một cảnh 3D. Trong hướng dẫn này, bạn sẽ tạo một hoạt ảnh vị trí đơn giản, đánh giá các giá trị nội suy của nó mỗi nửa giây, và lưu kết quả vào tệp CSV.
Cài đặt Aspose.3D cho Python
Cài đặt Aspose.3D for Python via .NET phiên bản 26.10 bằng pip:
pip install aspose-3d==26.10.0
Ví dụ này chỉ sử dụng mô-đun aspose.threed.animation và mô-đun csv tích hợp sẵn của Python. Bạn không cần tệp GLB/GLTF hoặc card đồ họa tương thích Vulkan vì mã thực hiện các phép tính hoạt hình thay vì render hình ảnh.
Để biết thông tin về nền tảng và cài đặt, tham khảo tài liệu Aspose.3D for Python.
Tạo và đánh giá hoạt ảnh keyframe trong Python
Ví dụ mô phỏng vị trí X của một đối tượng. Vị trí bắt đầu tại 0, đạt 10 đơn vị sau hai giây và trở lại 0 sau năm giây.
| Thời gian (giây) | Vị trí X | Hành động |
|---|---|---|
| 0 | 0 | Bắt đầu |
| 2 | 10 | Đạt vị trí tối đa |
| 5 | 0 | Quay lại vị trí bắt đầu |
Các giá trị giữa các keyframe này được tính bằng nội suy tuyến tính. Mẫu tạo ra một đường cong hoạt hình số độc lập; nó không gắn chuỗi vào một đối tượng cảnh thực tế.
Ví dụ mã Python đầy đủ
Script sau tạo một KeyframeSequence, thêm ba khung chính, đánh giá mười một dấu thời gian, xác thực các giá trị khung chính và xuất kết quả ra 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.")
Hiểu cách hoạt động của việc đánh giá keyframe
Định nghĩa một chuỗi keyframe
Lớp KeyframeSequence đại diện cho một đường cong số với các giá trị được xác định tại các thời điểm cụ thể. Dòng này tạo một chuỗi có tên PositionX:
sequence = KeyframeSequence("PositionX")
Tên giúp xác định chuỗi. Nó không tự động ràng buộc chuỗi với thuộc tính lưới hoặc nút. Để biết chi tiết, xem Tham khảo API KeyframeSequence.
Thêm keyframes với nội suy tuyến tính
Mỗi lần gọi add() cung cấp một dấu thời gian, một giá trị và một kiểu nội suy:
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 cho biết chuỗi tính các giá trị trung gian tỷ lệ giữa các keyframe. Do đó, giá trị tăng đều từ 0 đến 10 trong hai giây đầu tiên và giảm đều từ 10 đến 0 trong ba giây tiếp theo.
Tính giá trị tại một thời điểm
Thao tác chính là:
value = sequence.evaluate(1.5)
Trong ví dụ này, kết quả mong đợi tại 1.5 giây là 7.5. Nội suy tuyến tính tuân theo công thức này:
[ v(t) = v_0 + \frac{t - t_0}{t_1 - t_0}(v_1 - v_0) ]
Ở đây, t là dấu thời gian được yêu cầu, t0 và t1 là thời gian các khung hình xung quanh, và v0 và v1 là các giá trị tương ứng của chúng.
Giữa hai keyframe đầu tiên, việc đánh giá tại 1,5 giây cho kết quả:
[ v(1.5) = 0 + \frac{1.5 - 0}{2 - 0}(10 - 0) = 7.5 ]
Bạn không cần tự triển khai công thức này. KeyframeSequence.evaluate() thực hiện phép tính dựa trên cài đặt nội suy của chuỗi.
Kiểm tra các giá trị đã đánh giá
Đối với các keyframe mẫu, đầu ra là:
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.
Các câu lệnh assert kiểm tra các giá trị tại ba dấu thời gian keyframe đã định nghĩa. Chúng sử dụng một độ sai số nhỏ thay vì so sánh bằng nhau trực tiếp của số thực.
Các giá trị thay đổi giữa các keyframe xác nhận rằng chuỗi đang được lấy mẫu trên toàn bộ phạm vi thời gian của nó.
Xuất giá trị keyframe sang CSV
Sau khi đánh giá chuỗi, script ghi thời gian và vị trí X đã tính vào keyframe_animation.csv bằng mô-đun csv của Python. Tệp bắt đầu với:
Time (seconds),X Position
0.0,0.0
0.5,2.5
1.0,5.0
1.5,7.5
2.0,10.0
Bạn có thể mở tệp CSV này trong một ứng dụng bảng tính, vẽ đường cong chuyển động thu được, hoặc đọc lại vào Python để phân tích. Để có kết quả chi tiết hơn, giảm step từ 0.5 xuống một khoảng nhỏ hơn và điều chỉnh phạm vi thời gian mong muốn.
Các cân nhắc thực tiễn
Chỉ mẫu trong phạm vi thời gian dự định. Hướng dẫn này đánh giá thời gian từ 0 đến 5 giây. Các giá trị nằm ngoài các keyframe đã định được điều khiển bởi hành vi ngoại suy trước và sau, điều này tách biệt với việc nội suy giữa các keyframe.
Chọn nội suy một cách có chủ đích. Nội suy tuyến tính tạo ra các thay đổi cố định trong mỗi đoạn. Các kiểu nội suy khác có thể tạo ra các đặc tính chuyển động khác nhau và có thể yêu cầu cài đặt keyframe bổ sung. Tham khảo tài liệu tham chiếu API hoạt hình trước khi thay đổi chế độ nội suy.
Phân biệt việc đánh giá hoạt ảnh với hoạt ảnh trong cảnh. Mã chỉ đánh giá một đường cong số. Nó không cập nhật vị trí X của nút cảnh hoặc tạo hoạt ảnh đã được render. Để di chuyển một đối tượng 3D, chuỗi phải được kết nối với một thuộc tính hoạt ảnh thích hợp trong cảnh.
Không cần render GPU. Không có lời gọi nào tới Scene.render() hoặc backend render nào được thực hiện. Điều này làm cho mẫu phù hợp để làm việc với các giá trị animation trên các máy không có GPU hỗ trợ Vulkan.
Nhận Giấy Phép Tạm Thời Miễn Phí
Bạn có thể yêu cầu giấy phép tạm thời miễn phí 30 ngày để đánh giá Aspose.3D for Python via .NET mà không có giới hạn dùng thử. Thực hiện theo hướng dẫn cấp phép Aspose.3D để áp dụng giấy phép vào ứng dụng của bạn.
Tài nguyên học tập miễn phí
Khám phá các tài nguyên này để tiếp tục làm việc với hoạt ảnh 3D và quy trình xử lý tệp trong Python:
- Aspose.3D for Python Developer Guide – Tài liệu cho việc tải, tạo và xử lý các cảnh 3D.
- Aspose.3D Animation API Reference – Các lớp cho khung chính, nội suy, clip hoạt hình và ràng buộc thuộc tính.
- Free Online 3D Applications – Công cụ dựa trên trình duyệt cho các tác vụ tệp 3D được hỗ trợ.
- Aspose.3D Tutorials and Articles – Nhiều ví dụ thực tế hơn cho việc làm việc với các định dạng 3D.
Kết luận
Bạn có thể sử dụng KeyframeSequence.evaluate() trong Aspose.3D for Python via .NET để tính toán các giá trị hoạt hình tại các thời điểm cụ thể mà không cần render mô hình. Trong ví dụ này, ba keyframe xác định một đường cong vị trí X, trong khi bộ đánh giá tính toán các vị trí trung gian và xuất chúng ra CSV. Để điều chỉnh ví dụ, hãy thay đổi giá trị keyframe hoặc khoảng mẫu. Đối với hoạt hình cấp mô hình, bước tiếp theo là gắn các đường cong hoạt hình vào các thuộc tính của cảnh và áp dụng chúng cho các đối tượng.
