Unreal Engine: сборки и рендер на облачных GPU
Задача страницы. Дать практический рецепт сборки проектов UE (Build/Cook/Package), headless‑рендера через Movie Render Queue (включая Path Tracer), организации фермы оффлайн‑рендера и удалённых интерактивных сессий. Разобрать VRAM/DDC‑кэш, наблюдаемость, экономику и типовые сбои.
TL;DR
- **Два режима: — Оффлайн‑рендер (batch/Movie Render Queue): масштабируем по кадрам/шотам; Interruptible выгоден при разбиении на чанки ≤ 120 с, ретраи, локальный NVMe‑кэш. — Интерактив (artist/Pixel Streaming/Parsec): приоритет p95 input→pixel и FPS; стабильный On‑Demand, NVENC/AV1.
- Path Tracer: рендерим через MRQ с конфигом высокого качества; один процесс = один GPU; масштабирование — параллелью кадров/шотов.
- Хранилище и кэш: ассеты/Derived Data Cache (DDC)/Shader Cache держим на локальном NVMe. «Тёплое» хранилище для исходников, «холодное» для архивов. См. https://cloudcompute.ru/solutions/storage-data/
- Профили GPU: 24 ГБ (Compact) — предпросмотры/1080p; 48 ГБ (Balanced) — основной рабочий профиль; 80 ГБ (HQ) — Path Tracer 4K/8K, тяжёлые материалы, Nanite/волюметрика.
- Наблюдаемость: render_frame_seconds, fps_actual, gpu_utilization, gpu_memory_used_bytes, ddc_hit_rate, nvenc_utilization. См. https://cloudcompute.ru/solutions/monitoring-logging/
- Экономика: Cost_per_frame = (c_gpu * t_frame / 3600) / U * r (batch), Cost_per_hour = c_gpu / U_session (интерактив). См. https://cloudcompute.ru/solutions/cost-planner/
- Безопасность: секреты/ключи билд‑систем, приватные плагины, лицензии — через секрет‑хранилище и ограниченный egress. См. https://cloudcompute.ru/solutions/security/
Сценарии: когда что использовать
Оффлайн‑рендер (MRQ/Sequencer)
- Финальные кадры/ролики, рендер шотов, offline path tracing.
- Масштабирование по кадрам/шотам и/или тайлам MRQ для сверхвысоких разрешений.
- Denoise/транскод (ffmpeg) — отдельные батчи; см. https://cloudcompute.ru/solutions/rendering/de-noising/ и https://cloudcompute.ru/solutions/rendering/video-transcode/
Интерактив (look‑dev/previz)
- Удалённые GPU‑станции для художников и техартов, Pixel Streaming/стрим экрана.
- Строгий SLA по p95 input→pixel и стабильному FPS. См. https://cloudcompute.ru/solutions/rendering/studio-remote/
Гибрид
- Look‑dev в интерактиве, финальный Path Tracer — в оффлайн‑очередь.
- Длинные шоты — On‑Demand; короткие — Interruptible (чанк ≤ 120 с). См. https://cloudcompute.ru/solutions/interruptible-patterns/
Архитектуры/пайплайны (ASCII) A. CI/CD сборки → Cook → MRQ‑рендер (batch)
[Git/LFS] -> [CI Build] -> [Cooked Content] -> [Warm Storage /cooked]
-> [Prefetch -> NVMe DDC/Shader Cache] -> [Job Queue]
|
+---------------------+---------------------+
| |
[GPU Worker #1] [GPU Worker #N]
(MRQ Path Tracer, 1 GPU) (MRQ Path Tracer)
| |
[Frames/Clips] [Frames/Clips]
/
+----------> [Stitch/Denoise/Transcode] -> [Cold Archive]
Ключи: фиксированные версии движка/плагинов, единый контейнер‑образ, DDC/Shader‑кэш на NVMe, ретраи по кадрам/шотам.
B. Удалённая рабочая станция (интерактив)
[Artist Input] -> [Remote UE Session on GPU] -> [NVENC Stream] -> [Viewer]
| | |
telemetry frame_time (p50/p95) nvenc_utilization
Цель: p95 input→pixel и стабильный FPS; сеть — приоритизация стрима.
Профили GPU/VRAM/ориентиры
| **Профиль** | **VRAM** | **Типовые задачи UE** | **Режим** | **Отн. throughput (≈)** | **Примечания** |
| **24 ГБ (Compact)** | 24 ГБ | 1080p предпросмотры, лёгкие шоты, тесты MRQ | Interruptible / On‑Demand | 1.0 | Следить за VRAM; тайлинг/понижение качества при OOM |
| **48 ГБ (Balanced)** | 48 ГБ | 1080p/1440p, сложные материалы/Niagara | Interruptible / On‑Demand | 1.5–1.8 | Базовый профиль фермы |
| **80 ГБ (HQ)** | 80 ГБ | Path Tracer 4K/8K, тяжёлые сцены/Nanite | On‑Demand / Interruptible | 2.2–2.6 | Один процесс = один GPU; масштабируем количеством нод |
Индексы относительны: итог зависит от сцены/сэмплов/поста.
Конфиги и скелеты
1) Build/Cook/Package (CI шаг, универсально)
# Windows
RunUAT.bat BuildCookRun ^
-project="C:pProjectProject.uproject" ^
-platform=Win64 -clientconfig=Shipping ^
-cook -allmaps -build -stage -pak -archive ^
-archivedirectory="C:outbuild" ^
-ddc=CreateInstalledDDC
# Linux
./RunUAT.sh BuildCookRun
-project=/p/Project/Project.uproject
-platform=Linux -clientconfig=Shipping
-cook -allmaps -build -stage -pak -archive
-archivedirectory=/out/build
-ddc=CreateInstalledDDC
**Рекомендации: — DDC на локальном NVMe (/nvme/ddc) и шаринг между задачами; — фиксировать версии toolchain в контейнере. См. https://cloudcompute.ru/solutions/containers-ci-cd/
2) MRQ Path Tracer через Python (headless)
Запускаем редактор в командном режиме с Python‑скриптом, который формирует MRQ‑очередь и рендерит шот.
# Linux пример; для Windows используйте UnrealEditor-Cmd.exe с аналогичными ключами
/opt/UnrealEditor/UnrealEditor-Cmd
"/p/Project/Project.uproject"
-run=pythonscript -ExecutePythonScript="/p/scripts/render_mrq.py"
-log="/out/render.log"
render_mrq.py (минимальный рабочий скелет):
import unreal
# Базовые сущности
queue_subsys = unreal.get_editor_subsystem(unreal.MoviePipelineQueueSubsystem)
queue = queue_subsys.get_queue()
queue.delete_all_jobs()
# Конфиг рендера: существующий ассет с преднастройками Path Tracer
config_asset = unreal.load_asset("/Game/MRQ/Configs/PathTracer_HQ")
sequence = unreal.load_asset("/Game/Sequences/Shot010")
map_asset = "/Game/Maps/Shot010"
job = queue.allocate_new_job(unreal.MoviePipelineExecutorJob)
job.sequence = sequence
job.map = unreal.SoftObjectPath(map_asset)
job.job_name = "Shot010_PT"
job.set_configuration(config_asset)
# Примеры параметров через overrides (если нужно)
# cfg = job.get_configuration()
# setting = cfg.find_or_add_setting_by_class(unreal.MoviePipelinePathTracerSetting)
# setting.samples_per_pixel = 64
# Вывод
output_setting = job.get_configuration().find_or_add_setting_by_class(unreal.MoviePipelineOutputSetting)
output_setting.output_directory = unreal.DirectoryPath("/out/shot010")
output_setting.file_name_format = "shot010_{frame}"
output_setting.output_resolution = unreal.IntPoint(3840, 2160)
# Исполнитель
executor = unreal.MoviePipelinePythonHostExecutor()
queue_subsys.render(queue, executor)
Масштабирование: вместо увеличения сэмплов до бесконечности рендерьте несколько кадров параллельно на разных нодах. Один процесс MRQ обычно использует один GPU.
3) MRQ‑тайлинг для сверхвысоких разрешений (концепт)
# Добавляем тайлинг 2x2 (если включён соответствующий setting в MRQ)
cfg = job.get_configuration()
tiling = cfg.find_or_add_setting_by_class(unreal.MoviePipelineHighResSetting)
tiling.tile_count = unreal.IntPoint(2, 2) # 2x2
tiling.texture_sharpness_bias = 0.0
Тайлы собираются автоматически MRQ или отдельным шагом (stitch). Denoise — отдельная очередь. См. https://cloudcompute.ru/solutions/rendering/de-noising/
4) Очередь заданий (универсальная YAML‑спека)
job:
name: "ue_shot010_pt"
engine: "ue-mrq" # тип пайплайна
mode: "interruptible" # on-demand | interruptible
gpu_profile: "48GB-Balanced" # 24GB-Compact | 48GB-Balanced | 80GB-HQ
chunk_seconds: 120 # целевое время одного кадра/тайла
retries: 3
input:
uproject: "/p/Project/Project.uproject"
sequence: "/Game/Sequences/Shot010"
map: "/Game/Maps/Shot010"
mrq_config: "/Game/MRQ/Configs/PathTracer_HQ"
frames: [100..160] # диапазон или список
tiles:
grid: [2, 2] # при 4K+ кадрах
cache:
ddc: "/nvme/ddc"
shader_cache: "/nvme/shadercache"
warmup: ["textures/", "nanite/", "shaders/"]
output:
dir: "/out/shot010"
format: "EXR"
hooks:
on_start: ["python /scripts/warmup_ddc.py"]
on_frame_done: ["python /scripts/register_frame.py"]
on_failure: ["python /scripts/requeue.py --backoff"]
5) Docker‑воркер MRQ + NVMe DDC (Compose)
services:
ue-mrq-worker:
image: registry.local/ue5-mrq:latest
command: ["/bin/bash","-lc","/opt/scripts/run_mrq.sh"]
deploy:
resources:
reservations:
devices: [ { capabilities: ["gpu"] } ]
environment:
- UE_PROJECT=/p/Project/Project.uproject
- UE_SCRIPT=/p/scripts/render_mrq.py
- DDC_DIR=/nvme/ddc
- SHADER_CACHE=/nvme/shadercache
volumes:
- /mnt/warm/projects:/p:ro
- /mnt/cold/out:/out
- /nvme:/nvme
``` **Наблюдаемость/метрики/алерты**
См. базу:[ https://cloudcompute.ru/solutions/monitoring-logging/](https://cloudcompute.ru/solutions/monitoring-logging/) и трассировку:[ https://cloudcompute.ru/solutions/llm-inference/observability/](https://cloudcompute.ru/solutions/llm-inference/observability/)
**Batch/MRQ:**
- render\_frame\_seconds{engine="ue-mrq"} — гистограмма времени кадра.
- gpu\_utilization, gpu\_memory\_used\_bytes, gpu\_power\_watts.
- ddc\_hit\_rate, shader\_cache\_hits\_total, io\_read\_mb\_s, io\_write\_mb\_s.
- job\_queue\_depth, frames\_inflight.
**Интерактив:**
- frame\_time\_seconds (p50/p95), fps\_actual, input\_to\_pixel\_latency\_ms.
- nvenc\_utilization, net\_rtt\_ms, frame\_drop\_total.
**Алерты:**
- p95 render\_frame\_seconds > порога N минут.
- gpu\_utilization < 60% при глубокой очереди → узкое место I/O/CPU/кэш.
- Низкий ddc\_hit\_rate → холодный кэш; добавить warm‑up.
- gpu\_memory\_used\_bytes → близко к VRAM → включить тайлинг/снизить резолюцию/перейти на больший профиль.
## **Экономика и формулы**
См.[ https://cloudcompute.ru/solutions/cost-planner/](https://cloudcompute.ru/solutions/cost-planner/) и <https://cloudcompute.ru/solutions/throughput-vs-latency/>
**Оффлайн (MRQ):**
Cost\_per\_frame = (c\_gpu \* t\_frame / 3600) / U \* r
Cost\_total = N \* Cost\_per\_frame + Overhead\_io + Cost\_denoise/transcode
**Интерактив:**
Cost\_per\_hour = c\_gpu / U\_session
**Interruptible выгоден**, если скидка по цене покрывает ретраи: Discount\_gain > (r - 1) и **чанк ≤ 120 с** (разбиение по кадрам/тайлам/сегментам).
## **Практики VRAM/кэша и производительности**
- **DDC/Shader Cache на NVMe**: локальный «горячий» кэш, не чистить между заданиями; warm‑up скрипт перед стартом.
- **Path Tracer**: рост сэмплов → квадратичный рост времени; лучше параллелить кадры на разных нодах.
- **Тайлинг MRQ** для сверхвысоких разрешений; аккуратно с пост‑эффектами (одинаковые параметры для тайлов).
- **IO‑узкие места**: префетч ассетов, pin‑память, контроль io\_read\_mb\_s. См.[ https://cloudcompute.ru/solutions/performance-tuning/](https://cloudcompute.ru/solutions/performance-tuning/)
- **Один процесс = один GPU**: MRQ обычно не масштабируется на несколько GPU внутри 1 процесса — масштабируем количеством воркеров.
- **Стабильность**: фиксируйте версии UE/плагинов/проекта; smoke‑рендер эталонного кадра в CI. См. <https://cloudcompute.ru/solutions/containers-ci-cd/>
**Безопасность и политики**
См.[ https://cloudcompute.ru/solutions/security/](https://cloudcompute.ru/solutions/security/)
- **Секреты** (ключи к приватным плагинам, учётки магазинов, лицензии кодеков) — только через секрет‑хранилище; запрет логирования секретов.
- **Изоляция проектов**: отдельные сети/учётки, ограничение egress (только лицензирование/телеметрия).
- **Приватные ассеты**: временные токены, чёткий TTL, no‑list бакетов.
- **Ретеншн**: EXR/PNG/лог‑артефакты → «холодное» хранилище через N дней.
**Траблшутинг (симптом → причина → решение)**
<table><tbody><tr><td>**Симптом**
</td><td>**Возможная причина**
</td><td>**Решение**
</td></tr><tr><td>OOM по VRAM на MRQ/PT
</td><td>Слишком высокое разрешение/сцена
</td><td>Включить тайлинг 2×2/3×3; снизить резолюцию; перейти на 48–80 ГБ
</td></tr><tr><td>Низкий GPU util при длинных кадрах
</td><td>Узкое место I/O/Shader‑compile
</td><td>DDC/Shader Cache на NVMe, warm‑up; увеличить префетч
</td></tr><tr><td>Сильный рост времени первого кадра
</td><td>Холодный кэш DDC/шейдеров
</td><td>Warm‑up шаг в hooks; не чистить кэш между задачами
</td></tr><tr><td>Разные результаты между нодами
</td><td>Разные версии UE/плагинов/настроек поста
</td><td>Единый контейнер‑образ; smoke‑рендер эталона
</td></tr><tr><td>MRQ «встал», очередь есть
</td><td>Ошибка задания/плагина, нет ретраев
</td><td>Хуки on\_failure+backoff; валидация job; перезапуск воркера
</td></tr><tr><td>Интерактив: просадки FPS/лаг
</td><td>Сеть/NVENC перегружены, сцена не влезает в VRAM
</td><td>Снизить битрейт/разрешение; увеличить VRAM‑профиль; оптимизировать сцену
</td></tr><tr><td>Тайл‑артефакты (стыки)
</td><td>Пост‑эффекты/AA не согласованы
</td><td>Единые параметры поста; глобальный пост‑процесс после stitch
</td></tr><tr><td>Время кадра > 120 с (Interruptible)
</td><td>Недостаточное разбиение на чанки
</td><td>Резать по кадрам/сегментам/тайлам; критичные шоты — On‑Demand
</td></tr></tbody></table>
## **Как запустить в cloudcompute.ru**
1. **Выберите шаблон**:[ https://cloudcompute.ru/solutions/templates/](https://cloudcompute.ru/solutions/templates/)
- «UE Build & Cook (CI)» — сборка/кукинг.
- «UE MRQ Path Tracer (batch)» — оффлайн‑рендер.
- «Remote GPU workstation» — интерактив. См. <https://cloudcompute.ru/solutions/rendering/studio-remote/>
2. **Профиль GPU**: 24/48/80 ГБ по таблице выше; Path Tracer 4K — 80 ГБ (HQ).
3. **Режим**:
- Короткие кадры/сегменты — **Interruptible** (чанк ≤ 120 с).
- Длинные/критичные — **On‑Demand**.
4. **Хранилище/кэш**: подключить «тёплое» хранилище, настроить DDC/Shader‑кэш на NVMe. См.[ https://cloudcompute.ru/solutions/storage-data/](https://cloudcompute.ru/solutions/storage-data/)
5. **Оркестрация**: описать задания YAML‑спекой; настроить ретраи/backoff.
6. **CI/CD**: зафиксировать версии UE/плагинов/драйверов; smoke‑рендер эталонного кадра. См. <https://cloudcompute.ru/solutions/containers-ci-cd/>
7. **Наблюдаемость/алерты**: дашборды по GPU/MRQ/стриму; алерты p95. См.[ https://cloudcompute.ru/solutions/monitoring-logging/](https://cloudcompute.ru/solutions/monitoring-logging/)
**Чек‑лист перед продом**
- Единый контейнер‑образ UE/плагинов; smoke‑рендер совпадает на 2+ воркерах.
- DDC/Shader‑кэш на NVMe, warm‑up включён; ddc\_hit\_rate стабильно высокий.
- Чанк‑цель ≤ 120 с; тайлинг/разбиение по кадрам/сегментам настроено.
- Метрики render\_frame\_seconds, gpu\_utilization, gpu\_memory\_used\_bytes, io\_\* и алерты заведены.
- Экономика посчитана: Cost\_per\_frame/Cost\_total (batch) или Cost\_per\_hour (интерактив).
- Политики безопасности/ретенции применены; логи без секретов.
- План деградации качества (disaster mode): запасные пресеты MRQ на случай SLA.
**Навигация**
- Хаб «Рендеринг»: <https://cloudcompute.ru/solutions/rendering/>
- Шаблоны запусков:[ https://cloudcompute.ru/solutions/templates/](https://cloudcompute.ru/solutions/templates/)
- Данные и хранение:[ https://cloudcompute.ru/solutions/storage-data/](https://cloudcompute.ru/solutions/storage-data/)
- Оптимизация производительности:[ https://cloudcompute.ru/solutions/performance-tuning/](https://cloudcompute.ru/solutions/performance-tuning/)
- Multi‑GPU (общие паттерны):[ https://cloudcompute.ru/solutions/multi-gpu/](https://cloudcompute.ru/solutions/multi-gpu/)
- Мониторинг и логи:[ https://cloudcompute.ru/solutions/monitoring-logging/](https://cloudcompute.ru/solutions/monitoring-logging/)
- Наблюдаемость сервисов:[ https://cloudcompute.ru/solutions/llm-inference/observability/](https://cloudcompute.ru/solutions/llm-inference/observability/)
- Throughput vs Latency: <https://cloudcompute.ru/solutions/throughput-vs-latency/>
- Interruptible‑паттерны: <https://cloudcompute.ru/solutions/interruptible-patterns/>
- CI/CD для GPU‑нагрузок: <https://cloudcompute.ru/solutions/containers-ci-cd/>
- Родственные страницы рендера:
- Blender/Cycles: <https://cloudcompute.ru/solutions/rendering/blender/>
- Redshift/Octane/V‑Ray: <https://cloudcompute.ru/solutions/rendering/redshift/>
- Houdini Karma XPU: <https://cloudcompute.ru/solutions/rendering/houdini-karma/>
- Деноайзинг: <https://cloudcompute.ru/solutions/rendering/de-noising/>
- Транскодирование: <https://cloudcompute.ru/solutions/rendering/video-transcode/>
- Удалённые GPU‑станции: <https://cloudcompute.ru/solutions/rendering/studio-remote/>
- Пайплайны ассетов: <https://cloudcompute.ru/solutions/rendering/asset-pipelines/>
Готовы запустить?
Запустить GPU-сервер