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

Карта мира — это модно! За последние несколько десятков лети из вполне функциональной штуковины она превратилась в полноценный интерьерный объект, который не только украшает пространство, но и придает ему индивидуальность и оригинальность. Купить необычную карту мира сегодня — совсем не проблема: многие интернет-магазины предлагают принты любых размеров и на любых носителях, однако, если вы хотите, чтобы ваш дом действительно выглядел особенным, подумайте о том, чтобы сделать карту мира своими руками. Это не просто. Это не быстро. Это определенный вызов своей способности преодолевать трудности. Но это точно — про красивое, про стильное, про крутое и классное! Чтобы сделать карту мира своими руками, пожалуй, с самого начала стоит запастись главным: желанием. Если оно будет, все пройдет на ура, а наша подборка идей карт мира своими руками по-настоящему вдохновит и направит мысли в нужное направление.

Как сделать карту мира своими руками — 5 мастер-классов:

Что понадобится для работы?

Для того чтобы превратить пустую стену в оригинальную объемную карту мира с подсветкой, потребуется следующее:

  • шаблон для изготовления карты или готовая, распечатанная, в нужном размере;
  • любой субстрат, необходимый для укоренения и закрепления мха, можно использовать обрывки картона, пенопластовую крошку или же просто приобрести готовую субстратную смесь;
  • нити оптического волокна;
  • отдельные светодиоды (12V) для точечной подсветки городов;
  • светодиодный шнур или лента (12V) – для подсветки контуров карты;
  • источник питания, в данном случае 12В;
  • комплект МОП-транзисторов;
  • микроконтроллер;
  • инструменты и материалы для электромонтажа, обязательно потребуется паяльник;
  • искусственные мхи и лишайники с различными оттенками зеленого, коричневого и белого цветов и матовые;
  • клей Элмера, а также горячий и универсальный;
  • крепеж на стену, включая французские зажимы;
  • метизы и инструменты;
  • фанера;
  • дрель;
  • любая пила, отлично подойдет электрический лобзик;
  • шлифовальная машинка и наждачная бумага.

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

Добыча белого коралла: процедура очень схожа с выкапыванием картофеля

Синий или желтый: как рассчитать свой цвет интерьера по дате рождения

Редчайшее палеолитическое лезвие возрастом 20 тыс. лет найдено в Китае

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

Наличие и применение ЧПУ несколько изменяет перечень нужных материалов. К примеру, бумажная карта или ее шаблон не потребуются, не понадобится и дрель.

Все тормозит

Расскажу, с какими проблемами столкнулся я, и что мне помогло их решить.

Первая проблема была в тормозах в Safari на macOS. Причем, если пробовать профилировать, то вроде бы requestAnimatioFrame выдает честные 60 FPS и вроде бы, все должно быть хорошо, но по видео видно, что все происходит рывками. Причем это только в Safari — в Chrome все отлично, и в FireFox нормально.

Я долго разбирался, в чем может быть дело. Отключал все, что только можно — все равно тормозит. Потом я взял пример из Three.js с кубиком, который показывал выше, запустил его, и он тоже тормозит!

Оказалось, что дело вот в чем. В WebGL поддерживается аппаратное сглаживание, не требующее никаких усилий, чтобы его включить. Можно просто указать antialias: true — будь то чистый WebGL или Three.js, и картинка становится лучше. Причем из-за того, что это сглаживание аппаратное, оно работает достаточно быстро, никаких проблем я никогда с ним не замечал до этого момента.

Но именно в Safari на Retina экранах mac-буков с огромным разрешением и, как всегда, слабой видеокартой, обнаружилась эта проблема. Помогло отключение аппаратного сглаживания для таких устройств в этом браузере.

Другая проблема, на которую еще жаловались была в том, что при запуске приложения, кулер компьютера начинает неистово крутиться и шуметь.

Тут все оказалось просто. В примере, который я показывал, есть функция animate(), которая по requestAnimationFrame вызывает сама себя. Дело все в том, что нам это в принципе не нужно. Допустим, мы повернули модель — картинка статична, ничего не происходит, но при этом видеокарта мучается, 60 раз в секунду срабатывает requestAnimationFrame (в идеальном случае). Ничего не происходит, но мы зазря мучаем видеокарту заставляя перерисовывать сцену снова и снова.

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

Если состояние приложения изменилось, допустим, мы через двумерный интерфейс выбрали какое-то место и его нужно подсветить, мы можем вообще просто один кадр отрендерить и все — оно уже подсвечено.

Я уже упоминал про Raycasting. Когда мы кликаем на canvas, в трехмерном пространстве создается вектор и просчитывается, какие треугольники, из которых состоят объекты, этот вектор пересекает. Соответственно, какой первый объект мы пересекли, тот и выделяем. В Three.js это выглядит так:

  • есть raycaster,
  • передаем координаты и камеру, и объекты, по которым нужно проверить пересечение,
  • в итоге получаем пересечения.

Но если у нас довольно большие модели, состоящие из большого количества треугольников, то это может занять много времени. По сути, нужно перебрать все треугольники, из которых состоят все объекты. Поэтому используется другой способ. Заранее в Blender можно создать некий объект, который аппроксимирует объект, но состоит из очень маленького количества треугольников (показано красным на рисунке выше).

Мы его можем сделать невидимым или вообще расположить на отдельной сцене, но raycasting происходит именно с ним и намного быстрее.

Причем если для этажей пришлось их создавать вручную — потому, что тут сложная геометрия, то для мест можно сгенерировать автоматически в JS коде. Берем место, просчитываем у него максимальную позицию по осям x и y (по z даже не надо), и готово. У нас есть квадратик, состоящий из 2 треугольников — и все.

Использование техники Instancing дало самый большой прирост производительности (результат — слева). До использования Instancing было 365 draw calls (отрисовок на видео карте), а после — 51. Хотя это тоже довольно много, наверное, за счет иконок.

В чем смысл? Помните, я рассказывал, что есть места, которые ссылаются на одну и ту же геометрию — просто разные instance находятся в разных местах с разным цветом. Когда есть такие однотипные объекты, мы можем применить эту технику и с помощью нее снизить количество отрисовок на видеокарте. Эти все места объединяются в один объект, который отрендеривается за раз — за один проход.

Инстансинг входит в спецификацию WebGL 2, в первом же WebGL он доступен через extension, который поддерживается и есть во всех современных браузерах.

Попробую объяснить, как это работает. Допустим, по умолчанию есть 4 места в 4 разных позициях 4 разных цветов. Обычно мы передаем эти данные через uniform — это «переменный», которые распространяются на shader программу целиком. Если эти места объединены в один Batch, то места будут одного цвета и находиться в одном месте скученно.

Поэтому передавать именно эти данные: цвет, позицию мест. нужно через attribute. Это параметр, который передается для каждой вершины отдельно.

Что стоит знать про Instancing:

  • Он сильно повышает производительность. Если у вас есть много однотипных предметов и все тормозит, скорее всего, он даст большой прирост.
  • Но это сложно. Примеры из Three.js можно посмотреть здесь.

Следующая проблема, с которой вы столкнетесь — появится вот такая картинка (в Chrome). Это обычно происходит, когда не хватает видеопамяти.

Что может помочь?

Упрощение модели

При преобразовании svg картинки в трехмерный объект, Blender создает много лишних точек. Объекты получаются, конечно, хорошо сглажены, но, скорее всего, это особо не видно. А каждая лишняя точка — это расход видеопамяти и снижение производительности.

Оптимизация текстур

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

Одна их техник предполагает объединение нескольких текстур в одну. Допустим, если есть 3 черно-белые текстуры, их можно разбить по каналам и объединить в одну: первую текстуру передать в красный канал, вторую в зеленый и третью — в синий. Получится, что в итоге все это будет занимать в 3 раза меньше видеопамяти.

Сжатые текстуры

Есть разные форматы: DXT, PVRTC, ETC, которые позволяют сделать так, чтобы текстура размером 1024*1024 на видеокарте занимала видеопамяти как текстура 512*512, то есть в 4 раза меньше.
Казалось бы, крутой профит, но есть большие ограничения:

  • Разные форматы (DXT — поддерживается только на десктопе, PVRTC — на iOS, ETC — на Android). В общем случае, скорее всего, вам придется держать 4 разные текстуры ( под каждый формат, и четвертую несжатую) и проверять, какой формат поддерживает ваша система. Если ни один форматов не поддерживается, то уже использовать оригинальную несжатую текстуру.
  • Ухудшение картинки. Степень искажения зависит от исходной картинки.
  • Проблемы с прозрачностью, когда на границе прозрачной области появляются артефакты.
  • Больший объем файлов (но можно применить gzip). Полностью черная PNG картинка размером 1024*1024 скачается мгновенно, но на видеопамяти каждая точка будет отжирать память. С сжатыми картинками наблюдается обратная ситуация — сам файл текстур может весить больше, но на видеопамяти он будет меньше занимать места.

Что касается качества сжатых текстур — котик не сильно пострадал от сжатия.

На текстурах такого вида уже видны артефакты — тень сливается с самой надписью. Но для пестрых текстур (например, травы) это отлично подходит.

Самый главный полезный и простой совет — не гонитесь за реализмом! Обратите внимание, в инди-играх почти никогда нет супер-реалистичной графики. Она схематичная — красочные, веселые, но малополигональные человечки бегают, зато все весело и прикольно, работает быстро и требует меньше ресурсов для разработки.

Последнее, что хотел сказать. Если будете делать 3D, то не делайте проект в одиночку. Находите соратников. Я делал проект в рамках хакатона, мне помогало много хороших людей. Одному сложно, а когда вы вместе, это и мотивирует, и быстрее все получается.

Этап первый: приклеиваем карту к фанере или готовим шаблон для ЧПУ

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

Однако если есть возможность воспользоваться большим профессиональным станком ЧПУ, то карту мира можно напрямую вырезать из фанеры. В этом случае бумажная не потребуется вообще. При резке на ЧПУ есть смысл использовать ламинированную фанеру, особенно если при декоративном оформлении стены будут использованы настоящие мхи и лишайники.

В качестве основного шаблона для резки на ЧПУ можно использовать изображение карты, имитирующее вид Земли из космического пространства. Использование такого шаблона позволит вырезать на «умном станке» не только очертания материков, но и сразу же оформить отверстия под точечную подсветку.

Если ЧПУ использовать нет возможности, то на первом шаге нужно приклеить к листу фанеры готовую бумажную карту мира или ее шаблон, сделанный на большом листе ватмана. Разумеется, необходимо дать клею высохнуть перед тем, как приступать к дальнейшей работе. Для фиксации карты отлично подойдет обычный обойный клей или ПВА.

«Умная» одежда: гениальные приемы, позволяющие значительно сэкономить время

Делаем для кота домашний удобный гамак. Он заменяет питомцу кровать

Не склад, а место для отдыха: как украсить балкон с минимальным бюджетом

Карта мира из газет

Что может быть доступнее газет? Самых обычных, самых распространенных газет, которые можно найти на любой рекламной раскладке в торговых центрах и супермаркетах, бесплатно взять у входа в метро или купить в конце концов за пару копеек в газетном киоске. Когда есть желание творить, получится и все остальное — найти материалы, подобрать идею, сделать выкройку, аккуратно и креативно выполнить задуманное.

/2]Как сделать карту мира из газет своими руками — идея от Вarberoarchitetti

Этап второй: вырезаем карту из фанеры и сверлим отверстия для точечной подсветки

На этом шаге работы нужно выпилить из фанеры элементы карты и просверлить в них отверстия для размещения отдельных диодов.

При использовании ЧПУ все действия на данном этапе сводятся к нажатию кнопки «Пуск». Если же материал распиливается вручную, то потребуется сделать следующее:

  • надежно зафиксировать лист фанеры с приклеенной картой;
  • выпилить элементы, лезвие электролобзика или любой другой пилы должно следовать по контуру изображений материков и крупных островов;
  • просверлить отверстия для размещения точечной подсветки.

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

Кто и когда сделал первый глобус

Самая первая модель Земли в виде шара была изготовлена древнегреческим философом, грамматиком, поклонником поэзии и географии Кратетом Мальским (Пергамским) во II веке до н.э. Он не обладал должными знаниями, свою идею воплощал на основе поэмы «Одиссей», прокладывая на сфере маршруты передвижения главного героя любимого произведения.

Несколько веков эта модель оставалась единственной, и только в 1492 году нашей эры была создана следующая. Ее сделали в Германии, чтобы наглядно показать все географические открытия моряков из Португалии. У этого варианта были имя – «Земное яблоко», он был изготовлен из металла, его диаметр был менее 50 см. Кроме этого, на нем еще не было Америки, долготы и широты, но уже были меридианы, описания некоторых стран и даже отмечены тропики.

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

Этап третий: сборка и закрепление «земельных массивов»

Материки, острова, архипелаги – все это в представленном проекте является участками, на которых и закрепляется искусственный или настоящий мох. Разумеется, перед тем как закрепить мхи и лишайники, нужно создать для них основание – «земельные массивы».

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

Отдельные фрагменты субстратной смеси нужно скрепить металлическими скобами. Также можно использовать клей и эпоксидную смолу. И, разумеется, для придания фрагментам нужной формы следует использовать острый нож. К участкам на карте «земельные массивы» крепятся при помощи клея.

Сочный рулет из простых продуктов: картофель, сыр и ветчина

С запахом, разрезом, на пуговицах: как создавать образы с базовыми юбками весной

Власти Черногории пришли к решению упростить правила въезда для туристов

Модель Земли из бумаги

Техника рукоделия «папье-маше» увлекательна, проста, подходит для детей от 3-х лет и старше. Таким способом можно создавать своими руками фигурки животных, искусственные растения и, конечно же, глобусы.

Материалы и инструменты:

  • шар для фитнеса или прочный воздушный шарик, пищевая пленка;
  • много старых газет, туалетной бумаги или бумажных полотенец (салфеток);
  • клей ПВА или клейстер, сваренный самостоятельно;
  • ножницы, карандаш, краски и кисти.

Клейстер можно сварить в домашних условиях, по рецептам наших бабушек – на 100-125 мл воды нужно 3 ст. л. муки или крахмала. Смесь провариваем до загустения, остужаем.

Готовим шар. Вариант для фитнеса просто протираем и сушим. Воздушный шар надуваем, «усиливаем» (оборачиваем) пищевой пленкой.

Бумагу измельчаем – газеты режем или рвем на ленты, туалетную бумагу, полотенца на небольшие кусочки.

Шар устанавливаем в миску или подвешиваем, начинаем оклеивать. Наносим клей (клейстер), укладываем материал. Каждый слой тщательно просушиваем. Для этого можно воспользоваться феном.

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

Подставку можно сделать из плотного картона, свернув и закрепив его в виде конуса. Верх детали надрезаем на «язычки», подгибаем их наружу, смазываем клеем, фиксируем на них шар.

Материки можно обозначить не только красками. Покрытие может быть из чего угодно – кружочки из бумаги, крупы, макароны, бисер и даже пуговицы.

Этап четвертый: раскрой и размещение искусственных мхов

Искусственные мхи и лишайники продаются в виде свернутых в рулоны листов, кроится этот материал ножом, а фиксируется – клеем.

При оформлении карты нужно сделать следующее:

  • выбрать основной цвет, в представленном проекте это темно-зеленый;
  • выкроить из листа материала части, полностью закрывающие поверхности деревянных фрагментов;
  • приклеить мох;
  • дождаться полного высыхания клея;
  • подрезать ножом излишки.

Следующий шаг – декорирование. Лишайники и мхи нужно подбирать так, чтобы складывающаяся цветовая палитра напоминала географическую карту. Разумеется, добиваться полного сходства не требуется. Более того, оформить карту можно и совершенно не похожей на изображение Земли.

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

Полезные ссылки:

✓ Курс по трехмерной графике на Udacity ✓ Книга «Программирование трехмерной графики» ✓ Примеры threejs ✓ Видео про рендеринг текста в WebGL (слайды) ✓ Видео про производительность WebGL (статья)

Контакты:

https://twitter.com/gc_s9k [email protected]

Время летит незаметно, и до фестиваля конференций РИТ++ осталось совсем немного, напомним он пройдет 28 и 29 мая в Сколково. Скоро мы опубликуем программу, а пока приводим небольшую подборку заявок FrontEnd Conf:

  • Дмитрий Шагаров (Tutmee Agency). Анимация на сайте — легкий соус или основное блюдо?
  • Юрий Артюх (Coderiver). Путь пикселя
  • Никита Филатов (Luxoft). Apollo GraphQL. Декларативный способ общаться с сервером

Забронировать билеты еще можно, но, не забывайте, цена неуклонно растет.

Этап пятый: закрепление мхов на карте

На этом шаге работы нужно просто прикрепить зафиксированный на субстрате мох к карте.

Делается это очень просто. Декоративные элементы приклеиваются к карте на нужных участках. Если мхами карта закрывается не целиком, то нужно сначала обвести контуры декоративных элементов и убрать их с карты, а потом покрасить пустые участки.

Расследование самарских краеведов подтверждает: «Стояние Зои» — это легенда

На литр воды 1 ст. ложка перекиси: 5 советов по выращиванию рассады перца

Таинственный Венедиктов день: что не стоит делать 27 марта (убрать зеркала)

Разновидности штукатурки и примеры применения в интерьере

Штукатурку «карта мира» выпускают разные производители — как отечественные, так и зарубежные. На ее упаковке должна быть соответствующая пометка: в этом случае можно быть уверенным в получении нужного эффекта на стене. Своеобразная фактура возникает на поверхности при нанесении смеси извести с рядом иных компонентов. В результате появляются «островки», «моря и океаны» – полурельефное покрытие, имитирующее поверхность земного шара или глобуса. Под разными углами штукатурка смотрится неодинаково, но всегда броско и изысканно.

Для изготовления материала используются только экологически чистые компоненты. Основой является гашеная известь. Также в составе присутствуют:

  • кварцевый песок;
  • мелкая мраморная крошка;
  • льняное масло;
  • силикаты.

Очертания материков, морей, островов выглядят в интерьере потрясающе. Фактурная штукатурка «карта мира» выпускается в разных оттенках, а также легко колеруется и окрашивается, поэтому ее можно подобрать практически для любого дизайнерского решения. Все цветовые переходы получаются мягкими, неяркими.

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

Перламутровая штукатурка

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

Чтобы создать рисунок из перламутровых переливов, важно правильно подобрать сочетания цветов. Нужно следить, чтобы отдельные оттенки не затемняли друг друга, ложились точно в намеченные зоны и не загораживали соседние. Многие цвета можно смешивать между собой, получая новые, уникальные тона.

Матовая штукатурка

Материал с матовым эффектом чаще используется в просторных комнатах с большими окнами, где на стены попадает большое количество света. На разных основаниях такое покрытие будет смотреться неодинаково. Например, на кирпичной стене матовая штукатурка как бы размывается, выглядит не слишком яркой.

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

Глянцевая штукатурка

Смесь с глянцевым эффектом — интересное решение для спальни, кухни, гостиной. Блеск достигается путем введения особых наполнителей и пигментов с примесью серебра, золота, иных металлических оттенков. В детской комнате такую штукатурку можно применять для создания сказочных изображений и необычных переливов. Сияющие островки «карты мира» будут визуально расширять пространство, как бы уходить вдаль.

Экспериментируя, можно воссоздать на стене эффект старины или неоднородности материалов. Также при помощи некоторых штукатурок делают имитацию камня травертина, что тоже смотрится роскошно и дорого и напоминает «карту мира».

Этап шестой: размещение подсветки

На этом шаге работы нужно сделать следующее:

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


Разумеется, для каждого деревянного фрагмента требуется отдельная коробка с питанием и предохранителями, ведь переплетению проводов не место на стене.

При использовании обычных ламп нужно поместить их в колпаки, чтобы добиться ограничения направления светового потока.

Создание модели

Тут есть варианты:
 • Найти моделлера (опционально)

Это, наверное, самый идеальный вариант — найти человека, который разбирается в 3D MAX и в подобных программах, чтобы он все сделал, а вы бы просто взяли эту модель.

 • Найти готовые модели (опционально)

Если такого человека нет, можно найти в интернете готовые модели.

 • Освоить 3D-редактор самому

Этот вариант на самом деле обязателен (нет слова «опционально» в скобках) — потому что вам в любом случае это нужно. Просто вопрос уровня погружения. Даже если у вас есть моделлер, то, скорее всего, вам все же придется, что-то подредактировать самому или хотя бы открыть посмотреть в редакторе, чтобы проверить, что модель сделана как надо. Поэтому этот пункт необходим.

Я использовал трехмерный редактор Blender.

Наверное, все слышали про 3D MAX — программу для трехмерного редактирования. Это ее аналог, только из мира OpenSource. Этот редактор бесплатен, есть под все основные платформы и он постоянно развивается. В нем есть классная фишка — все, что можно сделать с помощью Blender, можно сделать с помощью обычного python-скрипта.

Можно навести курсор на какой-то элемент интерфейса, и во всплывающем окне покажется, какой метод надо выполнить, чтобы получить данные, или чтобы сработало определенное действие.

Еще одна классная фишка в том, что он по умолчанию поддерживает импорт из SVG.

У меня как раз исходный материал был SVG, поэтому мне это очень подошло. Можно просто импортировать схему, преобразовать в треугольники и задать высоту стены. Единственное, что не было стульев, на которых находятся сотрудники, их пришлось расставлять в Blender вручную.

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

Плюс, когда клонируешь места, можно нечаянно склонировать так называемую геометрию. Геометрия — это точки, из которых состоит каркас. Дублирование — это не очень хорошо, так как модель начинает занимать больше места на диске.

Тут на помощь приходит одна из фишек, а именно то, что можно использовать python-скрипт.

import bpy geometry = bpy.data.meshes[‘place’] for obj in bpy.context.selected_objects: obj.rotation_euler.x = 0 obj.rotation_euler.y = 0 obj.data = geometry obj.location.z = 0 Мы просто берем геометрию места, пробегаемся по выделенным объектам, сбрасываем поворот, указываем, чтобы они все ссылались на одну и ту же геометрию и высоту (ось Z направлена вверх) сбрасываем до 0.

Тени

Еще в Blender были запечены тени. Естественно, с затенениями объекты выглядят более объемно. При использовании техники затенения в реальном времени Ambient Occlusion (взаимное затенение объектов), отрисовка будет подтормаживать, поэтому лучше всего запечь тени заранее.

На рисунке показаны заранее запеченные тени: справа — текстура, слева — текстурные координаты, по которым эта текстура накладывается на объект.

Еще один пример, как выглядят текстурные координаты.

После нехитрых действий нужно нажать кнопку «Bake», выбрать взаимное затенение и запечь. Это не реальные тени, потому что я не очень хорошо разбираюсь в трехмерных редакторах, и мне сложно было расставить красиво источники света, чтобы все было фактурно и классно. Поэтому взаимное затенение вполне подходящий вариант.

Можно сравнить, как выглядит плоская реализация и картина с тенями.

С моделями разобрались, считаем, что модель есть, и теперь нужно это встроить в браузер, чтобы все могли пользоваться.

Этап седьмой: закрепление на стене карты и подсветки

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

Сделать нужно следующее:

  • разметить стену под фрагменты карты;
  • зафиксировать крепежные детали;
  • разместить по контуру разметки светодиодный шнур;
  • приклеить к стене блок питания и адаптер, если диодные шнуры не планируется подключить напрямую к розетке;
  • подвесить элементы карты на стену.

Есть смысл подумать о том, чтобы разместить на стенах сетевые адаптеры, их использование позволит свести к минимуму количество проводов, свисающих вдоль стены. Разумеется, используемый крепеж должен быть таким, чтобы все коробки и адаптеры свободно помещались между стеной и деревянными элементами карты.

Нашли нарушение? Пожаловаться на содержание

WebGL

На помощь приходит спецификация WebGL.

Немножко истории о том, что это такое. WebGL основана на спецификации OpenGL for Embedded Systems версии 2.0, и по сути повторяет ее с небольшими изменениями. OpenGL for Embedded Systems в свою очередь является подмножеством спецификаций OpenGL, только рассчитана на мобильные устройства. То есть там вырезано лишнее.

WebGL версии 2.0 тоже поддерживается браузерами, но пока еще не так распространен. Также сейчас обсуждается WebGL Next, но непонятно, на что он будет ориентироваться, и будет ли вообще. Может, на Vulkan — пока непонятно.

WebGL 1.0 поддерживается везде: на iOS, Android и т.д. С этим проблем нет.

Для сравнения, WebGL 2.0 сейчас поддерживается не очень хорошо, поэтому пока подождем.

2D vs 3D [2]

Для того, чтобы вникнуть в WebGL, сравним двух- и трехмерные реализации. Сделаем простой тест: как будет выглядеть двух- и трехмерные реализации обычного красного квадратика.
Двумерная реализация на Canvas довольно простая:

(function() { const canvas = document.getElementById(‘canvas’); const context = canvas.getContext(‘2d’); context.fillStyle = ‘rgba(255, 0, 0, 1)’; context.fillRect(25, 25, 50, 50); }()); Есть элемент canvas, мы берем его двумерный контекст, определяем стиль заполнения, и рисуем квадрат.

Трехмерная реализация вроде бы поначалу похожа: также есть элемент canvas, берется контекст с помощью canvas.getContext(’webgl’). Но вот далее идут отличия. Сейчас попробую объяснить. Можно сильно не углубляться в реализацию и не пугаться непонятных терминов, далее я объясню как можно это все упростить.

(function() { const canvas = document.getElementById(‘canvas’); const gl = canvas.getContext(‘webgl’); // Инициализировать шейдеры // Создать программу // Создать вершинный буфер // Сохранить ссылку на буферный объект в атрибут // Вызвать отрисовку }()); Что нужно дальше сделать:

 1. Вершинный шейдер — скомпилировать и передать.

const vertexShaderSource = ` attribute vec4 position; void main() { gl_Position = position; } `; const vertexShader = gl.createShader(gl.VERTEX_SHADER); gl.shaderSource(vertexShader, vertexShaderSource); gl.compileShader(vertexShader);  2.
Фрагментный шейдер, который просто на выходе дает красный цвет — опять скомпилировать и передать const fragmentShaderSource = ` void main() { gl_FragColor = vec4(1.0, 0.0, 0.0, 1.0); } `; const fragmentShader = gl.createShader(gl.FRAGMENT_SHADER); gl.shaderSource(fragmentShader, vertexShaderSource); gl.compileShader(fragmentShader);  3. Программа — мы связываем оба шейдера с программой и используем ее. const program = gl.createProgram(); gl.attachShader(program, vertexShader); gl.attachShader(program, fragmentShader); gl.linkProgram(program); gl.useProgram(program);  4. Вершинный буфер, в котором задаются координаты вершин квадрата, после создания нужно забиндить, передать координаты вершин, связать атрибут позиции из вершинного шейдера с вершинным буфером, и использовать его. const vertices = new Float32Array([ -0.5, 0.5, -0.5, -0.5, 0.5, 0.5, 0.5, -0.5 ]); const vertexSize = 2; const vertexBuffer = gl.createBuffer(); gl.bindBuffer(gl.ARRAY_BUFFER, vertexBuffer); gl.bufferData(gl.ARRAY_BUFFER, vertices, gl.STATIC_DRAW); const attrPosition = gl.getAttribLocation(program, ‘position’); gl.vertexAttribPointer(attrPosition, vertexSize, gl.FLOAT, false, 0, 0); gl.enableVertexAttribArray(attrPosition);  5. Потом нам нужно все это отрисовать. const vertices = new Float32Array([ -0.5, 0.5, -0.5, -0.5, 0.5, 0.5, 0.5, -0.5 ]); const vertexSize = 2; // … gl.drawArrays(gl.TRIANGLE_STRIP, 0, vertices.length / vertexSize); Так «легко» получился красный квадратик!
Вы, наверное, поняли, что WebGL не так прост. Он довольно низкоуровневый, есть куча методов, причем в них миллион аргументов. И это еще упрощенный код — там нет никаких проверок на ошибки, которые необходимы в реальном коде.

Если хочется вникнуть в нативный WebGL, есть отличная книга на русском языке Коичи Мацуда, Роджер Ли «WebGL: программирование трехмерной графики».

Рекомендую почитать, там все доступно рассказывается с самых азов. Начиная, например, с отрисовки простейшего треугольника, и заканчивая созданием полноценных трехмерных объектов с тенями.
Если нет времени в этом разбираться, а его скорее всего его нет — даже проект, который я делал, был реализован в рамках хакатона за пару дней (первый прототип с 2 этажами). Поэтому на помощь приходят любимые (или не любимые) фреймворки.

Я использовал Three.js, как самый популярный и используемый WebGL фрэймворк. Самое главное преимущество этого фреймворкоа в том, что они создают удобные абстракции, с помощью которых можно все сделать быстрее и с меньшим количеством кода, не вникая в низкоуровневый API. Можно за весь проект вообще не написать ни одного шейдера.

Этот пример взят из Readme Three.js:

var scene, camera, renderer, geometry, material, mesh; init(); animate(); function init() { scene = new THREE.Scene(); camera = new THREE.PerspectiveCamera(75, window.innerWidth / window.innerHeight, 1, 10000); camera.position.z = 1000; geometry = new THREE.BoxGeometry( 200, 200, 200 ); material = new THREE.MeshBasicMaterial( { color: 0xff0000, wireframe: true } ); mesh = new THREE.Mesh( geometry, material ); scene.add( mesh ); renderer = new THREE.WebGLRenderer(); renderer.setSize( window.innerWidth, window.innerHeight ); document.body.appendChild( renderer.domElement ); } function animate() { requestAnimationFrame( animate ); mesh.rotation.y += 0.02; renderer.render( scene, camera ); } Скопировав этот код в свой браузер, по сути, мы уже имеем полноценную трехмерную визуализацию. Причем это не просто какой-то обычный квадрат, а именно трехмерный куб, который еще и вращается.

Рассмотрим этот пример

  • У нас есть некая сцена (scene) — это виртуальное пространство. Этих сцен может быть несколько, но обычно она одна. Если сцен несколько, то они существуют как параллельные миры.
  • Есть камера (camera) — та точка, откуда мы будем снимать и получать картинку на экран.
  • Далее идет участок кода, где мы создаем объект. Тут создается геометрия куба (geometry) и его материал (material), в данном случае просто плоского красного цвета. Когда мы объединяем каркас куба и накладываем на него материал, то получаем красный куб (mesh), который далее помещаем на сцену (наше виртуальное пространство).
  • Следующий этап — создается объект renderer, в нем создается объект canvas и происходит взаимодействие с WebGL. В данном случае мы задаем размер, чтобы отрисовка происходила во весь экран, и добавляем canvas в body на страницу.
  • После чего нам просто нужно вызывать функцию animate(), которая по requestAnimationFrame вызывает сама себя — плюс кубик вращается.

Таким образом у нас есть полноценная визуализация.

Если взять участок кода, где мы создаем куб, его легко заменить на код, где есть loader.

var loader = new THREE.ObjectLoader(); loader.load(‘model.json’, function(mesh) { scene.add(mesh); }); Мы вызываем метод load для того, чтобы загрузить модель, и уже на стенд добавляем не абстрактный куб, а именно нашу модель, и видим ее в браузере. Это вообще уже круто!

Чтобы получить модель, нужно чтобы модель была определенного формата. В Three.js есть уже готовый exporter, который нужно подключить (по умолчанию в Blender его нет) и с его помощью экспортировать модель в формат, в котором можно уже ее импортировать на сцену.

Но картинка получилась статичная, а нам хочется покрутить модель, посмотреть ее с разных сторон.

В Three.js для этого уже есть OrbitControls. Он лежит не в основной папке Three.js, а в examples ( ). Там лежит очень много всего, что не входит в core-код, но можно дополнительно подключить.

Мы подключаем OrbitControls, и создаем их инстанс передавая объект камеры:

scene = new THREE.Scene(); camera = new THREE.PerspectiveCamera(75, window.innerWidth / window.innerHeight, 1, 10000); camera.position.z = 1000; new THREE.OrbitControls(camera); Теперь наша камера управляется OrbitControls. После этого можно вращать нашу модель мышкой. Мы зажимаем левую кнопку мышки и начинаем ее двигать, также можно приближать и отдалять объект.

Это пример из Three.js. Там как раз есть загрузка модели и controls, в принципе, это уже полноценная визуализация. Если мы продаем, например, часы, можно сделать модель или найти ее в интернете, вставить в браузер и пользователь сможет ее приблизить и рассмотреть с разных сторон.

Чтобы подробнее вникнуть в мир трехмерной графики на основе использования фрэймворка Three.js, есть отличный курс на Udacity. Он очень веселый, правда, на английском языке.

Используемые инструменты

В первую очередь необходимо закупить штукатурку. Карта Мира есть в арсенале у большинства крупных производителей. Пометка о соответствующей текстуре выносится в название.

Однако если возможности купить оригинальную Карту Мира у вас нет, можно пойти другим путем. Для этого найдите штукатурку, имитирующую травертин. С ее помощью можно создать аналогичную текстуру. При этом алгоритм работы с материалами будет одинаков.

Также можно изготовить раствор самостоятельно. Нужно перемешать известняк с песком и добавить мраморную крошку. Отдать предпочтение стоит мелкой или средней крошке.

Чтобы создать покрытие с необычной текстурой, нужны инструменты:

  • стальной шпатель;
  • кельма;
  • малярный валик;
  • валик из поролона;
  • обычная губка для мытья посуды.

Преимущества и недостатки материала

Штукатурка «Карта Мира» — это отдельная разновидность материалов для чистовой отделки. Благодаря особому составу, она обладает как преимуществами, так и недостатками по сравнению со стандартным вариантом.

Среди плюсов штукатурки можно назвать:

  • Возможность быстрой маскировки любых дефектов стен. Она хорошо закрывает трещины и прочие недостатки прошлого покрытия.
  • Устойчивость. Декоративной штукатурке не страшны перепады температур, она не выгорает под прямыми солнечными лучами. Покрытие сложно повредить механически.
  • Большой выбор цветовой палитры. Карта Мира доступна во множестве самых разнообразных оттенков.
  • Простой уход. Чтобы покрытие оставалось в первозданном виде, достаточно периодически проводить влажную уборку.

Недостатков у штукатурки два. К ним относится высокая цена. Обычное декоративное покрытие стоит в несколько раз дешевле. Помимо этого материал требует тщательной обработки стены перед нанесением. Не слишком ровная стена, остатки старого покрытия — и текстура не получается.

Советы мастеров

Специалисты и мастера своего дела рекомендуют придерживаться следующих советов:

  1. При изготовлении штукатурки подбирают разные компоненты, которые сочетаются друг с другом. Известь добавляют для получения поверхности в чистом варианте. Но переусердствовать с добавками также нельзя, так как возможно растрескивание декоративных элементов.
    Для крепости добавляют гипсовую основу. Цемент необходим в качестве компонента, когда работы ведутся во влажном помещении. Эксплуатация штукатурки при повышенной влажности, например, в ванной комнате, также предполагает добавление в состав цемента.
  2. Грунтование любой поверхности проводится два или три раза. Первый слой наносится валиком с мелким ворсом. Грунтовка глубокого проникновения сохнет 12 часов. Если декоративная штукатурка Карта Мира выбрана с эффектом травертина, то первый слой можно не наносить.
    Для хорошей адгезии грунтовать поверхность нужно кварцевым песком с мелкозернистой структурой. Наносится такая основа поролоновым валиком. В данном случае песок будет ложиться ровно и захватит все части поверхности.
  3. Декоративную штукатурку Карта Мира нужно наносить на основание достаточно резко, чтобы сформировать нужный орнамент. Фактура должна наноситься в определённые временные интервалы, чтобы правильно осесть на нужной площади и создать верный рисунок. Для этого лучше всего вести работы в паре.
    Если такой возможности нет, то одному нужно иметь площадь обработки в единицу времени не более 2–3 кв. м. На стыках нужно оставлять рваные края, чтобы не было заметно переходов.
  4. Соблюдать технику нанесения штукатурки важно. Нанесение и формирование рисунка выполняют в быстром темпе. В данном случае штукатурка не сможет застыть быстрее, чем будет нанесён нужный орнамент. Иначе не удастся запечатлить на поверхности необходимую гамму цветов.
  5. При подготовке гипсовой смеси определить количество наносимых слоёв и орнамент будущих схематических рисунков. Большие гористые основания сразу делать не нужно, нанесение их объёма производится постепенно, в несколько этапов.
    Сначала создаётся рельеф континента, а уже потом, после высыхания формируются мелкие гористые фрагменты. На них затем можно наносить каньоны, высокие горы, реки. Элементы формируются или вручную, или специальными удобными для работы инструментами.

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

Рейтинг
( 2 оценки, среднее 4.5 из 5 )
Понравилась статья? Поделиться с друзьями:
Для любых предложений по сайту: [email protected]