28 октября 2009 в 18:12Рейтинг: 0
0
0
Я тут, утекли деньги с модема, а потом подкрался северный пушной зверь - сессия

Прикрепляю архив с экспериментальным скриптом.
Использование:
1. Кидаем файл obj_blen2pov.py в папку scripts
2. Сохраняем сцену в любом файле
3. В меню File -> Export выбираем пункт "POV Ray exporter"
4. В появившемся окошек выбираем All (все остальные варианты ни к чему хорошему не приводят)
5. В папке с .blend файлом появляются файлы с расширениями .inc .pov .ini (если сцена в файле test.blend, появятся test_scene.pov, test_mater.inc, test_mesh.inc, test_curve.inc, test_lamp.inc, test.ini)
6. Запускаем pov передав .ini файл (в никсах набрать в консоли povray имя .ini файла, например povray test.ini, если находимся в каталоге со сценой)
Скрипт тестировался в Blender 2.48a, Python 2.5, AltLinux 4.1.
Скрипт не тестировался в винде - работоспособность не гарантируется (нуждаюсь в помощи для корректного портирования).
Нормально экспортируется:
* Меши (включая smooth faces, мульти-материал, uv развёртки (не текстуры!))
* Диффузные цвета материалов.
* Расположение и угол поля зрения камеры.
* Расположение, цвет, угол расхождения лучей (для spot), размер (для area) у lamp, spot, sun и area источников света.
Побочный эффект: все меши в сцене будут порезаны на треугольники (pov не принимает четырёхугольники в мешах) ИЗМЕНЕНИЕ НЕОБРАТИМО! ЗАПУСКАЙТЕ СКРИПТ ТОЛЬКО УБЕДИВШИСЬ, ЧТО ИМЕЕТЕ КОПИЮ СЦЕНЫ ДЛЯ ОТКАТА К НОРМАЛЬНОМУ СОСТОЯНИЮ! В настоящее время работаю над устранением этой проблемы.
Глобальные проблемы связанные с особенностями SDL POV:
* Самая основная - текстура поверхности мешей (texture) и свойства внутреннего пространства (interior) описываются разными блоками, каждый меш может иметь множество текстур но только один интериор (а значит только однин коэффициент преломления, один тип подповерхностного рассеивания и т.д.). Если сделать в Блендере мраморную статуэтку с самоцветами как один объект, в POV Ray не получится назначить такому объекту и чистую прозрачность самоцветов и полупрозрачность мрамора. Единственный выход - делать самоцветы и мрамор разными объектами, осталось только придумать, как объяснить POV Ray когда это надо делать, а когда не стоит. На текущий момент решение не слишком элегантно: самоцветы и мрамор делать разными объектами в Блендере (будет очень весело если придётся двигать такую конструкцию, назначить общего предка и работать с ним не получится см. след. проблему, а ещё веселее подгонять геометрию одного объекта при изменении геометрии другого).
* Ориентация объектов имеющих родителей передаётся некорректно (тоже можно сказать о модификаторах и ограничителях) - системы координат Блендера и POV Ray сильно отличаются, что мешает прямо передать матрицу трансформации, надеюсь, что в Блендер 2.5 будет проще, в противном случае, потребуется помощь математика. Необходимо применить все модификаторы перед экспортом.
* Многие настройки рендеринга требую подстройки всех или многих объектов сцены (radiosity для корректной работы требует установки ambient всех объектов в ноль, фотоны для нормальной работы нуждаются в указании объектов-целей на которые они будут испускаться, и эти цели нужно передать экспортёру, или вручную править секции объектов)
* Генератор процедурных текстур представляет собой язык написания шейдеров (хотя и высокоуровневый), как приделать к этому языку GUI - на ум приходит только нечто подобное блендеровским нодам, кто будет писать вторые ноды к Блендеру? Вариант для нищих духом - создаём набор макросов-образцов под типовые нужды (металл, пластик, дерево и т.д.) но это очень сильно ограничит изобразительные возможности или приведёт к многокилометровому списку рецептов (которые тоже придётся кому-то написать).
Скрипт писался для самого себя, меня он в целом устраивает, до выхода Блендер 2.5 радикальных изменений (вроде добавления графического интерфейса) с моей стороны не будет.
Короче, на данный момент довольно сырое поделие, хотя и способное сгенерить рабочие файлы, пригодные для экспериментов с POV Ray.
Скрипт распространяется под GPL v3.
Прикреплен файл: blen2pov.zip