Использование скрипта ‘Auto Masonry’

Материал из Blender3D.

Перейти к: навигация, поиск

Автор: Paul Spooner

Перевод: Striver

Содержание

Введение

Я всегда любил зАмки. Когда я начал заниматься 3D-моделированием, я использовал средство, называемое "Ray Dream Designer" и первый урок, который я сделал, был замком. Это было сопливым замком с плоскостью, слабо текстурированными стенами, без окон, и т.п. Одна вещь, которая всюду выползала - то, что модели стен замка имели тенденцию быть текстурированными плоскостями, возможно побеленными, со смоделированными краеугольными камнями. У реальных замков видно каждый камень, неровные ряды и размеры камней, и т.п. Чисто текстурная версия выглядит хорошо на расстоянии, но Вы не сможете приблизиться к ним без проявления подделки. Также трудно выбить несколько блоков или добавить ущерб от блокады. Я всегда мечтал о построении замка, который должен выдержать внимательный осмотр, но инструментальные средства для этого были недостаточными. Я не собирался строить его кирпич за кирпичом!

Во всяком случае, я оставался в мечтах некоторое время, переходя на новые версии программ, и в конечном счете переключился на Блендер. С присутствием языка расширения Python моя мечта всплыла на поверхность. Если компьютер мог бы делать черновую работу, тогда все, что я должен бы сделать - общий проект и прикосновения к работе. Засчитано! Я посмотрел вокруг, чтобы увидеть, вдруг кто-нибудь уже сделал это, но я не смог найти что-либо аналогичное тому, что я хотел. Это смутило меня, это казалось простой проблемой для решения. Много позже, более чем через шестьсот строк кода, я обнаружил, почему это не могло быть так просто, как я ожидал.

Далее следует мой первый крупный наскок в питон-скриптинг и его результаты. Вначале будет секция о том, как использовать сценарий, одновременно с короткой историей кодирования, и некоторыми вещами, которые я выучил в процессе. Я пока абсолютно не удовлетворен сценарием, но он уже вполне пригоден, и я надеюсь, будет полезен многим из вас.

Использование Auto Masonry

GUI скрипта
GUI скрипта

От переводчика: в тексте статьи почему-то нет ссылок на сам скрипт, но они вместе с кратким описанием есть на официальном сайте: blender.org

Давайте прыгнем прямо в эту забавную штуку? Если Вы не имеете его, загрузите текущую версию сценария и установите его в вашей папке скриптов (Обычно "...Blender/.blender/scripts"). Для того, чтобы запустить сценарий, откройте окно "Scripts" и выберите "Scripts>>Wizards>>Auto Masonry". Вы должны увидеть приблизительно это.

рис. 2
рис. 2
Это - встроенный GUI (графический интерфейс пользователя ). Если Вы нажмёте "Make this wall!" ("Сделать эту стену!"), у Вас должно получиться нечто, похожее на рис.2.

Если нет, то Вам, возможно, необходимо установить Python. Если это не работает, Мне, возможно, нужно исправить сценарий. Текущее воплощение позволяет Вам делать стены с прямоугольными окнами, дверями, и зубцами или без них. Сценарий генерирует два меш-объекта, "wall" (стена) и "grout" (раствор).

Все кнопки и опции имеют поясняющую выпадающую подсказку, так что чувствуйте себя свободно, пробуя этот скрипт, не читая целиком эту скучную секцию. (Гм... Подсказки-то на английском :) , так что лучше всё-таки взглянуть – прим. пер.)

Если Вы не чувствуете себя совсем смело, то здесь - объяснение всех опций в GUI.

  • "Make this wall!" (Сделать эту стену): Эта кнопка генерирует стену, которая соответствует выбранным Вами опциям. Если есть выбранная кривая, длина стены будет установлена длиной этой кривой, стена деформируется, чтобы следовать за кривой, и будет иметь кривую в качестве родителя. Это означает, что все деформации pos/rot/size (позиции/вращения/размера) кривой будут также приложены и к стене. Если кривая замкнута, сценарий допустит что это отличный круг. Если кривая не является кругом, стена, вероятно, не будет правильной длины
  • "WALL" (СТЕНА): Эта настройка управляет общим размером стены в BU (blender units, единица длины Блендера). "Wall Height" (Высота Стены) не включает зубцы (смотри "CRENELS", ниже).
  • "Straight Edges/Offset Edges" (Прямые Края/Смещённые Края): В основном, если Вы хотите сделать закрытую цикличную стену, включите "Offset Edges", в противном случае "Straight Edges".
  • "STONES" (КАМНИ): эта настройка управляет диапазоном размера камней. "Depth" (Глубина) также установит толщину стены. Камни могут превысить эти пределы на краях, чтобы создать приступ, или из-за настройки "Row Weight" (Вес ряда). Эта настройка - для средней линии grout, так что бОльший "Grout W" уменьшит фактический размер камней.
  • "Bevel" (Скос): размер скоса. Если установлено в нуль, камни будут иметь квадратные углы, полезно для уменьшения количества полигонов.
  • "Grout W" (Раствор W): Ширина раствора, видимая спереди. (К сожалению, на краях стены раствор выпирает за пределы камней на эту величину – прим. пер.)
  • "Grout D" (Раствор D): Как далеко раствор смещается от лицевой стороны камней. Это соотносится с величиной "Min Depth", так что если есть большая разница в глубине, раствор будет совсем далеко между толстыми камнями.
  • "Row Weight" (Вес ряда): Эта настройка управляет тем, насколько высота ряда влияет на ширину камней в этом ряду. Нормальными являются положительные величины (выше камни, шире камни), но отрицательные величины также могут быть допустимыми (выше камни, более узкие камни). Я обычно устанавливаю это между 0.0 и 1.0, в зависимости от применения.
  • "DOOR" (ДВЕРЬ) и "WINDOW" (ОКНО): Эти настройки ведут себя очень похоже. Включайте и выключайте дверь или окна, нажимая большую кнопку, помеченную "DOOR" или "WINDOWS" соответственно. "Position" (Позиция) двери - от начала до центра двери. Height (Высота) и Width (Ширина) ведут себя так, как Вы и должны от них ожидать. Spacing (расстояние, размещение) Окна будет отцентрированы между краями, и краями двери (если она присутствует). Верх окна будет настройкой "Height" двери, даже если двери были выключены. Это означает, что перемычки двери и окна имеют одинаковую высоту (обычно так и есть в архитектуре) (мне кажется, что лучше бы эти высоты задавались независимо - прим. пер.) Кнопка "Angled" (Угловой) переключает угол вдоль сторон двери/окна, как, например, это должно быть в замковых щелях для стрел. Обычно, двери не имеют подобных углов, но я оставил эту опцию, просто на случай, если Вам это понадобится.
рис. 3
рис. 3
  • "CRENELS" (ЗУБЦЫ): Увенчивая часть стены, зубцы часто видны на стенах замков. Height (Высота), width (ширина) и spacing (расстояние), работают противоположно окнам, устанавливая размер каменных частей, а не просветов. Зубцы всегда угловые, но все же я добавлю опцию, чтобы управлять этим в будущем.
  • "Exit" (Выход): Эта кнопка увольняет каменщиков и позволяет Вам делать свою работу. Очень полезно, если Вы закончили создавать каменные структуры к настоящему времени.

Сценарий довольно быстрый, так что Вы можете создавать очень большие стены, если хотите. Я думаю, для стены на рисунке 3 при генерации использовалось тридцать секунд.

Несколько методов

рис. 4
рис. 4
рис. 5
рис. 5

Вот несколько хитростей, которые я нашел. Я подозреваю, что удачливые пользователи найдут много больше.

  • Пути: Сделайте узкую, высокую, стену без окон, дверей, или зубцов и настройте её, чтобы она следовала за кривой на оси Z. Это - дорога, улица, или булыжное шоссе! Смотри рисунок 4
  • Поддерживающие Балки: Зубцы можно также сделать, чтобы проложить поддерживающие балки для многоэтажного замка, блокадных защитных конструкций, и т.п.. Смотри рисунок 5.
  • Множественная стена: Вы можете построить стену из многочисленных сегментов. Это даст Вам несколько различных стилей окон и дверей сложенных вместе. Пример для поддерживающих балок на самом деле был создан сложением в стык двух стен одна поверх другой.
  • Sub Surf: Скрипт автоматически настраивает все величины реберных складок в 0.5, что даёт довольно хорошие результаты при Subsurf.
  • Запекание текстуры: Отрендерите величины Z стены в изометрическом виде и сохраните это в текстуру. Теперь Вы можете использовать это как bump-канал или маску текстуры для низкополигонной стены. Использование "Offset Edges" (смещение краёв) и правильное отсечение дадут seamless tiling (полные тайлы ?)!
  • Множественные Кривые Деформации: Часто стены заостряют или изгибают. Применяя деформацию кривой по оси Z поверх оси X, можно получить множество эффектных стен. Это можно также использовать, чтобы сделать более реалистичные улицы (смотри пример искривленного профиля пути), или мультяшные башни.

Я надеюсь, что этот скрипт позволит вам реализовать ваши мечты о реалистичных замках, кирпичных стенах, дорогах, текстурах, башнях, и чем-нибудь еще, что может удовлетворить Вас. Мне будет приятно, если Вы сообщите, для чего Вы используете это. Сообщите, если Вы натолкнётесь на любые баги, и я попытаюсь исправить их немедленно.

Написание скрипта

Если Вы все еще читаете это, Вы, возможно, интересуетесь тем, как был запрограммирован скрипт. Код достаточно хорошо документирован, так что чувствуйте себя свободно, чтобы прыгнуть непосредственно внутрь и поиграть с ним. Вот небольшое отступление о том, как я писал его, а также несколько уроков, что я узнал. Некоторые из них - это просто практика хорошего программирования, некоторые характерны для Блендера.

Прежде чем я смог бы запрограммировать что-нибудь, я должен был выучить Питон. В колледже я взял курс компьютерного программирования, и я сделал несколько программ в моё свободное время, так что некоторый фон был сформирован. По существу, все языки программирования являются выражениями логической последовательности, и Питон этим не отличается. Я работал через встроенные уроки "Getting Started" (Подготовка) в Питоне, писал несколько небольших приложений, чтобы поиграться с возможностями, и получил достаточно знаний о синтаксисе. В этом месте, я начал погружаться в питоновые расширения Блендера. Мой первый сценарий в Блендере брал меш-объект и создавал каждый возможный многоугольник с существующими вершинами. Не слишком полезно, но довольно забавно. Я также обнаружил, что Вы можете разрушить Блендер, пытаясь делать меш-объект со слишком большим количеством полигонов.

На этом этапе я также изучил множество сценариев, включенных в Блендер. Вот первые две вещи, которые я узнал о программировании расширений на Питоне:

Урок 1: Как ваши домашние задания. Это - истина в каждом аспекте жизни и применяется здесь тоже. Все основные уроки по питону, которые я делал - были неоценимыми в представлении о том, как сделать структуру эффективного сценария. Просмотр на форумах Blenderartist.org тоже много помогает. Если Вы приложите усилия в обнаружении правильного пути делать вещи, это сделает Вашу работу позже гораздо легче. Изучение Питоне прежде, чем изучение Питона Блендера, действительно помогает сохранить вещи правильными (??).

Урок 2: Документируйте ваш код. Это - одна из наибольших точек напряжения в информатике, и это так полезно! Если кто-нибудь еще захочет использовать части вашего сценария, они не должны будут реконструировать каждую строку кода. Если Вы отложили сценарий на месяц или два, Вы не вспомните, что и где делается, поверьте мне. Я знаю, что это мешает. Я знаю, что это кажется бессмысленным. Пожалуйста, ох, пожалуйста, документируйте ваш код. При рассмотрении примеров документация помогала мне очень сильно.

Как только я сделал несколько мини-сценариев в Блендере, я начал создатель стен. Так как сценарий развивался от стен из плоских квадратов до сложных стен с дверями, окнами, и краевыми характеристиками, я обратил внимание на несколько других вещей:

Урок 3: Программирование расширений Питона - не так трудно, как это звучит. Каркас расширения в Блендере включает некоторые очень передовые инструментальные средства, которые делают программирование расширений довольно элементарным. Если у вас есть идея для сценария, и есть уверенность в ваших навыках программирования, дерзайте!

Дополнение Урока 3: Но это труднее, чем Вы думаете. Подготовьтесь к расстройствам. Даже если это приятно, интеграция Питон-Блендер далека от идеальной. Путь логики работает часто (но обескураживающе, не всегда) как это будет работать. Готовьтесь упорно продвигаться через жесткие места. При работе над сценарием у меня было открыто три других окна. "Python Scripting reference" (Ссылки API Питонового скриптования) (доступная из Блендера в меню Help (Помощь)), Python package help menu (меню Помошь пакета Питон), и форум скриптования Blenderartist.org. Эти три, вместе с большой настойчивостью, должны провести Вас через трудные моменты при скриптовании.

При развитиии Сценария от простого к сложному, я начал обнаруживать, что моя оригинальная архитектура была недостаточной или очень неэффективной для того, что я пытался делать. Я думаю, я переписал каждую функцию, по крайней мере, по одному разу сверху донизу. Первоначально я использовал сценарий "Bevel Center" (Центр Скоса), чтобы делать скос, но я получил необходимость перекодировать части скрипта, чтобы он работал через внешний вызов (который должен потребовать загрузку измененной версии Bevel Center вместе с Auto Masonry), и это было очень медленным. В конце я перекодировал свой основной функциональный блок, чтобы включить скос. В начале проекта я имел свободный метод формирования, что я выкинул после нескольких дней работы с этим. Вот четвертый раздел:

Урок 4: Будьте готовы к тому, что вы передумаете ваши методы. Даже если это означает начать заново. Иногда делайте шаг назад и говорите себе "это имеет смысл делать так, или есть лучший путь?" Если Вы хотите получить хороший сценарий, всегда оптимизируйте для лучшего пути. Иногда это сделает совсем не то, что Вы имели в виду, но, это лучше, чем не делать совсем ничего.

У меня все еще есть масса фич в уме для будущей разработки. Я также думаю, что я перепишу много структур, когда я вернусь в проект (в соответствии с уроком 4). Тем не менее, как только сценарий по большей части будет завершен, будет время для:

The GUI! (Графический интерфейс пользователя) Написание интерфейса может быть забавной или наиболее огорчительной частью процесса, в зависимости от того, как хорошо Вы управляли вашими переменными. Если Вы хорошо написали бы функции и управляли переменными, интерфейс должен быть красиво (изрядно) простым. Написание интерфейса в Блендере красиво (изрядно) легко и действительно завершает сценарий. С другой стороны, не чувствуйте себя что Вас заставляют включать каждую опцию на интерфейс, если она не очень хорошо поддерживается, или не надежна. Есть несколько характеристик в Auto Masonry, которые почти функциональны в коде, но не на графическом интерфейсе пользователя. Если ваш код хорошо документирован, тогда головастые программисты будут способны использовать эти фичи как-нибудь, а не-включение их в интерфейс поможет уменьшить головные боли у пользователей-новичков.

Будущие Улучшения

Я хотел бы улучшать этот сценарий в нескольких направлениях. К несчастью, прямо сейчас мое время поглощено другими проектами. Вот несколько вещей, которые я хотел бы добавить. Если у вас есть идеи для других фич, пожалуйста сообщите:

Арки: Прямо сейчас окна и двери сверху плоские. Я хотел бы добавить как круглые, так и заостренные арки. Это потребует значительного перекодирования основной архитектуры сценария, но я думаю, что это будет иметь смысл.

Изъяны: Не все камни идеальны. Некоторые камни могут иметь отломанные углы, или даже трещины. Ранняя версия (при использовании Bevel Center), была способна откалывать углы, но я не добавил эту возможность при преобразовании во внутреннюю схему скоса. Добавление трещин должно быть ещё труднее, но я уверен, что возможно.

Grout (Раствор): Прямо сейчас раствор - просто второй набор блоков за камнями. На искривленных поверхностях это создает проблемам с раствором, в которых Subsurf помогает, но не исправляет. Алгоритм настоящего каменного раствора должен также потребовать серьёзного пересмотра кода, но должен также создать значительно лучший окончательный продукт, и должен допускать скошенный раствор.

Улучшенное размещение окна и двери: Прямо сейчас GUI для размещения окна и двери довольно ограничено. Сам сценарий может принимать любую конфигурацию размещения окна и двери, но я не смог придумать, как просто встроить это в интерфейс пользователя. Если есть хороший способ этого, сообщите кто-нибудь?

Сохраняемые настройки: способность сохранять настройки в файл должна упростить работу с настройками. Это должно также допустить создание многочисленных стен со "смещёнными краями", которые будут объединяться одно-с-другим, или краеугольных камней со взаимоблокировкой краев. К несчастью, это также потребует аналогичного тщательного пересмотра кода.

Так в основном, когда у меня появится несколько недель для программирования, я перезапишу сценарий, чтобы сделать его лучше, чем когда-либо. Когда я сделаю, я попытаюсь включить любые запрошенные возможности, которые я получу к тому моменту. Кроме того, если кто-нибудь еще чувствует смелость, я посодействую Вам, чтобы вносить изменения в сценарий самим. Я буду счастлив узнать о всех улучшениях, которые могут быть сделаны, и я уверен что их много.

Я надеюсь, что этот скрипт позволит вам реализовать ваши мечты о реалистичных замках, кирпичных стенах, дорогах, текстурах, башнях, и чего-нибудь еще, что может удовлетворить Вас. Мне будет приятно, если Вы сообщите, для чего Вы используете это. Сообщите, если Вы натолкнётесь на любые баги, и я попытаюсь исправить их немедленно.

Счастливого блендинга!
Личные инструменты