طراحی یک شیء سهبعدی که واقعاً قابل چاپ باشد، اغلب شبیه به نوشتن کدهای اسمبلی است؛ قدرتمند، اما خستهکننده و مستعد خطاهای نامرئی. برای حل این چالش، مت کیتر (Matt Keeter) در ۳۰ سپتامبر ۲۰۲۶ ابزار Halfspace را منتشر کرد؛ یک محیط توسعه (IDE) آزمایشی که میدانهای فاصله (Distance Fields) را به مرکز فرآیند طراحی میآورد.
بیشتر نرمافزارهای CAD بر پایه هستههای نمایش مرزی (B-rep) کار میکنند که سطوح را به هم میدوزند؛ فرآیندی که در تقاطعهای پیچیده — مثل تلاقی دو سطح NURBS — اغلب به بنبست ریاضی میرسد و راهکارهای فرم-بسته (closed-form) ندارد. در مقابل، Halfspace از هسته هندسی Fidget استفاده میکند که اشیا را به عنوان سطوح ضمنی میبیند. در این روش، هر نقطه در فضا بهطور قطعی یا «داخل» مدل است یا «خارج»؛ ویژگیای که آن را برای ساخت قطعات در مقیاس شخصی و چاپ سهبعدی ایدهآل میکند. طبق مستندات پروژه، هسته Fidget از سال ۲۰۲۲ توسعه یافته و زیربنایی پایدار برای این IDE فراهم کرده است.

فلسفه مدلسازی ضمنی
کار با سطوح ضمنی در سطوح پایین (low-level) بهطور سنتی دشوار است، چون کاربر باید متغیرهای x، y و z را بهصورت دستی ترکیب کند. کیتر این تجربه را به نوشتن اسمبلی تشبیه میکند: قدرتمند است، اما اگر شما مسئول ترکیب متغیرهای خام برای ساخت هر شکل رویاییتان باشید، این فرآیند کلافهکننده میشود.
او برای رفع این مشکل از پروژههایی مثل Mu اثر کارتیک آگارام (Kartik Agaram) الهام گرفته است؛ ابزاری که نوشتن اسمبلی x86 را با لایههای شبیهسازی، ردیابی (tracing) و دیباگینگ سفر-در-زمان (time-travel debugging) ساده میکند. Halfspace برای کاهش اصطکاک مدلسازی ضمنی، دو مسیر موازی را دنبال میکند:
- کتابخانه استاندارد: مجموعهای کوچک اما در حال رشد از انتزاعهای سطح بالا، شامل اشکال اولیه (primitives) مثل کره، جعبه و استوانه، و تبدیلهایی مانند جابهجایی (translate) و مقیاسبندی (scale).
- گردش کار ماژولار: سیستمی که ساخت مدلها را بهصورت گامبهگام و افزایشی آسان میکند. مدلهای پیچیده را میتوان به قطعات کوچکتر تقسیم کرد، که سپس میتوان هر کدام را بهطور مجزا پارامتریک کرد و بصریسازی نمود.

مزیت میدانهای فاصله
نوآوری اصلی Halfspace تمرکز بر خودِ میدانهای فاصله است، نه فقط شکل نهایی. در هندسه توخالی سازنده (CSG) سنتی، کاربر فقط نتیجه عملیات منطقی مثل اجتماع (union)، تقاطع (intersection) یا تفاضل (difference) را میبیند. اما Halfspace میدانهای فاصله را در پیشزمینه قرار میدهد.
کاربران میتوانند مقادیر میدان را بهصورت خطوط کمرنگ در فواصل منظم ببینند؛ چیزی شبیه به یک نقشه توپوگرافی. در این بصریسازی، علامت مقدار (که داخل یا خارج بودن را تعیین میکند) با رنگ نشان داده میشود: آبی برای داخل و نارنجی برای خارج، در حالی که مرز شکل (جایی که مقدار دقیقاً صفر است) با رنگ سفید نمایش داده میشود.

این قابلیت برای تشخیص «ناپیوستگیهای جهشی» (jump discontinuities) حیاتی است. برای مثال، یک موج دندانهارهای بدساخت ممکن است بدون عبور از صفر، ناگهان از حالت داخل به خارج تغییر وضعیت دهد. این پدیده به عنوان ناپیوستگی C0 شناخته میشود. از آنجا که Fidget برای محاسبه نرمالها از مشتقگیری خودکار (Automatic Differentiation) استفاده میکند، این شکافها باعث میشوند نرمالها در جهت اشتباه قرار بگیرند.
در محیطهای سهبعدی که از نرمالها برای سایهزنی (shading) استفاده میشود، این موضوع منجر به خطاهای بصری میشود؛ یک مثال بارز، سایهزنی نادرست روی تکههای سقف (shingles) در مدل یک کلبه است که در خروجیها دیده میشود.


همانطور که در تحلیلهای قبلی ما درباره ابزارهای مدلسازی پارامتریک اشاره کردیم، دقت در تعریف ریاضی سطح، تعیینکننده کیفیت نهایی است. در Halfspace، کاربر با مشاهده گرادیان میتواند میدان را بهگونهای تنظیم کند که گرادیان در همه جا یکنواخت (مساوی با ۱) باشد، به جای اینکه روی خطوط مورب متراکم شود. اگرچه Fidget برای صحت کلی به گرادیان یکنواخت نیاز ندارد، اما این بهینهسازی کیفیت مش مثلثی (Triangle Mesh) خروجی را بهشدت بهبود میبخشد.

معماری فنی و پشته تکنولوژی
ساخت اپلیکیشنی که هم روی وب و هم روی دسکتاپ بومی اجرا شود، یک چالش مهندسی بزرگ است. کیتر «پشته Halfspace» را برای کاهش اصطکاک بین این محیطها طراحی کرد. او اولویت را بر اشتراکگذاری لینک وب برای جذب کاربر (onboarding) گذاشت تا کاربران نیازی به کامپایل محلی کد نداشته باشند؛ موضوعی که در عصر حملات زنجیره تأمین، امنیت و سرعت بیشتری برای کاربران عادی فراهم میکند.
اجزای اصلی پشته:
- Rust: زبان برنامهنویسی اصلی برای کل اپلیکیشن و تمام وابستگیها.
- Wasm-bindgen: که بهصورت دستی برای ساخت نسخه وب برنامه فراخوانی میشود.
- egui & egui_dock: برای پیادهسازی رابط کاربری (GUI) و انتزاع اصلی پنجرهها و تبها.
- wgpu: مدیریت رندرینگ UI و محاسبات GPU.
- Rhai: موتور اسکریپتنویسی برای تعریف مدلها.
- Rayon & wasm-bindgen-rayon: برای دو هدف خاص: سرعت بخشیدن به الگوریتمهای موازی از طریق توزیع کار بین چندین Worker، و فراهم کردن یک Thread Pool برای کارهای پسزمینه کوتاهمدت (که ضروری است چون در وب نمیتوان بهطور بومی Thread ایجاد کرد).
زیرساختهای پشتیبان:
- web-time: برای پشتیبانی یکپارچه و سازگار از زمان در پلتفرمهای مختلف.
- Custom Worker Pool: یک راهکار دستساز برای رندرینگ GPU بهصورت ناهمگام (async) در خارج از Thread اصلی.

بزرگترین مانع، عملکرد در وب بود. در حالی که نسخه بومی بهطور خوشایندی سریع بود، رسترایزیشن مبتنی بر CPU از طریق WebAssembly منجر به سرعتهای «غیرتعاملی» میشد. این موضوع منجر به خلق fidget-wgpu شد که تمام مراحل رسترایزیشن و پسپردازش (مثل سایهزنی) را بهطور کامل به GPU منتقل میکند.

این تغییر معماری نیاز به رفتوبرگشت دادههای مکرر بین CPU و GPU را حذف کرد. اکنون هسته Fidget منطق رندرینگ استاندارد را پیاده میکند و Halfspace با استفاده از شیدرهای سبک (thin shaders)، بافتهای RGBA حاصل را با سرعت بومی در هر دو پلتفرم رسم میکند. این موضوع در مورد خط لوله رندرینگ دوبعدی نیز صدق میکند که اکنون کاملاً توسط GPU شتابیافته است، هرچند Halfspace برای نیازهای خاص خود از شیدرهای پیشرفتهتری استفاده میکند.
تحلیل تحریریه
برای جامعه مدلسازی سهبعدی، Halfspace نشاندهنده تغییری به سمت هندسه «شفاف» است. با نمایش میدان ریاضی به جای نمایش صرفِ سطح، دیباگینگ از یک بازی حدسزدنی به یک علم بصری تبدیل میشود. این قابلیت بهویژه برای توسعهدهندگان مستقل و سازندگانی (makers) که توان مالی یا فنی برای استفاده از هستههای CAD صنعتی و گرانقیمت را ندارند، ارزشمند است.
علاوه بر این، تعهد این پروژه به یک پشته ترکیبی بومی/وب از طریق Rust و wgpu، نشاندهنده یک روند رو به رشد در ابزارهای توسعه است. توانایی اشتراکگذاری یک لینک وب برای دسترسی فوری، در حالی که عملکرد یک اپلیکیشن بومی حفظ شود، در حال تبدیل شدن به استاندارد طلایی برای نرمافزارهای آزمایشی است.
Halfspace در حال حاضر تحت لایسنس MPLv2 بهصورت متنباز منتشر شده است. کیتر تأکید کرده که این پروژه «vibe-coded» (کدنویسی با تکیه بر هوش مصنوعی بدون درک عمیق) نیست و او از آوریل ۲۰۲۵ با استفاده از مغز انسانی خود در حال نوشتن کدها بوده است. اگرچه این ابزار هنوز برای استفادههای حساس تولیدی آماده نیست — و نویسنده هشدار میدهد که از آن در هیچ جایگاه «باربر» (load-bearing) استفاده نشود — اما به عنوان یک آزمایشگاه زنده برای پالایش APIهای هستههای ضمنی عمل میکند. یکی از اهداف اصلی هسته Fidget یافتن APIهای «درست» است، به این معنی که Halfspace ممکن است در طول مسیر تکامل خود، دچار شکستهای سازگاری (compatibility breaks) گستردهای شود.
کاربران علاقهمند میتوانند دموی برنامه را روی کامپیوتر بررسی کنند تا با مشکلات WebGPU در Safari موبایل مواجه نشوند، زیرا تعاملات Pan، Tilt و Zoom هنوز برای لمس چندگانه (multitouch) طراحی نشدهاند. کاربران میتوانند از طریق گیتهاب در پروژه مشارکت کرده یا مشکلات را گزارش کنند.




گفتگو