Перед использованием необходимо загрузить модуль:
module load blender/2.77a
Blender установлен в:
/shared/opt/blender/2.77a/
Запуск рендера на CPU производится следующей командой:
blender -noaudio -b <путь к исходному файлу *.blend> -E CYCLES -o <путь выходного файла> -f <кол-во кадров>
В команде использованы след. ключи:
Для просмотра всех ключей и справки необходимо выполнить команду:
blender --help
Примечание. Запускать рендер, используя CPU можно и на управляющем узле, так и на вычислительном.
Для того, чтобы запустить рендер на GPU необходимо написать скрипт на языке python (*.py). Скрипт должен содержать следующие строки:
import bpy bpy.context.user_preferences.system.compute_device_type = 'CUDA' bpy.context.user_preferences.system.compute_device = 'CUDA_MULTI_0' bpy.data.scenes["Scene"].cycles.device = 'GPU'
Примечание. Значение 'CUDA_MULTI_0' показывает, что рендер будет производиться на всех свободных картах GPU. Также возможно использование значения 'CUDA_0', которое показывает, что рендер будет производиться на одной карте GPU.
После того, как скрипт создан, путь к нему необходимо указать в команде запуска с помощью ключа P:
blender -noaudio -b <путь к исходному файлу *.blend> -E CYCLES -o <путь выходного файла> -P <путь к скрипту> -f 1
Примечание. Рендер, с использованием GPU, возможен только с вычислительного узла.
Все интересующие настройки необходимо написать в скрипт на языке python. Ниже приведен пример скрипта:
import bpy #User Preferences.System.Compute device bpy.context.user_preferences.system.compute_device_type = 'CUDA' bpy.context.user_preferences.system.compute_device = 'CUDA_MULTI_0' #Scene.Render.Device. bpy.data.scenes["Scene"].cycles.device = 'GPU' #Scene.Render.Animation bpy.ops.render.render(animation=True) #Scene.Dimensions.Resolution.X bpy.data.scenes["Scene"].render.resolution_x = 1280 #Scene.Dimensions.Resolution.Y bpy.data.scenes["Scene"].render.resolution_y = 800 #Scene.Dimensions.Resolution.Percentage bpy.data.scenes["Scene"].render.resolution_percentage = 100 #Scene.Dimensions.Frame Range.Start frame bpy.data.scenes["Scene"].frame_start = 0 #Scene.Dimensions.Frame Range.End Frame bpy.data.scenes["Scene"].frame_end = 3000 #Scene.Dimensions.Frame Range.Frame step bpy.data.scenes["Scene"].frame_step = 1 #Scene.Dimensions.Frame Rate bpy.types.Menu.framerate_presents = 24 #Scene.Output.File format bpy.data.scenes["Scene"].render.image_settings.file_format = 'PNG' #Scene.Output.Color mode bpy.data.scenes["Scene"].render.image_settings.color_mode = 'RGB' #Scene.Output.Color depth bpy.data.scenes["Scene"].render.image_settings.color_depth = '16' #Scene.Sampling bpy.types.Menu.Sampling_presets = 'Final' #Scene.Sampling.Samples.Render bpy.data.scenes["Scene"].cycles.samples = 24 #Scene.Sampling.Samples.Preview bpy.data.scenes["Scene"].cycles.preview_samples = 12 #User Preferences.System.Anisotropic filter bpy.context.user_preferences.system.anisotropic_filter = 'FILTER_16'
После написания скрипта необходимо указать его при запуске с ключом -P.
Примечание. Если необходимых настроек нет в данном примере, необходимо зайти в графическом режиме в Blender и навести мышь на интересующую настройку. После чего появится всплывающая иконка, как записать эту настройку на языке python.
До этого раздела запуск рендера предполагал использование одного вычислительного узла.
Вопрос оптимизации был решен следующим образом. Имеется возможность, используя скрипты рендерить на каждом вычислительном узле определенное кол-во кадров. Например, на первом вычислительном узле будут рендериться с 0 по 613 кадр:
bpy.data.scenes["Scene"].frame_start = 0 bpy.data.scenes["Scene"].frame_end = 613 bpy.data.scenes["Scene"].frame_step = 1
А на втором, с 614 по 1227 кадр:
bpy.data.scenes["Scene"].frame_start = 614 bpy.data.scenes["Scene"].frame_end = 1227 bpy.data.scenes["Scene"].frame_step = 1
И так далее.
Запуск производится с управляющего узла с помощью планировщика задач bsub. Пример команды (в примере используется логирование, используя утилиту tee):
bsub -m "compute000" "blender -noaudio -b Scene.blend -E CYCLES -o ~/blender_results_node000/ -P exercise_gpu000.py -a |tee ~/blender_results_node000/exercise_log_000"