Два мира 3D-графики - твердотельный или полигональный.

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

В чем разница?

Если мы просто измерим расстояния до отдельных точек на окружающих нас предметах и сохраним их координаты, то мы получим "облако точек". Облако - это просто модное слово, с небом оно не связано, имеется ввиду, что точек много. Ничего, кроме координат точек и (может быть) ее цвета, у нас нет. По такой записи невозможно восстановить все поверхности предметов, но можно приближенно представить себе как оно выглядело. Именно облако точек составляют современные Лидары (лазерные радары на самоуправляемых авто), 3D-сканеры, Face-id в яблочных телефончиках. Автокад тоже уже умеет хранить эти данные не в виде неудобных отдельных точек, а целым облаком (Point Cloud). Это полезная информация, но по ней не нарисуешь мультик и не сделаешь чертежи. Если смотреть из далека, то точки сливаются в сплошной фон. И это похоже на то, что видели наши глаза. Но как только в приближаете это облако по ближе на экране - точки расползаются в пространстве и вы видите, что между ними ничего нет - мы сохранили слишком мало точек. И их всегда будет мало, как ни старайся.
И теперь нам предстоит по этим точкам построить модель, которую уже можно будет и приближать, и по крутить. Самый простой способ - заполнить пространство между точками плоскостями. Плоская фигура, ограниченная несколькими точками на языке математиков называется полигон. Но на самом деле из всех возможных полигонов в 3D графике используется только один, самый простой - треугольник. Берем ближайшие 3 точки на поверхности нашего объекта и чисто условно говорим - а вот между ними я буду считать, что тут все плоское и это это сплошной треугольник, без дырок и выступов. И вот мы уже чудесным образом получили Полигональную модель. Для хранения в компьютере такой модели нам достаточно запомнить координаты вершин треугольников. Это просто и быстро. Пересчитать эти координаты для различных точек зрения - тоже просто. Исходное облако точек можно очень сильно подсократить - ведь многие точки оказались на одной плоскости. Если не заморачиваться раскраской, то на экране мы увидит множество линий соединяющих точки по типу рыбацкой сети. Вот так и называют полигональные модели в Автокад - Сеть = Mesh или устаревший вариант Многогранная сеть = Polyface Mesh. 

Для полноценного фотореализма нам конечно понадобиться сохранить картинки для раскраски каждого треугольника (текстуры), научиться скруглять углы, научиться рисовать шероховатые поверхности и еще много чего. Но все это умеют делать современные видеокарты и поэтому процесс прорисовки и вращения происходит настолько быстро, что можно делать интерактивные 3d-игры. Именно такие Полигональные модели используются для всех фотореалистичных картинок и мультиков. Их легко искажать, трансформировать, анимировать. Да, в них не может быть гладкой сферы, но это и не важно - хитрые приемы "замылят" глаза публике и никто почти не заметит сети и грани. А что будет если разрезать полигональную модель? Внутри-то у нее ничего нет! Мы просто увидим обратные стороны треугольников - то же тело изнутри. Хм, но в реальном мире так не бывает. И тут мы подходим к концепции твердого тела. 

Само название "твердотельное" моделирование (solid modeling) происходит от идеи, что программа при любом разрезе такой модели, должна опять замкнуть поверхности и изобразить какое-то однородное внутренне заполнение этой модели. Но на самом деле концепция твердотельного моделирования немного сложнее. Дело не только в том, что мы видим внутри, а дело в том что теперь поверхности каждого объекта мы запоминаем, не как множество треугольников, не как Сеть, а как сплошную непрерывную поверхность, описываемую математически. Надо запомнить плоский полигон? Нет проблем - описание будет состоять из математической формулы плоскости в 3d и плюс еще такими же формулами записанные 3d-контуры границ этой поверхности - линии или кривые. Для каждого типа поверхностей свои формулы, для каждого типа кривых - свои. AutoCAD знает формулы для плоскости (объект Region), для цилиндра, конуса, сферы, тора (объект Surface) и для произвольно изогнутых поверхностей - хоть волны, хоть спирали - все можно описать формулами. При этом в файле dwg сохраняются только коэффициенты из этих формул. Все точки поверхности программе надо рассчитывать, используя сложные формулы. Каждое "твердое тело" может состоять из множества поверхностей (граней), которые должны быть идеально состыкованы кривыми линиями (ребрами). А точки стыковки ребер, называются вертексами. Принципиальное отличие твердотельной модели от полигональносй, не в том что программа создаст новые грани на разрезе, а в способе описания поверхностей, в поверхностях сложной формы, которые теоретически можно приближать бесконечно долго - и вы всегда будете видеть плавные формы, а не ломаные полигоны. Правда, жизнь накладывает свои ограничения... но в теории так. Возможность построить модель с любой заданной точностью - это именно то, что и надо инженерам. Это позволит делать точные расчеты массы и прочности. Это позволит изготавливать детали на высокоточном оборудовании и получить реально работающие механизмы. 

Достоинства и недостатки

Теперь вы знаете, что "твердотельный" - это не про замороженные трупы :) Теперь можно разобраться, почему используются обе системы моделирования.
Полигональная модель - это прежде всего упрощенная модель. Быстрота отображения здесь на первом месте. Абсолютно все 3d-программы могут хоть как-то работать с полигональными моделями. С полигонами (и только с ними) работают все программы для дизайнеров и аниматоров. Всем известные 3DS-Max, Maya, Blender - это чисто полигональные программы, никакой инженерной логикой и твердотельностью там и не пахнет. И не надо - задачи там другие. К сожалению есть программы, которые "косят" под инженерные, но работаю только с угловатыми полигонами. Например, SketchUp. Вполне пригодны полигональные модели для печати игрушек на 3d-принтерах. Для таких задач их точности вполне достаточно. 
Программы полигонального моделирования как правило содержат простые средства для искажения формы объектов. У них всегда много способов наложения текстур, тонкие и сложные настройки рендеринга для достижения максимального фотореализма. Есть возможности делать анимации.
Недостаток полигональной модели - низкая точность. Можно конечно наращивать количество треугольников. Но тогда простота и скорость отрисовки пропадает. Серьезные расчеты делать на такой модели нельзя. Описать процесс изготовления детали, по ее форме тоже не получится - тут вообще нет ни цилиндров ни конусов - сплошные треугольники. 
В AutoCAD можно открыть модели, импортированные из 3DS-Max и тому подобных программ. Но результат вас не порадует. Как правило пользователи этого класса программ не заботится о точности размеров, рисуют, тыркая в произвольные места экрана, без привязок, и не напрягаются, когда объекты заезжают друг внутрь друга, оставляют щели между полигонами. Это все происходит из-за отношения к полигональной модели как к эскизу. Чисто для красоты картинки, но не для дела. Для CAD-программ полигональные модели инородны, работа с ним не оптимизирована. Сложные сети из тысяч и сотен тысяч полигонов прекрасно крутятся в Max, но дико тормозят в AutoCAD. Старые "Многогранные сети" вообще даже нельзя нормально обмерить - привязки на них не работают. Преобразовать штатными средствами в твердое тело тоже не получится. Кстати, насчет преобразования - обратите внимание на мою программу "Сеть в солид" - во многих случаях это спасение.
Преимущества твердотельного (то есть математического) моделирования очевидны - точность, возможность расчетов, экспорт в CAM для точного изготовления на ЧПУ. Они гораздо ближе к законам физики поэтому только их используют для автоматизации инженерных расчётов, анализа и симуляции физических процессов, проверки и оптимизации изделий.
Недостатков тоже хватает. Прежде всего это вычислительная сложность. Формулы для расчета положения каждой точки могут быть неимоверно сложными. Даже простые операции требуют много расчетов. Например, когда мы отображаем на экране полигональную модель, то на всех краях в любом ракурсе мы видим ее ребра. Это простые линии, которые очень легко рисовать. Но у твердого тела могут быть выпуклости, которые мы видим в некоторых ракурсах как край тела. Там нет ребра! Например, у сферы вообще нет ребер, но мы же ее видим, видим четкий край - окружность. Такие "виртуальные" края называются силуэтами. Вращая модель, вы заставляете программу очень быстро пересчитывать формулы поверхности, чтоб вычислять все новые и новые силуэты. 
Еще одна проблема проистекает из того, что все 3d-игры сделаны, конечно, на полигональной графике. Поэтому все видеокарты, 3d-ускорители работают только с ней. И значит, чтобы показать любую твердотельную модель на экране программа должна сначала полностью рассчитать все формулы, ребра, силуэты; затем преобразовать все это в треугольники-полигоны и только после этого можно передать работу вашей дорогой видеокарте. Видеокарта справится мгновенно, картинка сразу появится у вас перед глазами - для нее это пустяк. Но вся подготовительная работа ляжет на центральный процессор. А в случае AutoCAD - на одно единственное ядро этого процессора. Это долго. Именно по этому ваш компьютер так легко крутит неимоверно сложные проекты в 3Ds-Max и так тяжело, с тормозами, рывками, глюками, проворачивает маленький твердотельный кусочек этого проекта в AutoCAD. И кроме того в полигональной графике придумано множество ухищрений для ускорения отрисовки - сразу отбрасываются слишком мелкие полигоны, легко отсеять задние (невидимые) объекты и их грани. А в твердотельной модели надо просчитать по честному все-все, что вы напихали в модель, каждый невидимый крошечный винтик. 
Вспомните об этом, когда будете выдавливать спиральную резьбу на саморезах, конусы в глухих отверстиях. Весь этот мусор никогда не виден и ничего не дает для удобства и точности изготовления модели. Но он непрерывно грузит процессор и тормозит вашу работу. Оно вам точно надо? Расчет конуса в 100 раз дольше, чем плоского дна отверстия. А расчет солида вытянутого из сплайна вообще неописуем формулами - приходится прибегать к методу постепенных приближений. И чем больше размер изделия, тем больше итераций (приближений) надо для достижения заданной точности. Подумайте дважды, прежде чем прорисовывать внутренности профилей и труб, вставлять модели фурнитуры из сотен и тысяч поверхностей, моделировать каждую дырочку на перфорированных решетках...

Какие программы используют твердотельное моделирование. 

Все, что я тут писал про AutoCAD, в полной мере касается и всех его клонов, всех легких CAD-систем: BricsCAD, NanoCAD, ZWCad, GStarCAD... Но не только. Все полноценные инженерные программы используют твердотельный подход к моделированию. Параметрические программы среднего класса сложности, такие как SolidWorks, Inventor, и тяжелые, такие как ANSYS, CATIA, NX, Pro/ENGINEER - тоже конечно твердотельные. В параметрическом проектировании полигональный подход вообще не возможен. А в чем тогда разница прямого и параметрического моделирования? О! Это отличная темя для бесконечных споров! Я думаю посвятить этому отдельную статью.

Комментарии

Популярные сообщения из этого блога

Методичка инженера-выставочника. Часть 7: Выставочный стенд: подиум, конструктор, 2ой этаж, подвеска.

Тестируем AutoCAD 2022 на ноутбуке с AMD Ryzen7 5800H

В какой папке искать плагины AutoCAD?