
Procedura کیا ہے؟
Procedura ایک ایجنٹ پر مبنی 3D ماڈلنگ پائپ لائن ہے جو متنی پرامپٹ کو قابلِ ترمیم پروسیجرل اسمبلی میں تبدیل کرتی ہے۔ یہ صرف پوائنٹ کلاؤڈ یا مثلثی میش تیار کرنے کے بجائے ایک پیرامیٹرک OpenSCAD پروگرام لکھتی ہے، جس کے نامزد حصے ٹائپ شدہ میٹس کے ذریعے جڑے ہوتے ہیں۔ آپ سورس کا معائنہ کر سکتے ہیں، اس میں ترمیم کر سکتے ہیں اور اسے دوبارہ کمپائل کر سکتے ہیں۔
یہ نظام ایک منجمد بڑے لسانی ماڈل کا استعمال کرتا ہے اور اسے کسی خصوصی 3D تربیت کی ضرورت نہیں ہوتی۔ رن صرف متن سے شروع ہو سکتا ہے، کسی موجودہ حوالہ جاتی تصویر کو دوبارہ تشکیل دے سکتا ہے، یا الگ سے تشکیل دیے گئے تصویری ماڈل کے ذریعے حوالہ تیار کر سکتا ہے۔
Procedura --paint کے ساتھ ہر حصے کے لیے PBR مواد بھی مقرر کر سکتی ہے، اور --motion اور --motion-urdf کے ساتھ متحرک اشیا کو OpenUSD اور URDF میں برآمد کر سکتی ہے۔
اہم خصوصیات
- قابلِ ترمیم پروسیجرل آؤٹ پٹ: مرتب شدہ جیومیٹری کے ساتھ OpenSCAD سورس کوڈ بھی تیار کرتی ہے۔
- حصہ بہ حصہ تیاری: کسی شے کی منصوبہ بندی کرتی ہے اور اس کے نامزد اجزا بتدریج تیار کرتی ہے۔
- حوالہ جاتی تصویر کی دوبارہ تشکیل: موجودہ تصویر قبول کرتی ہے، جس سے مماثلت میں نمایاں بہتری آتی ہے۔
- 3D فیڈبیک: ہر نیا حصہ تیار کرنے سے پہلے موجودہ تعمیر کو رینڈر کر سکتی ہے۔
- اسمبلی سے باخبر ماڈلنگ: مشترکہ اسمی پن، ساکٹس، بولٹ پیٹرنز اور اسنیپس جیسی میٹنگ خصوصیات کو سپورٹ کرتی ہے۔
- تکراری بہتری: ڈرافٹ کو بہتر بنانے کے لیے رینڈر، تنقید، پیچ اور گیٹ کے چکروں کا استعمال کرتی ہے۔
- مواد: بصارت پر مبنی مرحلہ ہر حصے کے لیے رنگ، میٹلنس اور رفنس مقرر کر سکتا ہے۔
- حرکت پذیری: حرکت کی منصوبہ بندی، OpenUSD اور URDF فائلوں کی برآمد، اور اختیاری طور پر NVIDIA Isaac Sim میں طبیعیات کی توثیق کر سکتی ہے۔
- قابلِ سراغ رنز: پرامپٹس، جوابات، ٹول کالز، گیٹ کے فیصلے، درمیانی رینڈرز اور ترامیم محفوظ کرتی ہے۔
- Web Studio: رنز ترتیب دینے اور ان کے آرٹی فیکٹس کا معائنہ کرنے کے لیے براؤزر انٹرفیس فراہم کرتا ہے۔
ضروریات اور انسٹالیشن
ریپوزٹری کلون کریں اور اس کا ڈپینڈنسی انسٹالر چلائیں:
git clone git@github.com:SpatiaOS/Procedura.git
cd Procedura
bash scripts/install-deps.sh
انسٹالر Bun 1.3 یا اس کے بعد کا ورژن، پروجیکٹ پیکیجز، Manifold کی صلاحیت رکھنے والا OpenSCAD اسنیپ شاٹ، Blender اور ابتدائی .env فائل ترتیب دیتا ہے۔ طے شدہ طور پر Bun کو ~/.bun، OpenSCAD کو ~/opt/openscad اور Blender کو ~/opt/blender/ میں رکھا جاتا ہے۔
اسکرپٹ کو بار بار چلانا محفوظ ہے۔ پہلے سے کام کرنے والے اجزا جوں کے توں رہتے ہیں۔ ڈپینڈنسیز کا معائنہ کرنے، Blender کو چھوڑنے یا کوئی دوسرا انسٹالیشن پری فکس منتخب کرنے کے لیے اس کے اختیاری موڈز استعمال کریں:
bash scripts/install-deps.sh --check
bash scripts/install-deps.sh --no-blender
PREFIX=/opt bash scripts/install-deps.sh
--check بغیر کچھ انسٹال کیے غائب ضروریات کی اطلاع دیتا ہے۔ --no-blender تقریباً 350 MB کی Blender ڈاؤن لوڈ کو چھوڑ دیتا ہے، اگرچہ متعدد رینڈرنگ اور فیڈبیک خصوصیات کے لیے Blender ضروری ہے۔
OpenSCAD کو Manifold بیک اینڈ سپورٹ کرنا لازمی ہے۔ پرانے ڈسٹری بیوشن پیکیجز CGAL پر واپس جا سکتے ہیں اور رفتار میں کئی گنا کمی کا باعث بن سکتے ہیں۔ Procedura آغاز کے وقت
--backendکی موجودگی جانچتی ہے اور عموماً غیر مطابقت رکھنے والی بلڈ استعمال کرنے سے انکار کرتی ہے۔PROCEDURA_ALLOW_CGAL_OPENSCAD=1صرف اسی صورت مقرر کریں جب آپ جان بوجھ کر اس سست رفتاری کو قبول کرتے ہوں۔
انسٹالر NVIDIA Isaac Sim انسٹال نہیں کرتا۔ Isaac Sim صرف موشن ورک فلو سے وابستہ طبیعیات کی توثیق کے لیے ضروری ہے؛ Procedura کا باقی حصہ اس کے بغیر کام کرتا ہے۔ انسٹالر موجودہ .env فائل کو بھی محفوظ رکھتا ہے۔
LLM اینڈ پوائنٹ تشکیل دیں
Procedura میں نہ API کیز شامل ہیں اور نہ ہی ہوسٹڈ inference بیک اینڈ۔ تیار کردہ .env فائل کھولیں اور ایک اینڈ پوائنٹ اور کلید فراہم کریں:
OPENAI_API_KEY=sk-...
OPENAI_BASE_URL=https://api.openai.com/v1
PROCEDURA_MODEL=gpt-5.2
اینڈ پوائنٹ کو سرور سے بھیجے گئے ایونٹس کے ساتھ POST {base}/chat/completions سپورٹ کرنا چاہیے۔ مطابقت رکھنے والے اختیارات میں OpenAI API، OpenRouter، کارپوریٹ گیٹ وے، یا vLLM، Ollama یا LM Studio پر مبنی مقامی سرور شامل ہو سکتے ہیں۔
ماڈل کا انتخاب ایک اسٹرنگ ہے، اس لیے آپ تشکیل دیے گئے اینڈ پوائنٹ پر فراہم کردہ کوئی بھی ماڈل شناخت کنندہ استعمال کر سکتے ہیں۔ معلوم طور پر درست پری سیٹس اور ماڈل ریزولوشن کے قواعد src/config/models.ts میں درج ہیں۔
Native Gemini Transport استعمال کریں
Gemini کو اس کے native GenAI راستے سے استعمال کرنے کے لیے GEMINI_API_KEY اور GEMINI_BASE_URL مقرر کریں، پھر ماڈل شناخت کنندہ کے آغاز میں gemini: شامل کریں:
PROCEDURA_MODEL=gemini:gemini-3-pro-preview
یہ راستہ thinkingConfig اور فرسٹ کلاس thought parts جیسی native خصوصیات فراہم کرتا ہے۔
اختیاری تصویری تیاری
Procedura کسی تصویری API کو اس وقت تک کال نہیں کرتی جب تک آپ اسے واضح طور پر تشکیل یا طلب نہ کریں۔ تیار کردہ حوالہ جاتی تصاویر فعال کرنے کے لیے ایک تصویری ماڈل شامل کریں:
PROCEDURA_IMAGE_MODEL=gpt-image-1
تصویری ماڈل OPENAI_BASE_URL اور OPENAI_API_KEY دوبارہ استعمال کرتا ہے۔ --image یا تشکیل دیے گئے تصویری ماڈل کے بغیر رنز صرف متنی رہتے ہیں اور خاموشی سے تصویری تیاری کے اخراجات عائد نہیں کرتے۔
اپنا پہلا ماڈل بنائیں
آؤٹ پٹ ڈائریکٹری دینا ضروری ہے۔ اسے -o یا --output کے ذریعے فراہم کریں، پھر ایک متنی پرامپٹ دیں:
bun run scripts/procedura.ts -o outputs/daybed \
--prompt "a brutalist brass daybed with tapered legs"
یہ ڈیفالٹ ورک فلو اجزا کی منصوبہ بندی کرتا ہے، انہیں ایک ایک کرکے بناتا ہے، اور مکمل شکل کو بہتر بناتا ہے۔ یہ صرف متنی ہے، امیج API استعمال نہیں کرتا، اور ہر حصے کے ڈرافٹ لوپ میں Blender شامل نہیں کرتا۔ یہ کم ترین لاگت والی مفید ترتیب ہے۔
تمام معاون اختیارات دیکھنے کے لیے چلائیں:
bun run scripts/procedura.ts --help
حوالہ جاتی تصویر کے ذریعے صحتِ مشابہت بہتر بنائیں
حوالہ جاتی تصویر فراہم کرنا اس منصوبے میں شناخت کی گئی صحتِ مشابہت میں سب سے بڑی انفرادی بہتری ہے۔ اپنی موجودہ تصویر کو ایک وضاحتی پرامپٹ کے ساتھ دیں:
bun run scripts/procedura.ts -o outputs/daybed \
--image ref.png \
--prompt "a brass daybed with tapered legs"
متبادل طور پر، کسی امیج ماڈل کا نام دے کر اسی رن کے دوران حوالہ جاتی تصویر بنائیں:
bun run scripts/procedura.ts -o outputs/daybed \
--image-model gpt-image-1 \
--prompt "a brass daybed with tapered legs"
طویل وضاحتوں کو شیل میں کوٹ کرنا مشکل ہو تو پرامپٹ کو ایک فائل میں محفوظ کریں:
bun run scripts/procedura.ts -o outputs/daybed \
--prompt-file my_prompt.txt
مکمل معیار کا پائپ لائن چلائیں
ایک مکمل رن حوالہ جاتی تعمیرِ نو، بصری فیڈبیک، اسمبلی خصوصیات، مواد، حرکت، اور طویل تر اصلاحی بجٹ کو یکجا کر سکتا ہے۔ بڑے منصوبوں کے لیے LLM کی طویل حد درکار ہو سکتی ہے، اس لیے پہلے دونوں ٹائم آؤٹ متغیرات بڑھائیں:
export PROCEDURA_LLM_TIMEOUT_MS=1800000
export PROCEDURA_LLM_DEADLINE_MS=1800000
bun run scripts/procedura.ts -o outputs/gripper \
--image gripper_ref.png \
--3d-feedback \
--assembly \
--paint \
--motion --motion-urdf \
--max-steps 12 \
--prompt "a two-finger parallel robot gripper"
ہر اختیار کا الگ کردار ہے:
--3d-feedbackجنریٹر کو ہر حصہ بنانے سے پہلے موجودہ اسمبلی کا رینڈر شدہ منظر دیتا ہے۔ اس سے ہر حصے کے لیے Blender کا ایک اضافی مرحلہ شامل ہوتا ہے۔--assemblyصرف اوورلیپنگ جیومیٹری پر انحصار کرنے کے بجائے حقیقی باہمی جوڑ کے انٹرفیس شامل کرتا ہے۔--paintوژن کال کے ذریعے نام زدہ حصوں کو PBR مادی خصوصیات تفویض کرتا ہے۔--motionآرٹیکولیشن کی منصوبہ بندی کرتا ہے اور OpenUSD ڈیٹا برآمد کرتا ہے۔--motion-urdfاضافی طور پر URDF فائلیں اور ہر لنک کی میشز بناتا ہے۔--max-steps 12زیادہ سے زیادہ 12 اصلاحی چکروں کی اجازت دیتا ہے۔ ہر چکر رینڈر، تنقیدی جائزہ، پیچ، اور گیٹ آپریشن انجام دیتا ہے اور دو LLM کالز استعمال کرتا ہے۔
طویل منصوبہ بندی والی کالز اس بات کی علامت ہو سکتی ہیں کہ پائپ لائن بامعنی کام کر رہی ہے۔ README میں ٹائم آؤٹ بڑھانے کی سفارش کی گئی ہے، PROCEDURA_MAX_PARTS کو محدود کرنے کی نہیں، کیونکہ حصوں کی تعداد محدود کرنے سے رفتار کے بدلے ماڈل کا معیار کم ہوتا ہے۔
جاری رکھیں، دوبارہ ڈرافٹ بنائیں، یا اصلاح چھوڑ دیں
Procedura موجودہ آؤٹ پٹ ڈائریکٹری میں اصلاحی لوپ جاری رکھ سکتا ہے۔ پرامپٹ حذف کریں اور نئے مرحلہ بجٹ کی وضاحت کریں:
bun run scripts/procedura.ts -o outputs/daybed --max-steps 12
موجودہ ڈرافٹ حذف کرکے اسے دوبارہ بنانے کے لیے --redo شامل کریں:
bun run scripts/procedura.ts -o outputs/daybed \
--prompt "a brutalist brass daybed" \
--redo
جب آپ صرف ڈرافٹ چاہتے ہوں تو --no-refine استعمال کریں۔ Procedura اس ڈرافٹ کو حتمی آؤٹ پٹ فائلوں میں منتقل کر دیتا ہے۔ پرانے یک سنگی ورک فلو کے لیے --one-shot منصوبہ بندی کے مرحلے کے بغیر ایک جنریشن کال کرتا ہے اور حوالہ جاتی تصویر درکار ہوتی ہے:
bun run scripts/procedura.ts -o outputs/daybed \
--one-shot \
--image ref.png \
--prompt "a brutalist brass daybed"
آؤٹ پٹ ڈائریکٹری کو سمجھیں
ایک مکمل رن میں درج ذیل آرٹیفیکٹس شامل ہو سکتے ہیں:
image.png: فراہم کردہ یا تیار کردہ حوالہ جاتی تصویر۔plan.json: منصوبہ بند حصوں کا ڈھانچہ۔_parts/NN_name/: افزایشی جنریشن کے لیے ہر حصے کے آرٹیفیکٹس۔draft.scadاورdraft.obj: ابتدائی طریقۂ کار کا ماخذ اور مرتب شدہ میش۔final.scadاورfinal.obj: بہتر شدہ قابلِ ترسیل فائلیں۔final_summary.txt: اختتامی فیصلہ اور فراہم کردہ کنیکٹیویٹی کی معلومات۔preview_final/: حتمی میش کا Blender ambient-occlusion رینڈر۔final_materials.json:--paintکے ذریعے تیار کردہ ہر حصے کا رنگ، میٹلنس، اور رفنس۔final_painted.scad،final_painted.obj، اورfinal_painted.mtl: پینٹ کیے گئے ماڈل کے اثاثے۔preview_painted/: پینٹ کیے گئے ماڈل کا PBR Cycles رینڈر۔motion/final_motion.usda: OpenUSD آرٹیکولیشن آؤٹ پٹ۔motion/urdf/اورmotion/links/: درخواست کیے جانے پر URDF ڈیٹا اور ہر لنک کی میشز۔_trajectory/procedura-id.jsonl: پرامپٹس، جوابات، ٹول کالز، اور گیٹ فیصلے۔_refine_steps/step_NNN/: ہر اصلاحی چکر کا رینڈر، تشخیص، ترمیم، اور کمپائلیشن ڈیٹا۔
Procedura کی لکھی ہوئی ہر OBJ فائل کو یونٹ باؤنڈنگ باکس کے مطابق نارملائز کیا جاتا ہے۔ STL برآمد اختیاری ہے اور اسے --export-stl کے ذریعے فعال کیا جا سکتا ہے۔
مواد یا حرکت کو آزادانہ طور پر دوبارہ چلائیں
پینٹنگ اور حرکت مکمل شدہ رن ڈائریکٹری پر کام کرتے ہیں، اس لیے جیومیٹری دوبارہ بنائے بغیر کسی اور ماڈل کے ساتھ یا ناکامی کے بعد دونوں میں سے کسی مرحلے کو دہرایا جا سکتا ہے:
bun run scripts/paint.ts RUN_DIRECTORY --model MODEL_KEY --refine-steps 2
bun run scripts/motion.ts RUN_DIRECTORY --model MODEL_KEY --urdf --no-validate
اختیاری --no-validate فلیگ حرکت کی توثیق چھوڑ دیتا ہے۔ یہ اس وقت مفید ہے جب Isaac Sim دستیاب نہ ہو یا آپ کو صرف برآمد شدہ آرٹیکولیشن فائلیں درکار ہوں۔
ڈیٹاسیٹ پر کارروائی کریں
متعدد کیسز کے لیے JSON Lines پرامپٹ فائل کے ساتھ بیچ اسکرپٹ استعمال کریں:
bun run scripts/batch.ts \
--prompts cases.jsonl --images \
--incremental \
--motion --validate --urdf \
--max-steps 3 \
--parallel 2 \
--out-root outputs/batch_v1
پیپر کا ورک فلو شکل اور جوڑنے کے عمل کو ایک ساتھ تیار کرتا ہے، پھر ہر مکمل کیس کو الگ پینٹ کرتا ہے۔ اس سے پینٹنگ کی ناکامی مکمل جیومیٹری کو ناقابلِ استعمال ہونے سے بچاتی ہے:
bun run scripts/paint.ts outputs/batch_v1/CASE_ID
--motion --validate استعمال کرتے وقت متوازی عمل کو تقریباً دو تک رکھیں، کیونکہ متعدد ہیڈ لیس Isaac Sim انسٹینسز GPU میموری ختم کر سکتی ہیں۔ صرف ریفائنمنٹ والی بیچز تقریباً 8 سے 12 ورکرز برداشت کر سکتی ہیں، لیکن ہر سائیکل Blender شروع کرتا ہے، اس لیے API کی شرح کی حدود سے پہلے میموری محدود وسیلہ بن سکتی ہے۔
رن کے نتائج کا موازنہ کریں
Procedura میں ایک مقامی نتائج سرور شامل ہے، جس کے ذریعے متعدد کنفیگریشنز کے رینڈر، ماخذ فائلیں، میٹرکس اور ٹریجیکٹریز ساتھ ساتھ دیکھی جا سکتی ہیں:
bun run scripts/results-server.ts \
--root a=outputs/run_a \
--root b=outputs/run_b
یہ پرامپٹس، مرحلہ وار ماڈلز، ریفائنمنٹ بجٹس، یا 3D فیڈبیک اور اسمبلی سے باخبر جنریشن جیسے اختیارات کی جانچ کے لیے مفید ہے۔
Procedura Studio استعمال کریں
Studio اسی پائپ لائن کے لیے ایک ویب فرنٹ اینڈ ہے۔ اس میں آپ پرامپٹ، اختیاری حوالہ جاتی تصویر، پری سیٹس اور ہر مرحلے کے کنٹرولز کے ساتھ رن ترتیب دے سکتے ہیں۔ عمل کے دوران آپ پرزوں کے ظاہر ہونے کا مشاہدہ کر سکتے ہیں اور پلان، پرزوں کے آرٹی فیکٹس، ریفائنمنٹ ہسٹری، حتمی 3D میش، میٹیریلز اور جوڑنے کے عمل کا جائزہ لے سکتے ہیں۔
cd web
bun install
bun run start
http://localhost:8080 کھولیں۔ Studio ریپوزٹری کے روٹ سے CLI شروع کرتا ہے اور وہی .env پڑھتا ہے، اس لیے الگ API کنفیگریشن درکار نہیں۔
اعلیٰ درجے کی تجاویز
- سستے طریقے سے شروع کریں، پھر معیار کی خصوصیات شامل کریں۔ تصویر کی جنریشن، بصری فیڈبیک، پینٹنگ یا موشن فعال کرنے سے پہلے پہلے سے طے شدہ صرف متنی رن کے ذریعے اپنے اینڈ پوائنٹ اور پرامپٹ کی توثیق کریں۔
- ممکن ہو تو حقیقی حوالہ استعمال کریں۔ پروجیکٹ کے مطابق
--imageواحد سب سے بڑی fidelity بہتری فراہم کرتا ہے۔ - مرحلے کے لحاظ سے ماڈلز کو اووررائیڈ کریں۔ انفرادی مراحل کے لیے مختلف اینڈ پوائنٹ ماڈل کیز منتخب کرنے کی خاطر
--agent-model،--scad-model،--paint-modelیا--motion-modelاستعمال کریں۔ - کامیاب جیومیٹری محفوظ رکھیں۔ جب ناکامیاں مکمل دوبارہ تعمیر کا سبب نہ بنیں، تو پینٹنگ اور موشن کو الگ پوسٹ پروسیسنگ مراحل کے طور پر چلائیں۔
- متوازی رنز کے دوران میموری کی نگرانی کریں۔ آپ کا API اینڈ پوائنٹ زیادہ بیک وقت درخواستیں سنبھال سکتا ہو، تب بھی Blender اور Isaac Sim خاصی میموری استعمال کر سکتے ہیں۔
- ڈیبگنگ کے وقت ٹریجیکٹریز کا معائنہ کریں۔ JSONL ٹریجیکٹری اور ہر قدم کی ریفائنمنٹ ڈائریکٹریز پرامپٹس، ماڈل کے جوابات، ترامیم، کمپائلر کے نتائج اور گیٹ کے فیصلے ظاہر کرتی ہیں۔
- OpenSCAD بیک اینڈ کی معاونت کی تصدیق کریں۔ اگر جنریشن رکی ہوئی محسوس ہو تو تصدیق کریں کہ Procedura پرانے صرف CGAL والے بلڈ کے بجائے Manifold کے قابل OpenSCAD استعمال کر رہا ہے۔
نتیجہ
Procedura زبان کے ماڈل پر مبنی منصوبہ بندی کو پروسیجرل CAD، میش کمپائلیشن، بصری ریفائنمنٹ، میٹیریلز اور اختیاری جوڑنے کے عمل کے ساتھ یکجا کرتا ہے۔ کنفیگر کیے گئے اینڈ پوائنٹ اور سادہ متنی پرامپٹ سے شروع کریں، پھر اپنی معیار کی ضروریات بڑھنے کے ساتھ حوالہ جاتی تصویر، 3D فیڈبیک، اسمبلی خصوصیات، پینٹنگ اور موشن شامل کریں۔ چونکہ بنیادی قابلِ فراہمی چیز قابلِ ترمیم ماخذ کوڈ ہے، اس لیے تیار شدہ اشیا جنریشن کے بعد بھی قابلِ معائنہ اور قابلِ دوبارہ استعمال رہتی ہیں۔
Procedura MIT لائسنس کے تحت ہے۔ پروجیکٹ کی دستاویزات، پیپر اور مزید تفصیلات Procedura کے پروجیکٹ صفحے پر دستیاب ہیں۔
