Вопросы производительности

Оптимизация производительности визуализации

«Кто над чайником стоит, у того он не кипит» – старая поговорка, но вы можете задаться вопросом, почему визуализация занимает так много времени до своего завершения, или ещё того хуже, падает на половине пути! Ну, во время визуализации происходит много вещей и большинство из них вы можете ускорить, либо включить в сложную визуализацию, чтобы дождаться её завершения. Кроме того, можно отрисовать очень сложную сцену на посредственном ПК, если проявить некоторую смекалку. Вот список вещей из «горячей десятки», которые следует или не следует делать, чтобы ускорить визуализацию или избежать падения во время визуализации. Некоторые параметры могут снизить качество визуализации, но в случае с черновыми визуализациями вы можете не беспокоиться об этом.

Если вы получаете сообщение «Malloc returns nil» («Malloc вернул ноль»), на чистом английском это означает, что аллокатор памяти попытался запросить для Blender больше физической памяти, но вернулся с пустыми руками. Это значит, что у вас не достаточно памяти для визуализации сцены, и Blender не может продолжить работу. Чтобы всё-таки завершить визуализацию, вам нужно будет воспользоваться одним или несколькими советами с этой страницы.

Усовершенствования оборудования

  • Установите больше системной памяти.
  • Обновите ваш центральный процессор до многоядерного/многопроцессорного.
  • Обновите свои драйвера OpenGL.
  • Поставьте более быструю память, вплоть до предела, который поддерживает ваша материнская плата.
  • Используйте или настройте ферму визуализации, используя все имеющиеся компьютеры в вашем доме, либо воспользуйтесь готовой фермой визуализации.

Конфигурация операционной системы

  • Увеличьте приоритет процесса Blender в вашей ОС.
  • Увеличьте область подкачки, используемую ОС для подкачки памяти, также называемой размером файла подкачки виртуальной памяти, вплоть до размера вашей физической памяти.
  • Используйте системный монитор для проверки того, что никакие другие процессы не используют значимое количество ресурсов процессора или оперативной памяти и закройте их в случае необходимости.
  • Визуализация в фоновом режиме (из командной строки) сохранит немного дополнительной памяти.

Параметры Blender’а

  • Увеличьте параметр «Ограничение кэша в памяти» в настройках Blender на вкладке «Система» в разделе «OpenGL».
  • Переключитесь на ортографическую камеру и визуализируйте «части» сцены в отдельные изображения, а затем соберите их вместе в GIMP. Здесь работает старый трюк с созданием собственной панорамы с реальной камеры, когда вы делаете несколько фотографий очень широкой (закат на пляже) сцены: делаете один снимок, поворачиваетесь направо, делаете другой, потом ещё раз и так далее; и когда вы сделаете все эти фотографии, вы накладываете их друг на друга для получения очень широкого изображения ландшафта. Сделайте то же самое в Blender’е: визуализируйте один снимок в файл, направьте камеру на другую область сцены и сделайте второй снимок. Каждый снимок будет меньшей площади и, таким образом, содержать меньше полигонов/граней. Убедитесь, что, когда вы устанавливаете камеру, вы перекрываете кусочек предыдущего снимка, чтобы потом вы смогли их сопоставить. Если вы не хотите использовать GIMP, вы можете использовать для сопоставления узлы композитора Blender’а, в частности, узел «Перемещение».
  • Minimize the render window (and the Blender window, if the UV/Image editor is used). ATI users report dramatic speed-up on a per-frame basis, which adds up over the frame range.
  • Используйте скрипт Big Render для визуализации частей общего изображения, а затем объедините их вместе.

Сцена и определённые объекты

  1. Remove lamps, or move them to unrendered layers, or group them into layers.
  2. Отключите тени от каких-нибудь ламп, для отбрасывания теней используйте только одну или две основных лампы-солнца. Несколько дающих тени ламп будут отрисовываться быстрее, чем если бы каждая лампа давала тень.
  3. Используйте буферные тени вместо теней от трассировки лучей.
  4. Запекайте свои тени при помощи запекания полной визуализации на неподвижные поверхности. Используйте получившуюся текстуру для полисетки и отключите тени для её материала.
  5. Упростите полисетки (удалите полигоны). Чем больше вершин находится в камере, тем больше времени требуется на визуализацию.
  6. Удалите двойные вершины или используйте функцию редактирования полисетки модификатора «Аппроксимация».
  7. Удалите модификаторы «Подразделение поверхности» и «Мультиразрешение».
  8. Удалите задние грани полисеток (невидимую геометрию).
  9. Визуализируйте за раз только несколько объектов; в начале вашего проекта отрисуйте фоновые объекты и наборы объектов, которые не будут меняться и всегда будут на фоне.
  10. Поместите строения на отдельный слой, и скройте их от визуализации через слои визуализации. Затем объедините их с остальным изображением на этапе композитинга.
  11. Сделайте камеру статичной, чтобы лучше выполнить две вышеуказанные идеи.
  12. Избегайте использования ламп-областей.
  13. Отключите затенение для материалов.
  14. Запеките AO и текстуры, а затем отключите затенение для соответствующих материалов.
  15. Уменьшите расстояние отсечения для ламп-прожекторов.
  16. Уменьшите расстояние отсечения для камеры.
  17. Отключите AO окружающей среды.
  18. Отключите подповерхностное рассеивание материала.
  19. Используйте текстуры меньшего размера. Изображение размерами 256×256 занимает всего 1% от памяти, требуемой для 2k-изображения и часто в конечной визуализации вообще не происходит потери качества.
  20. Уменьшите количество подразделений в модификаторе «Подразделение поверхности». Каждый уровень подразделения учетверяет (4x) количество граней по сравнению с предыдущим уровнем.
  21. Уменьшите мультиразрешение.
  22. Сделайте маску с отрисованными фоновыми объектами, например, зданиями, и поместите в сцену плоскость с этим изображением вместо самих объектов. Это позволит уменьшить количество вершин/граней.
  23. If you have lots of linked instances of an object, use DupliFaces, as these are instanced. If you have 100 of them, Blender will only store the geometry for one. (Instances themselves take a small amount of memory).

Параметры визуализации

Панель вывода
  • Отключите визуализацию Рёбер.
  • Сохраняйте буферы.
  • Render to a UV/Image Editor, not a pop-up. Render Window.
  • На многоядерных процессорах используйте несколько Потоков (с разбиением изображения на несколько Частей).
  • Decrease the frame count of the animation (and use a lower frame rate for the same duration of animation). For example, render 30 frames at 10 frames per second for a 3-second animation, instead of 75 frames at 25 frames per second.
Панель слоёв визуализации
  • Визуализируйте только интересующие вас слои.
  • Визуализируйте все источники света как один простой прожектор (введите его имя в поле Освещение).
  • Визуализируйте с переопределением на один материал (введите его имя в поле Материал).
  • Отключите ненужные проходы визуализации, например Z, либо отрисовывайте только нужный проход, например, диффузный.
На отдельной панели Затенение доступно шесть вариантов:
  • Отключите тени.
  • Отключите карты окружения.
  • Отключите панорамную визуализацию.
  • Turn off Ray tracing.
  • Отключите подповерхностное рассеивание.
  • Отключите или уменьшите параметры сглаживания.
  • Отключите или уменьшите параметры размытия при движении.
  • Производите визуализацию по частям. Также этот совет поможет вам отрисовать очень большие изображения на слабых ПК. На многоядерных ПК можно каждой части назначить своё ядро.
  • Увеличьте разрешение октодерева.
  • Визуализируйте в процентах от размера вашего окончательного разрешения (например, 25%).
  • Отключите визуализацию Полей.
  • Используйте Границы визуализации для визуализации только некоторого подмножества полного изображения.
Панель запекания
  • Bake Full Render creates a UV texture that colors the objects based on materials, and then uses that UV texture shadeless instead of the material.
  • Запекайте только Ambient Occlusion.
  • Запекайте текстуры для объектов.
  • Запекание нормалей и смещений не ускоряет визуализацию и используется для других вещей.
Панель формата вывода
  • Визуализируйте в меньшем разрешении. Маленькие изображения требуют меньше времени на визуализацию.
  • Выберите более быстрый кодек или настройки кодека.
  • Визуализируйте в оттенках серого (кнопка BW).
  • При использовании формата FFMPEG не активируйте параметр Multiplex audio (Мультиплексирование звука).
  • При использовании формата FFMPEG включите параметр Авторазделение вывода (на панели Кодирование).
  • Визуализируйте только RGB, если вам просто нужны цвета; канал прозрачности A (кнопка RGBA) потребляет дополнительную память и не используется при сохранении файла фильма.

Многопроходный композитинг

Другой стратегией, которую можно использовать для решения проблемы длительной (повторной) визуализации, является структурирование с нуля вашего рабочего процесса, заключающееся в агрессивном использовании композитинга, который описан в разделе «Пост-обработка». При использовании этого подхода вы разбиваете каждую картинку на компоненты, которые могут быть визуализированы отдельно, а затем объединяете эти отдельно отрисованные элементы в готовый фильм. К примеру:

  • If the camera is not moving, then neither is the background: only a single frame is needed. (The same is true of any non-moving object within the frame). These individual elements, having been generated once, can be reused as many times as necessary over as many frames as necessary.
  • И тени, и блики могут быть захвачены отдельно от освещаемых или затеняемых объектов, поэтому их интенсивность, цвет и силу эффекта можно скорректировать позже без прибегания к повторной визуализации.
  • Начните с использования источников света, не отбрасывающих тень (расчёты теней сильнее всего бьют по производительности). Затем используйте источники света «только с тенями» (которые отбрасывают тень, но не излучают свет) для создания теней только там, где вы думаете, что они действительно необходимы (очень часто бывает так, что лишь немногие из теней, которые могут существовать в сцене, нужны на самом деле, а остальные так и вообще просто незаметны).
  • Запутанных ситуаций с освещением можно избежать, обрабатывая каждый объект отдельно от остальных, с последующим объединением фрагментов и «подправкой» результата.

Это очень знакомая идея. Например, в современной звукозаписи всегда используется «мульти-трековый» подход. Отдельные компоненты песни записываются отдельно и изолированно, а затем «сводятся» вместе. «Окончательное сведение» затем проходит через этапы дополнительной обработки, называемой мастеринг, для производства готового продукта (на самом деле, возможности и дизайн современного программного обеспечения для обработки звука прямо аналогичны «узловому» композитору Blender’а).

У такого подхода есть убедительные преимущества:

  • If something is «not quite right», you do not necessarily have to start over from scratch.
  • In practice, the deadline-killer is re-rendering, which ordinarily must be done (in its entirety) just because «„one little thing“ about the shot is wrong». Compositing helps to avoid this, because (ideally…) only the specific parts that are found to be in error must be repeated (or, maybe, the error can be blocked out with a «garbage matte» and a corrected version can be inserted in its place).
  • Sometimes you might find that it is almost what you wanted, but now you would like to add this and maybe take away that. A compositing-based approach enables you to do just that, and furthermore, to do so non-destructively. In other words, having generated the «addition» (or the «mask») as a separate channel of information, you can now fine-tune its influence in the overall «mix», or even change your mind and remove it altogether, all without permanently altering anything.
  • By and large, these stages work two-dimensionally, manipulating what is by that time «a raster bitmap with R, G, B, Alpha and Z-depth information», so they are consistently fast.
  • Поскольку каждая отдельная задача визуализации была упрощена, компьютер может выполнять их, используя гораздо меньше ресурсов.
  • Задачи могут быть распределены среди нескольких разных компьютеров.
  • «After all, the scene does not actually have to be physically perfect, to be convincing». A compositing-based approach lets you take full advantage of this. You can focus your attention (and Blender’s) upon those specific aspects of the scene which will actually make a noticeable difference. It is possible to save a considerable amount of time by consciously choosing to exclude less-important aspects which (although «technically correct») probably will not be noticed.

Of course, this approach is not without its own set of trade-offs. You must devise a workable asset management system for keeping track of exactly what material you have, where it is, whether it is up-to-date, and exactly how to re-create it. You must understand and use the «library linking» features of Blender to allow you to refer to objects, nodes, materials, textures and scenes in a carefully-organized collection of other files. You need to have a very clear notion, in advance, of exactly what the finished shot must consist of and what the task breakdown must be. You must be a scrupulous note-taker and record-keeper. But sometimes this is the best way, if not the only way, to accomplish a substantial production.