Скрипты в 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-materials Автор: Maks Zinchenko дата: 11:52 Оценка: 5

20 комментариев:

  1. # not exists one or both files - dowload file
    По-моему, это неправильно. На BM существует тенденция переименовывать материалы. При этом названия картинок не меняются. Так что, имхо, правильнее было бы проверять существование только превьюшки.

    ОтветитьУдалить
  2. я думал, что названия должны всегда совпадать...

    ОтветитьУдалить
  3. Ещё один косяк нашёл. На BM много материалов с одинаковыми названиями. Скрипт cкачает только первый. Второй материал он пропустит, как уже имеющийся.

    ОтветитьУдалить
  4. вот вывод на пустом репозитарии
    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 материалов вылетает в трубу

    ОтветитьУдалить
  5. это при пропускании через "фильтр" имени так получается, наверное надо его поменять.

    ОтветитьУдалить
  6. def CharsReplace(instring):
    instring=instring.replace('/','-')
    instring=instring.replace('\\','-')
    instring=instring.replace("'",'')
    instring=instring.replace(' ','_')
    instring=instring.replace('\n','')
    return instring
    вот этот фильтр

    ОтветитьУдалить
  7. то есть названия у матов таки разные просто после обрезки имена получаются одинаковыми и скрипт считает, что такой уже есть

    ОтветитьУдалить
  8. Нет, названия действительно одинаковые
    Вот кусок вывода communicator.php?c=7
    'Rock','471728832ed5c.jpg' 393,'rock','473d21b605e8b.jpg'

    Причём, названия могут совпадать вплоть до регистра.

    ОтветитьУдалить
  9. да, щас залез на BM , увидел,
    надо таки пилить синхронизацию не на основе названия

    ОтветитьУдалить
  10. но тогда простой скрипт на основе сравнивания имен файлов не выйдет никак, придется "вести" базу

    ОтветитьУдалить
  11. Ну, да. Как-то так. Хотя бы на основе индексов материалов. Я не стал заморачиваться (да и просто не знал про communicator.php), я просто получаю список последних материалов по RSS. Надо будет переделать.

    ОтветитьУдалить
  12. да, но по индексам где то надо хранить привязку к именам файлов, иначе хрен найдешь по имени (индексу) нужный файл
    в принципе не сложно сделать, но мне показалось так сделать проще на тот момент

    ОтветитьУдалить
  13. Как вариант, можно индекс хранить в имени файла. Например, так:
    Rock.393.blend
    И переделывать чуть. Правда, придётся заново локальную репу создавать. Или придумать что-то для обновления структуры.

    ОтветитьУдалить
  14. да, с таким именем вариант, а структуру обновить будет сложно, ведь в локале нету исходных индексов - вручную чтоли ? :)

    ОтветитьУдалить
  15. Ну, для обновления структуры думать надо. Например, существующий в локальной репе материал должен быть первым из дублей в списке, который выдаёт communicator.php. С недублирующимися материалами ещё проще. Отсюда и плясать.

    ОтветитьУдалить
  16. а ты не думал "прикрутить" локальный репо к блену, создать наподобие библиотеки матов удобной внутрях

    ОтветитьУдалить
  17. Или вообще грохнуть дубли и закачать заново. Их не так уж и много.

    ОтветитьУдалить
  18. Нет, не думал. У меня пока с питоном туговато. К тому же, по-моему, блендеровский питон не даёт возможности просмотреть превьюшки в окне работающего скрипта. А без превьюшек никакого удобства не будет.

    ОтветитьУдалить
  19. как не дает?
    в их скрипте родном он вроде все дает просмотреть

    ОтветитьУдалить
  20. Хм. Действительно... Даёт... Ну, тогда просто переделать этот скрипт более удобоваримый вид. Там, думаю, не сложно...

    ОтветитьУдалить

Все права защищены BlenderTech © 2008 - 2015
Поддержка BloggerSweetheme
Автор изображений для темы: friztin. Технологии Blogger.