Русский
Русский
English
Статистика
Реклама

3d-моделирование

Как быстрее доставить сообщение в мозг или немного о современном языке визуальной коммуникации

15.02.2021 20:10:51 | Автор: admin
За последние 20 лет интернет превратил практически каждого человека в источник публичных данных. Большинство людей, которые что-либо публикуют в сети, хотят что-то донести до окружающих, хотят чтобы это заметили, поняли и в идеале запомнили. Это в равной степени касается бесчисленного множества пользователей социальных медиа, интернет магазинов, СМИ. Не смотря на это своё желание, визуальная коммуникация, по моему субъективному мнению, развивается достаточно медленно.


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

Лучше один раз увидеть и при этом хорошо разглядеть


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

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


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

Иными словами, человеку на протяжении веков было важнее видеть объекты, нежели слышать, ощущать тактильно или по запаху. Именно этот вид восприятия определил многое в нашей культуре и именно он является ведущим у Homo Sapiens до настоящего момента.

Среди коммерческих исследований на тему эффективности разных типов контента в коммуникации особого внимания заслуживает подробное Not Another State of Marketing Report от разработчиков ПО для маркетологов HubSpot, все участники исследования сходятся во мнении о том, что визуальная коммуникация в несколько раз эффективнее вербальной.

Джон Медина (англ. John Medina) известный молекулярный биолог-эволюционист, занимающийся исследованиями в области генетики и нейробиологии в Вашингтонском университете ставит точку в вопросе ведущего типа восприятия у человека. В своем видео ученый демонстрирует, что человек, получив информацию полученная при помощи вербальных каналов коммуникации, например услышав, через три дня сможет воспроизвести лишь 10 % из неё. Тогда как добавление визуализации позволяет усвоить до 65% информации.



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

Обзор современных средств визуального представления контента


VR-туры в недвижимости и музейном деле
Форма распространенная в первую очередь в торговле недвижимостью, а также в качестве образовательного и музейного контента. Очень бурно растет и сообщает пользователю впечатления практически идентичные реальным. В торговле недвижимостью сосуществует с испытанными временем рендерами, в музеях с AR и аудиогидами, а в образовании является практически самостоятельным инструментом. Любопытно, что Goldman Sachs в 2020-м прогнозировал совокупную перспективную прибыль от VR в недвижимости ок 2,6 миллиарда долларов до 2025 года.



360 панорамы и 3D-обзоры в интернет торговле
360 photo это панорамные фотоснимки, не смотря на то, что они известны ещё со времен расцвета аналоговой фотографии, 10 лет назад такой контент вызывал WOW-эффект и считался чем-то необычным. Сегодня к нему привыкают всё больше, особенно покупатели luxuty и premium товаров в сети. Существуют 360 экскурсии по городам и музеям, 360 обзоры домов и квартир.



Сложности, связанные с необходимостью хранить большие объемы, решают такие компании как Cappasity, которые создают SaaS-платформы, позволяющие крупным магазинам хранить трехмерные визуализации своих товаров в облаке и не повышать нагрузку на серверы. Сервис активно использует отечественный ЦУМ и заокеанский American Greetings.

Принципиально иным путём пошла компания Review3, где средствами 3D моделирования создаются 3D обзоры объекта. Компания массово создаёт обзоры продающих товаров и предлагает купить размещение и прикрутить обзоры к магазину, воспользовавшись API.



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

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



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



Почему всё это востребовано меньше, чем банальные подходы к визуализации?


Такой вопрос возникает у многих, кто создает современный контент контент и сталкивается с заказчиками, особенно в России. Так торговцы недвижимостью хотят только рендеры игнорируя VR и AR решения. Далеко не все интернет магазины торопятся внедрять 3-В обзоры и панорамные 360 photo, музеи редко предлагают что-то кроме аудиогидов, а визуальный контент крупных компаний редко значительно отличается от отраслевых шаблонов конца 90-х годов прошлого столетия.

По моей эмпирической оценке на 20 оригинальных визуальных решений с применением современных технологий и креативных подходов в российском сегменте приходится 80 совершенно заурядных стандартных решений, который не впечатляли уже 2008 году, Аналогичная история с вне сетевыми сценариями использования визуальных средств.

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

У руля компаний, СМИ и музеев часто находятся люди, которые живут стереотипами прошлого. Они могут впечатлиться новой технологией, но не рискнут применить её в собственном бизнесе, своей организации, для своего проекта. Даже сам тезис о том, что визуальный контент объективно работает более эффективно, для них не очевиден.

Нужно ли с этим что-то делать?


Наиболее ригидных руководителей бессмысленно убеждать. Даже если ведущее глянцевое издание о бизнесе напишем, что без этих методов нельзя обойтись, они скорее всего проигнорируют. Всех остальных убеждают цифры и позитивные примеры использования. Мой знакомый работает на застройщика, и он скептически относился к внедрению VR-туров, пока не узнал, что их использует аукционный дом Sotheby's. Другой открыл интернет-магазин электроники и сопротивляться покупке 3D-обзоров, пока не узнал, что они подняли конверсию у Связного. Никакие логические доводы здесь не работают, т.к. большинство из нас заложники собственного опыта.

Подробнее..

Эпоха визуального контента развитие или результат регресса пристрастия пользователей и закономерности восприятия

19.03.2021 20:17:05 | Автор: admin
Мы живём во времена, когда традиционные формы передачи информации уходят в прошлое, а центральную роль в человеческой коммуникации приобретает визуальный контент. Как уже не раз отмечали авторы Хабра, это связано с нейробиологическими закономерностями, в первую очередь, с простотой восприятия и быстрым запоминанием визуальной информации, которая обусловлена количеством нейронов КГМ, участвующих в процессе. Закономерно быстро растет и само количество информации, так, в соответствии с оценками Seagate и IDC, мировой объем информации, записанной в цифровом виде, к 2025 году достигнет 160 зеттабайт, хотя ещё в середине нулевых его оценивали в 0,16 зеттабайт. Немалая часть этого количества приходится на визуальный контент.



Столь существенный рост во многом обусловлен визуальным (графическим, видео и 3D контентом). Неуклонно растущая популярность именно визуальных средств передачи и обмена информации некоторыми считается свидетельством деградации человеческих способностей на фоне технического прогресса. Другие, напротив, считают эти процессы естественной реакцией восприятия на эволюцию коммуникационных технологий и не видят поводов для тревоги. Под катом попытка осмыслить существующие взгляды на изменения поведения пользователей при росте интереса к визуальному контенту, понять влияние тенденций развития визуальной коммуникации.

Влияние коммерческого сектора и проблема скорости покупки


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

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

Отчасти, такое мнение подтверждается маркетинговыми исследованиями поведения пользователей интернет-магазинов. Там значительная часть пользователей ограничивается информацией о 2-3-х наиболее значимых характеристиках, а всё остальное время просматривает фото на страницах товара или видеообзоры, не содержащие подробных сведений о характеристиках.

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

Также в этом смысле интересно появление новых форматов визуального контента, таких как VR-туры для продажи недвижимости, AR для оффлайн магазинов и 3D-обзоры техники. Все эти форматы предполагают интерактивное взаимодействие с контентом, с получением подробной текстовой информации о характеристиках товара или объекта.

Например, 3D-обзоры ноутбуков от компании REVIEW3 содержат детальные модели лэптопов, наводя на интерфейс, можно видеть текстовую информацию о нём. Аналогичным образом работают AR-решения для офлайн ритейла, в них существует возможность получать информацию о характеристиках устройства, не заглядывая в даташит, сразу на экране смартфона. VR-решения в недвижимости также позволяют предоставлять дополнительную текстовую и звуковую информацию, которые дополняют представление потенциального покупателя об объекте.

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

Споры об эффективности в обучении


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

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

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

По моему представлению, визуальный контент незаменим при изучении анатомии и физиологии, технических дисциплин, физики, химии, а отказ от его использования лишь затягивает обучение. При этом нельзя не отметить, что способность к пониманию сложных текстов и сухой наукообразной информации действительно способствует когнитивному развитию. Продираясь per aspera ad astra вгрызаясь в сухие научные тексты учащиеся тренируют образное мышление, способности к обобщению и анализу в попытке осмыслить и представить написанное вместо использования готового визуального контента. Так создаются новые нейронные связи, в том числе в структурах мозга, отвечающих за когнитивные процессы.

Блоги и социальные медиа


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

Хорошо демонстрирует ситуацию сравнение динамики роста удельного веса в структуре мировых данных классических и новых социальных медиа. Например, делавший ставку на различные виды контента и обилие сервисов Facebook завоевал в конкурентной борьбе свой первый миллиард пользователей за 7 лет существования, тогда как TiK-Tok, платформа, фокусирующая пользователей на примитивном визуальном контенте, набрала тоже количество за 3 года. До этого несколько лет были связаны со стремительным ростом аудитории Instagram, также с преимущественно визуальным контентом.

В качестве заключения


Такие результаты свидетельствуют лишь о том, что визуальный контент является основным способом получения информации, а также, что наиболее предпочтительная форма коммуникации также предполагает визуальную составляющую. Более того, что пользователь скорее предпочтет не статичное, а динамичное изображение (т.е. видео или некий интерактивный формат, типа 360photo, VR-тура или 3D-обзора. Иными словами, мы стали свидетелями и участниками революции медийного потребления. Более того, как мне кажется, даже не одной за последние 10 лет.

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

Перфорационные очки на 3D-принтере для улучшения зрения опыт моделирования и полученный эффект

28.02.2021 22:22:33 | Автор: admin

Перфорационные очки (очки с дырочками) идеальный вариант для тех, кому лень делать гимнастику для глаз. Я почувствовала, что в последнее время понижается острота зрения и решила не покупать тренажёры за 1000 рублей, а смоделировать и распечатать на 3d-принтере. Интересно было проверить действительно это работает или нет.

Перфорационные очки, распечатанные на 3d-принтереПерфорационные очки, распечатанные на 3d-принтере

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

Зачем мне перфорационные очки?

Недавно я писала, что начала изучать 3D-моделирование в Компас 3Д. Статью о моих салфетницах можно посмотреть ТУТ. Этот проект завершен. Результат меня очень порадовал и вдохновил к следующим действиям. Встал вопрос, что же эдакое смастерить. Безделушки печатать на 3D-принтере не особо хочется, поэтому решила создать что-то полезное. На момент написания данного поста я ношу свои очки-тренажеры уже 5 дней и эффект ощущаю явный. Но обо всем по порядку.

Итак, почему именно перфорационные очки:

  1. Моделировать гайки и болты, а также простейшие конструкции надоело. Было решено взяться за что-то более сложное. Это был мой второй проект. На деле моделирование очков оказалось до безобразия простым, но к итоговому результату я пришла через слёзы и боль))) Ниже расскажу, почему.

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

  3. Я терпеть не могу делать гимнастику для глаз. Ну, не моё это. Всякий раз, как начинала, меня хватало на 1,5 занятия. Может тренажёры как раз и помогут? Решила проверить свою теорию об эффективности перфорационных очков, о которой не перестают спорить знатоки и обыватели с момента появления продукта на рынке. Если не изменяет память, бум был в годах 90-х.

Принцип работы перфорационных очков

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

Если говорить о механизме действия, то все завязано на аккомодационном аппарате органа зрения. А конкретнее, на цилиарной мышце глаз.

Как работает цилиарная мышцаКак работает цилиарная мышца

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

PS: я не профессор, у меня всего лишь среднее медицинское образование (фельдшер). А строение органа зрения очень и очень сложное. Поэтому объяснила, как смогла.

Как я моделировала свои перфорационные очки

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

Процесс моделирования:

1. Нарисовала схему очков на бумаге и обозначила нужные размеры. Будет как подсказка.

2. Создала в Компасе деталь. Нарисовала прямоугольник размерами 140х46 мм. Выдавила на 12 мм, так как форма пластины должна быть вогнутой и будем вырезать нужную толщину из имеющейся массы. Дело в том, что моя попытка выдавить пластину из дуги изначально вогнутой формы провалилась не удалось корректно вырезать даже дырочки.

Основа пластиныОснова пластины

3. Вырезала по нужным размерам область переносицы. Для этого сначала установила вспомогательные линии, так как на определенной длине отрезка нужно было высокое скругление. Прорисовала контур основной линией и вырезала выдавливанием. Высота проёма = 2,5 см, длина основания = 3 см.

Чертёж переносицыЧертёж переносицыРезультат после вырезанияРезультат после вырезания

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

Чертеж контуров для вырезанияЧертеж контуров для вырезанияРезультат после вырезанияРезультат после вырезания

5. Дальше прорисовала пазы по бокам, куда будут вставляться дужки очков. От верха располагаются на расстоянии 7 мм, от бокового края 2 мм (лучше сделать 3). Высота отверстия = 10,3 см, толщина = 2,3 мм (чтобы шип высотой 10 мм и толщиной 2 мм вставился свободно).

6. Прорисовала дырочки. Изначально хотела диаметром 1 мм, но решила, что лучше 1,5 мм для более корректной печати на 3d-принтере. Расстояние между перфорациями = 1 мм (но, когда моделировала, идеальное совмещение Компас мне показал на значении 7 так и не поняла, почему, но ориентировалась по схеме визуально). Чтобы быстро размножить отверстия, сначала прорисовала одну начальную и вторую в шахматном порядке во втором ряду. Выделив две окружности, скопировала по сетке, определила количество элементов и расстояние между ними. Затем удалила лишние отверстия, которые располагаются слишком близко к краям или выходят за них. Отзеркалила сетку для другой пластины. Чтобы убедиться в правильности размеров и расстояний между дырочками, открыла фото перфорационных очков, схожих по форме с моими, и посчитала вручную, сколько их там. Все оказалось в порядке.

В левом углу видна абра-кадабра из вспомогательных линий. Это так я рассчитывала точные расстоянияВ левом углу видна абра-кадабра из вспомогательных линий. Это так я рассчитывала точные расстоянияТакой результат получилсяТакой результат получился

7. Дальше дело оставалось за малым из толщи вырезать вогнутую платину. И вот тут я дошла до слёз и чуть не бросила это занятие) Причем, по своей же глупости. Этот вариант у меня уже был последним, я подкорректировала размеры и учла ошибки предыдущих 5 попыток. Но две дуги и отрезки, соединяющие их, никак не хотели совмещаться и замыкаться в контур. Как так-то? Я ж до этого делала, проблем не возникалоПросидела 1,5 часа, пытаясь совместить точки начала дуги и отрезков. Проступили слезы))) Решила, что не нужны мне эти очки и не буду я заниматься моделированием. Через 15 минут отошла. Убедила себя, что я сильная, что я справлюсь и дойду до конца. Обозначила начало и конец каждой точки вручную, долго и аккуратно. Вуаля получилось! Контур замкнулся. А дальше, на каком-то этапе, когда я прорисовывала дужки, поняла, что у меня тупо были отключены привязки((( Но результат есть, дело пошло дальше.

Не забываем прорисовать замкнутый контур вокруг детали, чтобы корректно вырезать выдавливаниемНе забываем прорисовать замкнутый контур вокруг детали, чтобы корректно вырезать выдавливаниемВырезаем выдавливанием по высоте очков на 45-47 мм. Получается такой результат.Вырезаем выдавливанием по высоте очков на 45-47 мм. Получается такой результат.

8. Прорисовать форму дужек очков после такого стресса было уже проще некуда))) Выдавила на 3 мм. Кстати, создала их не в сборке, а как отдельную деталь.

Контур дужек очковКонтур дужек очковПолучившаяся детальПолучившаяся деталь

9.Скруглила "на глазок" углы. Ребра трогать не стала.

Так уже смотрится симпатичнееТак уже смотрится симпатичнее

10. Вспомнила, что у пластин я не скруглила ничего, доработала. Добавила фаску по верхним углам (для более удобной печати). Скруглила ребра, чтобы не царапали, когда буду носить.

Вид сразу преобразилсяВид сразу преобразился

11. Теперь осталось сделать шипы на дужках, которые будут вставляться в пазы на пластине. НО! Пластина изогнутая, а дужка очков должна вдеваться к ней перпендикулярно. На данном этапе я тоже долго промучилась, но была готова, поэтому боли было меньше))) Я этот нюанс заметила заранее, но не стала скашивать паз, а решила сделать шип под уклоном для большей прочности крепления. Процесс такой: создала сборку, совместила по осям две детали. Пока дужку поставила под прямым углом. Далее на дужке в эскизе рисуем прямоугольник и выдавливаем его до внешнего края объекта (пластин). На этом этапе я еще научилась ловчить с инструментом ориентация.

Готовый шип для пазаГотовый шип для паза

12.Еще пришлось редактировать дужку прилегающий край ровный, под прямым углом, а пластина скошена, соответственно остается небольшое пространство. Отредактировала деталь, изменив выдавливание до ближней поверхности объекта (пластины) в сборке.

13.На завершающем этапе обнаружила, что дужка у очков тоже не прямо-горизонтальная, а изогнута примерно под углом 30 градусов. Здесь уже было проще действовала как с пластиной. Отредактировала эскиз дужек, выдавливание поставила на 10 мм, а не 3. Нарисовала нужные формы и вырезала лишнее.

Готовая дужка для очковГотовая дужка для очков

Вторую дужку рисовать не надо, так как ее можно отзеркалить в слайсере при настройке печати.

Вот и все. Печатаем три детали и собираем перфорационные очки.

На фото неудачный засвет - правая дужка тоже прямая)На фото неудачный засвет - правая дужка тоже прямая)

На печать пластины ушло 3,5 ч, дужек 1 ч 20 мин. Сопло поставили 1,4. Пластик - АБС. Печатали вертикально, причем пластину верх ногами.

Рада, что решила смоделировать очки самостоятельно с нуля

На весь процесс моделирования с попытками 1-6 у меня ушло в общей сложности около 10 часов в несколько подходов. Сейчас я их могу нарисовать меньше чем за час в лёгкую) Но за это время наработала навыки в Компас 3Д, научилась ловчить с разными инструментами, изучила лучше интерфейс и возможности. Улучшилась и пространственная ориентация. Именно так приходит опыт и совершенствуются навыки, которые не потеряются со временем. Многие вещи, которые я смотрела в видеоуроках, забывались сразу после того, как вставала из-за компа) А как моделировала свои первые очки, я не забуду никогда)

Немного об эффективности перфорационных очков

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

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

  1. Снижение остроты зрения вследствие перенапряжения глаз. Не стоит путать с общим ухудшением зрения. Разницу можно понять так: долго сидели за компом, читали книгу, играли в телефон перед глазами образуется некая пелена, кажется, что стали видеть плохо. Но после отдыха все возвращается в норму. Однако, если это происходит изо дня в день, то постепенно острота зрения становится все хуже и хуже. В данном случае перфорационные очки помогут предотвратить ухудшение.

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

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

У меня была миопия -4 и -4,5. Делала в 2014 году лазерную операцию на глаза. Но за последние полгода напряженной работы заметила, что зрение стало по-тихоньку падать. И в этих очках я вижу мир намного четче и ярче. Надеваю их, когда смотрю телевизор или фильмы на компе (играть в них, делать домашние дела, читать не рекомендуется, да и неудобно). И глаза реально отдыхают. Сейчас уже через 5 дней заметила, что меньше устают. Совпадение? Самовнушение? Или реальный эффект? Я склоняюсь к последнему варианту. Как бы там ни было, ношу их и результатом довольна. В итоге получился полезный опыт в моделировании и нужная для меня вещица)

В заключение

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

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

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

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

  4. После печати каждую дырочку нужно тщательно проработать тонким острым предметом. Я это сделала маникюрными ножницами.

  5. Когда надеваешь первый раз такие очки-тренажёры, непривычно. Но потом быстро привыкаешь и чувствуешь, что реально все стало не только четче, но и ярче.

  6. Крепление типа "шип-паз" не даёт складывать очки. Можно только разобрать. Но цель стояла сделать все как можно проще, поэтому в следующий раз я буду применять этот же метод крепления. На практике он себя оправдывает, ничего не болтается.

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

Подробнее..

Пепельница-терминатор на 3D-принтере проект от идеи до воплощения

04.03.2021 18:06:42 | Автор: admin

Хотела пепельницу-череп, а получила пепельницу-терминатор. И она оказалась намного лучше, чем я себе представляла. С этим проектом пришла к выводу, что необязательно пыхтеть над программой Компас 3Д в попытках изобрести уникальную модель. Иногда можно отступиться от своих идей во благо красоты и стиля. Хотя первоначальная задумка создать функциональную пепельницу реализовалась. Расскажу обо всем подробнее.

Пепельница-терминатор на 3D-принтереПепельница-терминатор на 3D-принтере

Откуда взялась идея пепельницы

Я не курю, но решила заняться моделированием пепельницы, так как для меня это следующий этап по сложности (после салфетниц и очков). Как человек практичный, изобрела у себя в голове функциональную пепельницу. По конструкции они все однообразные, а курящие люди то и дело теряют/оставляют/ищут свои пачки, зажигалки, спички. Я подумала, почему бы не сделать такую пепельницу, чтобы все аккуратно лежало в одном месте?

Задачу для моделирования усложнила тем, что объект будет с черепом тема вроде актуальная, хотя я сама любовью к ним не пылаю. Такая штука мне дома не нужна, ее придётся кому-то подарить, поэтому собственные вкусовые предпочтения оставила на заднем плане. А вот подружка очень любит черепа и всё такое.

Как я разрабатывала собственную конструкцию

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

Но задумка была такая: круглая пепельница сверху на макушке черепа. Внизу отсек для пачек предполагалось, что туда можно будет даже 2 вместить. Еще нужно место для зажигалки. Для неё придумала сделать отсек сбоку в виде кармашка, а лучше с двух сторон. Ну и на самой чашке пепельницы должны быть выемки для того, чтобы ставить незатушенную или недокуренную сигарету. А еще неплохо было бы добавить крышку.

Сам череп сначала думала вырезать вектором из рисунка, приложить на переднюю панель и выдавить объемы. Потом поразмышляла и решила, что это будет выглядеть слишком просто. Лучше лицо черепа вырежу из готовой модели, так как до скульптурных дизайнерских фигур мне еще далеко. Да и сомневаюсь, можно ли такое вообще в Компасе смастерить. В процессе поиска подходящей модели для 3Д-печати на https://www.thingiverse.com/ вся моя задумка рухнула

Рождение пепельницы-терминатора

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

Терминатор-карандашница - готовая модель для печатиТерминатор-карандашница - готовая модель для печати

Скачала. Сразу скажу, что модель очень сложная и требовательная к ресурсам компьютера. Повертела, посмотрела вырезать лицо как раз можно. Но тут вижу да это ж практически готовая пепельница под мою задумку! И размеры практически идеальны! В итоге было решено просто переделывать эту модель. Такой опыт тоже полезен, и признаюсь честно, мне с этим помогли. В процессе я научилась новым фишкам в Компасе.

Этапы переделки:

1. Вырезали основной объём, оставили подставку и лицевую часть.

Вырезанная детальВырезанная деталь

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

Выдавили "бока" для выемки под чашу пепельницыВыдавили "бока" для выемки под чашу пепельницыЗамкнули инструментом "элемент выдавливания вращением"Замкнули инструментом "элемент выдавливания вращением"

3. Прорисовали бортики высотой 10 мм с толщиной стенок 2 мм.

Место для пачекМесто для пачек

4. Далее в сборке создали деталь чаши. Она, к сожалению, получается не круглой, а овальной. Тут, в принципе, моделить несложно. Глубина стенок до дна = 1,5 см. Потом удлинили нижнюю часть, чтобы вставлялась в отверстие на макушке терминатора. Не пришлось даже придумывать никаких боковых поддержек. Ну и выемку решили сделать одну, так как чаша получилась маленькая и две сигареты туда не влезут. Вот что в итоге получилось.

Подгоняем размеры чаши пепельницыПодгоняем размеры чаши пепельницыЧаша для пеплаЧаша для пеплаИтоговый результатИтоговый результат

Печаталась эта модель долго. Основной корпус 16 часов (на пластике PLA со скоростью 30-45 мм/сек), чаша 3 часа (на пластике ABS). Но результат того стоит. В слайсере задали принудительные поддержки.

Область принудительных поддержекОбласть принудительных поддержек

Вживую пепельница-терминатор выглядит очень круто, на фото передать не получается.

Чтобы снимки получились в более или менее нормальном качестве, фотографировала на фронтальную камеру телефона, она у меня лучше. Поэтому надпись Т-800 отразилась неправильно.

Общий вид спередиОбщий вид спередиВид сбокуВид сбоку

Неожиданно нашлось даже место для зажигалки. Она встала в выемку идеально.

Положение зажигалки в конструкцииПоложение зажигалки в конструкции

Глаза покрасила акриловой краской в 2 слоя.

Готовая пепельница-терминаторГотовая пепельница-терминаторЧаша и корпусЧаша и корпус

Справедливости ради, не забывая свою основную задачу учиться моделировать в 3Д Компасе, я все ж создала первоначально задуманную конструкцию. Но даже доделывать не стала не идет ни в какое сравнение с той красотой, которая получилась.

Предполагаемый каркас пепельницыПредполагаемый каркас пепельницы

Про безопасность

Модель, конечно, выглядит неплохо, и мне даже её жалко было бы использовать под пепельницу. Здесь вопрос вот в чём пластик легоплавкий и стряхивать туда напрямую пепел или оставлять сигареты небезопасно. Решить проблему можно с помощью гипса, хотя вид, мне кажется, уже будет не тот. Мне обещали распечатать пластиком контур для отлива (в слайсере есть такая функция) и сделать точно такую же чашу из гипса. Далее её можно отшлифовать и покрасить чёрной краской. И тогда с безопасностью всё будет нормально.

Итоги проекта

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

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

Ложка дёгтя)Ложка дёгтя)

Кстати, оставлю ссылки на скачивание. Может, кому-то пригодятся.

Оригинал карандашница.

Переделка пепельница.

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

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

Подробнее..

Что нового в SOLIDWORKS 2021

22.01.2021 18:12:57 | Автор: admin

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

SOLIDWORKS CAD

Проектирование сборок

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

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

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

В SOLIDWORKS всегда поддерживалось гибкое изменение конфигурации отдельных экземпляров компонентов в массивах. Иногда нужно, чтобы все компоненты ссылались на исходный экземпляр. Это может оказаться утомительной процедурой, поскольку выполняется для каждого компонента отдельно. Одна из новинок в SOLIDWORKS 2021 это опция, синхронизирующая конфигурации всех экземпляров компонентов в массиве. Она помогает избежать непреднамеренного изменения любого из этих компонентов через быстрое меню, блокируя изменения в диалоговом окне свойств компонента. Это также гарантирует корректность распространения изменений, вносимых в конфигурацию корневого компонента массива. Кроме того, массивы цепочек теперь могут строиться по траектории с заданием длины кривой (а не только длины хорды).

Метод Силуэт, впервые анонсированный в инструменте Defeature в SOLIDWORKS 2019, позволяет создать упрощенное представление сборки с целью защиты проектных данных от несанкционированного распространения, снижения визуальной загроможденности модели и улучшения производительности. Новинкой в SOLIDWORKS 2021 является возможность сохранять упрощенное представление в виде конфигурации в той же сборке, для которой оно было создано. Это избавляет от необходимости управлять отдельным файлом, содержащим упрощенную модель. Для использования упрощенного вида в сборках более высокого уровня достаточно щелкнуть правой кнопкой мыши на компоненте и выбрать Defeatured.

Конструирование деталей

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

Повышение производительности

Улучшена производительность при выполнении таких операций, как открытие, сохранение и закрытие сборок, обнаружение циклических ссылок и создание отчетов о них, а также добавление файлов в хранилище SOLILDWORKS PDM. Ускорено выполнение операций выбора, панорамирования и зумирования. При удалении скрытых объектов и формировании кромок силуэта в чертежах задействовано больше ресурсов графического процессора.

Пользовательский интерфейс

Инженеры давно ценят интуитивно понятный и настраиваемый пользовательский интерфейс SOLIDWORKS. Однако разработчики не успокаиваются на достигнутом! В SOLIDWORKS 2021 интерфейс стал еще более наглядным и удобным. Улучшена цветовая палитра, которая теперь может ссылаться на другие приложения, такие как веб-браузер. Поиск команд в диалоговом окне настройки позволяет легко компоновать панели инструментов. Диспетчер команд можно сворачивать, чтобы получить на экране больше места для работы, а благодаря полупрозрачным размерам упрощается выбор объектов.

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

Взаимодействие на платформе 3DEXPERIENCE

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

SOLIDWORKS 2021 предоставляет новые функциональные возможности для перехода от проектирования к производству. Конвертер производных форматов позволяет формировать обладающую высокой точностью геометрию для использования на всех стадиях разработки и выпуска продукции. Пользователи могут управлять режимами открытия данных, полученных из платформы 3DEXPERIENCE, и конфигурациями, сохраняемыми в этой платформе.

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

SOLIDWORKS Simulation

Новые возможности имитационного моделирования в SOLIDWORKS Simulation 2021 позволяют добиться еще более высокого качества проектов. Процесс инженерного анализа упрощен и сделан более гибким, улучшены точность и скорость расчетов.

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

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

В SOLIDWORKS Flow Simulation 2021 расширен круг решаемых задач CFD и продолжает совершенствоваться обработка результатов. Для моделирования вращающихся потоков жидкости служит мощная функция Rotating Region. Теперь в Flow Simulation вращающиеся области можно комбинировать со свободно движущимися поверхностями. Это идеально подходит для задач моделирования смешивания и может быть использовано для анализа поведения изделий в эксплуатации.

SOLIDWORKS Plastics

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

SOLIDWORKS Electrical

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

В проектах часто бывает, что несколько кабелей, подключенных к одному и тому же разъему, идут к различным частям электрической системы. Трассировка такой группы кабелей в виде единой сборки не обеспечивает конструкторам достаточной гибкости в принятии решений. В SOLIDWORKS Electrical Schematic 2021 к свойствам кабеля добавлено новое поле, позволяющее отделять один кабель от других. Этот же параметр можно контролировать в команде трассировки кабелей SOLIDWORKS.

SOLIDWORKS PDM

Те, кто работает с SOLIDWORKS PDM, наверняка согласятся, что скорость работы в значительной степени определяется эффективностью базы данных. Благодаря улучшениям производительности в новой версии намного ускоряется выполнение большинства стандартных файловых операций и рабочих процессов. Стали быстрее работать такие функции, как добавление и возврат файлов в PDM-систему, изменение состояния, открытие, сохранение и удаление файлов.

SOLIDWORKS PDM 2021 позволяет анализировать и документировать ссылки с помощью вида Treehouse на вкладках Содержит и Где используется. Значки рабочих процессов визуально информируют участников проекта о работе коллег. Стандартные PDM-операции выполняются быстрее, чем в предыдущей версии.

Одной из самых полезных функций SOLIDWORKS PDM уже давно является интеграция с Проводником Windows. В 2021 версии расширена поддержка таких интерфейсных элементов Windows 10, как лента.

Вид Details это место, где проявляется вся широта возможностей PDM. При работе на этом виде в столбцах определяются наборы свойств, которые видны пользователям. SOLIDWORKS PDM 2021 предоставляет больше возможностей для настройки столбцов и, что самое главное, позволяет работать с несколькими наборами столбцов.

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

Предлагаем вам также ознакомиться с новшествами SOLIDWORKS 2021, посмотрев серию вебинаров:

Все вебинары на русском языке. Предварительная регистрация обязательна.

Подробнее..

Перевод Пишем программу 3D-моделирования в 500 строках кода

04.12.2020 12:06:11 | Автор: admin
image

Введение


Люди от природы креативны. Мы постоянно проектируем и создаём новые, полезные и интересные вещи. Сегодня мы пишем ПО, помогающее процессу проектирования и творчества. Программы САПР (Computer-aided design, CAD) позволяют творцам проектировать здания, мосты, графику видеоигр, чудовищ для фильмов, объектов для 3D-печати и множество других вещей перед созданием физической версии проекта.

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

Специализированные инструменты CAD предоставляют множество дополнительных функций, соответствующих требованиям своей области. Например, в архитектурном CAD есть симуляции физики для тестирования климатических нагрузок на здание, в программе для 3D-печати будут присутствовать функции, проверяющие возможность печати объекта, а пакет для создания кинематографических спецэффектов содержит функции точной симуляции пирокинетики.

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

Давайте теперь узнаем, как можно описать 3D-проект, отобразить его на экране и взаимодействовать с ним всего в 500 строках на Python.

Рендеринг как ориентир


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

Управление интерфейсами и основным циклом


Прежде чем мы приступим к рендерингу, нам нужно подготовить некоторые аспекты. Во-первых, нам требуется создать окно для отображения проекта. Во-вторых, мы хотим обмениваться данными с графическими драйверами для рендеринга на экране. Мы бы не хотели обмениваться данными напрямую, поэтому для управления окном воспользуемся кроссплатформенным слоем абстракции под названием OpenGL и библиотекой под названием GLUT (OpenGL Utility Toolkit).

Примечание о OpenGL


OpenGL это интерфейс программирования графических приложений (API) для кроссплатформенной разработки. Это стандартный API для разработки графических приложений для множества платформ. OpenGL имеет два основных варианта: Legacy OpenGL и Modern OpenGL.

Рендеринг в OpenGL основан на полигонах, задаваемых вершинами и нормалями. Например, для рендеринга одной стороны куба мы задаём 4 вершины и нормаль к стороне.

Legacy OpenGL имеет конвейер с фиксированными функциями (fixed function pipeline). Задавая глобальные переменные, программист может включать и отключать автоматизированные реализации таких функций, как освещение, раскраска, усечение граней и т.д. После чего OpenGL автоматически рендерит сцену со включенной функциональностью. Такая система является устаревшей.

В Modern OpenGL используется программируемый конвейер рендеринга (programmable rendering pipeline), при котором программист пишет небольшие программы, называемые шейдерами; они выполняются на специализированном графическом оборудовании (GPU). Программируемый конвейер Modern OpenGL заменил устаревший Legacy OpenGL.

В своём проекте мы будем использовать Legacy OpenGL. Фиксированная функциональность, предоставляемая Legacy OpenGL, очень полезна для обеспечения небольшого размера кода. Она уменьшает количество необходимых знаний линейной алгебры и упрощает наш код.

Что такое GLUT


Библиотека GLUT из комплекта OpenGL позволяет нам создавать окна операционной системы и регистрировать функции обратного вызова интерфейса пользователя. Этой базовой функциональности достаточно для наших целей. Если бы нам была нужна более функциональная библиотека для управления окнами и взаимодействия с пользователем, то мы бы задумались об использовании полноценного тулкита наподобие GTK или Qt.

Средство просмотра


Для управления параметрами GLUT и OpenGL, а также остальной частью программы моделирования мы создадим класс под названием Viewer. Мы будем использовать единственный экземпляр Viewer, управляющий созданием и рендерингом окон, содержащий основной цикл нашей программы. Внутри процесса инициализации Viewer мы создадим окно GUI и инициализируем OpenGL.

Функция init_interface создаёт окно, в которое будет рендериться редактор, и задаёт функцию, котороая должна вызываться для рендеринга проекта. Функция init_opengl задаёт нужное для программы состояние OpenGL. Она задаёт матрицы, включает отсечение задних граней, регистрирует источник света для освещения сцены и сообщает OpenGL, что объекты нужно раскрашивать. Функция init_scene создаёт объекты Scene и располагает начальные узлы, чтобы пользователь мог начать работу. Чуть ниже мы узнаем больше о структуре данных Scene. Наконец, init_interaction регистрирует обратные вызовы функций для взаимодействия с пользователем, что мы обсудим позже.

После инициализации Viewer мы вызываем glutMainLoop, чтобы перенести исполнение программы в GLUT. Эта функция никогда не выполняет возврат. Обратные вызовы функций, зарегистрированные нами для событий GLUT, будут вызываться при выполнении этих событий.

class Viewer(object):    def __init__(self):        """ Initialize the viewer. """        self.init_interface()        self.init_opengl()        self.init_scene()        self.init_interaction()        init_primitives()    def init_interface(self):        """ initialize the window and register the render function """        glutInit()        glutInitWindowSize(640, 480)        glutCreateWindow("3D Modeller")        glutInitDisplayMode(GLUT_SINGLE | GLUT_RGB)        glutDisplayFunc(self.render)    def init_opengl(self):        """ initialize the opengl settings to render the scene """        self.inverseModelView = numpy.identity(4)        self.modelView = numpy.identity(4)        glEnable(GL_CULL_FACE)        glCullFace(GL_BACK)        glEnable(GL_DEPTH_TEST)        glDepthFunc(GL_LESS)        glEnable(GL_LIGHT0)        glLightfv(GL_LIGHT0, GL_POSITION, GLfloat_4(0, 0, 1, 0))        glLightfv(GL_LIGHT0, GL_SPOT_DIRECTION, GLfloat_3(0, 0, -1))        glColorMaterial(GL_FRONT_AND_BACK, GL_AMBIENT_AND_DIFFUSE)        glEnable(GL_COLOR_MATERIAL)        glClearColor(0.4, 0.4, 0.4, 0.0)    def init_scene(self):        """ initialize the scene object and initial scene """        self.scene = Scene()        self.create_sample_scene()    def create_sample_scene(self):        cube_node = Cube()        cube_node.translate(2, 0, 2)        cube_node.color_index = 2        self.scene.add_node(cube_node)        sphere_node = Sphere()        sphere_node.translate(-2, 0, 2)        sphere_node.color_index = 3        self.scene.add_node(sphere_node)        hierarchical_node = SnowFigure()        hierarchical_node.translate(-2, 0, -2)        self.scene.add_node(hierarchical_node)    def init_interaction(self):        """ init user interaction and callbacks """        self.interaction = Interaction()        self.interaction.register_callback('pick', self.pick)        self.interaction.register_callback('move', self.move)        self.interaction.register_callback('place', self.place)        self.interaction.register_callback('rotate_color', self.rotate_color)        self.interaction.register_callback('scale', self.scale)    def main_loop(self):        glutMainLoop()if __name__ == "__main__":    viewer = Viewer()    viewer.main_loop()

Прежде чем разбирать функцию render, мы должны немного поговорить о линейной алгебре.

Координатное пространство


В нашем случае координатное пространство будет представлять собой точку начала координат и набор из трёх базисных векторов, обычно обозначаемых как оси $x$, $y$ и $z$.

Точка


Любую точку в трёх измерениях можно представить как смещение в направлениях $x$, $y$ и $z$ относительно точки начала координат. Описание точки задаётся относительно координатного пространства, в котором находится точка. Одна и та же точка имеет различные описания в разных координатных пространствах. Любая точка в трёх измерениях может быть представлена в любом трёхмерном координатном пространстве.

Вектор


Вектор это значение из $x$, $y$ и $z$, определяющее разницу между двумя точками по осям $x$, $y$ и $z$.

Матрица преобразований


В компьютерной графике удобно использовать несколько разных координатных пространств для разных типов точек. Матрицы преобразований преобразуют точки из одного координатного пространства в другое. Чтобы преобразовать вектор $v$ из одного координатного пространства в другое, мы выполняем умножение на матрицу преобразований $M$: $v' = M v$. Примерами распространённых матриц преобразования являются перемещение, масштабирование и поворот.

Координатные пространства модели, мира, окна просмотра и проецирования



Рисунок 1 Конвейер преобразований

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

Все преобразования, показанные в правой части Рисунка 1, в том числе все преобразования из пространства камеры (Eye Space) в пространство окна просмотра (Viewport Space) будет выполнять за нас OpenGL.

Преобразование из пространства камеры в однородное пространство усечения (clip space) выполняется функцией gluPerspective, а преобразование в нормализованное пространство устройства и пространство окна обзора функцией glViewport. Эти матрицы перемножаются и хранятся как матрица GL_PROJECTION. Для нашего проекта не обязательно знать терминологию или подробности работы этих матриц.

Однако нам самостоятельно придётся заняться левой частью схемы. Мы задаём матрицу, преобразующую точки модели (также называемой мешем) из пространств моделей в мировое пространство, это называется матрицей модели. Также мы задаём матрицу обзора, выполняющую преобразование из мирового пространства в пространство камеры. В этом проекте мы скомбинируем эти две матрицы, чтобы получить матрицу ModelView.

Чтобы узнать больше о полном конвейере рендеринга графики и используемых координатных пространствах, прочитайте главу 2 книги Real Time Rendering или другую книгу о компьютерной графике для начинающих.

Рендеринг при помощи Viewer


Функция render начинается с подготовки любого состояния OpenGL, что необходимо выполнять во время рендеринга. Она инициализирует матрицу проецирования при помощи init_view и использует данные из функции взаимодействия с пользователем для инициализации матрицы ModelView с матрицей преобразований, выполняющей переход из пространства сцены в мировое пространство. Подробнее о классе Interaction будет написано ниже. Она очищает экран при помощи glClear, приказывает сцене отрендериться, а затем рисует сетку единичных квадратов.

Перед рендерингом сетки мы отключаем освещение OpenGL. При отключении освещения OpenGL рендерит объекты сплошным цветом, а не симулирует источники освещения. Благодаря этому сетка визуально отличается от сцены. Далее glFlush подаёт сигнал графическому драйверу, что мы готовы к очистке буфера и отображению на экран.

    # class Viewer    def render(self):        """ The render pass for the scene """        self.init_view()        glEnable(GL_LIGHTING)        glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT)        # Load the modelview matrix from the current state of the trackball        glMatrixMode(GL_MODELVIEW)        glPushMatrix()        glLoadIdentity()        loc = self.interaction.translation        glTranslated(loc[0], loc[1], loc[2])        glMultMatrixf(self.interaction.trackball.matrix)        # store the inverse of the current modelview.        currentModelView = numpy.array(glGetFloatv(GL_MODELVIEW_MATRIX))        self.modelView = numpy.transpose(currentModelView)        self.inverseModelView = inv(numpy.transpose(currentModelView))        # render the scene. This will call the render function for each object        # in the scene        self.scene.render()        # draw the grid        glDisable(GL_LIGHTING)        glCallList(G_OBJ_PLANE)        glPopMatrix()        # flush the buffers so that the scene can be drawn        glFlush()    def init_view(self):        """ initialize the projection matrix """        xSize, ySize = glutGet(GLUT_WINDOW_WIDTH), glutGet(GLUT_WINDOW_HEIGHT)        aspect_ratio = float(xSize) / float(ySize)        # load the projection matrix. Always the same        glMatrixMode(GL_PROJECTION)        glLoadIdentity()        glViewport(0, 0, xSize, ySize)        gluPerspective(70, aspect_ratio, 0.1, 1000.0)        glTranslated(0, 0, -15)

Что рендерить: сцена


После того, как мы инициализировали конвейер рендеринга для выполнения отрисовки в координатном пространстве мира, что мы будем рендерить? Вспомним, что наша цель создание проекта, состоящего из 3D-моделей. Нам нужна структура данных для хранения этого проекта. а также структура данных для его рендеринга. Обратите внимание на вызов self.scene.render() в цикле рендеринга viewer. Что такое scene?

Класс Scene это интерфейс со структурой данных, которую мы используем для описания проекта. Он абстрагирует подробности структуры данных и предоставляет функции интерфейса, необходимые для взаимодействия с проектом, в том числе функции для рендеринга, добавления элементов и манипулирования элементами. Существует один объект Scene, которым владеет viewer. Экземпляр Scene хранит список всех элементов сцены, называемый node_list. Также он отслеживает выбранный элемент. Функция render сцены просто вызывает render для каждого пункта списка node_list.

class Scene(object):    # the default depth from the camera to place an object at    PLACE_DEPTH = 15.0    def __init__(self):        # The scene keeps a list of nodes that are displayed        self.node_list = list()        # Keep track of the currently selected node.        # Actions may depend on whether or not something is selected        self.selected_node = None    def add_node(self, node):        """ Add a new node to the scene """        self.node_list.append(node)    def render(self):        """ Render the scene. """        for node in self.node_list:            node.render()

Узлы


В функции render класса Scene мы вызываем render для каждого элемента node_list класса Scene. Но что за элементы находятся в этом списке? Мы называем их узлами. Узел может быть всем, что можно поместить в сцену. В объектно-ориентированном ПО мы пишем Node как абстрактный базовый класс. Любые классы, представляющие объекты, размещаемые в Scene, будут наследовать от Node. Этот базовый класс позволяет нам рассуждать о сцене абстрактно. Остальная часть кодовой базы не обязана знать подробностей об отображаемом ею объекте; ей достаточно знать, что они принадлежат к классу Node.

Каждый тип Node определяет собственное поведение для рендеринга самого себя и для любых других взаимодействий. Node отслеживает важные данные о самом себе: матрицу преобразований, матрицу масштабирования, цвет, и т.п. При умножении матрицы преобразований узла на его матрицу масштабирования, мы получаем матрицу преобразований из координатного пространства модели узла в координатное пространство мира. Кроме того, узел также хранит в себе параллельный осям ограничивающий параллелепипед (axis-aligned bounding box, AABB). Подробнее об AABB мы поговорим ниже.

Простейшей конкретной реализацией Node является примитив. Примитив это единая фигура, которую можно добавить в сцену. В нашей программе примитивами будут куб (Cube) и сфера (Sphere).

class Node(object):    """ Base class for scene elements """    def __init__(self):        self.color_index = random.randint(color.MIN_COLOR, color.MAX_COLOR)        self.aabb = AABB([0.0, 0.0, 0.0], [0.5, 0.5, 0.5])        self.translation_matrix = numpy.identity(4)        self.scaling_matrix = numpy.identity(4)        self.selected = False    def render(self):        """ renders the item to the screen """        glPushMatrix()        glMultMatrixf(numpy.transpose(self.translation_matrix))        glMultMatrixf(self.scaling_matrix)        cur_color = color.COLORS[self.color_index]        glColor3f(cur_color[0], cur_color[1], cur_color[2])        if self.selected:  # emit light if the node is selected            glMaterialfv(GL_FRONT, GL_EMISSION, [0.3, 0.3, 0.3])        self.render_self()        if self.selected:            glMaterialfv(GL_FRONT, GL_EMISSION, [0.0, 0.0, 0.0])        glPopMatrix()    def render_self(self):        raise NotImplementedError(            "The Abstract Node Class doesn't define 'render_self'")class Primitive(Node):    def __init__(self):        super(Primitive, self).__init__()        self.call_list = None    def render_self(self):        glCallList(self.call_list)class Sphere(Primitive):    """ Sphere primitive """    def __init__(self):        super(Sphere, self).__init__()        self.call_list = G_OBJ_SPHEREclass Cube(Primitive):    """ Cube primitive """    def __init__(self):        super(Cube, self).__init__()        self.call_list = G_OBJ_CUBE

Рендеринг узлов основан на матрицах преобразований, хранящихся в каждом из узлов. Матрица преобразований узла это сочетание его матрицы масштабирования и матрицы перемещения. Вне зависимости от типа узла, первым этапом рендеринга является задание матрице ModelView интерфейса OpenGL матрицы преобразований, чтобы выполнить переход от координатного пространства модели к координатному пространству окна просмотра. После обновления матриц OpenGL мы вызываем render_self, чтобы приказать узлу выполнить необходимые вызовы OpenGL для отрисовки себя. Затем мы отменяем все изменения, внесённые в состояние OpenGL этого конкретного узла. Мы используем функции OpenGL glPushMatrix и glPopMatrix для сохранения и восстановления состояния матрицы ModelView до и после рендеринга узла. Обратите внимание, что узел хранит свой цвет, расположение и масштаб, применяя их к состоянию OpenGL перед рендерингом.

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

Для рендеринга примитивов мы используем функцию OpenGL списков вызовов. Список вызовов OpenGL это набор вызовов OpenGL, заданных и объединённых под одним названием. Вызовы могут выполняться с помощью glCallList(LIST_NAME). Каждый примитив (Sphere и Cube) определяет список вызовов, необходимый для его рендеринга (не показан).

Например, список вызовов куба отрисовывает 6 граней куба с центром в точке начала координат и с рёбрами длиной ровно 1 единицу.

# Pseudocode Cube definition# Left face((-0.5, -0.5, -0.5), (-0.5, -0.5, 0.5), (-0.5, 0.5, 0.5), (-0.5, 0.5, -0.5)),# Back face((-0.5, -0.5, -0.5), (-0.5, 0.5, -0.5), (0.5, 0.5, -0.5), (0.5, -0.5, -0.5)),# Right face((0.5, -0.5, -0.5), (0.5, 0.5, -0.5), (0.5, 0.5, 0.5), (0.5, -0.5, 0.5)),# Front face((-0.5, -0.5, 0.5), (0.5, -0.5, 0.5), (0.5, 0.5, 0.5), (-0.5, 0.5, 0.5)),# Bottom face((-0.5, -0.5, 0.5), (-0.5, -0.5, -0.5), (0.5, -0.5, -0.5), (0.5, -0.5, 0.5)),# Top face((-0.5, 0.5, -0.5), (-0.5, 0.5, 0.5), (0.5, 0.5, 0.5), (0.5, 0.5, -0.5))

Использование исключительно примитивов сильно ограничивает возможности моделирования. 3D-модели обычно состоят из множества примитивов (или треугольных мешей, которые мы здесь рассматривать не будем). К счастью, структура класса Node упрощает создание узлов Scene, составленных из множественных примитивов. На самом деле, мы можем обеспечить поддержку произвольной группировки узлов без повышения сложности кода.

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

Мы создадим класс HierarchicalNode, то есть Node, содержащий другие узлы. Он управляет списком дочерних узлов. Функция render_self для иерархических узлов просто вызывает render_self для каждого из дочерних узлов. При помощи класса HierarchicalNode очень легко добавлять в сцену фигуры. Теперь для задания снеговика достаточно указать составляющие его фигуры, а также их относительные позиции и размеры.


Рисунок 2 Иерархия подклассов Node

class HierarchicalNode(Node):    def __init__(self):        super(HierarchicalNode, self).__init__()        self.child_nodes = []    def render_self(self):        for child in self.child_nodes:            child.render()

class SnowFigure(HierarchicalNode):    def __init__(self):        super(SnowFigure, self).__init__()        self.child_nodes = [Sphere(), Sphere(), Sphere()]        self.child_nodes[0].translate(0, -0.6, 0) # scale 1.0        self.child_nodes[1].translate(0, 0.1, 0)        self.child_nodes[1].scaling_matrix = numpy.dot(            self.scaling_matrix, scaling([0.8, 0.8, 0.8]))        self.child_nodes[2].translate(0, 0.75, 0)        self.child_nodes[2].scaling_matrix = numpy.dot(            self.scaling_matrix, scaling([0.7, 0.7, 0.7]))        for child_node in self.child_nodes:            child_node.color_index = color.MIN_COLOR        self.aabb = AABB([0.0, 0.0, 0.0], [0.5, 1.1, 0.5])

Вы могли заметить, что объекты Node образуют древовидную структуру данных. Функция render, проходящая иерархические узлы, выполняет обход в глубину по дереву. При обходе она хранит стек матриц ModelView, используемых для преобразования в мировое пространство. На каждом шаге она записывает в стек текущую матрицу ModelView, а когда завершает рендеринг всех дочерних узлов, она извлекает матрицу из стека, оставляя на вершине стека матрицу ModelView родительского узла.

Благодаря тому, что мы сделали класс Node расширяемым, можно добавлять в сцену новые типы фигур, не меняя весь остальной код манипуляций сценой и рендеринга. Благодаря концепции узлов мы абстрагируемся от того факта, что объект Scene может иметь множество дочерних элементов. Это называется шаблоном проектирования Компоновщик.

Взаимодействие с пользователем


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

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

Логика прослушивания событий операционной системы и интерпретации их значения находится в классе Interaction. Написанный нами ранее класс Viewer владеет единственным экземпляром Interaction. Мы используем механизм функций обратного вызова GLUT для регистрации функций, вызываемых при нажатии клавиши мыши (glutMouseFunc), при перемещении мыши (glutMotionFunc), при нажатии клавиши клавиатуры (glutKeyboardFunc) и при нажатии клавиш со стрелками (glutSpecialFunc). Чуть ниже вы увидите функции, обрабатывающие события ввода.

class Interaction(object):    def __init__(self):        """ Handles user interaction """        # currently pressed mouse button        self.pressed = None        # the current location of the camera        self.translation = [0, 0, 0, 0]        # the trackball to calculate rotation        self.trackball = trackball.Trackball(theta = -25, distance=15)        # the current mouse location        self.mouse_loc = None        # Unsophisticated callback mechanism        self.callbacks = defaultdict(list)        self.register()    def register(self):        """ register callbacks with glut """        glutMouseFunc(self.handle_mouse_button)        glutMotionFunc(self.handle_mouse_move)        glutKeyboardFunc(self.handle_keystroke)        glutSpecialFunc(self.handle_keystroke)

Функции обратного вызова операционной системы


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

    # class Interaction     def translate(self, x, y, z):        """ translate the camera """        self.translation[0] += x        self.translation[1] += y        self.translation[2] += z    def handle_mouse_button(self, button, mode, x, y):        """ Called when the mouse button is pressed or released """        xSize, ySize = glutGet(GLUT_WINDOW_WIDTH), glutGet(GLUT_WINDOW_HEIGHT)        y = ySize - y  # invert the y coordinate because OpenGL is inverted        self.mouse_loc = (x, y)        if mode == GLUT_DOWN:            self.pressed = button            if button == GLUT_RIGHT_BUTTON:                pass            elif button == GLUT_LEFT_BUTTON:  # pick                self.trigger('pick', x, y)            elif button == 3:  # scroll up                self.translate(0, 0, 1.0)            elif button == 4:  # scroll up                self.translate(0, 0, -1.0)        else:  # mouse button release            self.pressed = None        glutPostRedisplay()    def handle_mouse_move(self, x, screen_y):        """ Called when the mouse is moved """        xSize, ySize = glutGet(GLUT_WINDOW_WIDTH), glutGet(GLUT_WINDOW_HEIGHT)        y = ySize - screen_y  # invert the y coordinate because OpenGL is inverted        if self.pressed is not None:            dx = x - self.mouse_loc[0]            dy = y - self.mouse_loc[1]            if self.pressed == GLUT_RIGHT_BUTTON and self.trackball is not None:                # ignore the updated camera loc because we want to always                # rotate around the origin                self.trackball.drag_to(self.mouse_loc[0], self.mouse_loc[1], dx, dy)            elif self.pressed == GLUT_LEFT_BUTTON:                self.trigger('move', x, y)            elif self.pressed == GLUT_MIDDLE_BUTTON:                self.translate(dx/60.0, dy/60.0, 0)            else:                pass            glutPostRedisplay()        self.mouse_loc = (x, y)    def handle_keystroke(self, key, x, screen_y):        """ Called on keyboard input from the user """        xSize, ySize = glutGet(GLUT_WINDOW_WIDTH), glutGet(GLUT_WINDOW_HEIGHT)        y = ySize - screen_y        if key == 's':            self.trigger('place', 'sphere', x, y)        elif key == 'c':            self.trigger('place', 'cube', x, y)        elif key == GLUT_KEY_UP:            self.trigger('scale', up=True)        elif key == GLUT_KEY_DOWN:            self.trigger('scale', up=False)        elif key == GLUT_KEY_LEFT:            self.trigger('rotate_color', forward=True)        elif key == GLUT_KEY_RIGHT:            self.trigger('rotate_color', forward=False)        glutPostRedisplay()

Внутренние функции обратного вызова


В показанном выше фрагменте кода можно заметить, что когда экземпляр Interaction интерпретирует действие пользователя, он вызывает self.trigger со строкой, описывающей тип действия. Функция trigger в классе Interaction это часть простой системы обратных вызовов, которую мы будем использовать для обработки событий на уровне приложения. Вспомним, что функция init_interaction в классе Viewer регистрирует обратные вызовы в экземпляре Interaction, вызывая register_callback.

    # class Interaction    def register_callback(self, name, func):        self.callbacks[name].append(func)

Когда коду интерфейса пользователя нужно запустить событие в сцене, класс Interaction вызывает все сохранённые обратные вызовы, имеющиеся для этого события:

    # class Interaction    def trigger(self, name, *args, **kwargs):        for func in self.callbacks[name]:            func(*args, **kwargs)

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

Таблица 1 обратные вызовы и аргументы взаимодействия
Обратный вызов Аргументы Предназначение
pick x:number, y:number Выбирает узел в точке расположения указателя мыши.
move x:number, y:number Перемещает текущий выбранный узел в точку расположения указателя мыши.
place shape:string, x:number, y:number Размещает фигуру указанного типа в точку расположения указателя мыши.
rotate_color forward:boolean Циклически меняет цвет текущего выбранного узла вперёд или назад по списку цветов.
scale up:boolean Увеличивает или уменьшает масштаб текущего выбранного узла согласно параметру.

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

Взаимодействие со сценой


Благодаря механизму обратных вызовов мы можем получать значимую информацию о событиях пользовательского ввода от класса Interaction. Мы готовы к применению этих действий к Scene.

Перемещение сцены


В этой программе мы выполняем движение камеры преобразованием сцены. Другими словами, камера находится на одном месте, а пользовательский ввод двигает сцену, а не камеру. Камера расположена в точке [0, 0, -15] и направлена на точку начала координат мира. (Или же мы можем изменить матрицу перспективы так, чтобы она двигала камеру вместо сцены. Это архитектурное решение очень слабо повлияет на остальную часть программы.) Вернувшись к функции render в Viewer, мы видим, что состояние Interaction используется для преобразования состояния матрицы OpenGL перед рендерингом Scene. Существует два типа взаимодействия со сценой: поворот и перемещение.

Поворот сцены с помощью трекбола


Мы реализуем поворот сцены с помощью алгоритма trackball. Трекбол это интуитивно-понятный интерфейс для манипуляций со сценой в трёх измерениях. Интерфейс трекбола работает так, как будто сцена находится внутри прозрачного шара. Если положить руку на поверхность шара и толкнуть его, шар повернётся. Аналогично, при зажимании правой клавиши мыши и перемещении курсора по экрану вращает сцену. Подробнее о теории трекбола можно прочитать в OpenGL Wiki. В нашей программе мы используем реализацию трекбола, являющуюся частью Glumpy.

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

self.trackball.drag_to(self.mouse_loc[0], self.mouse_loc[1], dx, dy)

Получившаяся матрица поворота это trackball.matrix в окне просмотра при рендеринге сцены.

Примечание: кватернионы


Традиционно повороты описываются одним из двух способов. Первый это значения поворота вокруг каждой из осей; можно хранить их как кортеж из трёх членов, представляющих собой числа с плавающей запятой. Другим распространённым способом задания поворотов является кватернион элемент, состоящий из вектора с координатами $x$, $y$ и $z$, а также поворота $w$. Использование кватернионов имеет множество преимуществ по сравнению с поворотом по осям; в частности, они более стабильны численно. Благодаря использованию кватернионов можно избежать таких проблем, как шарнирный замок (gimbal lock). Недостаток кватернионов в том, что они менее интуитивно-понятны в работе. Если вы не боитесь и хотите узнать больше о кватернионах, то можете изучить это объяснение.

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

Перемещение сцены


Перемещение сцены (например, сдвиг) гораздо проще, чем её поворот. Перемещения сцены выполняются колесом и левой клавишей мыши. Левая клавиша мыши перемещает сцену по координатам $x$ и $y$. Прокрутка колеса мыши перемещает сцену по координате $z$ (ближе или дальше от камеры). Класс Interaction хранит текущее перемещение сцены и модифицирует его при помощи функции translate. Окно просмотра получает расположение камеры класса Interaction при рендеринге и использует его в вызове glTranslated.

Выбор объектов сцены


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

Чтобы пользователь мог манипулировать объектами сцены, он должен иметь возможность выбора элементов.

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

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

Для сохранения компактности кода и достаточной производительности мы используем простую и быструю аппроксимацию теста пересечения луча с объектом. В нашей реализации каждый узел хранит параллельный осям ограничивающий параллелепипед (axis-aligned bounding box, AABB), который является аппроксимацией занимаемого узлом пространства. Чтобы проверить, пересекается ли луч с узлом, мы проверим, пересекается ли луч с AABB узла. Такая реализация означает, что все узлы используют один код для тестов пересечения, а вычислительные затраты остаются постоянными и небольшими для всех типов узлов.

    # class Viewer    def get_ray(self, x, y):        """         Generate a ray beginning at the near plane, in the direction that        the x, y coordinates are facing         Consumes: x, y coordinates of mouse on screen         Return: start, direction of the ray         """        self.init_view()        glMatrixMode(GL_MODELVIEW)        glLoadIdentity()        # get two points on the line.        start = numpy.array(gluUnProject(x, y, 0.001))        end = numpy.array(gluUnProject(x, y, 0.999))        # convert those points into a ray        direction = end - start        direction = direction / norm(direction)        return (start, direction)    def pick(self, x, y):        """ Execute pick of an object. Selects an object in the scene. """        start, direction = self.get_ray(x, y)        self.scene.pick(start, direction, self.modelView)

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

    # class Scene    def pick(self, start, direction, mat):        """         Execute selection.                    start, direction describe a Ray.         mat is the inverse of the current modelview matrix for the scene.        """        if self.selected_node is not None:            self.selected_node.select(False)            self.selected_node = None        # Keep track of the closest hit.        mindist = sys.maxint        closest_node = None        for node in self.node_list:            hit, distance = node.pick(start, direction, mat)            if hit and distance < mindist:                mindist, closest_node = distance, node        # If we hit something, keep track of it.        if closest_node is not None:            closest_node.select()            closest_node.depth = mindist            closest_node.selected_loc = start + direction * mindist            self.selected_node = closest_node

В классе Node функция pick проверяет, пересекается ли луч с AABB Node. Если узел выбран, то функция select переключает состояние выбора узла. Обратите внимание, что в качестве третьего параметра функция ray_hit AABB получает матрицу преобразований между координатным пространством параллелепипеда и координатным пространством луча. Перед вызовом функции ray_hit каждый узел вносит собственные преобразования в матрицу.

    # class Node    def pick(self, start, direction, mat):        """         Return whether or not the ray hits the object        Consume:          start, direction form the ray to check        mat is the modelview matrix to transform the ray by         """        # transform the modelview matrix by the current translation        newmat = numpy.dot(            numpy.dot(mat, self.translation_matrix),             numpy.linalg.inv(self.scaling_matrix)        )        results = self.aabb.ray_hit(start, direction, newmat)        return results    def select(self, select=None):       """ Toggles or sets selected state """       if select is not None:           self.selected = select       else:           self.selected = not self.selected

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

image

Рисунок 3 Ошибка AABB

Например, в случае примитива Sphere, сама сфера касается AABB только в центре каждой из граней AABB. Однако если пользователь нажмёт на угол AABB сферы, будет обнаружена коллизия со сферой, даже если пользователь хотел нажать на что-то за ней (Рисунок 3).

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

Изменение объектов сцены


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

Когда Viewer получает обратный вызов для одного из этих событий, он вызывает соответствующую функцию Scene, которая, в свою очередь, применяет преобразование к текущему выбранному Node.

    # class Viewer    def move(self, x, y):        """ Execute a move command on the scene. """        start, direction = self.get_ray(x, y)        self.scene.move_selected(start, direction, self.inverseModelView)    def rotate_color(self, forward):        """         Rotate the color of the selected Node.         Boolean 'forward' indicates direction of rotation.         """        self.scene.rotate_selected_color(forward)    def scale(self, up):        """ Scale the selected Node. Boolean up indicates scaling larger."""        self.scene.scale_selected(up)

Смена цвета


Манипуляция цветом выполняется через список возможных цветов. Пользователь может перемещаться по списку клавишами со стрелками. Сцена отдаёт команду смены цвета текущему выбранному узлу.

    # class Scene    def rotate_selected_color(self, forwards):        """ Rotate the color of the currently selected node """        if self.selected_node is None: return        self.selected_node.rotate_color(forwards)

Каждый цвет хранит свой текущий цвет. Функция rotate_color просто изменяет текущий цвет узла. Цвет передаётся OpenGL с помощью glColor при рендеринге узла.

    # class Node    def rotate_color(self, forwards):        self.color_index += 1 if forwards else -1        if self.color_index > color.MAX_COLOR:            self.color_index = color.MIN_COLOR        if self.color_index < color.MIN_COLOR:            self.color_index = color.MAX_COLOR

Масштабирование узлов


Как и в случае с цветом, сцена отдаёт команды изменения масштаба выбранному узлу, если он есть.

    # class Scene    def scale_selected(self, up):        """ Scale the current selection """        if self.selected_node is None: return        self.selected_node.scale(up)

Каждый узел хранит текущую матрицу, содержащую его масштаб. Матрица, изменяющая масштаб по параметрам $x$, $y$ и $z$ в соответствующих направлениях, имеет вид:

$\begin{bmatrix} x & 0 & 0 & 0 \\ 0 & y & 0 & 0 \\ 0 & 0 & z & 0 \\ 0 & 0 & 0 & 1 \\ \end{bmatrix}$


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

    # class Node    def scale(self, up):        s =  1.1 if up else 0.9        self.scaling_matrix = numpy.dot(self.scaling_matrix, scaling([s, s, s]))        self.aabb.scale(s)

Функция scaling возвращает матрицу, соответствующую коэффициентам масштабирования $x$, $y$ и $z$.

def scaling(scale):    s = numpy.identity(4)    s[0, 0] = scale[0]    s[1, 1] = scale[1]    s[2, 2] = scale[2]    s[3, 3] = 1    return s

Перемещение узлов


Для перемещения узла мы используем то же вычисление луча, что и для выбора. Мы передаём луч, представляющий текущую позицию мыши, в функцию move сцены. Новое местоположение узла должно находится на луче. Чтобы определить, куда луч должен поместить узел, нам нужно знать, расстояние узла от камеры. Так как мы сохранили местоположение узла и расстояние до камеры при его выборе (в функции pick), можно использовать здесь эти данные. Мы находим точку, находящуюся на том же расстоянии от камеры вдоль луча и вычисляем разность векторов между новым и старым местоположением. Затем мы перемещаем узел на получившийся вектор.

    # class Scene    def move_selected(self, start, direction, inv_modelview):        """         Move the selected node, if there is one.                    Consume:         start, direction describes the Ray to move to        mat is the modelview matrix for the scene         """        if self.selected_node is None: return        # Find the current depth and location of the selected node        node = self.selected_node        depth = node.depth        oldloc = node.selected_loc        # The new location of the node is the same depth along the new ray        newloc = (start + direction * depth)        # transform the translation with the modelview matrix        translation = newloc - oldloc        pre_tran = numpy.array([translation[0], translation[1], translation[2], 0])        translation = inv_modelview.dot(pre_tran)        # translate the node and track its location        node.translate(translation[0], translation[1], translation[2])        node.selected_loc = newloc

Обратите внимание, что новое и старое местоположения задаются в координатном пространстве камеры. Нам нужно, чтобы перемещение задавалось в координатном пространстве мира. Следовательно, мы преобразуем перемещение в пространстве камеры в перемещение в мировом пространстве, умножив на матрицу, обратную modelview.

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

$ \begin{bmatrix} 1 & 0 & 0 & x \\ 0 & 1 & 0 & y \\ 0 & 0 & 1 & z \\ 0 & 0 & 0 & 1 \\ \end{bmatrix}$


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

    # class Node    def translate(self, x, y, z):        self.translation_matrix = numpy.dot(            self.translation_matrix,             translation([x, y, z]))

Функция translation возвращает матрицу перемещения, соответствующую списку расстояний перемещения по $x$, $y$ и $z$.

def translation(displacement):    t = numpy.identity(4)    t[0, 3] = displacement[0]    t[1, 3] = displacement[1]    t[2, 3] = displacement[2]    return t

Размещение новых узлов


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

    # class Viewer    def place(self, shape, x, y):        """ Execute a placement of a new primitive into the scene. """        start, direction = self.get_ray(x, y)        self.scene.place(shape, start, direction, self.inverseModelView)

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

    # class Scene    def place(self, shape, start, direction, inv_modelview):        """         Place a new node.                    Consume:          shape the shape to add        start, direction describes the Ray to move to        inv_modelview is the inverse modelview matrix for the scene         """        new_node = None        if shape == 'sphere': new_node = Sphere()        elif shape == 'cube': new_node = Cube()        elif shape == 'figure': new_node = SnowFigure()        self.add_node(new_node)        # place the node at the cursor in camera-space        translation = (start + direction * self.PLACE_DEPTH)        # convert the translation to world-space        pre_tran = numpy.array([translation[0], translation[1], translation[2], 1])        translation = inv_modelview.dot(pre_tran)        new_node.translate(translation[0], translation[1], translation[2])

Итог


Поздравляю! Мы успешно реализовали небольшой 3D-редактор!

image

Рисунок 4 Пример сцены

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

При разработке полнофункционального 3D-приложения вы столкнётесь с этими же базовыми строительными блоками. Структура графа сцены и относительные координатные пространства используются во многих видах приложений для работы с 3D-графикой, от САПР до игровых движков. Сильным упрощением в этом проекте стал интерфейс пользователя. Готовый 3D-редактор должен иметь полный интерфейс пользователя, которому потребуется гораздо более сложная система событий, чем наша простая система обратных вызовов.

Вы можете экспериментировать дальше и попробовать добавить в проект новые функции. Попробуйте реализовать что-нибудь из этого списка:

  • Добавить тип Node для поддержки мешей треугольников произвольной формы.
  • Добавить стек отмены действий, чтобы можно было отменять/повторять действия пользователя.
  • Сохранение/загрузка проекта в трёхмерный формат файлов, например, в DXF.
  • Интеграция движка рендеринга: экспорт проекта для использования в фотореалистичном рендерере.
  • Улучшить распознавание коллизий точным пересечением луча с объектом.

Дальнейшее исследование


Для дальнейшего изучения реального ПО 3D-моделирования интересно рассмотреть проекты с открытым исходным кодом.

Blender это полнофункциональный пакет для 3D-анимаций с открытым исходным кодом. В нём есть полный 3D-конвейер для создания спецэффектов в видео или для создания игр. Моделирование это небольшая часть данного проекта, и оно является хорошим примером интеграции моделирования в большой программный пакет.

OpenSCAD это инструмент для 3D-моделирования с открытым исходным кодом. Он не интерактивен программа считывает скрипт, определяющий, как генерировать сцену. Это даёт проектировщику полный контроль над процессом моделирования.

Подробнее об алгоритмах и техниках компьютерной графики можно узнать из замечательного ресурса Graphics Gems.

Об авторе


Эрик разработчик ПО и фанат двухмерной и трёхмерной компьютерной графики. Он занимался разработкой видеоигр, ПО для трёхмерных спецэффектов и инструментов САПР. Если дело касается симулирования реальности, то есть вероятность, что ему захочется об этом узнать. Найти его онлайн можно на сайте erickdransch.com.
Подробнее..

Моделирование дома в SketchUp и перенос его в Unity 3D

24.01.2021 00:17:21 | Автор: admin

Учебные материалы для школы программирования. Часть7

Spoiler

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

Сегодня, мы создадим здание и перенесем его в Unity. Хочу обратить ваше внимание на то, что для импорта готового здания, необходимо, чтобы SketchUp стоял на том же ПК. Без программы Unity не сможет импортировать модель.

Порядок выполнения

Откроем SketchUp и выберем шаблон Simple Template - Meters.

Выберем инструмент фигуры и нарисуем на земле квадрат по форме дома.

Теперь, выдавим его с помощью инструмента выдавить/вдавить (push/pull).

Сделаем стены. Для этого используем инструмент Сдвиг (Offset).

Повторим операцию ещё раз.

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

Лишние линии убираются инструментом Ластик (Erase).

Выдвигаем стены.

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

Нарисуем на стене квадрат и выделим его.

Нажимая Ctrl+C и Ctrl+V, копируем его по стене, привязывая к линии.

После копирования окон лишнии линии стираем.

С помощью инструмента Вдавить/выдавить вдавливаем окно до состояния "На грани" (On Face).

Теперь, инструмент запомнил глубину и можно вырезать окна двойным кликом.

Вырежем дверь похожим образом.

Используем инструмент "Ведёрко" (Paint Bucket) для наложения текстур. Выберем подходящую текстуру и зальём пол с фундаментом.

Аналогично поступим со стенами.

Чтобы наложить текстуру на замкнутый контур, нажмём Shift, чтобы наложить на все плоскости, имеющие такую же текстуру Ctrl.

Текстура на стену легла не идеально. Перейдём в свиток Текстура-Позиция, и перетягивая красный ползунок мы изменим позицию текстуры, а зелёным её размер.

Сейчас текстура этой стены отличается от остальных стен. Используем клик левой кнопки мыши по этой стене с зажатым Alt на инструменте "Ведёрко", чтобы запомнить настройки текстуры на этой стене.

И красим инструментом "Ведёрко" остальные стены.

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

На одном из торцов дома создадим плоскость для крыши.

Попрошу заметить, что мы вышли из группы кликом по пустому месту на экране. Если плоскость маленькая, её можно увеличить инструментом "Растянуть" (Scale).

Рисуем на плоскости очертания крыши. Лишние линии можно стереть.

Инструметом Выдавить/вдавить придаём объем.

Используем "Сдвиг" на крыше, чтобы добавить объёма.

И вдавим плоскость немного внутрь.

Окрасим всё подходящими текстурами и удалим человека. Домик готов для импорта в Unity!

В настройках импорта в Unity надо выставить галочку Generate Colliders, а во вкладке Material Use External Materials.

При этом, импортируются все материалы и создадутся папки.

Теперь, у вас есть своя собственная модель дома, для использования в играх!

Подробнее..

Хитрости работы с MeshLab устранение ошибок в 3D моделях

20.02.2021 20:08:41 | Автор: admin

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

Довольно популярной проблемой при работе с 3D моделями является возникновение отверстий (holes, gaps). Такие проблемы возникают из-за несовершенной процедуры реконструкции сцены или недостаточной точности и качества 3D камер типа Microsoft Kinect.

Мы можем восстановить поврежденные поверхности моделей и закрыть дыры в программе Meshlab. Meshlab включает специальный фильтр для задачи закрытия отверстий в 3D моделях.

В начале откроем Meshlab и импортируем модель: File > Import Mesh.

Здесь показан пример модели с отверстием

Применим фильтр. Откроем в верхнем меню Filters > Remeshing, Simplification > Close Holes

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

Введем значение для параметра Max size to be closed и нажмем Apply. В моем случае хороший результат дало значение 210.

Результат применения фильтра

Выглядит неплохо, не правда ли?

Как мы видим не нужно писать специальный скрипт для закрытия отверстий. Все работает "из коробки".

Решение проблемы с дубликат вершины в модели

После применения фильтра Close Holes при экспорте модели в obj файл могут возникнуть вершины-дубликаты, т.е. вершины с одинаковыми координатами. Это может привести к некорректной обработке модели при использовании библиотек типа OpenMesh.

Давайте создадим obj файл со следующим содержимым:

v 0 0 0
v 1 0 0
v 0 1 0
v 1 1 0
f 0 1 2
f 1 2 3

Создадим скрипт test_duplicates.py с использованием библиотеки OpenMesh (туториалы по ней можно посмотреть здесь)

import openmesh as om import numpy as npmesh_3 = om.read_trimesh('duplicate_vert_test.obj')print('Test duplicate vertices')for i, vh in enumerate(mesh_3.vertices()):    print('Vertices adjacent to vertex ', i)    for vh_n in mesh_3.vv(vh):        print(vh_n.idx())

Запустим его

Vertices adjacent to vertex  021Vertices adjacent to vertex  102Vertices adjacent to vertex  210Vertices adjacent to vertex  3Vertices adjacent to vertex  4

Добавим дубликат вершины

v 0 0 0
v 1 0 0
v 0 1 0
v 1 1 0
v 1 0 0
f 0 1 2
f 4 2 3

Здесь мы добавили еще одну вершину с координатами 1 0 0.

Запустим скрипт еще раз

Vertices adjacent to vertex  0Vertices adjacent to vertex  132Vertices adjacent to vertex  213Vertices adjacent to vertex  321Vertices adjacent to vertex  4

Сейчас мы видим, что для вершины 0 нет соседних вершин, зато для вершины 3 появились две соседние вершины 2 и 1. Кажется, что вершина 4 перетянула к себе всех соседей вершины 0, с которой имеет одинаковые координаты.

Попробуем удалить дубликаты вершин на модели из примера выше. Импортируем модель

Здесь мы видим множество цветных граней.

Применим специальный фильтр для удаления дубликатов вершин

Filters -> Cleaning and Repairing -> Remove duplicate Vertices

Результат применения фильтра

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

vn 0.000000 -nan(ind) 0.000000
v 0.000000 0.000000 0.000000
vn 0.000000 0.000000 -0.785398
v 1.000000 0.000000 0.000000
vn 0.000000 0.000000 -0.785398
v 0.000000 1.000000 0.000000
vn 0.000000 0.000000 -1.570796
v 1.000000 1.000000 0.000000
# 4 vertices, 0 vertices normals
f 4//4 2//2 3//3
# 1 faces, 0 coords texture

На этом все. Удачи в использовании MeshLab для манипуляции с 3D моделями и до новых встреч.

Подробнее..

3D реконструкция лица, или как получить своего цифрового двойника (Часть 1)

24.03.2021 20:12:56 | Автор: admin
Фотография (слева) и рендеринг 3D модели лица (справа)Фотография (слева) и рендеринг 3D модели лица (справа)

Поговорим об одном интересном методе восстановления 3D лица человека, которое почти не отличить от фотографий.

На хабре уже 2 года не появлялись статьи про лицевую 3D реконструкцию, и в Twin3D мы хотим постепенно заполнять этот пробел и регулярно выкладывать обзоры интересных статей, методов и наших собственных результатов на тему 3D digital human в целом.

Сначала пара слов о том, кому и зачем эти 3D лица и тела нужны (вообще об этом можно отдельную статью написать). Изначально 3D сканирование человека использовалось в кино для спецэффектов, где с лицом героя должно произойти что-то мало желаемое в реальности (например, взрыв) или невозможное. С увеличением требований к графике в компьютерных играх появилась потребность создавать всё более реалистичных персонажей и гораздо проще отсканировать живого человека, чем лепить/рисовать с нуля по фотографиям. Теперь же к этому прибавляется желание людей оказаться в виртуальном мире или самим быть персонажами игр и для этого, естественно, тоже нужны 3D модели.

Стоит отметить, что предыдущие статьи на хабре фокусировались на методах легкого создания 3D моделей лиц. Как обычно, тут есть trade-off между качеством и простотой получения 3D модели. В нашем цикле статей мы расскажем про 3 метода в порядке убывания сложности процесса сканирования: от специального сетапа с 24 камерами и 6 вспышками (об этом методе поговорим сейчас) до фотографии со смартфона.

Исторически реконструкция лица начиналась со стандартных методов multi-view stereo (об этом можно почитать в википедии, а также есть классная брошюра от Google), и понятно, что для таких методов требуется большое число фотографий с разных ракурсов. Эти методы основаны на математической оптимизации.

Терминология

Результатом базовой 3D реконструкции лица является следующее сочетание: геометрия + текстура альбедо + отражаемость и нормали (картинки будут ниже).

  • Геометрия это просто меш, т.е. упорядоченный набор связанных между собой точек в 3D.

  • Текстура альбедо это по сути набор пикселей, которые покрывают этот меш, настоящий цвет кожи.

  • Отражаемость и карта нормалей информация про каждый пиксель о том, как он отражает падающий свет (как сильно и в каком направлении).

Только при наличии всех эти трех компонент можно получить качественную фотореалистичную 3D модель лица.

Пара слов о методе

Метод реконструкции лица, о котором мы сейчас поговорим, описан в статье "Near-Instant Capture of High-Resolution Facial Geometry and Reflection", которая написана G. Fyffe, P. Graham, B. Tunwattanapong, A. Ghosh, P. Debevec и представлена на Eurographics 2016. Ее можно почитать здесь (дальше все картинки взяты оттуда). Эта работа примечательна тем, что авторам впервые удалось получить качество восстановления с точностью до пор кожи при почти мгновенном сканировании (66 мс). На заставке вы увидели результаты именно этой статьи. Статье уже 5 лет, но она стала своего рода классикой, да и авторы у нее широко известны в узких кругах (тот же Дебевек из Google). Статья написана довольно специфичным языком и с опусканием многих неочевидных деталей, так что пришлось немного поломать голову, чтобы ее понять и написать этот текст.

Как это работает

Для начала, авторы собрали весьма интересный риг из камер и вспышек. В нем 24 DSLR камеры CanonEOS 600D и 6 профессиональных вспышекSigma EM-140. Вспышки эти включаются последовательно, а вместе с ними одновременно фотографируют какое-то подмножество камер, так что в итоге каждая камера фотографирует ровно один раз. Камеры установлены и разбиты на группы так, чтобы оптимально покрыть всю область лица и для каждой точки увидеть хотя бы 3 разных отражения (дальше увидим, зачем). Реализована съемка с помощью микроконтроллера 80MHz Microchip PIC32. Авторы отдельно продумали, что весь этот процесс должен занимать меньше скорости моргания человека (~100 мс), так что от первой до последней фотографии проходит 66 мс, согласно статье.

Риг для съемки лицаРиг для съемки лица

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

Пайплайн алгоритмаПайплайн алгоритма

Исходный меш получается через обычный multiview stereo (например, Metashape). Но его качество довольно низкое (+- 2 мм), так что на основе карты нормалей этот меш в конце уточняется.

Поэтапное улучшение исходного мешаПоэтапное улучшение исходного меша

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

Диффузная и спекулярная карты нормалейДиффузная и спекулярная карты нормалей

А получаются эти нормали для каждого пикселя по сути через решение систем линейных уравнений

\bf{L} \beta = \bf{P},

где L матрица направлений света для всех видов камер, \beta искомая нормаль (3-мерный вектор), P условные значения пикселей для этих точек и видов камер. После пристального взгляда на эту систему становится понятным, зачем нужно видеть точку хотя бы с трех ракурсов в противном случае систему однозначно не решить. Если хочется иметь карту разрешения 4096x4096, то соответственно нужно решить 16 млн таких систем, так что эффективное использование GPU здесь must have. Параллелизация таких вычислений отдельная нетривиальная задача.

Эти уравнения решаются в рамках ламбертового приближения для диффузных нормалей, потому что как раз это нужно для описания матового отражения кожи от ее глубинных слоев. Для спекулярных нормалей решаются более сложные уравнения в приближении Blinn-Phong, чтобы учесть возможность зеркальных отражений кожи, но суть остается той же.

Результаты

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

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

Сравнение фотографии (слева) и рендеринга 3D модели под тем же углом и освещением (справа)Сравнение фотографии (слева) и рендеринга 3D модели под тем же углом и освещением (справа)

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

Уточненный меш и рендеринг под новым ракурсом и освещениемУточненный меш и рендеринг под новым ракурсом и освещением

Итоги

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

  • Волосы на всех результатах люди просто в шапочках, ни у кого нет щетины

  • Отдельные артефакты уши, ноздри носа и другие слабо видимые места никаким специальным образом не процессятся

  • Глаза они, конечно, не подойдут для игр или кино :)

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

Подробнее..

Средства моделирования крупных сборок хорошие новости для производителей промышленного оборудования

26.03.2021 16:04:17 | Автор: admin

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

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

Быстрота работы с большими чертежами

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

Возьмем режим Оформление. Этот режим появился в SOLIDWORKS 2020 как ответ на пожелание значительно ускорить подготовку больших листов чертежей со множеством видов. По сути, режим Оформление это специальное упрощенное представление чертежей. Файл даже большого чертежа открывается за несколько секунд. В новом SOLIDWORKS 2021 режим Оформление получил дальнейшее развитие. Разработчики добавили возможность располагать на листе местные виды, виды с разрывом, обрезанные виды, наносить условные обозначения отверстий.

Параметр Повышенная производительность графики тоже впервые появился в SOLIDWORKS 2020. Благодаря этому параметру ресурсозатратные графические задачи перекладываются на высокопроизводительную видеокарту. В SOLIDWORKS 2021 этот параметр стал доступен и в среде оформления чертежей.

На сайте SOLIDWORKS есть видео, на котором показано параллельное сравнение быстродействия среды черчения в версии 2020 и в новой версии 2021. Выводы делайте сами.

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

Многие наши клиенты используют SOLIDWORKS. Эта система дала нужную нам скорость и гибкость, благодаря которым мы сумели воспользоваться возможностями, которые открываются на рынке 3D-печати деталей крупного и сверхкрупного формата.

Джонатан Шредер, президент, 3D Platform

Автоматическая загрузка компонентов в упрощенном представлении

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

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

Геометрические зависимости

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

В SOLIDWORKS 2021 вы увидите обновленное окно Property Manager, в котором зависимости рассортированы по логическим группам на четырех вкладках.

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

Мы оказались правы в своем предположении, что только SOLIDWORKS отвечает нашим требованиям: наличие интеллектуального механизма наложения зависимостей, открытый интерфейс API и большое сообщество пользователей.
Кевин Могер, президент, Glide-Line

Синхронизация компонентов

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

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

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

Устранение пространственных коллизий

Обнаружение коллизий мощный инструмент, который ускоряет проектирование. В SOLIDWORKS 2021 появилась возможность организовать процесс устранения коллизий с помощью электронных таблиц.

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

Сохранение модели с упрощенной геометрией как отдельной конфигурации

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

Когда важна скорость конструкторско-технологической подготовки производства

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

Есть вопросы? Узнайте больше о новых возможностях SOLIDWORKS 2021

Хотите живую демонстрацию системы? Обратитесь к реселлеру SOLIDWORKS.

Хотите узнать, как машиностроительным предприятиям удается сократить и удешевить цикл разработки продукции?

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

Подробно ознакомиться с функционалом и новшествами SOLIDWORKS 2021 предлагаем вам, посмотрев видео наофициальном канале Dassault Systemesв России:

  1. SOLIDWORKS 2021 | Повышение производительности и новый подход к проектированию

  2. Что нового в SOLIDWORKS SIMULATION 2021

  3. SOLIDWORKS CAM 2021 | Нововведения в моделировании механической обработки

  4. SOLIDWORKS PLASTICS 2021 | Новый взгляд на процессы литья полимеров под давлением

  5. SOLIDWORKS PDM 2021 | Обмен данными с внешними системами

Подробнее..

Рейтинг лучших бесплатных программ для 3D-моделирования (для начинающих) на весну 2021 года

19.04.2021 18:14:05 | Автор: admin

Существуют сотни различных бесплатных программных инструментов для 3D-моделирования для новичков, желающих создать свои собственные 3D-модели. Пользователи могут экспортировать свои модели и либо напечатать их на 3D-принтере, либо разместить в интернете, чтобы другие могли загрузить их бесплатно или за деньги.

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

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

Список лучших бесплатных программ для 3D-моделирования в 2021 году:

1. TinkerCAD лучшая программа для начинающих

2. 3D Slash простая программа для начинающих

3. FreeCAD бесплатная программа с открытым исходным кодом

4. SketchUp

5. Blender расширенная бесплатная программа

6. MeshMixer

7. Fusion 360

8. Vectary

9. SelfCAD

10. BlocksCAD

11. OpenSCAD

12. Wings 3D

Критерии, которые использовались для оценки:

  • Простота использования. Бесплатными программами часто пользуются новички, поэтому это важно.

  • Наличие хорошо проработанного набора инструментов для создания профессиональных 3D-моделей.

  • Наличие новых инструментов, которые дают возможность использовать совершенно новый подход к созданию 3D-дизайнов.

1. TinkerCAD лучшая бесплатная программа для начинающих

Страна разработчика - США. Доступна к работе в браузере.

Это одна из многих программ 3D CAD-гиганта Autodesk, TinkerCAD. Инструмент обманчиво выглядит примитивным, прост в использовании, но снова и снова попадает в топ лучших бесплатных программ.

TinkerCAD позволяет создавать детализированные 3D-модели, используя базовые формы, соединяя их вместе. Процесс обучения намного проще, чем в других программах. Она идеально подходит для новичков и детей, для обучения детей 3D-печати. Ее чаще других используют в школах и классах по всему миру. Можете начать работу за считанные минуты в браузере без загрузки. Более того, можно скачать приложение TinkerCAD и поиграть с моделями на смартфоне или планшете!

Autodesk производит множество программ для различных отраслей. TinkerCAD идеально подходит для начинающих в 3D-дизайне, позволяет сделать что-то классное. Вы можете экспортировать модель в STL и любом другом формате и отправить на печать на 3D-принтере. Как только вы приобретете необходимый опыт, вам может понадобиться более сложная программа, например AutoCAD. Но при этом TinkerCAD остается отличной программой для начала вашей карьеры 3D-дизайнера.

2. 3D Slash простая бесплатная программа для начинающих

Основная версия бесплатная, премиум версия требует оплату $2 в месяц.

Идеально подходит для новичков. 3D Slash не похожа на обычную программу, больше похожа на дружественный, интерактивный 3D-мир, где вы можете создавать, что угодно. Команда разработчиков четко продумала, как сделать пользовательский интерфейс максимально естественным, понятным не дизайнерам, без сложного процесса обучения. Функционал интуитивно понятен и удобен.

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

3. FreeCAD бесплатная программа с открытым исходным кодом

FreeCAD была выпущена еще в 2002 году, и несмотря на то, что все еще находится в стадии бета-тестирования, ее разработка значительно продвинулась. Она предназначена для того, чтобы сделать процесс создания 3D-версий реальных объектов максимально эффективным и простым.

Очень полезная функция - возможность начать со статического 2D-эскиза, из которого затем можно построить конечную 3D-модель. FreeCAD хорошо работает в Windows и Mac, можно легко экспортировать модель в виде файлов STL, OBJ или даже DXF, например, для ЧПУ.

Хотя FreeCAD была разработана в основном для станков, ее можно использовать и для 3D-печати. Более того, FreeCAD - программа с открытым исходным кодом, поэтому можно работать с Python.

FreeCAD идеально подходит для пользователей с некоторым опытом проектирования, так как часть инструментов может оказаться сложной для начинающих. Но в целом это очень мощный бесплатный инструмент для 3D-моделирования.

4. SketchUp

Основная версия бесплатная, версия Pro стоит $299 в год. Страна разработчика США.

Программа - ветеран индустрии программного обеспечения для 3D-моделирования, была создана в 2000 году компанией Lastsoftware. В 2006 году ее выкупил Google, чтобы внедрить этот универсальный и мощный инструмент в свои сервисы. С тех пор она была продана Trimble Inc., которая и предложила бесплатную версию. SketchUp - отличный выбор для начинающих дизайнеров. Ее, как и TinkerCAD, освоить легче, чем большинство других 3D-программ. Содержит практически все инструменты, которые могут понадобиться.

Несмотря на то, что SketchUp пользуются в основном архитекторы, она приобретает все большую популярность в 3D-печати. Инструменты удивительно хорошо подходят создателям 3D-CAD-файлов. Вы можете загрузить расширение SketchUp STL, чтобы создавать файлы в STL.

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

5. Blender расширенная бесплатная программа

Страна разработчика Нидерланды.

Возможно, это самое популярное программное обеспечение для 3D-дизайна. Blender имеет огромное активное сообщество, которое делится своими STL-файлами и 3D-моделями, а также информацией в интернете. Быстрый поиск Google и YouTube выдаст тысячи ссылок, где пользователи демонстрируют свои 3D-проекты и обмениваются опытом работы в Blender 3D. Такая популярность обусловлена прежде всего тем, что программа на 100% бесплатная и с открытым исходным кодом. В ней можно создать практически все, что угодно. Выбор инструментов огромен.

Процесс обучения более сложный, чем у предыдущих программ. Однако благодаря своему набору инструментов Blender универсальная программа для 3D-моделирования. Она используется в различных областях, начиная от создания VFX для фильмов, видеоигр, дизайна 3D-моделей, заканчивая 3D-печатью. Кроме того, Blender поставляется с интегрированным игровым движком, а также детализированными инструментами для моделирования и возможностью редактирования видео. Это невероятное бесплатное программное обеспечение идеально подходит для разработчиков игр и опытных 3D-моделистов.

6. MeshMixer

Страна разработчика США.

Meshmixer уникальная программа, не вписывающаяся ни в одну конкретную категорию. Еще одна разработка Autodesk, Meshmixer выгодно отличается от конкурентов тем, что позволяет редактировать существующие модели с помощью различных инструментов, включая анимацию, выгибание/заполнение, восстановление. Meshmixer хорошо подходит для модификации конструкций и обеспечения качества. Полезна как для начинающих, так и для экспертов. Позволяет улучшать и готовить свои модели к 3D-печати.

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

В целом, Meshmixer - универсальный вариант для тех, кому нужно улучшить 3D-модель. Новички могут изменять свои модели, эксперты - оптимизировать промышленные проекты.

7. Fusion 360

Программа бесплатна для личного пользования в течение года, Pro версия стоит около $500 в год.

Страна разработчика США.

Очередная разработка Autodesk для школ и академических институтов. Это, несомненно, инструмент для экспертов, однако достаточно удобный в использовании для образованного новичка. Fusion 360 - программа для совместного использования, позволяет обмениваться файлами STL через облако для совместного редактирования и оптимизации моделей.

Обладает мощными инструментами для работы практически над любым промышленным 3D-дизайном. Имеет встроенные функции для оценки нагрузки, с которой столкнутся компоненты 3D-модели. Это позволяет дизайнерам находить потенциально слабые места перед печатью. После создания можно легко экспортировать модель в STL-файл или любой другой формат. Программа недавно стала бесплатной для студентов, стартапов и многих других. Если у вас есть некоторый опыт, или вы хотите повысить свои навыки в 3D-дизайне, это 3D-программное обеспечение идеально подойдет.

8. Vectary

Бесплатная программа с премиальными функциями за $12 в месяц.

Vectary появилась в 2014 году и называет себя самой доступной платформой 3D- и AR-дизайна. Это бесплатная веб-программа для 3D-моделирования. Vectary предлагает шаблоны с предварительно отрисованными и освещенными экранами, перед которыми вы можете разместить свои 3D-модели для съемки продукта и других художественных целей. Простой рабочий интерфейс с необходимым набором инструментов делает работу с освещением и моделированием легкой. Вы можете легко экспортировать готовый дизайн или сцену в виде AR-модели.

Бесплатный пакет включает в себя доступ к Vectary Studio для создания и проектирования моделей, а также возможность экспортировать ваши творения в форматы OBJ или STL. Для других форматов вам потребуется обновление. Бесплатно можно создать до 25 проектов, а также получить доступ к библиотеке 3D-активов, материалов и иконок Vectary. Платное обновление дает доступ к инструментам предварительного просмотра AR, а также к функциям совместного использования проектов и командам для лучшей и быстрой обратной связи между несколькими людьми.

9. SelfCAD

Бесплатная программа для сферы образования. Для остальных стоит $4,99 в месяц.

Страна разработчика США.

SelfCAD фокусируется на том, чтобы быть лучшей браузерной бесплатной программой для 3D-моделирования для студентов по всему миру, которую не надо скачивать. Она популярна в американских школах, обучающих студентов 3D-дизайну. Простая и удобная в использовании, требующая короткий период обучения, SelfCAD имеет все необходимые инструменты для создания моделей. Также в ней есть инструменты нарезки для подготовки файлов STL или G-кода к 3D-печати.

SelfCAD - простая программа для 3D-дизайна с очень понятным интерфейсом, подходит новичкам.

10. BlocksCAD

Программа предоставляется бесплатно. Есть платные учебные версии для школ.

Страна разработчика США.

BlocksCAD ориентирована на обучение и была создана для учащихся по модели STEM с 3-го по 8-й классы. Это облачное бесплатное программное обеспечение для 3D-моделирования, которое способствует изучению математики, вычислительного мышления, концепций кодирования и проектирования моделей для 3D-печати.

В свободной галерее имеется широкий выбор проектов, которые можно использовать в личных и классных работах, начиная от снеговиков, ювелирных колец, рыб и даже печально известного кафетерия. Отлично взаимодействует с OpenSCAD, предназначена для простой, веселой и удобной работы для детей. 3D-модели можно создавать с помощью красочных, простых в управлении блоков, и экспортировать либо в виде STL-файлов, либо в виде файлов для открытия и редактирования в OpenSCAD. Для новичков BlocksCAD предлагает обширные учебные пособия по основам 3D-моделирования и использованию 3D-программного обеспечения.

11. OpenSCAD

OpenSCAD бесплатная загружаемая программа. Выглядит устрашающе, поскольку окутывает кодами и скриптами. Это мощный инструмент. Но имейте в виду, что он для тех, кто привык к кодированию. Программа была создана еще в 2010 году Мариусом Кинтелем и Клиффордом Вольфом. Регулярно выходят новые обновления и патчи. OpenSCAD любят 3D-дизайнеры, которые предпочитают скриптовый, а не художественный метод проектирования. Стоит также отметить, что 3D-деталь в OpenSCAD можно создать использую лишь мышь, но это не единственная фишка программы.

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

12. Wings 3D

Wings 3D - полностью открытое и бесплатное программное обеспечение для 3D-моделирования, которое активно разрабатывается и совершенствуется с 2001 года. Программа не такая современная и удобная в использовании, как Vectary или TinkerCAD, но очень хорошо работает с персонажами, настольными моделями и другими проектами по созданию 3D моделей. Довольно легко работать с функциями по настройке моделей, например, лепкой, соединением, резкой, сгибанием - просто даже для начинающих.

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

Перевод с сайта 3DSourced https://www.3dsourced.com/rankings/best-free-3d-software/

Подробнее..

Управление данными из нескольких CAD-систем в единой среде разработки

20.04.2021 18:08:31 | Автор: admin

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

Роли Collaborative Designer в платформе 3DEXPERIENCE позволяют управлять проектными данными и документацией в облачной среде. Проекты можно хранить в глобальной сети, использовать повторно и безопасно управлять ими. Данные при таком способе работы нельзя случайно потерять или удалить.

Платформа 3DEXPERIENCE не только поддерживает работу внутренней команды конструкторов, но также открывает возможности защищенного доступа к данным для ключевых клиентов, поставщиков и руководителей проектов. Роль Collaborative Designer позволяет всем, независимо от того, в какой системе проектирования они работают, вносить вклад в единую структуру изделий, устраняя необходимость в независимом управлении ее фрагментами.

Блок-схема процесса корректировки данных, созданных в Creo Parametric.

Новые роли Collaborative Designer

Благодаря введению новых ролей подключаться к платформе 3DEXPERIENCE могут еще больше CAD-пользователей. Компании, в которых используются Creo Parametric от PTC, Inventor от Autodesk или Solid Edge от Siemens, получили возможность управлять своими проектными данными и предоставлять их в общий доступ в облачной платформе 3DEXPERIENCE. Роли добавлены к уже существующим для SOLIDWORKS, CATIA V5, AutoCAD и DraftSight.

Новые роли Collaborative Designer обеспечивают прямую интеграцию изнутри CAD-системы, обеспечивая беспрепятственное взаимодействие с платформой 3DEXPERIENCE. Как только данные попадают в платформу, они становятся доступны пользователям всех решений 3DEXPERIENCE для проектирования, моделирования, производства и управления. Роли это инструмент для реализации следующих целей:

  • совместная работа участников команды, где бы они ни находились;

  • общий доступ к моделям и чертежам через браузерное приложение;

  • разработка комплексного 3D-определения изделия в различных CAD-системах.

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

Люди и данные: работа в связке

Благодаря новым ролям Collaborative Designer проектные данные становятся частью полного определения изделия, в основе которого лежит модель. Подключение к платформе комплекса приложений, используемых различными специальностями, повышает качество проектирования. Все специалисты-разработчики работают с одной и той же моделью. Посредством ролей реализуется поддержка широкого набора приложений платформы 3DEXPERIENCE, и это делает совместную работу чрезвычайно продуктивной.

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

Централизованное размещение проектов

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

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

Единый источник достоверной информации

Когда инженеры вносят изменения в конструкцию, платформа 3DEXPERIENCE автоматически активизирует расширенные возможности управления данными, такие как контроль версий, стадия проекта, разрешения на доступ и многое другое. Платформа предоставляет технологическую инфраструктуру для управления проектными данными и документацией к изделиям.

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

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

Дополнительная информация

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

Свяжитесь в экспертом SOLIDWORKS, чтобы найти ответы на вопросы и обсудить любые Ваши потребности

Подробнее..

Термический анализ в SOLIDWORKS Simulation на примере микрочипа

14.05.2021 14:06:19 | Автор: admin

А вы знаете, что многофункциональный модуль Simulation может решать задачи термического исследования? Он не только позволяет увидеть, как температура распространяется по деталям, но и дает возможность узнать, за какое время деталь нагревается. Обо всем этом и многом другом в нашей статье.

Введение

В качестве модели взята сборка микрочипа, которая состоит из теплоотвода (снизу) и собственно чипа (сверху) рис. 1.

Добавив модуль Simulation в интерфейс SOLIDWORKS, создаем Новое исследование и выбираем Термический анализ. У нас загрузилось дерево исследования, в котором мы можем задавать настройки для проведения анализа (рис. 2).

рис.2рис.2

Сразу скажу, что если чтению учебных материалов вы предпочитаете просмотр уроков, добро пожаловать на наш YouTube-канал Школа SOLIDWORKS. По ссылке вы найдете видео, где мы учимся проводить термическое исследование в SOLIDWORKS Simulation и задавать различные термические нагрузки, такие как температура, тепловая мощность и конвекция

Задание материала

Первое, что нам необходимо сделать, это задать материал. Щелкаем правой кнопкой мыши по одной из деталей и нажимаем Применить/редактировать материал. В нашем примере выберем для теплоотвода алюминий, а именно Сплав 1060. Материалом для чипа пусть будет оцинкованная сталь. Потребуется указать теплопроводность такие обязательные параметры выделяются красным цветом в открывающейся таблице (рис. 3). Скопируем оцинкованную сталь в папку Настроенный пользователем материал и добавим материалу теплопроводность: 50.

рис.3рис.3

Задание граничных условий

Для удобства задания граничных условий разнесем чип и теплоотвод друг от друга. Для этого переходим во вкладку Конфигурации (рис. 4) и, нажав правую кнопку мыши, добавляем Новый вид с разнесенными частями. Выбираем в настройках, что именно мы хотим сместить. Потянув за стрелку, выполняем смещение. И нажимаем кнопку Применить.

рис.4рис.4

Следующим шагом зададим тепловую мощность микрочипа. Щелкнем правой кнопкой мыши по кнопке Термические нагрузки и перейдем в настройки тепловой мощности. Выберем в дереве сборки весь элемент Чип и укажем 15 ватт (рис. 5). Тепло будет выделяться из этого элемента.

Далее задаем набор контактов. Для этого щелкаем правой кнопкой мыши по кнопке Соединения, выбираем тип контакта Тепловое сопротивление и указываем грани, где чип и теплоотвод соприкасаются. Устанавливаем тепловое сопротивление равным 2,857е-6 К/Вт.

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

Задаем коэффициент конвективной теплоотдачи: 200 Вт/м2К. Этот коэффициент характеризует интенсивность теплообмена между поверхностью тела и окружающей средой. Указываем массовую температуру окружающей среды, то есть температуру, которая окружает нашу модель. Для этого параметра установим 300 К (рис. 6).

рис.6рис.6

То же самое сделаем и для чипа. Выбираем внешние грани чипа, задаем коэффициент конвективной теплоотдачи равным 90 Вт/м2К, а массовую температуру окружающей среды, как и в предыдущем случае, 300 К.

Результаты

Запустим исследование (рис. 7). По умолчанию сетка будет построена автоматически.

рис.7рис.7

Исследование завершено, можно ознакомиться с распределением температуры. Для этого выберем параметр Ограничение сечения по плоскости справа (рис. 8).

рис.8рис.8

Теперь мы видим, как температура распространяется от чипа по теплоотводу (рис. 9).

рис.9рис.9

Задание переходного процесса

Если мы хотим узнать, за какое время нагревается теплоотвод, нужно задать переходный процесс. Для этого скопируем наше исследование (рис. 10).

рис.10рис.10

Щелкнув по исследованию правой кнопкой мыши, зайдем в его свойства (рис. 11).

рис.11рис.11

Изменим тип решения на Переходный процесс. Укажем общее время (например, 100 секунд) и установим пятисекундный временной интервал (рис. 12).

рис.12рис.12

Теперь для выполнения нестационарного термического исследования требуется использовать начальную температуру. Выбираем температуру в Термических нагрузках и задаем начальную температуру для всех тел: 22C (рис. 13).

рис.13рис.13

Запускаем решение. Получив результат, можем посмотреть распределение температуры и ее значение в выбранный момент времени (рис. 14).

рис.14рис.14

Вывод

Инженерный модуль SOLIDWORKS Simulation позволяет проводить термический анализ, анализировать распространение температуры по деталям, исследовать изменение температуры с течением времени и многое другое. Если вы хотите смоделировать тепловые потоки, которые исходят из деталей, вам потребуется другой модуль: SOLIDWORKS Flow Simulation. Но о нем мы расскажем в следующий раз.

Автор: Максим Салимов, технический специалист по SOLIDWORKS, ГК CSoft. email: salimov.maksim@csoft.ru

Подробнее..

Эволюция методов mesh denoising от простых фильтров до 3D глубокого обучения

14.05.2021 20:06:19 | Автор: admin

В этой обзорной статье вы узнаете, что такое mesh denoising, какие методы использовались и используются для устранения шума на полигональных сетках (от классических фильтров до передовых графовых нейронных сетей), и получите общее представление о развитии направления.

Зачем нужен mesh denoising?

С помощью технологии трехмерного сканирования можно получить 3D-модель реального объекта. Но знаете ли вы, что почти всегда такие объекты содержат шумы и неточности? В Twin3d мы сканируем людей (и не только) и с помощью фотограмметрии получаем 3D-модели, которые дальше необходимо обрабатывать в зависимости от конечной цели их использования. Естественно, от шумов надо избавляться, чтобы применять виртуальную модель человека в кино/играх/рекламе. Нужно много чего еще делать, но об этом мы поговорим потом.

Сканирование объектов и получение их 3D-моделей используется не только для создания виртуальных людей. Это популярно в reverse engineering для получения CAD-деталей без чертежей, где нужна большая точность реконструкции и шумы недопустимы. Также как людей и CAD-детали, можно сканировать реальные объекты одежду, обувь, аксессуары, что сейчас очень распространено в связи с созданием виртуальных примерочных. В таких случаях тоже хочется сделать вещь визуально идеальной, поэтому отсканированный объект необходимо обрабатывать.

Процесс устранения шума с 3D-моделей, полученных после сканирования, получил название mesh denoising. Иногда можно встретить слово smoothing, что означает просто сглаживание. 3D-моделлеры пользуются профессиональным ПО для решения данной задачи, но при этом они тратят достаточно много времени, чтобы убрать все неровности и шероховатости поверхности вручную. А как это делается без вмешательства 3D-моделлера? С помощью методов, которые мы рассмотрим далее.

С чего все начиналось

Когда-то были фильтры Просто сглаживающие фильтры, которые берут координаты вершин меша и усредняют по соседним вершинам (Laplacian smoothing, Taubin smoothing).

Laplacian smoothingLaplacian smoothing

В 2003 году появляется Bilateral mesh denoising расширение билатерального фильтра (который использовался для сглаживания шума на 2D картинках) на трехмерные полигональные сетки. Суть остается та же усредняются координаты вершин, но уже немного умнее: используются при этом как координаты вершин, так и нормали вершин. Еще через 7 лет придумали применять такой билатеральный фильтр не к вершинам, а к нормалям граней (Bilateral normal filtering for mesh denoising), что значительно увеличило качество сглаживания.

Итеративный процесс вычисления новой нормали с помощью Bilateral Normal Filtering заключается в следующем:

n_i^k=\Lambda(\sum_{f_j\in N_i}A_jW_s(||c_i-c_j||)W_r(||n_i-n_j||)n_j),

где N_i набор соседних граней для грани f_i , n_j нормаль грани f_j , A_j площадь грани f_j , c_j центроид грани f_j (точка пересечения медиан треугольника), W(x)=exp(-x^2/(2\sigma^2)) гауссиана, \Lambda оператор нормализации.

Билатеральный фильтр является средним взвешенным с весом, состоящим из нескольких частей. W_s(x) для грани f_i определяет значимость грани f_j в терминах удаленности друг от друга чем больше расстояние, тем меньше вес. Аналогично с W_r(x) , только на вес влияет не расстояние между гранями, а разница между векторами нормалей грани. Также учитывается значение площади грани A_j

В 2015 году улучшают подход с билатеральными фильтрами с появлением Guided Mesh Normal Filtering, где используется направляющая нормаль для сглаживания.

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

Наряду с фильтрами развивались подходы mesh denoising, основанные на оптимизации. Так, например, в работе Mesh Denoising via L0 minimization авторы максимизируют плоские поверхности меша и постепенно устраняют шум, не сглаживая при этом углы. Данный подход хорош в случаях, когда все отсканированные объекты CAD-модели с правильными геометрическими формами.

Первые попытки обучения алгоритмов для mesh denoising

Настоящим прорывом в 2016 году стала работа Mesh Denoising via Cascaded Normal Regression, в которой впервые использовались данные для обучения алгоритма. Прежде всего, авторы создали соответствующий датасет из noisy и ground truth (GT) 3D-моделей с разным шумом (доступен по ссылке проекта).

Датасет состоит из синтетических данных (Synthetic) и полученных с помощью различных сканеров (Kinect v1, Kinect v2, Kinect Fusion). В Synthetic в качестве noisy моделей используются модели с искусственно сгенерированным шумом (используется небольшое случайное смещение координат). Отсканированные данные уже содержат шум, зависящий от параметров сканеров и используемых в них технологий. Для получения GT моделей для реальных сканов использовался сканер Artec Spider c порядком точности, превышающим Microsoft Kinect.

Примеры из датасетаПримеры из датасета

Основная идея работы для каждой пары граней noisy и ground truth мешей создать пару дескриптор и GT нормаль. Дескриптор одной грани это нормаль грани после применения билатеральных фильтров с разными параметрами. Далее такие дескрипторы необходимо разделить на отдельные кластеры, которые определяют принадлежность к той или иной геометрической форме. Для отдельного кластера обучается отдельная регрессия, после которой на выходе получается обновленная нормаль грани. Весь описанный процесс повторяется несколько раз, каскадами.

Cascaded Normal Regression PipelineCascaded Normal Regression Pipeline

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

После этого появилась работа NormalNet: Learning based Guided Normal Filtering for Mesh Denoising. Основная идея обучать сверточную нейронную сеть для определения направляющей нормали, после применять Guided Mesh Normal Filtering. Для определения направляющей нормали происходит вокселизация локальной структуры каждой грани меша (voxel объемный пиксель), чтобы привести его к упорядоченному представлению и иметь возможность использовать CNN. Общий пайплайн работы представлен на картинке ниже.

NormalNet pipelineNormalNet pipeline

Следующий рисунок иллюстрирует архитектуру сетки в NormalNet. На вход каждой CNN подаются 4-мерные массивы, полученные после вокселизации, содержащие информацию о координатах вершин набора граней и усредненной нормали этого набора. Наборы граней (патчи) в терминах данной работы это некоторое количество соседних граней для одной грани. При создании нейронной сети авторы вдохновлялись архитектурой ResNet, которая позволяет учитывать информацию, полученную с предыдущих слоев сетки. Для составления карты признаков для каждого патча входные данные обрабатываются тремя блоками с конволюциями. Выходные полносвязные слои преобразовывают карту признаков к трехмерному вектору, который является направляющей нормалью для одного патча.

Архитектура CNN в NormalNetАрхитектура CNN в NormalNet

Таким образом, итеративно получая с помощью вокселизации и CNN направляющие нормали, а после применяя Guided Normal Filtering, авторы строят процесс устранения шума. Грубо говоря, в данном подходе происходит очередное улучшение качества сглаживающего фильтра Guided Normal Filtering.

Наконец, от использования билатеральных фильтров решили отказаться в работе DNF-Net: a Deep Normal Filtering Network for Mesh Denoising и предоставили полное управление процессом фильтрации шума нейронным сетям. Это первая работа, которая делает end-to-end процесс фильтрации без ручного составления признаков. С помощью отдельных логических частей нейронной сетки на основе ResNet авторы формируют карты признаков для всего меша с шумом и отдельно для шума, а после их обработки получают обновленные нормали граней.

Архитектура DNF-NetАрхитектура DNF-Net

На вход DNF-Net принимает патчи граней: нормали и индексы соседних граней. С помощью блока multi-scale feature embedding unit составляется карта признаков для каждого патча. В этом блоке анализируется локальная геометрическая структура меша на разных масштабах. На трех уровнях (см. картинку ниже) составляются три разные локальные карты признаков , которые учитывают разное количество соседних граней (по возрастанию). После их конкатенации и прогона через полносвязные слои нейронной сети получается глобальная карта признаков F для каждой грани меша.

Multi-scale Feature Embedding UnitMulti-scale Feature Embedding Unit

Впоследствии с помощью residual learning unit аналогичным образом извлекается карта признаков для шума. С помощью KNN (K-Nearest Neighbors) происходит поиск k похожих граней в представлении созданных признаков. Из продублированной k раз исходной карты признаков вычитаются карты признаков похожих граней. Аналогично используются полносвязные слои нейронной сетки формирования шумной карты признаков.

Residual learning unitResidual learning unit

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

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

Deep learning и свертки на графах

Чтобы избавиться от ограничений в виде числа параметров и соседей, необходимо работать с целым мешем, а не отдельно составленными патчами. А для построения сложных архитектур нейронных сетей с хорошей обобщающей способностью, надо как-то привести нерегулярное представление меша к регулярному. Во всей области 3D DL существует несколько популярных подходов для этого: вокселизация меша и представление меша как графа.

Так, в работе Mesh Denoising with Facet Graph Convolutions был предложен еще один end-to-end pipeline для устранения шума с помощью представления мешей как графов, только вместо натурального представления графа полигональной сетки (вершины, связанные с вершинами) используется другое грани, связанные с гранями. Основная идея сгенерировать граф и запустить на нем сверточную нейронную сеть.

Facet Graph Convolution pipelineFacet Graph Convolution pipeline

В основе этого метода лежит архитектура U-Net, которой на вход подаются координаты граней и соответствующих нормалей созданного графа, а на выходе получаются скорректированные нормали граней.

Архитектура Graph Convolution NetworkАрхитектура Graph Convolution NetworkСвертка графаСвертка графа

Графовое представление и U-Net позволяют учитывать геометрические особенности меша как в локальной структуре (как в предыдущих методах), так и в глобальной.

Заключение

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

На данный момент в задаче mesh denoising, и, в общем, в задачах обработки полигональных сеток, все большую популярность приобретают подходы с графовым представлением мешей, с помощью которого можно учитывать как локальную (в пределах одной грани), так и глобальную структуру меша.

В Twin3d мы занимаемся разными задачами, и mesh denoising входит в их число. В будущих статьях будем рассказывать уже о своих разработках, не пропустите ;)

Подробнее..

Советы и трюки SOLIDWORKS

02.06.2021 10:16:01 | Автор: admin

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

В этой заметке мы ответим на некоторые наиболее актуальные вопросы. Минимум воды, максимум пользы. Итак, начинаем наш краткий ликбез.

1. Как установить существующую библиотеку материалов

Файлы с расширением .sldmat содержат сведения о механических и физических свойствах материалов. Если вы скачали библиотеку с сайта i-tools.info, следующие 5 шагов помогут вам ее установить. Для добавления библиотеки необходимо открыть любую деталь в SOLIDWORKS:

1. В дереве конструирования FeatureManager нажимаем правой кнопкой мыши на Материал.

2. Выбираем пункт Редактировать материал.

3. В левом поле открывшегося окна кликаем в любом месте правой кнопкой мыши и выбираем Открыть библиотеку.

4. Выбираем директорию, в которой находится файл .sldmat, либо копируем его в папку с пользовательскими материалами SOLIDWORKS. Уточнить папку, выбранную по умолчанию, можно в разделе Настройки пользователя Месторасположение файлов Отобразить папки для Базы данных материалов.

5. Выбираем файл с расширением .sldmat и нажимаем кнопку Открыть.

Библиотека установлена! Если она не отображается в окне, необходимо закрыть и вновь открыть окно редактирования материала.

2. Можно ли работать на любом компьютере с установленным SOLIDWORKS, используя лишь свою лицензию?

ДА! Это называется онлайн-лицензирование SOLIDWORKS Online Licensing. Вам потребуются лишь компьютер с доступом в интернет и SOLIDWORKS выше версии 2018 года.

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

Можно сказать, это лицензия SOLIDWORKS, которая находится в облаке.

3. В чем отличие SOLIDWORKS Simulation Standard и пакета Simulation Standard, входящего в SOLIDWORKS CAD Premium?

a) В SOLIDWORKS CAD Premium нельзя строить диаграмму усталости, усталостные напряжения и получать количество циклов до разрушений.

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

4. Как показать основные плоскости компонентов в сборке?

Для этого нужно включить Просмотр плоскостей:

А затем выбрать значок Скрыть / Показать основные плоскости:

5. Как выбирать спрятанные грани, не применяя функцию Скрыть деталь?

Например, вам нужно выбрать грань для создания сопряжений. Самый простой способ навести курсор мыши на спрятанную грань и нажать клавишу Alt (деталь, которая закрывает нужную вам грань, станет прозрачной), а если деталь спрятана глубже, нажмите Alt еще раз.

6. Как посмотреть на деталь из сборки, не открывая деталь отдельно?

Нажимаем правой кнопкой мыши на интересующую нас деталь и выбираем функцию Окно предварительного просмотра компонента.

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

Хотите узнать больше? Подписывайтесь на наш YouTube-канал и изучайте SOLIDWORKS самостоятельно. Нужно обучение с профессионалами? Переходите по ссылке и выбирайте курс.

Автор: Максим Салимов, технический специалист ГК CSoft, solidworks@csoft.ru

Подробнее..

Известный гонщик людям с ампутированными конечностями это не приговор

20.05.2021 10:09:10 | Автор: admin

Травма

В 2008 году Шульц подписал контракт с новой командой. Во второй гонке Международной серии чемпионов (ISOC) по снокроссу он засиделся на старте и решил приложить все усилия, чтобы наверстать упущенное. Не рассчитав траекторию на пересеченной местности, Шульц потерял равновесие и вылетел из своего снегохода.

Он приземлился всей своей массой на левую ногу, которая в этот момент была полностью выпрямлена. Удара такой силы она не выдержала. Такое не приснится в страшном сне: моя нога оказалась у меня на груди, вспоминает Шульц. Я буквально ударил себя пальцем ноги по подбородку!

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

Только вперед

По словам отца Шульца, первое, что сказал его сын, отойдя от наркоза после операции, было: Надо жить и двигаться дальше. Весной 2009 года Шульц встал на свой первый протез. Несколько месяцев спустя он понял, что нужно кое-что получше, а именно такой протез, который позволил бы ему вернуться в спорт. Шульц был убежден, что сможет спроектировать его сам.

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

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

Через семь месяцев после травмы Шульц вышел на соревнования по суперкроссу Summer XGames и выиграл серебряную медаль на ноге, которую он сконструировал в своем гараже.

Помощь нужна многим

Именно в это время Шульц осознал, что его изобретение способно помочь не только ему самому, но и многим товарищам по несчастью.

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

Решение конструкторских проблем

Шульц готовит 2D-эскизы и передает их конструкторам, комментируя все неясные моменты. Дальнейшую проработку инженеры ведут в 3D CAD-системе.

SOLIDWORKS делает процесс намного проще и быстрее и позволяет нам добиваться гораздо большего, с энтузиазмом говорит Шульц. Компьютерные модели наших изделий мы испытываем в цифровом формате с помощью SOLIDWORKS Simulation, чтобы выявить все слабые места.

При разработке модели VF (Versa Foot) 2 перед инженерной командой стояла задача обеспечить компактность, не проиграв при этом в прочности, ведь в реальных условиях динамические нагрузки на протез могут превышать 2200 Н (225 кгс). Еще одна успешно решенная конструкторами задача это уникальная система опорных катков Moto Knee.

Рабочий ход амортизатора составляет 5 см, и нам нужно было сделать так, чтобы коленный шарнир за это время сгибался на 130 градусов, рассказывает Шульц.

SOLIDWORKS позволяет команде BioDapt работать не только вместе в офисе, но и дистанционно. Хотя сам Шульц регулярно выезжает на соревнования, он не теряет связей с коллегами и не отрывается от рабочего процесса. Шульц утверждает:

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

Открывая двери для других

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

Их глаза светятся надеждой, к ним возвращается возможность заниматься любимым делом. Люди говорят Шульцу: Ты вернул меня к жизни.

В 2018 году на Паралимпийских играх 2018 года на пьедестал почета поднимались девять сноубордистов с протезами BioDapt. В общей сложности на их счету в этих соревнованиях 11 медалей.

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

Компания BioDapt продолжает развивать универсальность своих изделий. Идея Шульца в том, чтобы они позволяли заниматься как можно большим количеством видов спорта и других активностей. Сегодня систему Moto Knee можно использовать для катания на сноуборде, лыжах, велосипеде, внедорожных мотоциклах и квадроциклах, а также в силовых тренировках, верховой езде и водных видах спорта. Этот список продолжает расширяться: BioDapt ведет новые исследования и разработки, чтобы помочь тем, кто из-за ограниченных физических возможностей не мог раньше жить полноценной жизнью.

Свяжитесь с экспертом SOLIDWORKS, чтобы найти ответы на вопросы и обсудить любые Ваши потребности

Подробнее..

Какой бизнес на 3D-печати будет успешным?

24.03.2021 10:15:26 | Автор: admin

Какой же успешный бизнес можно открыть с использованием 3D-принтеров? Оговорюсь сразу, что пока таких примеров немного. Расскажу о некоторых из них.

Студия 3D-печати

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

Строить такую студию можно практически с любым уровнем инвестиций: начинать с одного-двух принтеров, постепенно увеличивая парк оборудования или сразу инвестировать в парк 3D-принтеров. Можно также закупить промышленное оборудование для создания функциональных прототипов и мелкосерийного производства. Но в любом случае, самое важное это правильно выстроить бизнес-модель предприятия.

Мелкосерийное производство

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

3D-печать медицинских изделий

Третий вариант студии 3D-печати медицинский. Сегодня он очень востребованный. Протезы, ортезы, ортопедические стельки, слуховые аппараты, временные коронки, элайнеры, оправы очков сложны в обычном производстве, но наши технологии кратно упрощают этот процесс. Оборудование здесь подбирается исходя из конкретной задачи. Обычно одна компания сосредоточена на печати конкретной линейки моделей. Накапливаемый опыт позволяет создавать продукт с уникальными свойствами максимально эффективно. В данном направлении бизнес идет в тандеме с наукой. Успех предприятия напрямую зависит от новаторских подходов в ортопедии и медицине в целом.

3D-печать арт-объектов

Четверное место отдадим искусству. 3D-печать скульптур еще один способ заработать на этой технологии. Создание арт-объекта большого размера задача не из легких, и уж точно не из дешевых. Тем не менее, многие интерьеры или общественные пространства нуждаются в эстетическом апгрейде. Современные скульпторы стали использовать новую технологию в своей работе именно для создания конечных изделий, а не прототипов или макетов, как можно было бы подумать. Для реализации подобной цели нужны крупноформатные принтеры, работающие по технологии FDM (модель формируется из расплавленного пластика). Обычно компьютерная модель делится на части и печатается на нескольких 3D-принтерах, после чего склеивается, шлифуется, грунтуется и красится в нужные цвета, иногда с добавлением фактуры. Это делает скульптуру практически неотличимой от выполненной из природных материалов.

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

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

Александр Корнвейц

Основатель и генеральный директор компании Цветной мир

Подробнее..

Разрабатываем ремённую передачу в nanoCAD Механика 21.0 (часть 1 из 3)

27.05.2021 08:07:06 | Автор: admin

Введение

О том, что готовится к выходу новая версия программы nanoCAD Механика, я знал еще в 2020-м. Разработчики пугали новым функционалом, но что это за функционал не говорили и просили немного подождать: Вот выпустим увидишь, понравится. Наступил 2021 год, кончились новогодние каникулы, а версии все нет. Ну а дальше закрутила работа и я даже немного подзабыл о готовящейся новинке, пока в почту не упало письмо с анонсом долгожданного выпуска. Буквально на следующий день разработчики программы прислали свежий дистрибутив и краткое описание нововведений. Было предложено ознакомиться с абсолютно новым функционалом для работы с листовыми телами. Новое это всегда интересно и волнующе. К тому же незадолго до того мне поступило задание на разработку 3D-модели ременного привода вентилятора, в котором как раз присутствует парочка элементов из гнутого листа. По большому счету процесс создания именно этих элементов в версии 20 абсолютно понятен и ничего сверхъестественного собой не представляет, и так совпало, что к моменту начала изучения новых возможностей версии 21 я к ним еще не приступал, а занимался деталями с более сложными формами. Конечно, мне сразу стало интересно, что же даст новый функционал, как он упростит (или наоборот) процесс моделирования листовых элементов, какой результат я увижу на выходе. Но давайте оставим лирику и посмотрим, что же получилось в итоге.

Краткое описание моделируемого изделия

Как я уже упоминал, мне поступило задание разработать модель ременной передачи вентилятора. Этот узел, хоть и небольшой, сочетает в себе много разнообразных деталей, интересных с точки зрения применения инструментов программы: тела вращения, выдавливания, стандартные изделия, валы, гнутые пластины и т.д. (рис.1).

Рис. 1. Изделие в сбореРис. 1. Изделие в сборе

Модель привода состоит из 129 элементов. Часть из них одинаковые, но даже уникальных достаточно много, чтобы в этой статье рассказать о каждом. Собственно, такой цели и не ставится. Здесь я хочу поделиться опытом моделирования нескольких деталей, который, возможно, будет наиболее интересен читателю в контексте нового функционала для работы с листовыми 3D-телами.

Описание изготовления листовых элементов

В разрабатываемой модели передачи основная несущая деталь плита представляет собой гнутый лист с большим количеством отверстий различной формы (рис.2). Построим ее.

Рис. 2. Чертеж деталиРис. 2. Чертеж детали

Для начала в плоскости XOY начертим эскиз детали. Пока это обычный прямоугольник произвольных размеров. Чтобы задать точные размеры, необходимо наложить зависимости. Переходим на соответствующую ленту, выбираем эскиз и нажимаем кнопку Автоналожение зависимостей. Программа выставит начальные геометрические зависимости между сегментами эскиза. При необходимости их можно будет откорректировать как добавлением недостающих, так и удалением лишних. Далее следует добавить параметрические размеры: длину и ширину пластины, а также привязки к началу координат, которое мы расположим по центру. Для этого выбираем Линейный размер и указываем соответствующие размеры. Длина пластины 530мм. Этот параметр сразу назовем L. Ширина, назовем ее W, 260мм. Здесь следует обратить внимание, что мы задаем ширину не развертки, а детали в плане. Привязки к началу координат зададим через связь с L и W (рис.3).

Рис. 3. Наложение зависимостейРис. 3. Наложение зависимостей

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

После этого переходим на ленту 3D Инструменты, включаем режим моделирования Листовое и в разделе Листовые тела нажимаем кнопку Листовое тело (рис.4), выбираем эскиз (рис.5) и задаем толщину пластины. Дальше при работе с листовыми телами я буду использовать команды из панели Листовые тела ленты 3D Инструменты, поэтому для краткости ограничусь только названиями команд.

Рис. 4. Команда Листовое телоРис. 4. Команда Листовое телоРис. 5. Создание листового телаРис. 5. Создание листового тела

В итоге получаем тело, аналогичное телу выдавливания (рис.6).

Рис. 6. Листовое телоРис. 6. Листовое тело

В чем же соль? А вот в чем я буду его гнуть! Выполняем команду Сгиб по ребру (рис.7) и указываем ребро со стороны сгиба. Программа сразу создала сгиб с параметрами по умолчанию.

Рис. 7. Команда Сгиб по ребруРис. 7. Команда Сгиб по ребру

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

Категория Продолжение сгиба (рис.8). Здесь устанавливаем тип длины Внешний контур и значение длины согласно чертежу 50мм.

Рис. 8. Категория Продолжение сгибаРис. 8. Категория Продолжение сгиба

Кроме типа длины Внешний контур доступны и другие варианты (рис.9а-г):

Длина от внешней касательной длина от внешней касательной линии сгиба до края сгиба

Рис. 9а. Длина от внешней касательнойРис. 9а. Длина от внешней касательной

Длина от внутренней касательной длина от внутренней касательной линии сгиба до края сгиба

Рис. 9б. Длина от внутренней касательнойРис. 9б. Длина от внутренней касательной

Длина от внешнего контура длина от точки пересечения линий внешнего контура сгиба до края сгиба

Рис. 9в. Длина от внешнего контураРис. 9в. Длина от внешнего контура

Длина от внутреннего контура длина от точки пересечения линий внутреннего контура сгиба до края сгиба

Рис. 9г. Длина от внутреннего контураРис. 9г. Длина от внутреннего контура

В категории Угол и радиус (рис.10) меняем только радиус гиба. Он должен составлять 8 мм, тип радиуса Внутренний.

Рис. 10. Категория Угол и радиусРис. 10. Категория Угол и радиус

В категории Размещение сгиба (рис.11) задаем способ формирования сгиба Линия сгиба снаружи. По сути это выравнивание отогнутой части относительно края изначальной пластины. Таким образом мы помещаем сгиб в пределах требуемых габаритов детали.

Рис. 11. Категория Размещение сгибаРис. 11. Категория Размещение сгиба

Остальные параметры оставляем по умолчанию. Повторяем сгиб на противоположной стороне и получаем требуемую гнутую пластину (рис.12).

Рис. 12. Плита с отогнутыми гранямиРис. 12. Плита с отогнутыми гранями

Продолжение следует...

Сергей Стромков
инженер первой категории
компания АркСофт
arcsoft.ru

Подробнее..

Разрабатываем ремённую передачу в nanoCAD 21 (часть 2 из 3)

03.06.2021 08:11:45 | Автор: admin

Моделирование отверстий в пластинчатых элементах спараметризацией размеров

Создание отверстий в листовом теле (рис.13) не отличается от их создания в обычных телах, но я позволю себе еще раз показать, как это делается. Для начала построим предварительный эскиз отверстия.

Рис. 13. Чертеж отверстияРис. 13. Чертеж отверстия

Нажимаем кнопку Добавить эскиз и указываем внутреннюю грань пластины (рис.14).

Рис. 14. Выбор плоскости для построения эскизаРис. 14. Выбор плоскости для построения эскиза

Далее строим две окружности и соединяем их отрезками по касательной или с привязкой к квадрантам. Дополнительно строим отрезки, соединяющие центры окружностей и центр детали (рис.15).

Рис. 15. Предварительный эскизРис. 15. Предварительный эскиз

Следующим шагом выполняем автоналожение зависимостей на все отрисованные элементы, включая перекрестье центра детали. В этот момент эскиз автоматически выравнивается по вертикали относительно центра пластины. Если этого не произошло, на отрезок от центра малой окружности к центру детали понадобится наложить дополнительную зависимость Горизонтальность. При необходимости добавляем недостающие геометрические зависимости. Мне не удалось привязать отрезки по касательной сразу к обеим окружностям, поэтому добавляю зависимость Касание между малой окружностью и отрезками (рис.16).

Рис. 16. Автозависимости предварительного эскизаРис. 16. Автозависимости предварительного эскиза

Отверстие в пластине выполняется одним эскизом. Это значит, что необходимо сформировать единое пространство, удалив лишние отрезки и сегменты внутри нашего эскиза, что приведет к сбросу части зависимостей. Повторно выбираем полученные элементы и повторяем автоналожение зависимостей (рис.17).

Рис. 17. Готовый эскиз без параметрических размеровРис. 17. Готовый эскиз без параметрических размеров

Добавляем параметрические размеры: радиус окружностей и расстояние между центрами. Последнее, что нужно сделать, правильно привязать отверстие к пластине. Добавляем один горизонтальный размер, а привязка по вертикали у нас уже есть (рис.18).

Рис. 18. Готовый эскиз отверстияРис. 18. Готовый эскиз отверстия

Выбираем команду Отверстие, указываем эскиз, и программа строит отверстие (рис.19).

Рис. 19. Создание отверстия в пластине по эскизуРис. 19. Создание отверстия в пластине по эскизу

Аналогично вырезаются остальные отверстия. В итоге получаем готовую деталь (рис.20).

Рис. 20. Готовая плитаРис. 20. Готовая плита

Продолжение следует

Сергей Стромков
инженер первой категории
компания АркСофт
arcsoft.ru

Подробнее..

Разрабатываем ремённую передачу в nanoCAD 21 (часть 3 из 3)

10.06.2021 08:18:29 | Автор: admin

Сборка с использованием инструментария 3D-зависимостей

Сборка готового изделия предполагает не просто совмещение деталей друг с другом. В платформе nanoCAD сборка представляет собой совмещение деталей с использованием 3D-зависимостей. Эти зависимости позволяют связать элементы друг с другом так, чтобы сборка стала одним целым, в то же время оставаясь набором деталей. Предусмотрены пять видов 3D-зависимостей:

3D-вставка

вставка одного 3D-объекта в другой или вставка для обеспечения соосности двух 3D-объектов. Работает с радиальными элементами;

3D-совмещение

совмещение геометрии одного 3D-объекта с другим;

угловая 3D-зависимость

задание угла между двумя 3D-объектами;

3D-касание

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

3D-симметрия

позволяет выставлять элементы 3D-тел симметрично относительно выбранной плоскости.

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

Сборку ведем от плиты. Для начала фиксируем ее в модели командой Фиксация, открыв контекстное меню плиты в истории построения (рис.21). При этом иконка детали дополнится значком якоря: . Благодаря этой операции плита в процессе создания сборки будет оставаться неподвижной. Если потребуется, фиксацию детали можно в любой момент отменить командой Дефиксация в том же контекстном меню. .

Рис. 21. Фиксация детали в окне истории построенияРис. 21. Фиксация детали в окне истории построения

Добавляем стакан одного из валов и крепеж: шайбы и болты. Поскольку стакан выполнен в отдельном файле, его надо вставить в текущий чертеж. Я уже начал было по привычке открывать файл со стаканом, чтобы скопировать его через буфер обмена, но вспомнил, что разработчик вскользь упомянул о новой возможности работы со ссылками. Закрываю файл с деталью, вставляю его как обычную внешнюю ссылку и в окне истории построения появляется нужная мне деталь (рис.22). Этот инструмент открывает абсолютно новые возможности проектирования сложных изделий, состоящих из множественных сборок, подсборок и т.п. При вставке компонента ссылкой все изменения в файле детали происходят и в файле сборки (если, конечно, не разорвана связь). Безусловно, это большое преимущество по сравнению с простым копированием. Но отложим подробный разговор на эту тему до другого случая и продолжим сборку.

Рис. 22. Добавление деталей в сборку в виде внешних ссылокРис. 22. Добавление деталей в сборку в виде внешних ссылок

Крепеж добавляем из базы элементов. Для этого переключаемся на вкладку базы данных и заходим в раздел Детали крепления Общее машиностроение Шайбы Пружинные для размещения шайб и в раздел Детали крепления Общее машиностроение Болты Сшестигранной головкой для размещения болтов (рис.23).

Рис. 23. Окно базы элементовРис. 23. Окно базы элементов

Прежде чем выбрать требуемый нормативный документ на деталь следует убедиться, что нажата кнопка Использовать 3D-модель при вставке стандартных деталей , поскольку база содержит как 3D-, так и 2D-представления деталей. Далее выбираем нормативный документ, размещаем элемент в пространстве и выбираем параметры элемента в окне параметров (рис.24).

Рис. 24. Размещение стандартного элементаРис. 24. Размещение стандартного элемента

Аналогично размещаем болт и копируем его по количеству комплектов (четыре) рис.25. После размещения в модели всех необходимых элементов можно приступать к сборке.

Рис. 25. Плита, стакан и крепеж готовы к сборкеРис. 25. Плита, стакан и крепеж готовы к сборке

Плиту и стакан совмещаем с помощью зависимости 3D вставка. Последовательно указываем на совмещаемые ребра одной детали и второй (рис.26).

Рис. 26. При 3D-вставке указываем совмещаемые ребра деталейРис. 26. При 3D-вставке указываем совмещаемые ребра деталей

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

Рис. 27. Совмещенные деталиРис. 27. Совмещенные детали

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

Рис. 28. Потеря соосности отверстий в плите и стакане в результате поворота одной из деталейРис. 28. Потеря соосности отверстий в плите и стакане в результате поворота одной из деталей

Чтобы этого избежать, понадобится наложить еще одну зависимость: 3D-cовмещение (рис.29). Достаточно совместить одно из отверстий, и детали надежно свяжутся. Теперь, как бы мы ни пытались переместить или повернуть одну из деталей, вторая будет следовать за ней.

Рис. 29. Наложение зависимости 3D-совмещениеРис. 29. Наложение зависимости 3D-совмещение

Крепеж устанавливаем 3D-вставкой в такой последовательности: шайба к отверстию в плите, болт к шайбе (рис.30).

Рис. 30. Указываем грань для 3D-вставки болтаРис. 30. Указываем грань для 3D-вставки болта

Как результат получаем сборку из двух деталей и крепежа (рис.31). В окне История 3D Построений каждая деталь отображается отдельной позицией, а при выборе детали она будет выделена в модели. В обратную сторону связь также работает.

Рис. 31. Стакан соединен с плитойРис. 31. Стакан соединен с плитой

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

Выводы

В этой статье я постарался представить последовательность создания сборного изделия. Конечно, формат статьи не позволяет описать все нюансы рабочего процесса. Здесь не рассматривались перекрестная параметризация двух или более элементов сборки, создание фигур вращения, фасок, скруглений, резьб и много чего еще, что уже есть в программе. При этом я сфокусировал внимание на создании листовых 3D-тел. Мог ли я создать листовые детали в версии 20 имеющимися в ней инструментами? Безусловно, мог. Затратил бы на работу гораздо больше времени, но сделал. А вот получить из листового 3D-тела развертку, которая просто необходима для изготовления детали, точно не сумел бы. При этом в nanoCAD 21 я получил готовую развертку основной плиты привода вентилятора со всеми отверстиями в три клика мышкой (рис.32).

Рис. 32. Получение развертки листового телаРис. 32. Получение развертки листового тела

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

Сергей Стромков
инженер первой категории
компания Арксофт
arcsoft.ru

Подробнее..

Категории

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

  • Имя: Макс
    24.08.2022 | 11:28
    Я разраб в IT компании, работаю на арбитражную команду. Мы работаем с приламы и сайтами, при работе замечаются постоянные баны и лаги. Пацаны посоветовали сервис по анализу исходного кода,https://app Подробнее..
  • Имя: 9055410337
    20.08.2022 | 17:41
    поможем пишите в телеграм Подробнее..
  • Имя: sabbat
    17.08.2022 | 20:42
    Охренеть.. это просто шикарная статья, феноменально круто. Большое спасибо за разбор! Надеюсь как-нибудь с тобой связаться для обсуждений чего-либо) Подробнее..
  • Имя: Мария
    09.08.2022 | 14:44
    Добрый день. Если обладаете такой информацией, то подскажите, пожалуйста, где можно найти много-много материала по Yggdrasil и его уязвимостях для написания диплома? Благодарю. Подробнее..
© 2006-2024, personeltest.ru