Актуализация: версия на python тук

Преди известно време в свят на хаос, който не е контролиран от версиите, оставих моделирането по поръчка с Blender и научих OpenSCAD. Поне за моите паякови проекти, които направих, скулптурирането и бързите поправки на модели, които съм придобил от интернет, все още са нещо като Blender за мен.

Защо OpenSCAD

„Направих кратко въведение тук“, което обяснява основните причини да го направя в малко подробности, но в крайна сметка имах нужда от няколко неща.

Контрол на версиите — с 30 или 40 странни модела, всеки в различни състояния на завършеност и неравномерни темпове на промяна, загубих много време в създаване на папки и измисляне на нови имена за кръстосани версии... Наистина имах нужда от git.

Параметрично моделиране – с множество взаимосвързани части, съединени с гайки и болтове и стави тип лястовича опашка, правенето на промени означава ръчно преместване на 100 точки наоколо в опит да се поддържат всички 40 части в синхрон, премина от истинско главоболие да отделите повече време, отколкото да правите моделите от нулата отново и отново.

Основният проблем с OpenSCAD

Скорост, OpenSCAD прави куп неща изключително добре, но всичко е много математическо и изключително декларативно.

Използването на безброй шаблони и алгоритми „зад кулисите“ за създаване на обекти в каскадни нива на сложност става натоварващо за процесора и има много лоши начини да направите същото.

Решение 1: бъдете по-добър разработчик

След дълъг период на увеличаване на времето за рендиране, прекарах много време в четене на документите и намиране на най-добрите начини за правене на нещата, това ми спести известно време и ме накара да правя по-добри модели като цяло.

Настроих основните настройки на OpenGL и други ограничения на средата.

Използвах по-добри практики, като правех неща като намаляване на цялостното качество на изобразяване, намаляване на количеството модели, които се изобразяват, докато разработвах, за да мога да повтарям по-бързо.

Дори започнах да рендерирам предварително всички модели, върху които не работя, по различни начини, за да ги вкарам в кеша.

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

Решение 2: направете OpenSCAD по-бърз

Прекарах много време в анализиране на изходния код за OpenSCAD с надеждата да подобря неговия кеш, използвайки интерполация на модели по време на изобразяване и дори се опитах да пренеса някои от неговите математически функции към библиотеки на Cuda, така че моята GTX1080 да може да помогне.

Това беше огромен провал, тъй като разработчиците на OpenSCAD вече са свършили много по-добра работа, отколкото аз бих могъл. Начинът, по който кодът се изобразява отгоре надолу и начинът, по който обектите са подредени в процеса на изобразяване, е много добър.

И накрая, преминаването към CUDA също нямаше да помогне, тъй като трябваше да пренапиша цялата система за изобразяване, за да го направя.

Освен това… създавам роботи… не подобрявам софтуера.

Решение 3: повече OpenSCADS!!! Всички OpenSCADS!!

След като прекарах много време във форуми и направих малко тестове, се натъкнах на нещо, което бях използвал повечето дни през последното десетилетие.

Някои училищни трикове със знаци В bash скрипт можете да ланцуговате команди заедно, можете да го накарате да изпълнява една и ако лявата е преминала, като използвате && или можете да изчакате, докато лявата команда завърши (положително или не), като използвате ; между тях. Но това, което е наистина интересно *facepalm*можете да използвате &, за да управлявате нещата едновременно.

Как да стартирате OpenSCAD няколко пъти в bash

Ще ни трябва някакъв код.

2 файла:

  • something.sh — това задейства openscad файла
  • something.scad — това е openscad файлът

нещо.ш

Добавих някои неща тук, за да измервам колко време отнема нещата и малко подреждане на кода, защото прави нещата... по-подредени...

Ключът тук е частта `which_model`, този параметър ще се използва във файла openscad, за да се реши какво да се направи.

нещо.скад

Сега имаме куп допълнителни неща, от които обикновено не се нуждаем, но това спестява време, за да може да остане там.

Модулът в OpenSCAD е подобен на всяка друга функция на императивен език, това е посоката, в която вървите във вашия код. Имайки това предвид, трябва да направя начин да избера кой модул да извикам... и тъй като също трябва да работя върху тези файлове, без да прекъсвам скриптовете, имам if (which_model == "") бита и цялото ми ръчно кодиране отива там.

Недостатъкът е, че всеки път, когато искам да добавя друг модул за рендиране, трябва да репликирам нещото в основата something.scad и something.sh, но това не е много режийно, като се има предвид времето, което спестявам.

Резултатът от използването на знака &

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

Изобразяването отнемаше около 4 часа:

finished!! execution time: 249 min 23 sec

Изобразяването сега отнема около 50 минути:

finished!! execution time: 51 min 57 sec

Надявам се това да помогне на някой друг.