Трансляція 3D-ресурсів
Обробка поширених 3D-форматів (FBX, OBJ, glTF) для перегляду у веббраузері.
Огляд робочого процесу
3D-формати
FBX
OBJ + MTL
glTF/GLB
3DS
DAE
Завантаження RAPS
raps object upload
Сховище APS
OSS-бакет
Model Derivative
Трансляція SVF2
Результати
Веб-перегляд
Мініатюри
Метадані
Підхід CLI
Крок 1: Створення бакету для ресурсів
raps bucket create --key media-assets --policy persistent --region US
Крок 2: Завантаження 3D-файлів
# FBX file
raps object upload media-assets character.fbx
# OBJ file
raps object upload media-assets environment.obj
# glTF file
raps object upload media-assets props.gltf
# GLB (binary glTF)
raps object upload media-assets vehicle.glb
Крок 3: Трансляція в SVF2
# Get URN and translate
URN=$(raps object urn media-assets character.fbx --output plain)
raps translate start "$URN" --format svf2 --wait
# Check translation result
raps translate manifest "$URN"
Крок 4: Перевірка результату
# Get available views
raps derivative views "$URN" --output json
# Get thumbnail
raps derivative thumbnail "$URN" --output ./preview.png
# Get metadata
raps derivative metadata "$URN" --output json
Підтримувані формати
| Формат | Розширення | Примітки |
|---|---|---|
| FBX | .fbx | Формат Autodesk, анімації |
| OBJ | .obj | З матеріалами .mtl |
| glTF | .gltf | JSON + окремі ресурси |
| GLB | .glb | Бінарний glTF |
| 3DS | .3ds | Спадковий формат 3D Studio |
| DAE | .dae | Формат Collada |
Конвеєр CI/CD
# .github/workflows/asset-translation.yml
name: 3D Asset Translation
on:
push:
paths:
- 'assets/**/*.fbx'
- 'assets/**/*.obj'
- 'assets/**/*.gltf'
- 'assets/**/*.glb'
env:
BUCKET: media-assets-${{ github.repository_id }}
jobs:
translate-assets:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- name: Install RAPS
run: cargo install raps
- name: Setup bucket
env:
APS_CLIENT_ID: ${{ secrets.APS_CLIENT_ID }}
APS_CLIENT_SECRET: ${{ secrets.APS_CLIENT_SECRET }}
run: |
raps bucket create --key "$BUCKET" --policy persistent --region US 2>/dev/null || true
- name: Upload and translate
env:
APS_CLIENT_ID: ${{ secrets.APS_CLIENT_ID }}
APS_CLIENT_SECRET: ${{ secrets.APS_CLIENT_SECRET }}
run: |
for file in $(git diff --name-only HEAD~1 HEAD -- 'assets/**'); do
[ -f "$file" ] || continue
ext="${file##*.}"
case "$ext" in
fbx|obj|gltf|glb|3ds|dae)
echo "Processing: $file"
raps object upload "$BUCKET" "$file"
key=$(basename "$file")
URN=$(raps object urn "$BUCKET" "$key" --output plain)
raps translate start "$URN" --format svf2 --wait
echo "Translated: $key"
;;
esac
done
- name: Generate thumbnails
env:
APS_CLIENT_ID: ${{ secrets.APS_CLIENT_ID }}
APS_CLIENT_SECRET: ${{ secrets.APS_CLIENT_SECRET }}
run: |
mkdir -p ./thumbnails
raps object list "$BUCKET" --output json | jq -r '.[].key' | while read key; do
URN=$(raps object urn "$BUCKET" "$key" --output plain)
STATUS=$(raps translate manifest "$URN" 2>/dev/null | jq -r '.status // "pending"')
if [ "$STATUS" = "success" ]; then
name=$(echo "$key" | sed 's/\.[^.]*$//')
raps derivative thumbnail "$URN" --output "./thumbnails/${name}.png" 2>/dev/null || true
fi
done
- name: Upload thumbnails
uses: actions/upload-artifact@v4
with:
name: asset-thumbnails
path: ./thumbnails/
Потік конвеєра
Git Push
Змінено 3D-файли
→
Обробка
Завантаження ресурсів
Трансляція в SVF2
Генерація мініатюр
→
Артефакти
thumbnails/
Інтеграція MCP
Трансляція окремого ресурсу
User: "Upload and translate the new character model for web viewing"
Користувач
AI-асистент
RAPS MCP
APS Cloud
Користувач→AIТранслювати character.fbx
AI→MCPaps_object_upload(bucket, file)
MCP→APSЗавантаження FBX
APS←MCPЗавершено
AI→MCPaps_object_urn(bucket, key)
MCP←AIURN
AI→MCPaps_translate_start(urn, format=“svf2”)
MCP→APSЗапуск трансляції
loopAI→MCPaps_translate_manifest(urn)
AI→MCPaps_derivative_thumbnail(urn)
MCP←AIМініатюра
AI→КористувачРесурс готовий з попереднім переглядом
Відповідь AI:
character.fbx завантажено та транслювано:
Деталі ресурсу:
- Розмір файлу: 12.4 MB
- Полігони: 45,000
- Матеріали: 8
- Кістки: 65
- Анімаційні кліпи: 3
Трансляція: Завершено (45 секунд)
Попередній перегляд збережено у
preview.png— відкрийте локально або завантажте в об’єктне сховище для швидкої візуальної перевірки.
Пакетна трансляція
User: "Process all the props in the environment folder"
Відповідь AI:
Обробка 12 файлів з папки environment:
Файл Формат Статус Полігони tree_01.fbx FBX Завершено 8,200 rock_large.obj OBJ Завершено 2,100 fence.gltf glTF Завершено 1,450 lamp_post.fbx FBX Обробка - … … … … Прогрес: 9/12 завершено
Поради для конкретних форматів
FBX з анімаціями
# FBX animations are preserved
URN=$(raps object urn media-assets animated-character.fbx --output plain)
raps translate start "$URN" --format svf2 --wait
# Check animation data in metadata
raps derivative metadata "$URN" --output json | jq '.animations'
OBJ із зовнішніми матеріалами
# Package OBJ with MTL and textures
zip -r model-package.zip model.obj model.mtl textures/
raps object upload media-assets model-package.zip
# Specify root file
URN=$(raps object urn media-assets model-package.zip --output plain)
raps translate start "$URN" --format svf2 --root "model.obj" --wait
Варіанти glTF
# glTF (JSON + binary + textures)
# Upload all files together or as a zip
# GLB is self-contained
raps object upload media-assets model.glb
URN=$(raps object urn media-assets model.glb --output plain)
raps translate start "$URN" --format svf2 --wait