Hướng dẫn triển khai và tối ưu MoonRay Renderer

MoonRay là trình dựng hình (renderer) dựa trên tia quang học (ray-tracing) do DreamWorks Animation phát triển, cung cấp khả năng tạo hình ảnh chất lượng cao cho phim hoạt hình và hiệu ứng hình ảnh. Bài viết này tóm tắt cách thiết lập môi trường, biên dịch từ mã nguồn và tích hợp vào pipeline sản xuất.

Chuẩn bị môi trường

  • Hệ điều hành: Linux (Ubuntu 20.04+ hoặc CentOS 7/8) hoặc macOS 12+.
  • Trình biên dịch: GCC 9+, Clang 12+, hoặc Apple Clang.
  • Công cụ build: CMake ≥ 3.18.
  • Thư viện phụ thuộc chính: Intel TBB, OpenImageIO, OpenEXR, Boost.

Clone và cấu hình dự án

# Tạo thư mục làm việc
mkdir -p ~/dev/moonray && cd ~/dev/moonray

# Clone repository
git clone --recurse-submodules https://github.com/dreamworksanimation/moonray.git src

# Tạo thư mục build riêng biệt
cmake -S src -B build \
  -DCMAKE_BUILD_TYPE=Release \
  -DCMAKE_INSTALL_PREFIX=$PWD/install \
  -DMOONRAY_ENABLE_CUDA=OFF \
  -DMOONRAY_ENABLE_EMBREE=ON

Biên dịch và kiểm tra

# Biên dịch song song
cmake --build build -j$(nproc)

# Cài đặt
cmake --install build

# Kiểm tra nhanh
export PATH=$PWD/install/bin:$PATH
moonray_cli --help

Chạy render đơn giản

Giả sử bạn đã có file cornell_box.rdlacornell_box.rdlb:

moonray_cli \
  --in scene/cornell_box.rdla \
  --in scene/cornell_box.rdlb \
  --out result.exr \
  --res 1920 1080 \
  --max_samples 256

Tối ưu hiệu năng

Quản lý bộ nhớ

  • Giới hạn texture cache: --texture_cache_size 4096 (đơn vị MB).
  • Giảm footprint bằng cách nén texture (OpenImageIO tự động dùng DWA).

Khai thác đa luồng

export TBB_NUM_THREADS=32      # Giới hạn số luồng
moonray_cli --threads 0       # 0 = dùng tất cả core

Render phân tán

MoonRay hỗ trợ distributed rendering thông qua Arras:

  1. Khởi động coordinator: arras4_coordinator
  2. Khởi động node: arras4_node --coordinator <ip>
  3. Render với --distributed.

Tích hợp vào pipeline

USD Hydra delegate

Đặt plugin hdMoonRay.so vào $PXR_PLUGINPATH_NAME để kích hoạt viewport trong Houdini Solaris hoặc USDView.

API C++ cơ bản

#include <moonray/engine/Context.h>
#include <moonray/scene/Scene.h>

int main() {
    moonray::Context ctx;
    auto scene = ctx.createScene();
    scene->load("cornell_box.rdla");
    ctx.render(scene, "output.exr", 1920, 1080);
    return 0;
}

Khắc phục lỗi thường gặp

LỗiNguyên nhânCách sửa
libtbb.so.2: cannot open shared object fileThiếu TBB runtimesudo apt install libtbb2
CUDA driver version is insufficientDriver cũCập nhật driver NVIDIA ≥ 525
Kết quả render tối hoàn toànThiếu light hoặc exposureKiểm tra <Light><Exposure> trong RDLA

Luôn kiểm tra BUILDING.md để cập nhật thay đổi mới nhất.

Thẻ: moonray ray-tracing rendering cmake C++

Đăng vào ngày 19 tháng 9 lúc 00:20