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.rdla và cornell_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:
- Khởi động coordinator:
arras4_coordinator - Khởi động node:
arras4_node --coordinator <ip> - 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ỗi | Nguyên nhân | Cách sửa |
|---|---|---|
libtbb.so.2: cannot open shared object file | Thiếu TBB runtime | sudo apt install libtbb2 |
CUDA driver version is insufficient | Driver cũ | Cập nhật driver NVIDIA ≥ 525 |
| Kết quả render tối hoàn toàn | Thiếu light hoặc exposure | Kiểm tra <Light> và <Exposure> trong RDLA |
Luôn kiểm tra BUILDING.md để cập nhật thay đổi mới nhất.