لماذا تعد النماذج ثلاثية الأبعاد ثقيلة جداً؟

حجم ملف GLB لديك 10 ميغابايت فقط، لكنه يلتهم 200 ميغابايت من ذاكرة الرسوميات على الهاتف ويتسبب في انهيار المتصفح. دعنا نكشف حقيقة ما يحدث وراء الكواليس.

Kris
ضغط 3DglTFWebGLالأداء

نموذجك يكتسب وزناً خفياً

تقوم بتصدير ملف GLB بحجم 10 ميغابايت، ويبدو الحجم مناسباً تماماً. لكن عند رفعه وتشغيله على الهاتف المحمول، تفاجأ بشاشة بيضاء أو بطء شديد أو انهيار مفاجئ للمتصفح.

يعمل النموذج بسلاسة على حواسيب سطح المكتب، لكنه ينفجر على الهواتف. المشكلة ليست في كودك البرمجي؛ فالنماذج ثلاثية الأبعاد تمتلك خاصية غير بديهية: حجم الملف على القرص يختلف تماماً عن حجمه داخل ذاكرة الرسوميات (VRAM).

صورة JPEG على القرص قد تشغل 200 كيلوبايت فقط. لكن معالج الرسوميات GPU لا يتعامل مع خوارزميات ضغط JPEG، بل يقرأ البكسلات الخام فقط. لذلك، قبل رفع الصورة إلى VRAM، يتم فك ضغطها بالكامل. خامة بدقة 2048×2048 بعد فك ضغطها تستهلك حوالي 22 ميغابايت من VRAM. وإذا كان لديك 6 خرائط لخامة PBR واحدة (الألوان والنواظم والخشونة والمعدنية والانسداد المحيطي والتوهج)، فإن خامة مجسم واحد تبتلع 132 ميغابايت.

إذا كانت ذاكرة الرسوميات المتاحة للهاتف تتراوح بين 2 إلى 4 غيغابايت، فإن خامات نموذج واحد فقط استهلكت 3% إلى 6% من إجمالي الذاكرة. فماذا لو كان المشهد يحتوي على 10 مجسمات؟

أين تذهب كل هذه المساحة داخل النموذج؟

يتكون ملف GLB القياسي من ثلاثة أجزاء رئيسية: بيانات الرؤوس الهندسية، و خرائط الخامات الملمسية، والبيانات الوصفية وحركات التحريك.

توزيع الأحجام في نموذج PBR نموذجي:

المكونالمحتوى الداخليالنسبة التقريبية من الحجمالملاحظات
خرائط الخاماتخرائط الألوان والنواظم والخشونة والمعدنية وغيرها70% إلى 85%الجزء الأكبر وزناً دائماً
بيانات الرؤوسإحداثيات الموقع والنواظم وإحداثيات UV والمماسات10% إلى 20%ترتبط بكثافة المضلعات
بيانات الحركةالعظام والأوزان الجلدية والإطارات المفتاحية0% إلى 15%في النماذج المتحركة فقط
أخرىتعريفات المواد وبنية المشهد والكاميراتأقل من 2%يمكن إهمال حجمها

تمثل الخامات حوالي 80% من الحجم. يظن المطورون غالباً أن تحسين الرؤوس الهندسية كافٍ، لكن المستنزف الحقيقي للذاكرة هو الخامات.

توزيع خرائط الخامات في نموذج PBR ثلاثي الأبعاد

"صغير على القرص" لا يعني إطلاقاً "صغير في ذاكرة الرسوميات"

هذه النقطة هي الركيزة الأساسية لفهم أداء الرسوميات ثلاثية الأبعاد على الويب.

صُممت صيغتا PNG و JPEG للنقل الشبكي السريع وصغر الحجم على القرص، لكن معالج GPU لا يستطيع استخدامهما مباشرة، بل يفك ضغطهما إلى مصفوفات بكسلات خام وفق المعادلة:

استهلاك ذاكرة VRAM = العرض × الارتفاع × 4 بايت (RGBA) × 1.333 (مع مستويات Mipmaps)

خامة RGBA بدقة 4096×4096:

المقياسالقيمة
حجم ملف PNG على القرصحوالي 8 ميغابايت
حجم ملف JPEG على القرصحوالي 1.5 ميغابايت
استهلاك ذاكرة VRAM (مع Mipmaps)حوالي 87 ميغابايت

ملف JPEG بحجم 1.5 ميغابايت يتحول إلى 87 ميغابايت في ذاكرة GPU.

ما هي مستويات Mipmaps؟ يقوم معالج GPU بتوليد سلسلة من النسخ المصغرة تدريجياً للخامة من حجمها الكامل حتى 1×1 بكسل. يحسن هذا من سرعة ونقاء رندر المجسمات البعيدة، لكنه يضيف عبئاً قدره 33% في استهلاك الذاكرة. وتعتمد جميع محركات الويب ثلاثية الأبعاد على Mipmaps بشكل قياسي.

تشبه ملفات PNG و JPEG أكياس تفريغ الهواء للملابس: صغيرة جداً أثناء السفر، لكن يجب فتحها ونفخها بالكامل عند الوصول؛ التنزيل سريع لكن الذاكرة ممتلئة تماماً.

مقارنة بين حجم التخزين على القرص وتضخم الذاكرة في بطاقة الرسوميات

ماذا يحدث عند نفاد ذاكرة الرسوميات؟

لن تظهر لك رسالة خطأ مهذبة تخبرك بنفاد الذاكرة، بل تحدث مشكلات أكثر إحباطاً:

  • في الهواتف المحمولة: شاشة بيضاء أو إغلاق قسري لعلامة التبويب من نظام التشغيل.
  • في نظارات الواقع الافتراضي: هبوط حاد في معدل الإطارات يسبب دوار الحركة للمستخدم.
  • في الحواسيب المكتبية: وميض وتشوه في الخامات وتباطؤ شديد في الرندر.

مسارا الضغط الأساسيان

ينقسم ضغط النماذج ثلاثية الأبعاد إلى مسارين رئيسيين:

ضغط الرؤوس الهندسية: تخزين إحداثيات الرؤوس والنواظم وإحداثيات UV بطريقة أكثر إيجازاً (مثل التكميم من 32 بت إلى 16 بت). وأبرز الحلول: Draco و MeshOpt و KHR_mesh_quantization.

ضغط الخامات الملمسية: إبقاء الخامات مضغوطة حتى داخل ذاكرة الرسوميات VRAM وفك تشفير البكسلات لحظياً عند أخذ العينات. والحل القياسي الأبرز هو: KTX2 + Basis Universal.

وجه المقارنةضغط الرؤوس الهندسيةضغط الخامات الملمسية
الهدف من التقليصالبيانات الهندسية للمجسمصور الخامات الملمسية
التأثير المعتادتقليص حجم الملف 50% إلى 90%تقليص الحجم على القرص 50-70% والذاكرة 75%
هل يؤدي لفقد البيانات؟نعم (انخفاض دقة الأرقام)نعم (انخفاض طفيف في التفاصيل)
الاستخدام الأمثلالنماذج عالية الكثافة المضلعيةجميع نماذج PBR تقريباً

الخطأ الشائع هو الاكتفاء بضغط الرؤوس عبر Draco وإهمال الخامات التي تشكل 80% من حجم النموذج؛ فالتحسين الحقيقي يتطلب معالجة المسارين معاً.

لا يوجد حل واحد يناسب جميع المنصات

تختلف استراتيجيات الضغط باختلاف المنصة والبيئة:

السيناريوعنق الزجاجة الأساسيمحور التركيز
مواقع الويب لسطح المكتبسرعة التنزيلحجم الملف على القرص
متصفحات الهواتف المحمولةذاكرة الرسوميات VRAMضغط الخامات الملمسية
نظارات الواقع الافتراضيالذاكرة ومعدل الإطاراتضغط الخامات وتبسيط المضلعات
البرامج المصغرة وتطبيقات الجوالحجم الحزمة والتوافقحلول خفيفة الوزن (MeshOpt)
المشاهد الكبيرة والمعقدةالذاكرة واستدعاءات الرسمالضغط الكامل مع مستويات التفاصيل LOD

الخطوة التالية

بعد توضيح جذور المشكلة، يستعرض المقال التالي في السلسلة التطبيق العملي لتقنيات ضغط الرؤوس الثلاث: التكميم و MeshOpt و Draco.

أدوات ذات صلة

6
عرض الكل

ضغط نماذج 3D

تحويل النموذج ثلاثي الأبعاد إلى صورة

عارض النماذج ثلاثية الأبعاد (3D Model Viewer)

ضغط رؤوس النماذج ثلاثية الأبعاد (Vertex Compression)

تحويل STL إلى صورة

عارض GLB