Скрипты в Blender. Скрипт для Blender-materials
Каждый Blender - пользователь скорее всего знаком с известным репозитарием материалов на blender-materials.org. Все материалы (а их только файлов около 600), предоставленные на этом ресурсе бесплатны и доступны для использования в любых работах.
Мне этот ресурс также понравился.
Если вы внимательно изучили его, то заметили, что разработчики написали скрипт для Blender, который позволяет скачивать прямо в Blender материалы из репозитария. Скрипт очень полезный и удобный - материалы под рукой, главное чтобы был Интернет.
Один мой знакомый также использовал этот скрипт, однако, как и многим из нас, ему хотелось не скачивать материалы в процессе работы, а иметь все хранилище у себя локально. С этого и началось...
Сначала я попробовал исправить скрипт разработчиков, чтобы была возможность скачивать все хранилище. Однако позже я решил, что незачем использовать Blender для по-сути обычной задачки - скачивание файлов и складирование их по папкам. Поэтому я написал просто Python-скрипт, который работает в Python-среде.
Скрипт называется bmrs.py (Blender Material Repository Synchronisation).
Перед началом работы с ним ознакомьтесь с правилами использования:
Хранилище Blender-Materials - достаточно большое, более 70 Мб - так что не забудьте прикинуть свои затраты на интернет-траффик.
Выбирите папку, в которой вы организуете хранилище и скопируйте туда скрипт. Скрипт должен иметь права записи в эту папку (важно для unix-like пользователей). При работе скрипт создаст папку repo и в ней уже будет создавать папки категорий материалов, как они представлены на сайте.
Скрипт скачивает материалы и изображения предварительного просмотра для них. Если такой материал и превью уже есть в вашем локальном репо, файлы скачиваться не будут, но если нет файла материала или превью для него - оба файла будут скачаны заново. Такое правило синхронизации.
Вы можете прервать работу скрипта средствами операционной системы. При следующем запуске скрипт продолжит закачивать только недокаченные материалы и превью.
Работа скрипта сопровождается сообщениями в консоли о скачивании.
Как запустить скрипт?
В Linux : python bmrs.py
В Windows : python.exe bmrs.py
при условии что переменные среды у вас настроены как надо.
Вы можете его запустить и через Blender - открыть файл скрипта в текстовом редакторе и нажать Alt + P. Скорее всего, репозитарий начнет тогда создаваться не рядом с месторасположением файла, а в папке, в которой установлен Blender. Это не самый лучший вариант - у вас может не быть прав доступа на запись в эту папку.
Ссылки для скачивания скрипта:
http://narod.ru/disk/4506413000/bmrs.py.html
или
http://ifolder.ru/9652058
или
http://cnclipkij.googlepages.com/bmrs.py
Это только первая версия скрипта, не без недостатков. А нужно ли ее улучшать - решайте сами, пишите комментарии.
P.S. копия репозитория и скрипт также будет на диске BlenderTech №1. Установив его себе, вы сможете закачивать только новые материалы, которые еще не появились в репозитарии на момент выпуска диска.
Мне этот ресурс также понравился.
Если вы внимательно изучили его, то заметили, что разработчики написали скрипт для Blender, который позволяет скачивать прямо в Blender материалы из репозитария. Скрипт очень полезный и удобный - материалы под рукой, главное чтобы был Интернет.
Один мой знакомый также использовал этот скрипт, однако, как и многим из нас, ему хотелось не скачивать материалы в процессе работы, а иметь все хранилище у себя локально. С этого и началось...
Сначала я попробовал исправить скрипт разработчиков, чтобы была возможность скачивать все хранилище. Однако позже я решил, что незачем использовать Blender для по-сути обычной задачки - скачивание файлов и складирование их по папкам. Поэтому я написал просто Python-скрипт, который работает в Python-среде.
Скрипт называется bmrs.py (Blender Material Repository Synchronisation).
Перед началом работы с ним ознакомьтесь с правилами использования:
Хранилище Blender-Materials - достаточно большое, более 70 Мб - так что не забудьте прикинуть свои затраты на интернет-траффик.
Выбирите папку, в которой вы организуете хранилище и скопируйте туда скрипт. Скрипт должен иметь права записи в эту папку (важно для unix-like пользователей). При работе скрипт создаст папку repo и в ней уже будет создавать папки категорий материалов, как они представлены на сайте.
Скрипт скачивает материалы и изображения предварительного просмотра для них. Если такой материал и превью уже есть в вашем локальном репо, файлы скачиваться не будут, но если нет файла материала или превью для него - оба файла будут скачаны заново. Такое правило синхронизации.
Вы можете прервать работу скрипта средствами операционной системы. При следующем запуске скрипт продолжит закачивать только недокаченные материалы и превью.
Работа скрипта сопровождается сообщениями в консоли о скачивании.
Как запустить скрипт?
В Linux : python bmrs.py
В Windows : python.exe bmrs.py
при условии что переменные среды у вас настроены как надо.
Вы можете его запустить и через Blender - открыть файл скрипта в текстовом редакторе и нажать Alt + P. Скорее всего, репозитарий начнет тогда создаваться не рядом с месторасположением файла, а в папке, в которой установлен Blender. Это не самый лучший вариант - у вас может не быть прав доступа на запись в эту папку.
Ссылки для скачивания скрипта:
http://narod.ru/disk/4506413000/bmrs.py.html
или
http://ifolder.ru/9652058
или
http://cnclipkij.googlepages.com/bmrs.py
Это только первая версия скрипта, не без недостатков. А нужно ли ее улучшать - решайте сами, пишите комментарии.
P.S. копия репозитория и скрипт также будет на диске BlenderTech №1. Установив его себе, вы сможете закачивать только новые материалы, которые еще не появились в репозитарии на момент выпуска диска.
Скрипты в Blender. Скрипт для Blender-materials
Автор: Maks Zinchenko
дата:
11:52
Оценка:
# not exists one or both files - dowload file
ОтветитьУдалитьПо-моему, это неправильно. На BM существует тенденция переименовывать материалы. При этом названия картинок не меняются. Так что, имхо, правильнее было бы проверять существование только превьюшки.
я думал, что названия должны всегда совпадать...
ОтветитьУдалитьЕщё один косяк нашёл. На BM много материалов с одинаковыми названиями. Скрипт cкачает только первый. Второй материал он пропустит, как уже имеющийся.
ОтветитьУдалитьвот вывод на пустом репозитарии
ОтветитьУдалитьalready has one Fabric-Clothes\leather.blend
already has one Fabric-Clothes\Leather.blend
already has one Fabric-Clothes\Quilt.blend
already has one Fibre-Fur\Cat_fur.blend
already has one Fibre-Fur\Hair.blend
already has one Glass\Sungalss.blend
already has one Metal\Gold.blend
already has one Metal\Gold.blend
already has one Metal\Rust.blend
already has one Metal\Rust.blend
already has one Misc\Camouflage.blend
already has one Misc\Diamond.blend
already has one Misc\fireball.blend
already has one Misc\Rope.blend
already has one Misc\Wax.blend
already has one Nature\Grapes.blend
already has one Nature\Orange.blend
already has one Nature\Orange.blend
already has one Organic\Brain.blend
already has one Organic\Brain.blend
already has one Organic\eye.blend
already has one Organic\Eye.blend
already has one Organic\Simple_Skin.blend
already has one Organic\Skin.blend
already has one Organic\Skin.blend
already has one Organic\Skin.blend
already has one Stone\Alabaster.blend
already has one Stone\Asphalt.blend
already has one Stone\Floor_Tiles.blend
already has one Stone\Floor_Tiles.blend
already has one Stone\marble.blend
already has one Stone\Marble.blend
already has one Stone\rock.blend
already has one Wall\Old_Brick.blend
already has one Wall\Plaster.blend
already has one Water\ice.blend
already has one Wood\Cork.blend
already has one Wood\Parquet.blend
38 материалов вылетает в трубу
это при пропускании через "фильтр" имени так получается, наверное надо его поменять.
ОтветитьУдалитьdef CharsReplace(instring):
ОтветитьУдалитьinstring=instring.replace('/','-')
instring=instring.replace('\\','-')
instring=instring.replace("'",'')
instring=instring.replace(' ','_')
instring=instring.replace('\n','')
return instring
вот этот фильтр
то есть названия у матов таки разные просто после обрезки имена получаются одинаковыми и скрипт считает, что такой уже есть
ОтветитьУдалитьНет, названия действительно одинаковые
ОтветитьУдалитьВот кусок вывода communicator.php?c=7
'Rock','471728832ed5c.jpg' 393,'rock','473d21b605e8b.jpg'
Причём, названия могут совпадать вплоть до регистра.
да, щас залез на BM , увидел,
ОтветитьУдалитьнадо таки пилить синхронизацию не на основе названия
но тогда простой скрипт на основе сравнивания имен файлов не выйдет никак, придется "вести" базу
ОтветитьУдалитьНу, да. Как-то так. Хотя бы на основе индексов материалов. Я не стал заморачиваться (да и просто не знал про communicator.php), я просто получаю список последних материалов по RSS. Надо будет переделать.
ОтветитьУдалитьда, но по индексам где то надо хранить привязку к именам файлов, иначе хрен найдешь по имени (индексу) нужный файл
ОтветитьУдалитьв принципе не сложно сделать, но мне показалось так сделать проще на тот момент
Как вариант, можно индекс хранить в имени файла. Например, так:
ОтветитьУдалитьRock.393.blend
И переделывать чуть. Правда, придётся заново локальную репу создавать. Или придумать что-то для обновления структуры.
да, с таким именем вариант, а структуру обновить будет сложно, ведь в локале нету исходных индексов - вручную чтоли ? :)
ОтветитьУдалитьНу, для обновления структуры думать надо. Например, существующий в локальной репе материал должен быть первым из дублей в списке, который выдаёт communicator.php. С недублирующимися материалами ещё проще. Отсюда и плясать.
ОтветитьУдалитьа ты не думал "прикрутить" локальный репо к блену, создать наподобие библиотеки матов удобной внутрях
ОтветитьУдалитьИли вообще грохнуть дубли и закачать заново. Их не так уж и много.
ОтветитьУдалитьНет, не думал. У меня пока с питоном туговато. К тому же, по-моему, блендеровский питон не даёт возможности просмотреть превьюшки в окне работающего скрипта. А без превьюшек никакого удобства не будет.
ОтветитьУдалитькак не дает?
ОтветитьУдалитьв их скрипте родном он вроде все дает просмотреть
Хм. Действительно... Даёт... Ну, тогда просто переделать этот скрипт более удобоваримый вид. Там, думаю, не сложно...
ОтветитьУдалить