Сообщений
14, на страницах:
1добавить сообщение
Создание спичечной мельницы
Автор: Striver
Выбор и изучение объекта
На месячный конкурс в августе 2009 года с названием «
необычный дом» я решил делать домик из спичек. Как устроены такие домики, я понятия не имел, так что лезем, как всегда, в интернет. Яндекс-картинки по запросу «домик из спичек» выдаёт много чего, от простейшего одноэтажного домика-кубика-с крышей до огромных многоэтажных дворцов и соборов. Я остановился на среднем варианте — мельнице.

Первым делом надо было узнать, как вообще такие штуки делают. Раньше я думал, что их склеивают, но выглядели эти домики так, будто там всё гораздо интереснее. Я скачал себе этот урок:
http://www.overview.ru/index.php?id=201, сбегал в магазин за десятком коробков спичек, и весь вечер занимался ручной сборкой согласно этому уроку. Не с первого раза (спички имеют неприятную тенденцию рассыпаться в тот момент, когда уже почти всё сделано), но у меня получилось.
Главным строительным блоком является кубик, когда он достроен, он самодостаточен и не рассыпается. Всё остальное навешивается уже на него. У домика используется 1 такой кубик, а у мельницы 4. Теперь, когда я разобрался с устройством конструкции, можно открывать Блендер.
Моделирование домика

С целью получения в дальнейшем максимального разнообразия спичек я решил делать каждую спичку из 2-х объектов: собственно спички (объект с названием OB_Spich.xxx, где xxx – номер объекта, автоматически присвоенный Блендером) и головки (объект OB_Sera.xxx, да, я с детства привык головку спички называть «серой»). На данном этапе меши были максимально простые. Спичка — просто вытянутый по оси x кубик, сера — тоже очень простой объект, полученный несколькими выдавливаниями, отражениями и сглаживаниями. Размеры спичек я взял, измерив несколько реальных спичек, получилось: длина — 40 мм + полголовки, сторона квадрата профиля — 2 мм. Объект спички я назначил родителем для объекта головки. Размножал я спички исключительно с помощью Alt-D, так что для них всех использовалась одна пара мешей.
Не буду подробно описывать построение кубика, оно лучше описано в уроке, про который я упомянул, приведу только несколько скриншотов слоёв, т.к. я каждый этап построения делал в отдельном слое.

С крышей есть одна сложность, связанная с тем, что спички с правой и левой стороны вверху встречаются в одной точке, поэтому каждую из них нужно слегка повернуть на виде сверху (у меня получилось около 2-х градусов) и, возможно, сдвинуть.

Окончательный вид верхнего этажа:


Первый этаж в середине — это вообще простой кубик без чего бы то ни было. Второй такой же.
Боковая пристройка делается похоже на верхний этаж, но там крыша односкатная, поэтому проблема с поворачиванием спичек на крыше не возникает.
Все украшательства, т.е. окна, двери, трубы делаются простой вставкой спичек в зазоры между спичками, которых там полно.
Небольшой проблемой для меня стало сделать зеркальную копию боковой пристройки. Когда я для всех спичек пристройки просто попытался выполнить Transform-Mirror-X Local, вся конструкция разъехалась кто куда. Тогда я поступил так: добавил невидимый объект (положено брать Empty, но мне он почему-то кажется неудобным, я им никогда не пользуюсь, я взял кубик и удалил у него все грани, оставил только вершины и рёбра), и сделал его родителем всех спичек боковой пристройки. Затем сделал копию пристройки вместе с кубиком (как и всё время до этого, с помощью Alt-D). Потом выделил родительский кубик, и уже к нему применил зеркало и перемещение.
У лопастей приходилось подбирать углы и ширину на их концах, чтобы сошлось и выглядело нормально. Я взял ширину в 18мм. Здесь уже под каждый обломок спички, изображающий распорку, пришлось делать собственный меш, и в дальнейшем отдельно текстурировать. Но их всего 4, так что это мелочи. Кроме того большинство из спичек креплений лопастей расположены под небольшими углами (тоже около 2°). Из 16 спичек, составляющих квадрат 4x4 только угловые стоят ровно, остальные отклоняются к центру. 4 спички, находящиеся в самом центре, отклоняются сразу по 2-м координатам.

Вот окончательный вид строения:

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

Я провёл 3 фотосессии по 5 спичек в каждой. После каждого снимка нужно было повернуть каждую из спичек и снимать снова. Таким образом, у меня появились фотографии 15-ти спичек с каждой из сторон.
Полученные фотографии пришлось долго ковырять в Гимпе. При полном увеличении выяснилось, что некоторые спички имели слишком крупные дефекты, их пришлось забраковать. Я фотографировал на зелёной подложке, и на ней спички выглядели отлично, но в отрыве от неё, уже в Блендере, на текстурах проявлялись отвратительные зелёные отсветы, так что понадобилась некоторая цветокоррекция. Если Вам приспичит фотографировать спички, лучше выбирайте подложку серого цвета. Вот пример окончательных текстур, применённых в Блендере, их полные версии приложены к этому уроку.
На этом изображении уже проведена перегруппировка текстур, чтобы различные стороны одной спички находились рядом, и их было удобнее накладывать на 3D-объекты. Кроме того видно, что торцы выделены отдельно, именно потому, что у них особо сильно пришлось удалять зелёный оттенок, теперь они даже слегка розоватые. Для карты нормалей я сделал обесцвеченную копию этого изображения
Моделирование и текстурирование спичек
Внимательное изучение полученных текстур выявило в общем и так уже известную вещь — в большинстве своём спички не являются идеальными прямоугольными параллелепипедами, на них есть выемки, срезы, погнутости, торчащие во все стороны махры и т.д. Не всё из этого я собирался моделировать, но кое-что сделать всё-таки надо было.

На отдельном слое я сделал несколько независимых копий первоначальной спички (теперь уже с помощью Shift-D). Как я уже писал, пришлось забраковать 4 спички из-за слишком сильных дефектов, так что у меня осталось 11 штук.
Далее я каждую спичку текстурировал самым тупым и медленным методом — выделял по очереди каждую грань, применял команду U – Project from view, и натягивал полученную UV-проекцию грани на нужную спичку в изображении. Затем внимательно рассматривал уже затекстуренную 3D-спичку, и если на текстуре просматривалась какая-нибудь выемка или срез, я их пытался моделировать. Вот для примера иллюстрация одной такой спички. Сложность моделей стала порядка 30-100 вершин, что вполне приемлемо.
В обязательном порядке материал должен быть привязан к мешу, а не к объекту. В самом материале практически никаких настроек я не делал, добавил 2 текстурных канала для цвета и для нормалей.

На головки я не стал натягивать никаких внешних текстур, ограничился двумя процедурными текстурами Clouds разных размеров, влияющих на нормали. Я сделал 10 копий головки и попытался придать им некоторого разнообразия, в основном масштабируя по разным осям и слегка сдвигая вершины.
Вот так выглядят все образцы, собранные вместе. Видно, что 11-ю головку я поленился делать, а также что у обломков слева нет торцов (они и не нужны).
Текстурируем мельницу
Четырём перекладинам на лопастях я просто вручную каждой присвоил свой меш, с этим всё понятно.
Теперь самое весёлое. Имеем:
• 11 мешей-образцов с названиями ME_Spich.xxx (у образцов имена объектов неважны, главное, чтобы отличались от имен объектов строительных спичек)
• 10 мешей-образцов головок с названиями ME_Sera.xxx
• около 900 объектов спичек в мельнице с названиями OB_Spich.xxx
• около 900 объектов головок с названиями OB_Sera.xxx
Нужно равномерно-случайно присвоить меши-образцы соответствующим объектам. Кроме случайного присвоения мешей я добавил случайные повороты вокруг своей оси на 0°, 90°, 180° или 270°.
Вот программа, выполняющая всё это:
# -*- coding: cp1251 -*-
from Blender import Object, Mesh #Импортируем модули Блендера
from random import choice #Импортируем функцию случайного выбора
from math import pi #Импортируем число пи
Mesh_Spich_Name='ME_Spich.' #Дурное воспитание — толстые книжки дали
Object_Spich_Name='OB_Spich.' #привычку присваивать все константы вначале
Mesh_Sera_Name='ME_Sera.' #программы. Здесь определяются части
Object_Sera_Name='OB_Sera.' #имён объектов и мешей
povoroty=[x*pi for x in [0.0,0.5,1.0,1.5]] #список возможных поворотов в радианах
def raznoboy(obj_name, mesh_name): #Объявляем перемешивающую функцию
#Получаем список принимающих объектов
ls_OB=[x for x in Object.Get() if x.name.startswith(obj_name)]
#Получаем список присваиваемых мешей
ls_ME=[x for x in Mesh.Get() if x.name.startswith(mesh_name)]
for ob in ls_OB: #Для каждого объекта в списке
ob.link(choice(ls_ME)) #Присваиваем случайный меш
ob.RotX=choice(povoroty) #Делаем случайный поворот
#Перемешиваем спички
raznoboy(Object_Spich_Name, Mesh_Spich_Name)
#Перемешиваем головки
raznoboy(Object_Sera_Name, Mesh_Sera_Name)
К сожалению, в Блендере русские комментарии могут привести к ошибке выполнения, так что если кому надо, отдельно прилагаю файл без них.
Запускаем скрипт, получаем красиво текстурированную мельницу.
Рендер

Я добавил стандартную изогнутую подложку снизу и 3 лампы: одну точечную с поддержкой теней и пару штук типа Hemi.
Я решил попробовать рендерить в Yafaray.
У всех материалов я оставил тот, что стоит по умолчанию - shinydiffusemat. У спичек я не менял вообще ничего, для серы и подложки выставил цвет. Лампу я сделал слегка желтоватой (типа, лампа накаливания).
Для рендера я выбрал метод Pathtracing.

Настройки материала головки | 
Основная лампа |

Настройки материала подложки | 
Настройки рендера |
Вот результат после нескольких проб с разными настройками:

Прилагаю к уроку .blend-файл, файлы текстур и программу.
Бленд-файл:
http://striver00.narod.ru/Spichki/Spichki_blend.zipТекстуры:
http://striver00.narod.ru/Spichki/Spichki_texture.zipОригинал урока:
http://striver00.narod.ru/Spichki/Spichki_html.zip
Сообщений
14, на страницах:
1добавить сообщение