STLViewer

Коротка історія

STL означає stereolithography. Формат створили для 3D Systems у 1987 році, на ранньому етапі комерційного SLA-друку, як простий спосіб передавати геометрію з CAD-програм у 3D-друк.

Уся суть саме в простоті: файл STL зберігає лише зовнішню поверхню об'єкта як список трикутників. У ньому немає кривих, історії побудови, матеріалів, збірок чи гарантованих одиниць вимірювання. Саме тому STL став універсальним запасним форматом для 3D-друку, і саме тому сьогодні він виглядає обмеженим порівняно з новішими форматами на кшталт 3MF.

ASCII vs. binary

STL має два варіанти кодування.

ASCII STL — це звичайний текст. Кожен трикутник записується ключовими словами на кшталт facet normal, outer loop і vertex. Такий файл легко переглянути, налагодити або згенерувати простим скриптом, але для деталізованих сіток він швидко стає дуже великим.

Binary STL — формат, який більшість інструментів записує за замовчуванням. Він починається з:

  • 80-байтового заголовка
  • 32-бітного лічильника трикутників
  • одного 50-байтового запису для кожного трикутника

Кожен запис трикутника в binary-версії містить:

  • 12 байтів для вектора нормалі
  • 36 байтів для трьох вершин
  • 2 байти для лічильника байтів атрибутів

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

Є ще одна дрібна пастка: binary STL інколи помилково приймають за ASCII, якщо заголовок починається зі слова solid. Тому надійні парсери перевіряють усю структуру файлу, а не довіряють лише першим байтам.

Як зберігається геометрія

Модель STL складається з фасет. Кожна фасета — це один трикутник, описаний:

  • одним вектором нормалі
  • трьома 3D-координатами вершин

Нормаль має бути спрямована назовні. Від вершин також очікується дотримання правила правої руки: якщо дивитися на поверхню ззовні об'єкта, вони мають бути перелічені проти годинникової стрілки. Багато переглядачів однаково перераховують нормалі з координат вершин, але невідповідність між записаною нормаллю та порядком вершин усе ще є корисною ознакою того, що сітка може бути пошкодженою.

На відміну від форматів з індексованою сіткою, STL не розділяє вершини між трикутниками. Кожен трикутник зберігає власні три координати навіть тоді, коли сусідні трикутники торкаються того самого кута. Це збільшує розмір файлу й прибирає з нього явну топологію. Програмам доводиться відновлювати сусідство пізніше, порівнюючи координати з плаваючою комою.

STL також не зберігає одиниць вимірювання. Значення 10 може означати 10 мм, 10 дюймів або 10 см залежно від експортера та програми, яка відкриває файл. Історично рання документація STL також припускала лише додатні координати, але сучасне ПЗ зазвичай нормально працює і з від'ємними значеннями.

Що робить STL-сітку коректною

Для 3D-друку самого «супу з трикутників» недостатньо: він має описувати одну цілісну межу об'єкта. На практиці це означає, що:

  • сусідні трикутники повинні з'єднуватися ребро до ребра
  • поверхня має бути герметичною
  • нормалі та напрям обходу мають послідовно дивитися назовні
  • трикутники не повинні самоперетинатися

У старішій документації STL це описували як правило vertex-to-vertex: ребро одного трикутника має чисто стикуватися з ребром сусіднього, а не завершуватися посередині іншого трикутника.

Коли ці умови порушуються, слайсер уже не може надійно визначити, де в моделі внутрішній об'єм, а де зовнішній простір. Саме звідси беруться типові проблеми ремонту STL: отвори, перевернуті нормалі, non-manifold ребра, дубльовані фасети та інші геометричні помилки.

Коли використовувати STL

STL досі лишається найбезпечнішим вибором, коли найважливіша сумісність. Якщо вам потрібна сітка, яку відкриє майже будь-який слайсер, CAD-інструмент або сервіс 3D-друку, STL залишається найнижчим спільним знаменником.

Це слабший вибір, коли потрібні:

  • явні одиниці вимірювання
  • кілька об'єктів в одному добре структурованому пакеті
  • кольори, текстури або матеріали
  • метадані чи налаштування друку
  • компактніше зберігання складних сіток

У таких випадках 3MF зазвичай є кращим сучасним форматом за замовчуванням. Він явно зберігає одиниці, підтримує багатші метадані, уникає STL-моделі «кожен трикутник ізольований» і краще підходить для workflow ready-to-print.

Перегляд STL у браузері

STLViewer парсить і ASCII STL, і binary STL безпосередньо в браузері за допомогою Three.js. Для швидкого перегляду нічого завантажувати не потрібно, тож файл залишається на вашому пристрої, доки ви самі не вирішите ним поділитися.

Для поширення ми завантажуємо файл у Cloudflare R2 через короткоживучий presigned URL і повертаємо унікальне посилання. Посилання для поширення є приватними: вони не індексуються пошуковими системами й ніде публічно не перераховуються на сайті.

Дивіться також