مفتوح المصدر
المحرّك مفتوح. اقرأه، وشغّله، وابنِ عليه.
LocalMesh Engine هو الجزء الذي يحوّل الصور إلى مجسّم مكسوّ بالخامات، على بطاقتك الرسومية أنت، دون أن يغادر شيء الجهاز. وهو منشور على GitHub برخصة Apache 2.0. من صورة واحدة يشغّل TRELLIS.2 من Microsoft؛ ومن أربع، يشغّل Pixal3D من TencentARC، المحوّل هنا إلى FP8 كي يتّسع في بطاقة بذاكرة 8 غيغابايت.
Apache 2.0
يعمل دون اتصال
بطاقة NVIDIA واحدة، 8 غيغابايت
صورة واحدة، أو أربع
لا يُرفع أي شيء
صُنع به
ستة أجسام، أربع صور لكل منها، وُلّدت على بطاقة RTX 4060 في حاسوب محمول. كل واحد يدور دورة كاملة، كما خرج من المحرك، تحت إضاءة بيئية واحدة.
ما أضفناه إلى TRELLIS.2
TRELLIS.2 يحوّل صورة واحدة إلى مجسّم مكسوّ بالخامات. وهذا ما يستقر فوقه.
- أربع صور لجسم واحد. TRELLIS.2 يعمل على صورة واحدة. هذا المسار يضع صور الأمام واليمين واليسار والخلف على شبكة واحدة ويترك النموذج يقرّر هناك — أولًا على الحجم الخشن، ثم في كلٍّ من الخطوتين اللتين تنحتان السطح — بدلًا من صنع أربعة أجسام وأخذ متوسطها. أوزان تعدّد المشاهد هي أوزان Pixal3D (من TencentARC، رخصة MIT)، حُوّلت هنا إلى FP8 كي يتّسع المسار كلّه في بطاقة بذاكرة 8 غيغابايت.
- زاوية كل صورة تُقاس. Depth Anything 3 يقرأ من البكسلات الزاوية التي التُقطت منها كل صورة، وأيّ جانب يُظهره كل جانبي، فلا يلزم أن تكون اللفّة باليد ربع دورة نظيفة. وحين لا تكون القراءة حاسمة يعود المحرّك إلى ربع دورة تامّ، وتذكر النتيجة أيّهما استُخدم.
- الصور الأربع تصل بالمقياس نفسه. كل قصّ يُحدَّد على ارتفاع الجسم، والدوران لا يغيّر ارتفاعًا. بالقصّ المنفصل، كانت الدراجة تصل إلى النموذج بمقاييس تتباعد 37.9 % بين مشاهدها وتخرج أسمك مما هي؛ وشريط الكاسيت 39.7 %. أما الجسم الأطول من عرضه، كرأس أو تمثال، فقد كانت قصّاته متّفقة أصلًا ولا يتغيّر شيء.
- لا تُزال قطعة إلا إذا كانت صغيرة ومنفصلة معًا. صغيرة إلى جانب أكبر قطعة، وواقفة بعيدًا عنها. على الساموراي: 1133 قطعة منفصلة، منها 185 كانت منفصلة فعلًا فأُزيلت، أي 1.21 % من المساحة؛ وبقيت الـ941 الملقاة على القشرة، لأن إزالتها تفتح ثقبًا في موضعها. وإذا طلب التنظيف أكثر من 5 % من المساحة فإنه لا يفعل شيئًا، ويقول ذلك.
- الخامة تُراجع قبل أن يخرج الملف. يكتب النموذج قيمة معدن بين 0.6 و0.8 على تمثال من الراتنج. هذه ضوضاء، وفي أي عارض تُعتِم اللون وتصبغ الانعكاسات، فتُكتب صفرًا. ويخبز أيضًا شفافية تنسخ الإضاءة — خرج 53 % من أطلس شريط كاسيت أسود مُعلَّمًا شبه شفاف، وبعض العارضات ترسمه زجاجًا، فيخرج الجسم المعتم دونها. كما تُفعَّل الأوجه الخلفية انطلاقًا من الحواف المفتوحة التي يملكها المجسّم فعلًا.
- مصنوع لبطاقة بذاكرة 8 غيغابايت. أوزان FP8، والنماذج تُحمَّل واحدًا تلو الآخر لتبقى البطاقة فارغة بين الخطوات. عدد المثلثات يحدّده المستوى، 150000 في المستوى القياسي، وحدود الأمان تُقرأ من البطاقة: الشكل الأثقل من أن يُعاد تشبيكه يُعاد إلى ما دون الحدّ بدل أن يُسقِط التعريف معه.
تشغيله
- 1تثبيته. عشر خطوات، لا ثلاث. تُبنى ثلاثة امتدادات CUDA على جهازك أنت، فتحتاج قبل كل شيء إلى Python 3.12 وحزمة CUDA 12.8 ومترجم C++. ولا تُشحن أي أوزان مع الشيفرة، ولا يجلبها المحرّك بدلًا عنك: نحو 9.5 غيغابايت تضعها بيدك لمسار الصورة الواحدة، و14.3 غيغابايت لمسار الصور الأربع، وينتظر DINOv3 موافقة شخص في Meta على طلبك. كل ما هنا قيس على Windows؛ ومن المفترض أن يعمل على Linux، ولم نشغّله.
- 2أعطه صورة. صورة واحدة تكفي للحصول على مجسّم، وهي التثبيت الأقصر. أضف اليمين واليسار والخلف فيدمج المحرّك الأربع: 4.8 غيغابايت أوزان إضافية، وامتداد آخر تبنيه. ثلاثة جوانب أو لا شيء؛ اثنان مرفوضان.
- 3احصل على ملف .glb. مكسوّ بالخامات، ومفرود بإحداثيات UV، ومحوره Y إلى الأعلى. يفتح في Blender وفي Unreal وفي كل ما يقرأ glTF.
أو خذ التطبيق
LocalMesh هو الورشة المحيطة بهذا المحرّك: لوحة تصير فيها الصور أجسامًا، ومكتبة، ومرسم صور، وعارض. تجربة مجانية 14 يومًا، ثم دفعة واحدة قدرها $39. لا اشتراك.
حمّل LocalMesh